1.3. 将 BIND 配置为缓存 DNS 服务器
默认情况下,BIND DNS 服务器解析和缓存成功并失败的查找。随后,服务会从其缓存中应答相同记录的请求。这可显著提高 DNS 查找速度。
前提条件
- 服务器的 IP 地址是静态的。
流程
安装
bind
和bind-utils
软件包:# yum install bind bind-utils
这些软件包提供 BIND 9.11。如果您需要 BIND 9.16,请安装
bind9.16
和bind9.16-utils
软件包。如果要在 change-root 环境中运行 BIND,请安装
bind-chroot
软件包:# yum install bind-chroot
请注意,在 SELinux 处于
enforcing
模式(默认设置)的主机上运行 BIND 更为安全。编辑
/etc/named.conf
文件,并在options
语句中进行以下更改:更新
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; };
更新
allow-query
语句,以配置哪些 IP 地址和范围客户端可以查询此 DNS 服务器:allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
添加
allow-recursion
语句,以定义 BIND 接受递归查询的 IP 地址和范围:allow-recursion { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
警告不要在服务器的公共 IP 地址中递归。否则,服务器可能会成为大规模 DNS 扩大攻击的一部分。
默认情况下,BIND 通过将从根服务器递归查询到权威 DNS 服务器来解析查询。或者,您可以将 BIND 配置为将查询转发到其他 DNS 服务器,比如您的供应商之一。在这种情况下,添加一个带有 BIND 应该转发查询的 DNS 服务器的 IP 地址列表的
forwarders
语句:forwarders { 198.51.100.1; 203.0.113.5; };
作为回退行为,如果转发器服务器没有响应,BIND 会以递归方式解析查询。要禁用此行为,请添加
forward only;
语句。
验证
/etc/named.conf
文件的语法:# named-checkconf
如果命令没有显示输出,则语法为正确的。
更新
firewalld
规则,以允许传入的 DNS 流量:# firewall-cmd --permanent --add-service=dns # firewall-cmd --reload
启动并启用 BIND:
# systemctl enable --now named
如果要在 change-root 环境中运行 BIND,请使用
systemctl enable --now named-chroot
命令启用并启动该服务。
验证
使用新设置 DNS 服务器解析域:
# dig @localhost www.example.org ... www.example.org. 86400 IN A 198.51.100.34 ;; Query time: 917 msec ...
本例假定 BIND 在同一主机上运行并响应
localhost
接口上的查询。在第一次查询记录后,BIND 会将条目添加到其缓存中。
重复前面的查询:
# dig @localhost www.example.org ... www.example.org. 85332 IN A 198.51.100.34 ;; Query time: 1 msec ...
由于对条目进行了缓存,进一步对相同记录的请求会非常快,直到条目过期为止。
后续步骤
- 配置网络中的客户端来使用此 DNS 服务器。如果 DHCP 服务器向客户端提供 DNS 服务器设置,请相应地更新 DHCP 服务器的配置。
其他资源
- 有关使用 SELinux 保护 BIND 的注意事项,或者在更改 root 环境中运行
-
named.conf(5)
man page -
/usr/share/doc/bind/sample/etc/named.conf
- BIND 管理员参考手册