如何在 Ubuntu 22.04 上使用 BIND 设置 DNS 服务器
在此页
- 先决条件
- 设置 FQDN(完全限定域名)
- 安装 BIND 包
- 设置 BIND 主机
- 设置区域
- 设置 BIND 从站
- 从客户端验证 DNS 服务器
- 结论
BIND 或 Berkeley Internet Name Domain 是免费的开源 DNS 服务器软件。它是互联网上 70% 以上的 DNS 使用的最流行的 DNS 服务器软件之一。 BIND 自 1980 年代以来一直存在,它以其灵活性、性能和功能而闻名。 BIND既可以作为权威DNS,也可以作为缓存DNS,支持负载均衡、动态更新、拆分DNS、DNSSEC、IPv6等等。
BIND DNS 软件是用于类 Unix 操作系统的最可靠的 DNS 服务器之一。它在大多数 Linux 发行版上可用,并提供用于诊断和测试 DNS 服务器的附加工具。
本指南将教您如何在 Ubuntu 22.04 服务器上使用 BIND 安装 DNS 服务器。本教程将向您展示如何使用两台 Ubuntu 服务器设置主从 BIND DNS 服务器安装。
先决条件
在开始使用本指南之前,您应该满足以下要求:
- 两台 Ubuntu 22.04 服务器。
- 具有根/管理员权限的非根用户。
设置 FQDN(完全限定域名)
在开始安装 BIND 包之前,您必须确保服务器的主机名和 FQDN 是正确的。在此演示中,我们将使用以下详细信息的两个 Ubuntu 服务器:
Hostname IP Address FQDN Used As
---------------------------------------------------------
ns1 192.168.5.21 ns1.hwdomain.io BIND Master
ns2 192.168.5.22 ns2.hwdomain.io BIND Slave
现在登录到每个服务器并运行以下命令来设置 FQDN(完全限定域名)。
在 \ns1\ 服务器上设置 FQDN。
sudo hostnamectl set-hostname ns1.hwdomain.io
在 \ns2\ 服务器上设置 FQDN。
sudo hostnamectl set-hostname ns2.hwdomain.io
接下来,使用以下命令编辑文件 \/etc/hosts\。
sudo nano /etc/hosts
在每台服务器上添加如下配置。
192.168.5.21 ns1.hwdomain.io ns1
192.168.5.22 ns2.hwdomain.io ns2
完成后保存并关闭文件。
最后,使用以下命令检查并验证每台服务器上的 FQDN。在 \ns1\ 服务器上,您将获得 FQDN 作为 \ns1.hwdomain.io\,在 \ns2\ 服务器上,您将获得输出 \ns2.hwdomain.io\。
sudo hostname -f
安装 BIND 包
默认情况下,绑定包在 Ubuntu 服务器存储库中可用。现在,您可以在 \ns1\ 和 \ns2\ 服务器上使用 apt 命令轻松安装 Bind。
运行下面的 apt 命令来更新和刷新 Ubuntu 存储库。
sudo apt update
之后,使用以下命令安装绑定包。输入 Y 确认安装,然后按 ENTER 继续。安装将开始。
sudo apt install bind9 bind9utils bind9-doc dnsutils

Bind 安装完成后,使用以下命令编辑配置\/etc/default/named\。
sudo nano /etc/default/named
\OPTIONS=\ 行允许您在 BIND 服务运行时设置特定选项。在此演示中,您将仅使用 IPv4 运行绑定,因此您需要制作如下所示的 \OPTIONS\ 行。
OPTIONS="-u bind -4"
完成后保存并关闭文件。
现在运行以下命令重新启动绑定服务 \named\。然后,检查并验证 BIND 服务的状态。您应该看到 Bind 服务 \named\ 正在两台服务器上运行。
sudo systemctl restart named
sudo systemctl status named

设置 BIND 主机
在 \ns1\ 和 \ns2\ 服务器上安装 BIND 包后,您将设置 BIND DNS 服务器。您将设置 \ns1\ 服务器作为 BIND DNS 服务器的主服务器。您可以在单个服务器上运行 BIND,但建议使用多个服务器来设置高可用性 DNS 服务器。
回到“ns1”服务器的终端会话。
运行下面的命令来编辑配置文件\/etc/bind/named.conf.options\。
sudo nano /etc/bind/named.conf.options
将以下配置添加到该行顶部的文件中,在 \options {....};\ 行之前。
使用此配置,您将创建一个名为“受信任”的 ACL(访问控制列表),其中包括您环境中所有受信任的 IP 地址和网络。此外,请务必添加本地服务器 IP 地址“ns1”和辅助 DNS 服务器“ns2”的 IP 地址。
acl "trusted" {
192.168.5.21; # ns1 - or you can use localhost for ns1
192.168.5.22; # ns2
192.168.5.0/24; # trusted networks
};
现在对 \options {..};\ 部分进行如下更改。
在以下示例中,我们通过注释选项“listen-on-v6”禁用了对 IPv6 的支持,启用并允许来自“受信任”ACL 的递归,并运行 BIND 服务在特定的\ns1\ IP 地址\192.168.5.21\。此外,我们正在禁用默认区域传输并将 BIND DNS 服务器的特定转发器定义为 Google 公共 DNS \8.8.8.8\ 和 \8.8.4.4 \”。
options {
directory "/var/cache/bind";
//listen-on-v6 { any; }; # disable bind on IPv6
recursion yes; # enables resursive queries
allow-recursion { trusted; }; # allows recursive queries from "trusted" - referred to ACL
listen-on { 192.168.5.21; }; # ns1 IP address
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
1.1.1.1;
};
};
完成后保存并关闭文件。
最后,运行以下命令来检查和验证配置文件 \/etc/bind/named.conf.options\。如果没有输出信息,那么你的配置是正确的。
sudo named-checkconf /etc/bind/named.conf.options
设置区域
在设置完 BIND master 的基本配置后,现在您将为您的域名设置区域。在下面的示例中,我们将使用域名“hwdomain.io”和名称服务器“ns1.hwdomain.io”和“ns2.hwdomain.io”。
使用以下命令编辑配置文件 \/etc/bind/named.local\。
sudo nano /etc/bind/named.conf.local
在此配置中,您将为您的域名定义两个区域文件,正向和反向区域。正向区域将包含您的域名将在哪里解析为 IP 地址的配置,而反向区域将 IP 地址转换为哪个域名。
在下面的示例中,我们将为域 \hwdomain.io\ 和反向区域定义正向区域 \/etc/bind/zones/db.hwdomain.io\ 和反向区域 \/etc/bind/zones/db.192.168.5\。
zone "hwdomain.io" {
type master;
file "/etc/bind/zones/db.hwdomain.io"; # zone file path
allow-transfer { 192.168.5.22; }; # ns2 IP address - secondary DNS
};
zone "5.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.5"; # subnet 192.168.5.0/24
allow-transfer { 192.168.5.22; }; # ns2 private IP address - secondary DNS
};
完成后保存并关闭文件。
接下来,运行以下命令以创建一个新目录 \/etc/bind/zones\,该目录将用于存储区域配置文件。
sudo mkdir -p /etc/bind/zones/
之后,复制默认转发区域配置\/etc/bind/zones/db.hwdomain.io\并使用以下命令编辑文件。
sudo cp /etc/bind/db.local /etc/bind/zones/db.hwdomain.io
sudo nano /etc/bind/zones/db.hwdomain.io
使用您的域名更改默认的 SOA 记录。此外,每次更改文件时,您都需要更改 SOA 记录中的“序列号”,并且这必须与辅助/从属 DNS 服务器的“序列号”相同。
然后,您可以为您的 DNS 服务器定义 NS 记录和 A 记录。在此示例中,名称服务器将是 \ns1.hwdomain.io\,其 A 记录 IP 地址为 \192.168.5.21\ 和 \ns2.hwdomain.io\,其 A 记录为辅助 DNS 服务器IP 地址“192.168.5.22”。
最后,您可以定义其他域名。在这个例子中,我们将为域 \hwdomain.io\ 定义一个 MX 记录(邮件处理程序),它将由邮件服务器 \mail.hwdomain.io\ 处理。此外,我们将定义域名\hwdomain.io\ 将解析到 IP 地址为 \192.168.5.100\ 的服务器,邮件服务器 \mail.hwdomain.io\ 的子域将解析为服务器 IP 地址为 \192.168.5.120 \”。
;
; BIND data file for the local loopback interface
;
$TTL 604800
@ IN SOA ns1.hwdomain.io. admin.hwdomain.io. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; NS records for name servers
IN NS ns1.hwdomain.io.
IN NS ns2.hwdomain.io.
; A records for name servers
ns1.hwdomain.io. IN A 192.168.5.21
ns2.hwdomain.io. IN A 192.168.5.22
; Mail handler or MX record for the domain hwdomain.io
hwdomain.io. IN MX 10 mail.hwdomain.io.
; A records for domain names
hwdomain.io. IN A 192.168.5.100
mail.hwdomain.io. IN A 192.168.5.120
完成后保存并关闭文件。

接下来,将默认反向区域配置文件复制到 \/etc/bind/zones/db.192.168.5\ 并使用以下命令编辑新文件。
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.5
sudo nano /etc/bind/zones/db.192.168.5
使用您的域名更改默认的 SOA 记录。另外,不要忘记更改 SOA 记录中的“序列号”。
为您的 DNS 服务器定义 NS 记录。这些是您在转发区中使用的相同名称服务器。
最后,为您的域名定义 PTR 记录。 PTR 记录上的数字是 IP 地址的最后一个数字。在此示例中,名称服务器“ns1.hwdomain.io”解析为 IP 地址“192.168.5.21”,因此现在 PTR 记录将为“21”,其他域名以此类推。
;
; BIND reverse data file for the local loopback interface
;
$TTL 604800
@ IN SOA ns1.hwdomain.io. admin.hwdomain.io. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; name servers - NS records
IN NS ns1.hwdomain.io.
IN NS ns2.hwdomain.io.
; PTR Records
21 IN PTR ns1.hwdomain.io. ; 192.168.5.21
22 IN PTR ns2.hwdomain.io. ; 192.168.5.22
100 IN PTR hwdomain.io. ; 192.168.5.100
120 IN PTR mail.hwdomain.io. ; 192.168.5.120
完成后保存并关闭文件。

现在运行以下命令来检查 BIND 配置并确保没有收到任何错误消息。
sudo named-checkconf
然后,运行以下命令来检查和验证您刚刚创建的每个区域文件,正向区域和反向区域配置文件。如果您的区域文件没有错误,您应该会看到诸如 \OK\ 之类的输出消息。如果没有错误,该命令将显示文件的哪一行导致了错误。
sudo named-checkzone hwdomain.io /etc/bind/zones/db.hwdomain.io
sudo named-checkzone 5.168.192.in-addr.arpa /etc/bind/zones/db.192.168.5

要完成 BIND Master 配置,请运行以下命令以重新启动 BIND 服务并将新更改应用于您所做的配置。
sudo systemctl restart named
设置 BIND 从站
现在您已经完成了主 BIND DNS 服务器的配置。是时候将 \ns2\ 服务器设置为 BIND DNS 服务器的辅助或从属服务器了。
主服务器存储区域文件,其中包含您域的 DNS 配置并处理递归或迭代查询。二级/从DNS服务器会暂时保存一段时间的DNS记录,这些DNS记录会自动从Master BIND服务器上调过来。
现在转到 \ns2\ 终端会话并开始将 \ns2\ 服务器配置为 BIND DNS 服务器的辅助/从属服务器。
运行以下命令编辑配置文件\/etc/bind/named.conf.options\
sudo nano /etc/bind/named.conf.options
在该行的顶部,添加以下配置。这将创建与主服务器上相同的 ACL(访问控制列表)。
acl "trusted" {
192.168.5.21; # ns1
192.168.5.22; # ns2 - or you can use localhost for ns2
192.168.5.0/24; # trusted networks
};
在 \options {...};\ 行中,您可以按如下方式更改配置。此配置与主 BIND DNS 服务器上的配置相同,唯一的区别是指定给“ns2”服务器 IP 地址的\listen-on\ 选项。
options {
directory "/var/cache/bind";
//listen-on-v6 { any; }; # disable bind on IPv6
recursion yes; # enables resursive queries
allow-recursion { trusted; }; # allows recursive queries from "trusted" - referred to ACL
listen-on { 192.168.5.22; }; # ns2 IP address
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
1.1.1.1;
};
};
完成后保存并关闭文件。
接下来,使用以下命令编辑配置文件 \/etc/bind/named.conf.local\ 以将 \ns2\ 服务器设置为辅助/从属 DNS 服务器。
sudo nano /etc/bind/named.conf.local
将以下配置添加到文件中。如您所见,我们定义了正向和反向区域,但使用“type slave”并定义 DNS 主服务器“192.168.5.21”。您不需要创建区域文件,因为 DNS 记录和数据将从 DNS 主服务器自动传输,并会在辅助/从 DNS 服务器上临时存储一段时间。
zone "hwdomain.io" {
type slave;
file "/etc/bind/zones/db.hwdomain.io";
masters { 192.168.5.21; }; # ns1 IP address - master DNS
};
zone "5.168.192.in-addr.arpa" {
type slave;
file "/etc/bind/zones/db.192.168.5";
masters { 192.168.5.21; }; # ns1 IP address - master DNS
};
完成后保存并关闭文件。
现在运行以下命令来检查和验证 BIND 配置并确保所有配置都是正确的。然后,您可以在“ns2”服务器上重新启动 BIND 服务“named”以应用新的更改。您现在已经完成了在 \ns2\ 服务器上作为 BIND DNS 服务器的辅助/从属服务器的配置。
sudo named-checkconf
sudo systemctl restart named

最后,运行以下命令来检查和验证 \ns2\ 服务器上的 BIND 服务 \named\。并确保 \named\ 服务正在运行。
sudo systemctl status named

从客户端计算机验证 DNS 服务器
在客户端机器上,有多种方法可以设置 DNS 解析器。您可以从 NetworkManager 或 netplan 配置中设置 DNS 解析器。但是,最简单的方法是通过文件 \/etc/resolv.conf\ 手动设置 DNS 解析器。这允许您为客户端计算机设置静态 DNS 解析器。
运行以下命令删除默认链接文件 \/etc/resolv.conf\ 并使用 nano 编辑器创建一个新文件。
sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf
将以下配置添加到文件中。在以下配置中,我们定义了三个不同的解析器,BIND DNS 主服务器、辅助 BIND DNS 服务器和公共 Google DNS 解析器。当客户机请求有关域名的信息时,将从上到下从 DNS 解析器获取该信息。
nameserver 192.168.5.21
nameserver 192.168.5.22
nameserver 8.8.8.8
search hwdomain.io
完成后保存并关闭文件。
接下来,运行以下命令将一些 DNS 实用程序安装到您的客户端计算机。在此示例中,客户端计算机是 Ubuntu 系统,因此我们使用 apt 命令安装 DNS 实用程序,如下所示。
sudo apt install dnsutils bind9-utils
在您的系统上安装 DNS 实用程序后,您可以开始从客户端计算机检查所有 DNS 记录。
运行下面的 dig 命令查看域名“hwdomain.io”和“mail.hwdomain.io”。你应该看到 \hwdomain.io\ 被解析为服务器 IP 地址 \192.168.5.100\,而子域 \mail.hwdomain.io\ 由服务器 IP 地址\处理192.168.5.120\。
dig hwdomain.io +short
dig hwdomain.io

dig mail.hwdomain.io +short
dig mail.hwdomain.io

接下来,运行如下的 dig 命令来检查域名 \hwdomain.io\ 的邮件处理程序。你应该得到 \mail.hwdomain.io\ 是处理主域 \hwdomain.io\ 的邮件的输出。
dig hwdomain.io MX +short
dig hwdomain.io MX

现在您还可以使用 nslookup 命令验证域名的反向区域配置。
运行下面的 nslookup 命令来检查和验证某些 IP 地址的反向 DNS。
现在您应该看到 IP 地址“192.168.5.21”被反向为名称服务器“ns1.hwdomain.io”,IP 地址“192.168.5.22”被反向为名称服务器“ns2” .hwdomain.io\”,IP地址“192.168.5.100”反向为主域名“hwdomain.io”,最后IP地址“192.168.5.120”反向为子域名-域 \mail.hwdomain.io。
nslookup 192.168.5.21
nslookup 192.168.5.22
nslookup 192.168.5.100
nslookup 192.168.5.120

结论
恭喜!通过本教程,您已经学习了在 Ubuntu 22.04 服务器上安装和配置 BIND DNS 服务器。您已经使用两个不同的 Ubuntu 服务器成功配置了主从 BIND DNS 服务器。此外,您还学习了用于检查和验证 DNS 记录和配置的 Dig 和 Nslookup 的基本命令。