NSD 权威 DNS
BIND 的替代方案,NSD (Name Server Daemon) 是一个由 NLnet Labs 维护的现代仅权威 DNS 服务器。
先决条件和假设¶
- 运行 Rocky Linux 的服务器
- 能够使用
firewalld
创建防火墙规则 - 指向您的权威 DNS 服务器的域名或内部递归 DNS 服务器
简介¶
外部或公共 DNS 服务器将主机名映射到 IP 地址,在 PTR(称为“指针”或“反向”)记录的情况下,将 IP 地址映射到主机名。这是互联网的重要组成部分。无论您身在何处,它都能确保您的邮件服务器、Web 服务器、FTP 服务器或许多其他服务器和服务按预期工作。
安装和启用 NSD¶
首先,安装 EPEL
dnf install epel-release
接下来,安装 NSD
dnf install nsd
配置 NSD¶
在更改任何配置文件之前,请复制原始安装的工作文件 nsd.conf
cp /etc/nsd/nsd.conf /etc/nsd/nsd.conf.orig
如果配置文件出现错误,这将有助于将来进行排查。在进行更改之前,*始终* 最好制作一个备份副本。
编辑 nsd.conf 文件。作者使用 vi,但您可以替换为您喜欢的命令行编辑器
vi /etc/nsd/nsd.conf
导航到底部并插入以下内容
zone:
name: example.com
zonefile: /etc/nsd/example.com.zone
将 example.com
替换为您运行名称服务器的域名。
接下来,创建区域文件
vi /etc/nsd/example.com.zone
DNS 区域文件兼容 BIND。在文件中,插入
$TTL 86400 ; How long should records last?
; $TTL used for all RRs without explicit TTL value
$ORIGIN example.com. ; Define our domain name
@ 1D IN SOA ns1.example.com. hostmaster.example.com. (
2024061301 ; serial
3h ; refresh duration
15 ; retry duration
1w ; expiry duration
3h ; nxdomain error ttl
)
IN NS ns1.example.com. ; in the domain
IN MX 10 mail.another.com. ; external mail provider
IN A 172.20.0.100 ; default A record
; server host definitions
ns1 IN A 172.20.0.100 ; name server definition
www IN A 172.20.0.101 ; web server definition
mail IN A 172.20.0.102 ; mail server definition
如果您需要帮助定制 BIND 样式区域文件,Oracle 有 关于区域文件的良好介绍。
保存您的更改。
启用 NSD¶
接下来,在 firewalld
中允许 DNS 端口并启用 NSD
firewall-cmd --add-service=dns --zone=public
firewall-cmd --runtime-to-permanent
systemctl enable --now nsd
使用 host
命令检查 DNS 解析
% host example.com 172.20.0.100
Using domain server:
Name: 172.20.0.100
Address: 172.20.0.100#53
Aliases:
example.com has address 172.20.0.100
example.com mail is handled by 10 mail.another.com.
%
辅助 DNS 服务器¶
运行一个或多个辅助权威 DNS 服务器通常是常态。当主服务器出现故障时,这尤其有用。NSD 具有允许将 DNS 记录从主服务器同步到一个或多个备份服务器的功能。
要启用备份服务器,请在主区域上生成签名密钥
nsd-control-setup
您需要将以下文件复制到 /etc/nsd/
目录中的备份服务器
nsd_control.key
nsd_control.pem
nsd_server.key
nsd_server.pem
在所有 DNS 服务器上,在 zone:
指令之前添加以下内容
remote-control:
control-enable: yes
control-interface: 0.0.0.0
control-port: 8952
server-key-file: "/etc/nsd/nsd_server.key"
server-cert-file: "/etc/nsd/nsd_server.pem"
control-key-file: "/etc/nsd/nsd_control.key"
control-cert-file: "/etc/nsd/nsd_control.pem"
另外,启用防火墙条目
firewall-cmd --zone=public --add-port=8952/tcp
firewall-cmd --runtime-to-permanent
在主服务器上,将区域更改为与以下内容匹配
zone:
name: example.com
zonefile: /etc/nsd/example.com.zone
allow-notify: NS2_IP NOKEY
provide-xfr: NS2_IP NOKEY
outgoing-interface: NS1_IP
将 NS1_IP1
和 NS2_IP2
替换为主服务器和辅助服务器的公共 IP 地址。
在辅助服务器上,添加区域
zone:
name: fourplex.net
notify: NS1_IP NOKEY
request-xfr: NS1_IP NOKEY
outgoing-interface: NS2_IP
将 NS1_IP1
和 NS2_IP2
替换为主服务器和辅助服务器的公共 IP 地址。
重启两个名称服务器上的 NSD
NS1# systemctl restart --now nsd
要从主名称服务器下载区域文件到辅助名称服务器
nsd-control notify -s NS2_IP
将 NS2_IP2
替换为辅助名称服务器的公共 IP 地址。
结论¶
大多数人使用第三方 DNS 服务。但是,在某些情况下,自托管 DNS 是可取的。例如,电信、托管和社交媒体公司在第三方 DNS 服务不受欢迎时会维护自己的 DNS 条目。
NSD 是众多使 DNS 托管成为可能的开源工具之一。
作者:Neel Chauhan
贡献者:Steven Spencer, Ganna Zhyrnova