権威DNSサーバの構築

権威DNSサーバの構築
Page content

前回の投稿 ではキャッシュDNSサーバを構築したが、各サーバのIPアドレスを登録し名前解決をさせたいので前回作ったキャッシュDNSサーバにゾーン情報を載せて権威DNSサーバとしても動作させることにした。また前回はキャッシュDNSサーバを1台だけ作成したが、今回はもう一台DNSサーバを用意してMaster-Slave構成とすることで耐障害性を向上させる。


BIND のゾーン設定

BINDの設定としてzoneの設定を追加する。named.conf に直接追記してもよいがここではゾーンの設定は別ファイルに追記して管理することとする。まずは BINDの設定ファイル /var/named/chroot/etc/named.conf にゾーン設定が記されたファイルを include で読み込ませる設定を追加する。

include "/etc/named/zone.conf";

次にゾーン設定を記載する設定ファイル zone.conf を新規作成するが、以降はMasterとSlaveで設定内容が少し異なるのでそれぞれ別に説明する。


DNSサーバ1号機のBIND設定 (Master側)

設定ファイルは /var/named/chroot/etc/named/zone.conf に作成した。各説明は下記の通り。

  1. ACLでスレーブサーバのIPアドレスを定義します。 «Slave IP Address» はスレーブとして動作させるDNSサーバのIPアドレスを入力。
  2. 今回、権威DNSサーバとして持たせるドメインを記載する。ここでは「example.co.jp」とした。
  3. Masterサーバとして動作させるので type master; を指定。
  4. これから作成するゾーンファイル名を記載する。 ここでは「example.co.jp.zone」とした。
  5. allow-transfer でACLで定義した slaves を指定する。この定義によってゾーン情報が更新された際にスレーブサーバへ通知が行くようになる。
acl "slaves" {
    <<Slave IP Address>>;              // 1
};

zone "example.co.jp" {                 // 2
    type master;                       // 3
    file "example.co.jp.zone";         // 4
    allow-transfer { slaves; };        // 5
};

DNSサーバ2号機のBIND設定 (Slave側)

設定ファイルは /var/named/chroot/etc/named/zone.conf に作成した。各説明は下記の通り。

  1. 今回、権威DNSサーバとして持たせるドメインを記載する。Masterと同じにするため「example.co.jp」とした。
  2. Slaveサーバとして動作させるので type slave; を指定。
  3. ドメインのゾーン情報を持っているMasterサーバのIPアドレスを指定する。
  4. Masterサーバから取得したゾーン情報を格納するファイル名を記載する。 ここでは「slaves/example.co.jp.zone」とした。
zone "example.co.jp" {                  // 1
    type slave;                         // 2
    masters {
      <<Master IP Address>>;            // 3
	};
  file "slaves/example.co.jp.zone";     // 4
};

BIND のゾーン情報ファイル作成

ゾーン情報が記載されたファイルは、Masterサーバの zone.conf で指定した場所 /var/named/chroot/var/named/example.co.jp.zone に作成する。なおゾーン情報ファイルはMasterサーバのみに作成すればよい。各説明の詳細は他サイトを参照してほしい。ここでは特に注意する箇所のみを説明する。

  1. ポジティブキャッシュのTTL (Time to Live)を設定する。このゾーン情報にある各リソースレコード(AやAAAA等)を問い合わせしてきた他のDNSサーバはこの値で指定した秒数の間、リソースレコードの情報をキャッシュする。
  2. ゾーン情報のシリアルナンバーを設定する。ゾーン情報を更新する都度にこのシリアルナンバーの数値を増やす。更新した際に増やすことを忘れるとSlaveサーバに更新通知が送信されない。なお数値何でも良いが、以下例のように日にちを基に生成するのが一般的だ。
  3. NSレコードにはMasterサーバとSlaveサーバを指定する。
$TTL 600                              // 1
@	IN	SOA	ns01.example.co.jp.	hostmaster.example.co.jp. (
    2020052101	; Serial Number of this file
    600     ; Refresh Time
    900     ; Retry Time
    2592000 ; Expire Time
    600 )   ; Time To Live            // 2

    IN  NS  ns01.example.co.jp.       // 3
    IN  NS  ns02.example.co.jp.       // 3

ns01		IN	A	<<Master IP Adderss>>
ns02		IN	A	<<Slave IP Address>>

www		IN	A	<<Web Server IPv6 Address>>
www		IN	AAAA	<<Web Server IPv6 Address>>

設定の反映

設定が完了したら systemctl コマンドでデーモンを restart で再起動させる。反映後は status で正常に起動したことを確認する。

なお再起動後にゾーン転送が開始されるので、最初に受け側であるSlave側サーバを再起動して、その後にMaster側サーバを再起動したほうが良い。

systemctl restart named-chroot
systemctl status named-chroot

ゾーン転送の確認

起動させるとMaster側サーバからゾーン情報の更新通知がSlave側サーバへ送信される。更新通知を受け取るとSlave側からMaster側へゾーン情報を取得しに行く。無事ゾーン情報を取得できればMaster側と同じゾーン情報をSlave側も保有するので両サーバで名前解決が可能となる。

再起動後にゾーン転送が正常に行われているかはログを見て確認しよう。Master側とSlave側のゾーン転送ログは前回の投稿 と同じ設定であれば /var/named/chroot/var/log/xfer.log にある。

Master側のゾーン転送ログは下記のようになる。AXFR startedAXFR ended が出力されていれば問題ない。

21-May-2020 21:49:18.519 xfer-out: client @0x7fe6b010c2f0 <<Slave IP Address>>#38651 (example.co.jp): transfer of 'example.co.jp/IN': AXFR started (serial 2020052101)
21-May-2020 21:49:18.520 xfer-out: client @0x7fe6b010c2f0 <<Slave IP Address>>#38651 (example.co.jp): transfer of 'example.co.jp/IN': AXFR ended

Slave側のゾーン転送ログは下記のようになる。Transfer status: successTransfer completed が出力されていれば問題ない。

21-May-2020 21:49:18.519 xfer-in: transfer of 'example.co.jp/IN' from <<Master IP Adderss>>#53: connected using <<Slave IP Address>>#38651
21-May-2020 21:49:18.520 xfer-in: transfer of 'example.co.jp/IN' from <<Master IP Adderss>>#53: Transfer status: success
21-May-2020 21:49:18.520 xfer-in: transfer of 'example.co.jp/IN' from <<Master IP Adderss>>#53: Transfer completed: 1 messages, 10 records, 281 bytes, 0.001 secs (281000 bytes/sec)

権威DNSサーバとして動作させるには?

今回は社内のキャッシュDNSサーバに権威DNSサーバとしての機能を乗せる形としたが、ネット上で操作させるDNSはキャッシュDNS機能は不要の場合が多い。その場合は named.conf を修正することで権威機能のみのDNSサーバに変更することが可能だ。

前回の投稿DNSキャッシュサーバを構築する にある /var/named/chroot/etc/named.confoptions ステートメント内で以下を追加&変更すればキャッシュ機能を外すことができる。(未確認のため動作検証は各自行ってほしい)

キャッシュに対する問い合わせを受け付けない様に以下を追加。

allow-query-cache { none; };

再帰的問い合わせを無効にする為に recursionno に変更。

recursion no;

参考サイト

Tumblr
Pinterest
はてブ