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
。