第15章 ドメインネームシステム

目次

15.1. DNS 用語
15.2. インストール
15.3. YaST を利用した設定
15.4. BIND ネームサーバの起動
15.5. /etc/named.conf 設定ファイル
15.6. ゾーンファイル
15.7. ゾーンデータの動的な更新
15.8. 機密を保持する通信
15.9. DNS セキュリティ
15.10. さらなる情報

概要

DNS (ドメインネームシステム) はドメイン名やホスト名を IP アドレスに変換するのに 必要なサービスです。この方法により、たとえば 192.168.2.100 は jupiter というホスト名と対応づけることができます。独自のネームサーバを設定する前に、 13.3項 「名前解決」 に示されている DNS に関する一般情報を お読みください。また、下記の設定例では BIND を利用しています。

15.1. DNS 用語

ゾーン

ドメインの名前領域は、ゾーンと呼ばれる部分に分割されています。たとえば example.com というドメインでは、 com と呼ばれるドメイン内の example という部分 (ゾーン) を示していることになります。

DNS サーバ

DNS サーバは、それぞれのドメインに対して、その名前と IP アドレスの情報を 保持しているサーバです。マスターゾーンとしてプライマリ DNS サーバを、 スレーブゾーンとしてセカンダリ DNS サーバを持つことができるほか、 ゾーンを持たないキャッシュ専用のスレーブサーバを持つこともできます。

マスターゾーンの DNS サーバ

マスターゾーンには、お使いのネットワークに関する全ての情報が含まれていて、 ドメインに対する全ホストに関する最新情報が保存されています。

スレーブゾーンの DNS サーバ

スレーブゾーンはマスターゾーンのコピーです。スレーブゾーンの DNS サーバは、 マスターサーバからゾーン転送処理を通してゾーンデータを取得します。 スレーブゾーンの DNS サーバは、そのゾーンデータが有効である限り (有効期限が 切れない限り) 、そのゾーンに対して権威のある (authoritative な) 応答を 返却します。スレーブはそのゾーンデータの最新情報が得られない場合、 そのゾーンに対する応答を停止します。

フォワーダ

フォワーダとは、お使いの DNS サーバが応答のできない場合に問い合わせを 転送する先のことを言います。 1 つの設定で複数の設定ソースを指定するには、 netconfig を使用します (詳しくは man 8 netconfig をお読みください) 。

レコード

レコードとは名前や IP アドレスに関する情報のことを言います。それぞれ対応 しているレコードとその文法については、 BIND のドキュメンテーションに 書かれています。また、下記のような特殊なレコードがあります:

NS レコード

NS レコードとは、指定したドメイン名を担当するネームサーバのマシンが どこにあるのかを知らせるためのものです。

MX レコード

MX (メールエクスチェンジ) レコードとは、インターネットを介して直接 メールをやりとりする場合に使用する、通信相手のマシンを教えるための ものです。

SOA レコード

SOA (権威の開始) レコードとは、ゾーンファイルの最初のレコードです。 SOA レコードは、 DNS を通じて複数のコンピュータ間でデータを同期する 場合に利用します。

15.2. インストール

DNS サーバをインストールするには、 YaST を起動して ソフトウエア+ソフトウエア管理 を選択します。 そこからさらに ビュー+パターン を選択し、 DHCP and DNS Server を選択してください。あとはインストール処理を完了するため、 個別のパッケージのインストールについて確認を行なってください。

15.3. YaST を利用した設定

YaST DNS モジュールを利用することで、お使いのローカルネットワークに対する DNS サーバの設定を行なうことができます。最初にモジュールを起動したときには ウイザードが起動し、サーバを起動するにあたっていくつか決めておかなければならない 基本設定について質問が行なわれます。この初期設定作業はサーバの基本的な設定を 行なうもので、アクセス制御 (ACL) やログ記録、 TSIG 鍵のオプションなど、 高度な設定作業については、熟練者モードをご利用ください。

15.3.1. ウイザードによる設定

ウイザードは 3 段階の手順 (ダイアログ) から構成されています。それぞれダイアログ 内の適切な箇所から、熟練者モードに入ることができます。

  1. 最初にモジュールを起動したときには、 図15.1「DNS サーバのインストール: フォワーダの設定」 に示されている フォワーダ設定 の画面が開きます。 netconfig DNS ポリシー では、どのデバイスから フォワーダにアクセスするかを設定できるほか、 フォワーダの一覧 から独自の一覧を設定することもできます。 netconfig について詳しくは、 man 8 netconfig で表示されるマニュアルページを お読みください。

    図15.1 DNS サーバのインストール: フォワーダの設定

    DNS サーバのインストール: フォワーダの設定

    フォワーダとは、お使いの DNS サーバが問い合わせを送信する先のことで、自分 自身では解決できない問い合わせの場合に利用します。フォワーダの IP アドレスを 入力してから 追加 を押してください。

  2. 次の DNS ゾーン ダイアログは 15.6項 「ゾーンファイル」 にあるとおり複数のパーツから構成され、 ゾーンファイルの管理について設定を行ないます。新しいゾーンを作成するには、 名前 に名前を入力してください。逆引きゾーンを追加 する場合、名前は .in-addr.arpa で終わらなければなりません。 最後に 種類 (マスター、スレーブ、転送のいずれか) を選択して ください。詳しくは 図15.2「DNS サーバのインストール: DNS ゾーン」 をお読み ください。既存のゾーンについてその他の設定を変更するには、設定済み DNS ゾーンから選択して、 編集 ボタンを押してください。 ゾーンを削除するには同じくゾーンを選択してから 削除 ボタンを押してください。

    図15.2 DNS サーバのインストール: DNS ゾーン

    DNS サーバのインストール: DNS ゾーン

  3. 最後のダイアログでは、 ファイアウオールでポートを開く を選択することでファイアウオール内の DNS ポートを開くように設定することが できます。また、 DNS サーバをシステム起動時に開始するかどうか (オン または オフ) を選択することもできます。またそれ以外にも、 LDAP に対応するよう設定することもできます。詳しくは 図15.3「DNS サーバのインストール: ウイザードの完了」 をご覧ください。

    図15.3 DNS サーバのインストール: ウイザードの完了

    DNS サーバのインストール: ウイザードの完了

15.3.2. 熟練者向け設定

モジュールを起動したあと、 YaST では複数の設定オプションを含んだウインドウを 表示します。これらを設定することで、 DNS サーバに対して基本的な機能を設定 することができます:

15.3.2.1. 起動

起動 では、 DNS サーバをシステム起動時に開始するか、もしくは 手動で起動するかを選択することができます。 DNS サーバを今すぐに起動 したい場合は、 今すぐ DNS サーバを起動 を押してください。 また、 DNS サーバを停止したい場合は、 今すぐ DNS サーバを停止 を押してください。現在の設定を保存する場合は、 設定を保存して今すぐ DNS サーバを再起動する を押してください。 また、 ファイアウオールでポートを開く を押すことで、 ファイアウオールで DNS ポートを開くことができるほか、 ファイアウオールの詳細 でファイアウオール設定を変更する こともできます。

それ以外にも LDAP サポートを有効にする を選択すると、 ゾーンファイルは LDAP データベースで管理されるようになります。 LDAP データベース 内のゾーンデータに対する変更は、 DNS サーバが再起動されたり設定を読み込み なおしたりしたタイミングで読み直されます。

15.3.2.2. フォワーダ

お使いの DNS サーバが要求に応答できない場合、 フォワーダ で設定した転送先に対して要求を転送します。 フォワーダの一覧 に手動で追加してください。ダイアルアップ接続のなどのようにフォワーダが随時 変わるような場合は、 netconfig が設定を扱います。 netconfig について、詳しくは man 8 netconfig で表示される マニュアルページをお読みください。

15.3.2.3. 基本オプション

このセクションでは、サーバに対する基本的な設定を行ないます。 オプション メニュー内から設定したい項目を選び、必要な 値を設定してください。 追加 ボタンを押すと新しい項目を 追加することができます。

15.3.2.4. ログ

DNS サーバのログ機能について、何を採取するのか、どのように採取するのかを ログ から設定します。 ログ種類 では、 DNS サーバがログデータをどこに書き込むのかを設定します。 /var/log/messages のようなシステム全体のログに対して 記録を行なうには システムログ を、個別のファイルに保存する には ファイル を選択します。後者の場合はログファイル名と メガバイト単位での最大サイズ、および保存する過去ログの最大数をそれぞれ指定して ください。

さらなるオプション設定は、 追加ログ から利用できます。 すべての DNS への問い合わせをログ記録 を選択すると、 それぞれの 問い合わせに対し、ログ記録を行なうように なります。ログファイルは非常に大きいものになるため、デバッグ目的以外の使用は 適切とは言えません。また、 DHCP サーバや DNS サーバの間でのゾーン更新 トラフィックを記録するには、 ゾーン更新をログに記録 を 選択してください。また、マスターサーバからスレーブサーバに対して行なわれた ゾーン転送トラフィックを記録するには、 ゾーン転送をログに記録 を選択してください。詳しくは 図15.4「DNS サーバ: ログ」 を ご覧ください。

図15.4 DNS サーバ: ログ

DNS サーバ: ログ

15.3.2.5. ACL

このダイアログでは、 ACL (アクセス制御リスト) を設定し、アクセスに対する制限 を設定することができます。それぞれ固有の 名前 を設定した あとは、 IP アドレス (ネットマスク付き、または単独) の欄に下記の形式で入力します:

{ 192.168.1/24; }

設定ファイルの書式仕様により、アドレスはセミコロン (;) で終わり、かつ 中括弧でくくる必要があります。

15.3.2.6. TSIG 鍵

TSIG (トランザクション署名) の主な目的は、 DHCP や DNS サーバ間での通信に ついて、機密を保持することにあります。詳しい説明は 15.8項 「機密を保持する通信」 で行なっています。

TSIG 鍵を生成するには、 鍵 ID の欄に固有の名前を入力し、 保存先のファイル名 (ファイル名) を指定します。最後に 生成 を押すと鍵が生成されます。

以前に作成した鍵を使用するには、 鍵 ID の項目に何も記入 しない状態で、鍵ファイルが保存されている場所を ファイル名 で指定します。最後に 追加 を押すと追加することができます。

15.3.2.7. DNS ゾーン (スレーブゾーンの追加)

スレーブゾーンを追加するには、 DNS ゾーン を選んでから ゾーン種類として スレーブ を選択し、ゾーンの名前を入力 してから 追加 を押します。

ゾーンエディタ のサブダイアログでは、 マスター DNS サーバの IP を指定し、どのサーバからデータを取得するのかを 設定してください。また、サーバに対するアクセスを制限するには、 ACL の一覧から それぞれ選択してください。

15.3.2.8. DNS ゾーン (マスターゾーンの追加)

マスターゾーンを追加するには、 DNS ゾーン を選んでから ゾーン種類として マスター を選択し、ゾーンの名前を入力 してから 追加 を押します。 マスターゾーンを追加する場合は、それら対応する逆引きゾーンも必要です。 たとえば 192.168.1.0/24 というサブネット内にあるホスト を示す example.com というドメインを追加する 場合は、それらの IP アドレス範囲をカバーする逆引きゾーンを追加する必要が あります。たとえば 1.168.192.in-addr.arpa のように 設定します。

15.3.2.9. DNS ゾーン (マスターゾーンの編集)

マスターゾーンを編集するには、 DNS ゾーン を選んでから 一覧内のマスターゾーンのいずれかを選択し、 編集 を押します。 表示されるダイアログにはいくつかのページが含まれます: 基本 (最初に表示されるページ), NS レコード, MX レコード, SOA, レコード があります。

図15.5「DNS サーバ: ゾーンエディタ (基本)」 で示されている基本ダイアログでは、 動的 DNS とクライアントに対するゾーン転送のアクセスオプション、および スレーブのネームサーバを設定することができます。ゾーンに対して動的な更新を 許可するには、 動的な更新の許可 を選択して関連する TSIG 鍵を選んでください。この鍵は更新動作が始まる前までに設定しておかなければ なりません。ゾーン転送を許可するには、必要な ACL を選んでください。 この段階までに ACL を設定しておかなければなりません。

基本 ダイアログでは、ゾーン転送を有効にするかどうかを 指定します。また、どのホストからゾーンをダウンロードできるかを ACL で指定します。

図15.5 DNS サーバ: ゾーンエディタ (基本)

DNS サーバ: ゾーンエディタ (基本)

ゾーンエディタ (NS レコード)

NS レコード ダイアログでは、指定したゾーンに対する 代替のネームサーバを設定することができます。一覧内にはご自身が管理される ネームサーバだけが含まれていることをご確認ください。レコードを追加するには、 追加するネームサーバ の欄にアドレスを入力し、 追加 を押します。詳しくは 図15.6「DNS サーバ: ゾーンエディタ (NS レコード)」 をご覧ください。

図15.6 DNS サーバ: ゾーンエディタ (NS レコード)

DNS サーバ: ゾーンエディタ (NS レコード)

ゾーンエディタ (MX レコード)

現在のゾーンに対してメールサーバを一覧に追加するには、まずそれぞれ適切な アドレスと値を入力します。入力を行なったら 追加 を押します。詳しくは 図15.7「DNS サーバ: ゾーンエディタ (MX レコード)」 をご覧ください。

図15.7 DNS サーバ: ゾーンエディタ (MX レコード)

DNS サーバ: ゾーンエディタ (MX レコード)

ゾーンエディタ (SOA)

このページでは、 SOA (権威の開始) レコードを作成することができます。 各オプションについての説明は、 例15.6「/var/lib/named/example.com.zone ファイル」 を お読みください。

図15.8 DNS サーバ: ゾーンエディタ (SOA)

DNS サーバ: ゾーンエディタ (SOA)

ゾーンエディタ (レコード)

このダイアログでは、名前解決の管理を行ないます。 レコードキー にホスト名を入力し、種類を選択してください。 A レコード を主に設定します。この場合、値には IP アドレスを入力します。また、 CNAME では別名を指定 します。なお、 NSMX の 各レコードについては、それぞれ NS レコードMX レコード で設定した情報について、より詳細な設定を 行なったり、部分的に修正したりする場合にお使いください。これら 3 種類の レコードでは、いずれも既存の A レコードを参照します。また、 PTR は逆引きゾーンを表わします。これは A レコードの逆を意味するもので、たとえば下記のように なります:

hostname.example.com. IN A 192.168.0.1
1.0.168.192.in-addr.arpa IN PTR hostname.example.com.
[Note]逆引きゾーンの編集

正引きゾーンを追加したあと、メインメニューに戻ってから編集したい逆引きゾーン を選択して 基本 タブを表示すると、 以下のものから自動的にレコードを生成 チェックボックスを 利用することができるようになります。このチェックボックスを選択して ゾーンを選択すると、自動的に逆引きゾーンを生成することができます。 この方法を利用すると、正引きゾーンを書き換えるだけで自動的に逆引きゾーンにも 反映されるようになります。

15.4. BIND ネームサーバの起動

openSUSE® システムでは、ネームサーバ BIND (Berkeley Internet Name Domain) が事前構築される形で提供されていて、 インストールを行なうだけですぐに動作するようになっています。そのため、 インターネット接続を利用できる環境であれば、ネームサーバを設定したあと、 ネームサーバのアドレスに 127.0.0.1 (つまり localhost) を 指定すれば、プロバイダから DNS サーバの情報を得ることなく名前解決ができる ことを示しています。この場合、 BIND はルートネームサーバから名前解決を 行なおうとするため、著しく動作が遅くなってしまいます。通常の運用であれば /etc/named.conf 内の forwarders 設定に対してプロバイダのネームサーバを設定して効率を高めますが、 このような方法で名前解決を行なう場合、そのネームサーバはそのゾーンに対し、純粋な キャッシュのみの ネームサーバとして動作することになります。 設定例はドキュメンテーション /usr/share/doc/packages/bind/config をお読みください。

[Tip]ネームサーバ情報の自動取得

インターネット接続やネットワーク接続の種類によっては、ネームサーバの情報を 自動的に現在の状況に合わせることができます。これを行なうには、 /etc/sysconfig/network/config ファイル内にある MODIFY_NAMED_CONF_DYNAMICALLY 変数を auto に設定してください。

ただし、責任ある団体でドメインが割り当てられない限りは、公式なドメインを設定 してはなりません。独自のドメインをお持ちの場合で、それがプロバイダ側の管理下 にあるものであっても使用しないほうがお勧めです。使用してしまうと、 BIND は 要求を転送してしまうためです。たとえばプロバイダ内の Web サーバなどから、 このドメインにアクセスできなくなってしまいます。

ネームサーバを開始するには、 root ユーザから rcnamed start コマンドを実行します。右側に緑色で done と表示されれば named (ネームサーバのプロセス) は正しく起動したことを示します。起動後は host プログラムや dig プログラムを 利用してローカルシステムからネームサーバの動作テストを行なうことができます。 既定のサーバに対して localhost を問い合わせ、 127.0.0.1 が 返却されれば成功です。応答が返されなかったり、正しいアドレスになっていなかった りした場合は、 /etc/resolv.conf に正しいネームサーバの アドレスが書かれていないか、もしくは全く設定されていないことが考えられます。 まずは最初のテストとして host 127.0.0.1 と入力してみてください。このコマンドは設定にかかわらず常に成功すべきもので あるため、これがエラーになるようであれば、まず rcnamed status を実行してサーバが 実際に動作しているかどうかを確認してください。ネームサーバが起動してなかったり、 期待通りの動作をしていなかったりした場合は、 /var/log/messages ファイルから原因を調査してください。

プロバイダが提供するネームサーバで転送機能が提供されている場合は (もしくは お使いのネットワークで転送機能の利用できるネームサーバが動作している場合は) 、 options セクション内の forwarders に、それらの IP アドレスを入力して ください。 例15.1「named.conf 内の転送設定」 に例を示します。 お使いの環境でそれぞれアドレス設定を変えてお使いください。

例15.1 named.conf 内の転送設定

options { 
        directory "/var/lib/named";
        forwarders { 10.11.12.13; 10.11.12.14; };
        listen-on { 127.0.0.1; 192.168.1.116; };
        allow-query { 127/8; 192.168/16 };
        notify no;
        };

options 項目は localhost0.0.127.in-addr.arpa のゾーン項目の後に続く 項目です。 . に対する type hint の項目も存在すべき項目です。それぞれのファイルをわざわざ編集する必要はなく、 そのままの形で動作するはずです。また、各項目の行末に ; が付けられていることと、適切な箇所に中括弧が入っていることもあわせて ご確認ください。設定ファイル /etc/named.conf やゾーンファイルを編集したら、 rcnamed reload コマンドで BIND に対して設定を読み直すように指示してください。サーバを再起動すること でも同じことを行なうことができます。再起動を行なうには rcnamed restart コマンドを 入力してください。また、サーバを停止するには、 rcnamed stop と入力します。

15.5. /etc/named.conf 設定ファイル

BIND ネームサーバに対する全ての設定は、 /etc/named.conf ファイル内に保存されます。ただし、応答を返すべきドメインに対するゾーンデータ (ホスト名や IP アドレスなど) については、 /var/lib/named ディレクトリ内にある個別のファイルに保存します。ゾーンファイルについての詳細は 後述します。

/etc/named.conf ファイルは大きく分けて 2 つの領域に 分かれています。 1 つは options セクションで 一般的な設定を行ない、もう 1 つは zone セクションで ドメインごとの設定を行ないます。 logging セクションや acl (アクセス制御リスト) のセクションは 必要に応じて指定します。コメント行は # から書き始めるか、 もしくは // から書き始めます。 /etc/named.conf の最小限の設定は、 例15.2「/etc/named.conf の基本設定」 に示しているとおりです。

例15.2 /etc/named.conf の基本設定

options { 
        directory "/var/lib/named"; 
        forwarders { 10.0.0.1; };
        notify no;
};

zone "localhost" in {
       type master;
       file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" in {
        type master;
        file "127.0.0.zone";
};

zone "." in {
        type hint;
        file "root.hint";
};

15.5.1. 重要な設定オプション

directory "ファイル名";

BIND がゾーンデータを見つける際に利用するディレクトリを指定します。 通常、この値は /var/lib/named に設定します。

forwarders { IP アドレス; };

自分自身で直接解決できない場合に、 DNS の要求を転送する先になる ネームサーバ (一般にプロバイダ提供のネームサーバ) を指定します。 IP アドレス の欄には、 192.168.1.116 のように設定してください。

forward first;

DNS 要求に対して、ルートネームサーバ経由での解決を行なう前に転送を 試すように指示します。 forward first の代わりに forward only と設定すると、 全ての要求をルートネームサーバに送信せず、転送するようになります。 ファイアウオールの設定を行なう場合に意味のある項目です。

listen-on port 53 { 127.0.0.1; ip-address; };

BIND に対して、どのインターフェイスとポートでアクセスを待ち受けるのか を指定します。 port 53 については既定のポートである ため、明示的に指定する必要はありません。また、 127.0.0.1 と指定すると、ローカルホストからの要求だけを 許可するようになります。この項目を設定しない場合は、既定で全ての インターフェイスを待ち受けます。

listen-on-v6 port 53 {any; };

BIND に対して、 IPv6 クライアントからの要求を処理するように指定します。 any 以外には none しか指定 できません。 IPv6 に関しては、全アドレスからのアクセスを受け付ける ことになります。

query-source address * port 53;

このオプションは、ファイアウオールによって外向きの DNS 要求がブロック されてしまう場合に必要な設定です。上記の設定では、 BIND の要求をポート 53 から行ない、 1024 以上のポートを使用しないように指定しています。

query-source-v6 address * port 53;

IPv6 での問い合わせ時に使用するポートを設定します。

allow-query { 127.0.0.1; ネットワーク; };

DNS の要求を受け付けるネットワークを指定します。 ネットワーク は実際のアドレス (たとえば 192.168.2.0/24) に置き換えてください。なお、 /24 とはネットマスクの省略表現です (この場合、 255.255.255.0 を意味します) 。

allow-transfer ! *;;

どのホストに対してゾーン転送を許可するかを制御します。この例では ! * を指定しているため、ゾーン転送を完全に拒否 するようになります。この項目を設定しないと、ゾーン転送に対する制限が 行なわれず、どのホストからでも行なうことができるようになります。

statistics-interval 0;

この項目を設定しないと、 BIND は複数の行から構成される統計情報を 1 時間 おきに /var/log/messages に出力します。 0 を指定するとこれらの統計情報を省略することができます。それ以外の値であれば、 分単位で出力間隔を指定することになります。

cleaning-interval 720;

このオプションでは、 BIND がその内蔵キャッシュを消去する時間間隔を指定します。 この時間間隔で /var/log/messages に対して情報が出力 されます。時間は分単位で指定します。既定値は 60 分です。

interface-interval 0;

BIND では定期的にネットワークインターフェイスの追加や削除を検索します。 この値を 0 にすると、ネットワークインターフェイスの 検出作業を行なわなくなり、起動時に検出したインターフェイスに対してのみ 要求を受け付けるようになります。 0 以外の設定を 行なうと、それは分単位での設定になります。既定値は 60 分です。

notify no;

no を設定すると、ゾーンデータの変更やネームサーバの 再起動が発生するごとに発生していた、ネームサーバ宛の通知を行なわなくなります。

利用可能なオプションの一覧については、 man 5 named.conf で表示されるマニュアルページをお読みください。

15.5.2. ログ

BIND では、何をどのように、どこでログを採取するのかを広範囲に設定することが できます。通常は既定の設定のままで問題ありません。 例15.3「ログ出力を無効化する場合の設定」 では、このようなログを完全に省略するために 最も簡単な方法を提示しています。

例15.3 ログ出力を無効化する場合の設定

logging {
        category default { null; };
};

15.5.3. ゾーン項目

例15.4 example.com のゾーン項目

zone "example.com" in {
      type master;
      file "example.com.zone";
      notify no;
};

まず、 zone の後に管理したいドメインの名前を指定 し (上記の例では example.com) 、 さらに in を指定します。あとは関連するオプションを 記述するための中括弧を記述し、 例15.4「example.com のゾーン項目」 のような 構成になります。 スレーブゾーン を定義する場合は type に対して slave を指定し、 このゾーンを管理するネームサーバ (別のサーバ) を master で指定します。たとえば 例15.5「example.net のゾーン項目」 のようになります。

例15.5 example.net のゾーン項目

zone "example.net" in {
      type slave;
      file "slave/example.net.zone";
      masters { 10.0.0.1; }; 
};

ゾーンのオプションには下記のようなものがあります:

type master;

master を指定すると、 BIND に対してこのゾーンを このネームサーバで管理するようになります。また、ゾーンファイルは正しい 書式で作成されているものと解釈します。

type slave;

このゾーンは、他のネームサーバから情報を転送することで成立させるゾーン です。 masters の設定とともに使用しなければ なりません。

type hint;

hint タイプが設定された . ゾーン は、ルートネームサーバを設定するために使用します。このゾーンの定義は そのまま残しておいてください。

file example.com.zone または file slave/example.net.zone;

この設定では、そのゾーンに対するゾーンデータがどのファイルに保存されている ものなのかを指定します。スレーブゾーンの場合は、このファイルは他のネーム サーバから転送してくることになるため、存在している必要はありません。 マスターゾーンの場合とスレーブゾーンの場合の違いは、 slave というディレクトリを使用しているかどうかの 違いです。

masters { サーバの IP アドレス; };

この項目は、スレーブゾーンでのみ必要な設定です。ゾーンファイルを どのネームサーバから転送するのかを指定します。

allow-update {! *; };

このオプションでは、外部からの書き込みアクセス (DNS の項目をクライアント側に 作成する機能を与えるもの) を制御します。通常はセキュリティ上の理由から使用 することはありません。この項目を設定しないと、ゾーンの更新は全く行なうことが できなくなります。上記の設定は何も指定しない場合と同じ意味で、 ! * で全てに対する拒否を行なっています。

15.6. ゾーンファイル

ゾーンファイルについては、 2 種類のものが必要です。 1 つはホスト名に対して IP アドレスを割り当てるもの、もう 1 つはその逆で、 IP アドレスに対する ホスト名を割り当てるものです。

[Tip]ゾーンファイル内でのドット (ピリオド、終止符) の使用

ゾーンファイル内では "." は重要な意味を持ちます。 ホスト名の最後が . で終わっていない場合、該当するゾーン が付加されます。完全修飾ドメイン名で指定したい場合は、さらにドメインが 付加されることを避けるため、 . で終わらなければ なりません。ネームサーバの設定ミスとしては、 "." を付け忘れていたり、 正しい位置に付けなかったりなどが、よくあります。

最初に考慮しなければならないことはゾーンのファイル名で、たとえば example.com というドメインに対しては、 example.com.zone のような名前を設定します。 たとえば 例15.6「/var/lib/named/example.com.zone ファイル」 のようになります。

例15.6 /var/lib/named/example.com.zone ファイル

1.  $TTL 2D 
2.  example.com. IN SOA      dns  root.example.com. ( 
3.               2003072441  ; serial
4.               1D          ; refresh
5.               2H          ; retry
6.               1W          ; expiry
7.               2D )        ; minimum
8.  
9.               IN NS       dns 
10.              IN MX       10 mail
11. 
12. gate         IN A        192.168.5.1 
13.              IN A        10.0.0.1 
14. dns          IN A        192.168.1.116 
15. mail         IN A        192.168.3.108 
16. jupiter      IN A        192.168.2.100
17. venus        IN A        192.168.2.101
18. saturn       IN A        192.168.2.102
19. mercury      IN A        192.168.2.103
20. ntp          IN CNAME    dns 
21. dns6         IN A6  0    2002:c0a8:174::

1 行目:

$TTL では、このファイル内の全ての項目に対して適用する、 既定の生存時間 (Time To Live) を設定します。この例では、項目は 2 日間 有効であり続けます (2 D) 。

2 行目:

この行から SOA (権威の開始) の制御レコードが始まります:

  • まずは管理対象のドメイン名を記述します (example.com) 。 このドメイン名は必ず "." で終わるものとしてください。 そうでないとドメイン名の後ろに再度ドメイン名が付加されてしまいます。 なお、ここには @ を入れることもできます。これは 関連する /etc/named.conf の項目からドメイン名を 自動的に取り出す場合に使用します。

  • IN SOA に続いて、このゾーンに対するマスターの ネームサーバ名を指定します。ここでは dns と指定していますが、 これは "." で終わっていないため、自動的に dns.example.com の形に展開されます。

  • ネームサーバ名に続いて、このドメインの担当者のメールアドレスを指定します。 なお、ゾーンファイルで @ 記号は特別な意味を持つもの であるため、この記号の代わりに "." で指定してください。 たとえば root@example.com というメール アドレスであれば、 root.example.com. と指定します。なお、この指定も "." で終わらせてください。 そうでないとドメイン名がさらに付加されてしまいます。

  • ( から ) までの間は SOA レコードの詳細情報を指定するための括りです。

3 行目:

ここでは シリアル番号 を指定します。シリアル番号は 任意に付与することのできる番号で、このファイルの更新が行なわれるごとに数字を 増やさなければならない項目です。このシリアル番号は、他のネームサーバ (スレーブサーバなど) に対して変更の通知を行なう際に必要となります。ここでは 10 桁の数値で年月日と追加の数字を設定しています (YYYYMMDDNN の形式) が、 これは慣習的にこのようにしているものです。

4 行目:

ここでは 更新間隔 を指定します。更新間隔は他のネーム サーバ (スレーブサーバなど) に対して、 シリアル番号 を検証する間隔を指定します。この場合、 1 日間隔の意味になります。

5 行目:

ここでは 再試行間隔 を指定します。再試行間隔は他の ネームサーバ (スレーブサーバなど) からのアクセスが失敗したときに、プライマリ ネームサーバ (マスターサーバ) に再接続する間隔を指定します。ここでは 2 時間に 設定されています。

6 行目:

ここでは 有効期限 を指定します。有効期限は他の ネームサーバ (スレーブサーバ) からプライマリネームサーバ (マスターサーバ) への アクセスが回復しない場合に、他のネームサーバがキャッシュデータを捨てるまでの 時間間隔を指定します。ここでは 1 週間に設定されています。

7 行目:

ここが SOA レコードの最後の部分で、 ネガティブキャッシュの 生存時間 を指定します。これは、このドメインに対する問い合わせに 対し、該当レコードが存在しない旨の応答を受けつけたときに、キャッシュする時間 間隔を指定します。

9 行目:

IN NS では、このドメインに対して管理責任を持つ ネームサーバを指定します。 dns"." で終わっていないため、 dns.example.com に展開されます。この行は、プライマリ (マスター) ネームサーバとセカンダリ (スレーブ) ネームサーバのように、複数個を指定することもできます。 /etc/named.conf 内で notify に対し no と設定されていない場合は、ここで指定した全ての ネームサーバに対してゾーンデータの更新を通知します。

10 行目:

MX レコードには、そのドメイン (この例では example.com) に対するメールを受け付け、必要に応じて処理や転送 を行なうメールサーバを指定します。この例では、 mail.example.com がそのメールサーバ であることを示しています。ホスト名の前につく数字は優先順位で、複数の MX レコードが存在する場合、まずは最も小さい値を持つメールサーバに対して配送が 試みられ、それが失敗した場合は次に小さい値を持つメールサーバに対して配送を 行なおうとします。

12 行目から 19 行目:

これらの行で、複数のホスト名と IP アドレスの対応を記述しています。ここに記述 された名前には "." が付けられておらず、ドメイン名が記述 されていないため、それら全てに対して example.com が付加されます。 なお、ホスト gate には 2 つのアドレスが割り当てられて いますが、これはこのマシンに 2 枚のネットワークカードが接続されているためです。 ホストのアドレスが従来のもの (IPv4) である場合は、このレコードは A レコードになります。ホストのアドレスが IPv6 アドレスで ある場合には、 AAAA レコードを指定します。

[Note]IPv6 での文法

IPv6 レコードは IPv4 とは異なる文法で記述されます。 IPv6 では断片的な アドレス表記を行なうことができるため、アドレスの途中に 0 が続く場合は、その箇所に 2 つのコロン (:) を記述してください。

pluto     AAAA 2345:00C1:CA11::1234:5678:9ABC:DEF0
pluto     AAAA 2345:00D2:DA11::1234:5678:9ABC:DEF0
20 行目:

dns ホストの別名として、 ntp を提供するための記述です (CNAME とは、 canonical name (公式に認められた名前) の 意味です) 。

疑似ドメイン in-addr.arpa は、 IP アドレスからホスト名に 逆引きする際に利用します。アドレスのネットワーク部を逆順で表記したものを付加して ドメイン名とします。たとえば 192.168 のアドレスに対する逆引き疑似ドメインは、 168.192.in-addr.arpa になります。 例15.7「逆引き」 をご覧ください。

例15.7 逆引き

1.  $TTL 2D
2.  168.192.in-addr.arpa.   IN SOA dns.example.com. root.example.com. (
3.                          2003072441      ; serial
4.                          1D              ; refresh
5.                          2H              ; retry
6.                          1W              ; expiry
7.                          2D )            ; minimum
8.
9.                          IN NS           dns.example.com.
10. 
11. 1.5                     IN PTR          gate.example.com. 
12. 100.3                   IN PTR          www.example.com. 
13. 253.2                   IN PTR          cups.example.com. 

1 行目:

$TTL では、このゾーンの全てに適用される標準 TTL (生存時間) を指定します。

2 行目:

このゾーンファイルでは、 192.168 に対する逆引きゾーンを設定しています。そのための擬似的なゾーン (ドメイン) は 168.192.in-addr.arpa で、このドメインは実際に 存在するものではありません。そのため、全てのホスト名は完全修飾の (つまりドメイン名 を付けた) 形であり、かつ "." で終わるもの) で指定しなければ なりません。それ以外の項目については example.com の例と同じです。

3 行目から 7 行目:

example.com での例と同じですので、そちらを お読みください。

9 行目:

この行では、このゾーンに対して管理責任を持つネームサーバを指定しています。 ここで指定する名前は通常のドメインのものとは異なり、ドメイン指定を含んだ 完全修飾の形で、 "." で終わらなければなりません。

11 行目から 13 行目:

これらは、それぞれの IP アドレスに対するホスト名を指定するポインタレコード です。これらはいずれも "." で終わっておらず、行頭には IP アドレスの末尾部分しか書かれていないため、ゾーンが自動的に付加されます。 実際の IP アドレスに変換する場合は、 .in-addr.arpa を取り除いて "." ごとに逆から読んでください。

通常は、異なる BIND のバージョン間でも、問題なくゾーンの転送を行なうことが できます。

15.7. ゾーンデータの動的な更新

動的な更新 とは、マスターサーバ上のゾーンファイル内の 項目を追加したり変更したり、削除したりする操作のことを指します。この仕組みは RFC 2136 で規定されています。動的な更新は、任意指定の allow-updateupdate-policy の設定を行なうことで、ゾーンごとに個別の設定を行なうことができます。 動的に更新されるゾーンの場合、そのゾーンファイルは手作業で編集すべきではありません。

サーバに対して更新すべき項目を送信するには、 nsupdate コマンドを使用します。このコマンドに対する正確な文法については、 nsupdate の マニュアルページ (man 8 nsupdate) をお読みください。なおセキュリティ上の理由により、 15.8項 「機密を保持する通信」 で書かれているとおり、このような更新には TSIG 鍵を使用すべきものです。

15.8. 機密を保持する通信

機密を保持して通信するには、共有の機密鍵 (TSIG 鍵とも呼ばれます) をベースにした、 トランザクション署名 (TSIG) を利用して行ないます。この章では、このような鍵を どのようにして生成するのかと、その使い方について述べています。

機密を保持する通信は、異なるサーバ間の通信やゾーンデータの動的な更新を行なう 場合に必要となります。また、鍵をベースにしたアクセス制御を利用すると、単純に IP アドレスに依存した制御よりもより安全になります。

TSIG 鍵を生成するには、下記のコマンドを実行します (詳しくは man dnssec-keygen をお読みください):

dnssec-keygen -a hmac-md5 -b 128 -n HOST host1-host2

このコマンドを実行すると、下記のような 2 つのファイルが生成されます:

Khost1-host2.+157+34265.private Khost1-host2.+157+34265.key

鍵それ自身 (ejIkuCyyGJwwuN3xAteKgg== のような文字列) が 両方のファイル内に存在するはずです。通信時にこの鍵を使用するには、あらかじめ 2 つめのファイル (Khost1-host2.+157+34265.key) を リモートホスト側に安全な方法で (たとえば scp) 転送しておかなければなりません。 リモートのサーバでは host1host2 の間で機密通信を行なうため、 /etc/named.conf ファイル内で 鍵を設定しなければなりません:

key host1-host2 {
 algorithm hmac-md5;
 secret "ejIkuCyyGJwwuN3xAteKgg==";
};
[Warning]/etc/named.conf のファイルパーミッション

/etc/named.conf のパーミッション設定で、ファイルへの アクセスが正しく制限されていることを確認してください。このファイルの既定の パーミッションは 0640 で、所有者が root に、グループが named にそれぞれ設定されているはずです。パーミッションを設定する以外 にも、特別にアクセスを制限した別ファイルを作成し、そのファイルを /etc/named.conf から参照させる方法もあります。外部の ファイルを参照させるには、下記のように設定します:

include  "filename"

ここで filename には、鍵ファイルの絶対パスを指定します。

host1 のサーバに対して host2 (アドレス 10.1.2.3) と通信する際、鍵を使用するように 設定するには、サーバ側の /etc/named.conf に 下記のルールを追加しなければなりません:

server 10.1.2.3 {
  keys { host1-host2. ;};
};

/etc/named.conf 側の設定ファイルにも、似たような 設定を行なわなければなりません。

通信の機密性を保持するには、 IP アドレスやアドレス範囲に対して設定した任意の ACL (アクセス制御リスト。ファイルシステムのアクセス制御リストと混同しないで ください) に TSIG 鍵を追加することもできます。たとえば下記のように設定します:

allow-update { key host1-host2. ;};

これらの詳細については、 BIND Administrator Reference Manual 内の update-policy で説明しています。

15.9. DNS セキュリティ

DNSSEC または DNS セキュリティは、 RFC 2535 で規定されています。 DNSSEC 向けのツールについては、 BIND マニュアル内で説明されています。

機密を保持すべきと考えるゾーンには、それに結びつけられた 1 つ以上のゾーン鍵が 存在しなければなりません。このゾーン鍵は、ホスト鍵と同様に dnssec-keygen で作成することができます。これらの鍵を生成 する際は、 DSA 暗号化アルゴリズムが使用されます。関連するゾーンファイルから $INCLUDE ルールを利用して、公開鍵を登録してください。

dnssec-signzone コマンドを利用すると、生成した鍵 (keyset- ファイル) のセットを作成することができます。 これを親ゾーンに対して機密を保持した通信で送信し、署名を実施してください。 あとは生成されたファイルを /etc/named.conf 内の 各ゾーンに登録してください。

15.10. さらなる情報

さらなる情報や説明については、 bind-doc パッケージに含まれる BIND Administrator Reference Manual をお読みください。このパッケージは /usr/share/doc/packages/bind/ 内にファイルをインストールします。また、マニュアルや BIND に含まれている マニュアルページから参照されている各 RFC についても、それぞれお読みください。 また、 /usr/share/doc/packages/bind/README.SuSE には、 openSUSE での BIND について、最新情報を提供しています。


openSUSE リファレンス 13.1