2.6. BIND DNS サーバー間のゾーン転送の設定
ゾーンのコピーを保持しているすべての DNS サーバーが最新のデータを持つようにするには、BIND DNS サーバー間でゾーン転送を設定します。
前提条件
- あなたは管理権限特権を持っています。
- 将来のプライマリーサーバーでは、ゾーン転送を設定するゾーンが設定されている。
- 将来のセカンダリーサーバーでは、BIND がすでにキャッシュネームサーバーとして設定されています。
-
両方のサーバーで、
namedサービスまたはnamed-chrootサービスが実行している。
手順
既存のプライマリーサーバーで、以下を行います。
共有キーを生成し、
/etc/named.confファイルに追加します。# tsig-keygen example-transfer-key | tee -a /etc/named.confkey "__example-transfer-key__" { algorithm hmac-sha256; secret "__q7ANbnyliDMuvWgnKOxMLi313JGcTZB5ydMW5CyUGXQ=__"; };出力は
/etc/named.confファイルに追記されます。この出力は後ほどセカンダリーサーバーでも必要になります。
allow-transferステートメントで、/etc/named.confファイル内のゾーンを設定し、転送にキーを要求するようにします。zone "example.com" { ... allow-transfer { key example-transfer-key; }; };ゾーンを転送するには、サーバーが
example-transfer-keyステートメントで指定されたキーを持っている必要があることを定義します。ただし、allow-transferステートメントでは、BIND アクセス制御リスト (ACL) のニックネームを使用できます。セカンダリーサーバーの IP アドレスを表示するようにゾーンを設定します。
zone "example.com" { ... also-notify { 192.0.2.2; 2001:db8:1::2; }; };デフォルトでは、ゾーンを更新した後、BIND はそのゾーンにネームサーバー (
NS) レコードを持つすべてのネームサーバーに通知します。セカンダリーサーバーのNSレコードをゾーンに追加する予定がない場合でも、BIND がこのサーバーに通知するように設定できます。そのために、このセカンダリーサーバーの IP アドレスを含むalso-notifyステートメントをゾーンに追加します。/etc/named.confファイルの構文を確認します。# named-checkconfコマンドが出力を表示しない場合は、構文に間違いがありません。
BIND をリロードします。
# systemctl reload namedchange-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-checkconfBIND をリロードします。
# systemctl reload namedchange-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.com2001:db8:1::30この例では、この手順で設定したセカンダリーサーバーが IP アドレス
192.0.2.2でリッスンしていると想定しています。