跳至内容

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_IP1NS2_IP2 替换为主服务器和辅助服务器的公共 IP 地址。

在辅助服务器上,添加区域

zone:
    name: fourplex.net
    notify: NS1_IP NOKEY
    request-xfr: NS1_IP NOKEY
    outgoing-interface: NS2_IP

NS1_IP1NS2_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