検索
連載

Dynamic DNSの基礎とnsupdateコマンド実用 BIND 9で作るDNSサーバ(7)(2/3 ページ)

DHCP環境などで威力を発揮するDynamic DNS。今回は、nsupdateコマンドを使ってBIND 9におけるDynamic DNSの動作と使い方を紹介する。(編集局)

Share
Tweet
LINE
Hatena

ACLによるDynamic DNSの実現とnsupdate

 では、Dynamic DNSを使用できるようにしましょう。以下の説明では、図3のようなスレーブ・ゾーンサーバを含む構成を前提にしますが、update要求を直接マスター・ゾーンサーバに行う場合も想定します。

図3 想定環境
図3 想定環境

 ここでは、前述のupdate許可とforward許可にACL(アクセスコントロールリスト)を用います。マスター・ゾーンサーバにはupdate許可を、スレーブ・ゾーンサーバにはforward許可を設定します。ゾーン転送に必要な設定については、第5回も参照ください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ACLの指定には、「ホスト直接指定」「ネットワークアドレス指定」「ACLの利用」と、さまざまなスタイルがあることを理解していただくために設定を重複させていますが、実際にはどれか1つを設定すれば動作可能です。

 named.confの変更を有効にするために、第5回で紹介したrndcを用いてreloadを実施するか、namedプロセスの再起動を行います。

nsupdateによる更新

 BIND 9に含まれるnsupdateコマンドを使用してみましょう。コマンドパスは、ソースからインストールした場合は/usr/local/bin/nsupdate、rpmなどのパッケージ管理ツールでインストールした場合は/usr/bin/nsupdateになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 上の例では、clientC.example.jpの正引きに対して192.168.20.11を登録しています。実行は一般ユーザーでも可能です。nsupdateの使用に慣れるまでは、「-d」を付けてデバッグ情報を表示するとよいでしょう。

 nsupdateの対話モードでは、プロンプトが「>」に変わります。例では、まずserverの指定を行っていますが、これは省略可能です。省略時は、前述したように通常のDNS検索でudpate対象となるゾーンサーバを検索します。serverで指定されたゾーンサーバに意図したゾーン情報がない場合も、同じようにDNS検索でゾーンサーバを探します。すでにゾーンサーバが分かっている場合にserver指定を行います。

 続いてupdateに必要な条件を指定します。ここでは、updateの前提条件に「yxdomain」を指定し、clientC.example.jpがすでに登録されていることを条件にしていますが、ほかにも次のような指定が可能です。また、これを省略することで前提条件をなしにできます。

  • prereq yxdomain FQDNホスト名

指定したFQDNホスト名が少なくとも1つは登録されていることを条件とする。何も登録されていなければupdateはエラーになる。

  • prereq nxdomain FQDNホスト名

指定したFQDNホスト名の登録が一切ないことを条件とする。すでに登録されている場合はupdateはエラーになる。

  • prereq yxrrset FQDNホスト名 (class) type data

指定したFQDNホスト名とレコードが登録されていることを条件とする。

例:prereq yxrrset host.example.jp IN A 192.168.20.20
host.example.jpに対する正引きが192.168.20.20で事前に登録されていればupdate可能。
「prereq yxrrset host.example.jp IN A」とした場合は、どのようなIPアドレスでも登録されていればupdate可能。

  • prereq nxrrset FQDNホスト名 (class) type

指定したFQDNホスト名とレコードが登録されていないことを条件とする。yxrrsetのようにdataまで指定しても、無視される。

例:prereq nxrrset host.example.jp IN A
host.example.jpに対する正引きが事前に登録されていればupdateはエラー。Aレコード以外の登録(CNAMEなど)の場合はupdate可能。
「prereq nxrrset host.example.jp IN A」とした場合は、どのようなIPアドレスでも登録されているとupdateはエラーになる。

注:ここで指定している「yxdomain」や「yxrrset」などのオペコードは、
RFC 2136:http://rfc-jp.nic.ad.jp/cgi-bin/direct.cgi?keyword=2136&language=eng&x=10&y=16
日本語訳:http://www5d.biglobe.ne.jp/~stssk/rfc2136j.html
で見ることができます。

 prereqで前提条件を設定した後に、updateの内容を記述します。この例では、次のようなレコードが登録されることを意図しています。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 TTLの指定は単位を秒にしたもので、省略できません。「1h」や「1d」などの省略表記は使用できません。Aレコード以外にも、MXやCNAMEなど、ゾーンファイルに使用されるほとんどのレコードタイプの指定が可能です。例ではaddを実行していますが、deleteを実行することも可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 deleteの場合は、FQDNホスト名だけの指定でも可能です。その際は、FQDNホスト名に対するあらゆるレコード(CNAMEやMX)も削除されます。条件を細かく設定するには、class、type、dataを指定します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 update……の末尾で[Enter]キーをタイプしても、その時点でupdate要求が送信されることはありません。続けてほかのレコードのupdateを行うことを想定し、「send」または単に改行だけの行がタイプされるまで、要求を蓄えます。このように、細切れにupdateを行わず、まとめて実施することでDNS Updateを効率よく処理するというわけです。

 updateが複雑な場合は、「show」コマンドが役に立ちます。これからどのようなupdateクエリを送信するかを事前に確認できます。確認内容に間違いがなければ、「send」を実行します。

 クエリの結果は「Reply from update query」中の「status」で確認できます。エラーの状況によって、refused、yxdomain、nxdomainなどの応答コードが表示されます。まとめて登録する場合は、上記のような対話方式ではなく、以下のようなファイルを使った一括登録が可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る