Red Hat Training

A Red Hat training course is available for RHEL 8

4.7. BIND DNS サーバー間のゾーン転送の設定

ゾーン転送により、ゾーンのコピーを持つすべての DNS サーバーが最新のデータを使用することが保証されます。

前提条件

  • 将来のプライマリーサーバーでは、ゾーン転送を設定するゾーンが設定されている。
  • 将来のセカンダリーサーバーでは、BIND はキャッシュネームサーバーなどとして設定されている。
  • 両方のサーバーで、named サービスまたは named-chroot サービスが実行している。

手順

  1. 既存のプライマリーサーバーで、以下を行います。

    1. 共有キーを作成し、/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 に追加します。

      後でセカンダリーサーバーでもコマンドの出力が必要になります。

    2. /etc/named.conf ファイルのゾーン定義を編集します。

      1. allow-transfer ステートメントで、サーバーがゾーンを転送するために example-transfer-key ステートメントで指定されたキーを提供する必要があることを定義します。

        zone "example.com" {
            ...
            allow-transfer { key example-transfer-key; };
        };

        または、allow-transfer ステートメントで BIND アクセス制御リスト (ACL) ニックネームを使用します。

      2. デフォルトでは、ゾーンが更新された後、BIND は、このゾーンにネームサーバー (NS) レコードを持つすべてのネームサーバーに通知します。セカンダリーサーバーの NS レコードをゾーンに追加する予定がない場合は、BIND がこのサーバーに通知するように設定できます。そのために、このセカンダリーサーバーの IP アドレスを含む also-notify ステートメントをゾーンに追加します。

        zone "example.com" {
            ...
            also-notify { 192.0.2.2; 2001:db8:1::2; };
        };
    3. /etc/named.conf ファイルの構文を確認します。

      # named-checkconf

      コマンドが出力を表示しない場合は、構文に間違いがありません。

    4. BIND をリロードします。

      # systemctl reload named

      change-root 環境で BIND を実行する場合は、systemctl reload named-chroot コマンドを使用してサービスをリロードします。

  2. 将来のセカンダリーサーバーで、以下を行います。

    1. /etc/named.conf ファイルを次のように編集します。

      1. プライマリーサーバーと同じキー定義を追加します。

        key "example-transfer-key" {
                algorithm hmac-sha256;
                secret "q7ANbnyliDMuvWgnKOxMLi313JGcTZB5ydMW5CyUGXQ=";
        };
      2. /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 という名前のキーを使用して、プライマリーサーバーに対する認証を行います。
    2. /etc/named.conf ファイルの構文を確認します。

      # named-checkconf
    3. BIND をリロードします。

      # systemctl reload named

      change-root 環境で BIND を実行する場合は、systemctl reload named-chroot コマンドを使用してサービスをリロードします。

  3. オプション: プライマリーサーバーのゾーンファイルを変更し、新しいセカンダリーサーバーの NS レコードを追加します。

検証

セカンダリーサーバーで次の手順を実行します。

  1. 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 コマンドを使用してジャーナルエントリーを表示します。

  2. BIND がゾーンファイルを作成したことを確認します。

    # ls -l /var/named/slaves/
    total 4
    -rw-r--r--. 1 named named 2736 Jul  6 15:08 example.com.zone

    デフォルトでは、セカンダリーサーバーはゾーンファイルを未修正のバイナリー形式で保存することに注意してください。

  3. セカンダリーサーバーから転送されたゾーンのレコードをクエリーします。

    # dig +short @192.0.2.2 AAAA www.example.com
    2001:db8:1::30

    この例では、この手順で設定したセカンダリーサーバーが IP アドレス 192.0.2.2 でリッスンしていると想定しています。