1.2. 将 BIND 配置为缓存 DNS 服务器
默认情况下,BIND DNS 服务器解析和缓存成功并失败的查找。随后,服务会从其缓存中应答相同记录的请求。这可显著提高 DNS 查找速度。
先决条件
- 服务器的 IP 地址是静态的。
流程
安装
bind
和bind-utils
软件包:dnf install bind bind-utils
# dnf install bind bind-utils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要在 change-root 环境中运行 BIND,请安装
bind-chroot
软件包:dnf install bind-chroot
# dnf install bind-chroot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,在 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; };
listen-on port 53 { 127.0.0.1; 192.0.2.1; }; listen-on-v6 port 53 { ::1; 2001:db8:1::1; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
allow-query
语句,以配置哪些 IP 地址和范围客户端可以查询此 DNS 服务器:allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
allow-recursion
语句,以定义 BIND 接受递归查询的 IP 地址和范围:allow-recursion { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
allow-recursion { localhost; 192.0.2.0/24; 2001:db8:1::/64; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告不要在服务器的公共 IP 地址中递归。否则,服务器可能会成为大规模 DNS 扩大攻击的一部分。
默认情况下,BIND 通过将从根服务器递归查询到权威 DNS 服务器来解析查询。或者,您可以将 BIND 配置为将查询转发到其他 DNS 服务器,比如您的供应商之一。在这种情况下,添加一个带有 BIND 应该转发查询的 DNS 服务器的 IP 地址列表的
forwarders
语句:forwarders { 198.51.100.1; 203.0.113.5; };
forwarders { 198.51.100.1; 203.0.113.5; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为回退行为,如果转发器服务器没有响应,BIND 会以递归方式解析查询。要禁用此行为,请添加
forward only;
语句。
验证
/etc/named.conf
文件的语法:named-checkconf
# named-checkconf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令没有显示输出,则语法为正确的。
更新
firewalld
规则,以允许传入的 DNS 流量:firewall-cmd --permanent --add-service=dns firewall-cmd --reload
# firewall-cmd --permanent --add-service=dns # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动并启用 BIND:
systemctl enable --now named
# systemctl enable --now named
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要在 change-root 环境中运行 BIND,请使用
systemctl enable --now named-chroot
命令启用并启动该服务。
验证
使用新设置 DNS 服务器解析域:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例假定 BIND 在同一主机上运行并响应
localhost
接口上的查询。在第一次查询记录后,BIND 会将条目添加到其缓存中。
重复前面的查询:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 由于对条目进行了缓存,进一步对相同记录的请求会非常快,直到条目过期为止。