Red Hat Training

A Red Hat training course is available for RHEL 8

4.3. BIND をキャッシュ DNS サーバーとして設定する

デフォルトでは、BIND DNS サーバーは、成功したルックアップと失敗したルックアップを解決してキャッシュします。その後、サービスはキャッシュから同じレコードへの要求に応答します。これにより、DNS ルックアップの速度が大幅に向上します。

前提条件

  • サーバーの IP アドレスは静的です。

手順

  1. bind パッケージおよび bind-utils パッケージをインストールします。

    # yum install bind bind-utils

    これらのパッケージは BIND 9.11 を提供します。BIND 9.16 が必要な場合は、bind9.16 および bind9.16-utils パッケージをインストールしてください。

  2. BIND を change-root 環境で実行する場合は、bind-chroot パッケージをインストールします。

    # yum install bind-chroot

    デフォルトである enforcing モードで SELinux を使用するホストで BIND を実行すると、より安全になることに注意してください。

  3. /etc/named.conf ファイルを編集し、options ステートメントに次の変更を加えます。

    1. listen-on および listen-on-v6 ステートメントを更新して、BIND がリッスンする IPv4 インターフェイスおよび IPv6 インターフェイスを指定します。

      listen-on port 53 { 127.0.0.1; 192.0.2.1; };
      listen-on-v6 port 53 { ::1; 2001:db8:1::1; };
    2. allow-query ステートメントを更新して、クライアントがこの DNS サーバーにクエリーを実行できる IP アドレスおよび範囲を設定します。

      allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
    3. allow-recursion ステートメントを追加して、BIND が再帰クエリーを受け入れる IP アドレスおよび範囲を定義します。

      allow-recursion { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
      警告

      サーバーのパブリック IP アドレスで再帰を許可しないでください。そうしないと、サーバーが大規模な DNS 増幅攻撃の一部になる可能性があります。

    4. デフォルトでは、BIND は、ルートサーバーから権限のある DNS サーバーに再帰的にクエリーを実行することにより、クエリーを解決します。または、プロバイダーのサーバーなど、他の DNS サーバーにクエリーを転送するように BIND を設定することもできます。この場合、BIND がクエリーを転送する DNS サーバーの IP アドレスのリストを含む forwarders ステートメントを追加します。

      forwarders { 198.51.100.1; 203.0.113.5; };

      フォールバック動作として、フォワーダーサーバーが応答しないと、BIND はクエリーを再帰的に解決します。この動作を無効にするには、forward only; ステートメントを追加します。

  4. /etc/named.conf ファイルの構文を確認します。

    # named-checkconf

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

  5. 着信 DNS トラフィックを許可するように firewalld ルールを更新します。

    # firewall-cmd --permanent --add-service=dns
    # firewall-cmd --reload
  6. BIND を開始して有効にします。

    # systemctl enable --now named

    change-root 環境で BIND を実行する場合は、systemctl enable --now named-chroot コマンドを使用して、サービスを有効にして開始します。

検証

  1. 新しく設定した DNS サーバーを使用してドメインを解決します。

    # dig @localhost www.example.org
    ...
    www.example.org.    86400    IN    A    198.51.100.34
    
    ;; Query time: 917 msec
    ...

    この例では、BIND が同じホストで実行し、localhost インターフェイスでクエリーに応答することを前提としています。

    初めてレコードをクエリーした後、BIND はエントリーをそのキャッシュに追加します。

  2. 前のクエリーを繰り返します。

    # dig @localhost www.example.org
    ...
    www.example.org.    85332    IN    A    198.51.100.34
    
    ;; Query time: 1 msec
    ...

    エントリーがキャッシュされるため、エントリーの有効期限が切れるまで、同じレコードに対するそれ以降のリクエストは大幅に高速化されます。

次のステップ

  • この DNS サーバーを使用するようにネットワーク内のクライアントを設定します。DHCP サーバーが DNS サーバー設定をクライアントに提供する場合は、それに応じて DHCP サーバーの設定を更新します。