Red Hat Training

A Red Hat training course is available for RHEL 8

4.7. 在 BIND DNS 服务器中配置区传输

区域传送可确保所有具有区域副本的 DNS 服务器均使用最新数据。

先决条件

  • 在未来的主服务器中,已配置要设置区域传送的区域。
  • 在未来的次要服务器上,已配置 BIND,例如作为缓存名称服务器。
  • 在两个服务器上,namednamed-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.12001: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