4.7. BIND DNS サーバー間のゾーン転送の設定
ゾーン転送により、ゾーンのコピーを持つすべての DNS サーバーが最新のデータを使用することが保証されます。
前提条件
- 将来のプライマリーサーバーでは、ゾーン転送を設定するゾーンが設定されている。
- 将来のセカンダリーサーバーでは、BIND はキャッシュネームサーバーなどとして設定されている。
-
両方のサーバーで、
named
サービスまたはnamed-chroot
サービスが実行している。
手順
既存のプライマリーサーバーで、以下を行います。
共有キーを作成し、
/etc/named.conf
ファイルに追加します。# tsig-keygen example-transfer-key | tee -a /etc/named.conf key "example-transfer-key" { algorithm hmac-sha256; secret "q7ANbnyliDMuvWgnKOxMLi313JGcTZB5ydMW5CyUGXQ="; };
このコマンドは、
tsig-keygen
コマンドの出力を表示し、自動的に/etc/named.conf
に追加します。後でセカンダリーサーバーでもコマンドの出力が必要になります。
/etc/named.conf
ファイルのゾーン定義を編集します。allow-transfer
ステートメントで、サーバーがゾーンを転送するためにexample-transfer-key
ステートメントで指定されたキーを提供する必要があることを定義します。zone "example.com" { ... allow-transfer { key example-transfer-key; }; };
または、
allow-transfer
ステートメントで BIND アクセス制御リスト (ACL) ニックネームを使用します。デフォルトでは、ゾーンが更新された後、BIND は、このゾーンにネームサーバー (
NS
) レコードを持つすべてのネームサーバーに通知します。セカンダリーサーバーのNS
レコードをゾーンに追加する予定がない場合は、BIND がこのサーバーに通知するように設定できます。そのために、このセカンダリーサーバーの IP アドレスを含むalso-notify
ステートメントをゾーンに追加します。zone "example.com" { ... also-notify { 192.0.2.2; 2001:db8:1::2; }; };
/etc/named.conf
ファイルの構文を確認します。# named-checkconf
コマンドが出力を表示しない場合は、構文に間違いがありません。
BIND をリロードします。
# systemctl reload named
change-root 環境で BIND を実行する場合は、
systemctl reload named-chroot
コマンドを使用してサービスをリロードします。
将来のセカンダリーサーバーで、以下を行います。
/etc/named.conf
ファイルを次のように編集します。プライマリーサーバーと同じキー定義を追加します。
key "example-transfer-key" { algorithm hmac-sha256; secret "q7ANbnyliDMuvWgnKOxMLi313JGcTZB5ydMW5CyUGXQ="; };
/etc/named.conf
ファイルにゾーン定義を追加します。zone "example.com" { type slave; file "slaves/example.com.zone"; allow-query { any; }; allow-transfer { none; }; masters { 192.0.2.1 key example-transfer-key; 2001:db8:1::1 key example-transfer-key; }; };
これらの設定状態:
-
このサーバーは、
example.com
ゾーンのセカンダリーサーバー (type slave
) です。 -
/var/named/slaves/example.com.zone
ファイルはゾーンファイルです。この例のように相対パスを設定すると、このパスは、options
ステートメントのdirectory
に設定したディレクトリーからの相対パスになります。このサーバーがセカンダリーであるゾーンファイルをプライマリーサーバーから分離するには、それを/var/named/slaves/
ディレクトリーなどに保存します。 - どのホストもこのゾーンにクエリーを実行できます。または、IP 範囲または ACL ニックネームを指定して、アクセスを制限します。
- このサーバーからゾーンを転送できるホストはありません。
-
このゾーンのプライマリーサーバーの IP アドレスは
192.0.2.1
および2001:db8:1::2
です。または、ACL ニックネームを指定できます。このセカンダリーサーバーは、example-transfer-key
という名前のキーを使用して、プライマリーサーバーに対する認証を行います。
-
このサーバーは、
/etc/named.conf
ファイルの構文を確認します。# named-checkconf
BIND をリロードします。
# systemctl reload named
change-root 環境で BIND を実行する場合は、
systemctl reload named-chroot
コマンドを使用してサービスをリロードします。
-
オプション: プライマリーサーバーのゾーンファイルを変更し、新しいセカンダリーサーバーの
NS
レコードを追加します。
検証
セカンダリーサーバーで次の手順を実行します。
named
サービスのsystemd
ジャーナルエントリーを表示します。# journalctl -u named ... Jul 06 15:08:51 ns2.example.com named[2024]: zone example.com/IN: Transfer started. Jul 06 15:08:51 ns2.example.com named[2024]: transfer of 'example.com/IN' from 192.0.2.1#53: connected using 192.0.2.2#45803 Jul 06 15:08:51 ns2.example.com named[2024]: zone example.com/IN: transferred serial 2022070101 Jul 06 15:08:51 ns2.example.com named[2024]: transfer of 'example.com/IN' from 192.0.2.1#53: Transfer status: success Jul 06 15:08:51 ns2.example.com named[2024]: transfer of 'example.com/IN' from 192.0.2.1#53: Transfer completed: 1 messages, 29 records, 2002 bytes, 0.003 secs (667333 bytes/sec)
change-root 環境で BIND を実行する場合は、
journalctl -u named-chroot
コマンドを使用してジャーナルエントリーを表示します。BIND がゾーンファイルを作成したことを確認します。
# ls -l /var/named/slaves/ total 4 -rw-r--r--. 1 named named 2736 Jul 6 15:08 example.com.zone
デフォルトでは、セカンダリーサーバーはゾーンファイルを未修正のバイナリー形式で保存することに注意してください。
セカンダリーサーバーから転送されたゾーンのレコードをクエリーします。
# dig +short @192.0.2.2 AAAA www.example.com 2001:db8:1::30
この例では、この手順で設定したセカンダリーサーバーが IP アドレス
192.0.2.2
でリッスンしていると想定しています。