如果要做复杂的组网,可以用这个。 否则用/etc/hosts
作为只向。
参考文档
安装自己的 DNS 服务器,用来内部网络测试。为了也可以与 ApiSix 配合使用.
BIND(Berkeley Internet Name Domain)是一种开源 DNS 服务器软件,由于其稳定性和高质量而在 Unix / Linux 上广泛使用。
安装 BIND
sudo apt updatesudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host
检查版本
named -v
示例输出:
BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
要检查版本号和内部版本选项,请运行
named -V
默认情况下,BIND 在安装后自动启动。您可以通过以下方式检查其状态:
systemctl status named
如果它没有运行,则从以下方面开始它:
sudo systemctl start named
并在启动时启用开机启动:
sudo systemctl enable named
BIND 服务器将以用户身份运行,该用户在安装期间创建,并侦听 TCP 和 UDP 端口 53,如运行以下命令所示:bind
sudo ss -lnptu | grep named
通常,DNS 查询会发送到 UDP 端口 53。TCP 端口 53 适用于大于 512 字节的响应大小。
绑定守护程序称为named。
例如,我们可以检查 BIND 名称服务器的状态。
sudo rndc status
/etc/bind/
是包含 BIND 配置的目录。
开箱即用,Ubuntu 上的 BIND9 服务器仅为本地主机和本地网络客户端提供递归服务。外部查询将被拒绝。因此,您不必编辑配置文件。为了让您熟悉 BIND 9 配置,我将向您展示如何启用递归服务。
主 BIND 配置文件从其他 3 个文件中获取设置。/etc/bind/named.conf
要启用递归服务,请编辑第一个文件。
sudo vim /etc/bind/named.conf.options
在子句中,添加以下行。将语句allow-recursion
中的 IP 地址替换为您自己的本地网络地址。
// 出于安全原因,对客户端隐藏版本号。version "not currently available";// 可选-BIND默认行为为递归recursion yes;// 仅向受信任的客户端提供递归服务allow-recursion { 127.0.0.1; 192.168.31.0/24;};// 启用查询日志querylog yes;
保存并关闭文件。然后测试刚才写的配置文件语法是否正确。
sudo named-checkconf
如果测试成功(没有提示),则重新启动 BIND9。
sudo systemctl restart named
如果您在 BIND 服务器上运行了 UFW 防火墙,则需要打开端口 53 以允许 LAN 客户端发送 DNS 查询。
sudo ufw allow in from 192.168.31.0/24 to any port 53
192.168.31.0/24 就代表了 192.168.31.0 至 192.168.31.255
这将向专用网络打开 TCP 和 UDP 端口 24。
从同一局域网内的另一台计算机192.168.31.181
,我们可以运行以下命令来查询 baidu.com 的 A 记录。将 192.168.21.212 替换为 BIND 机器上的 IP 地址。
dig A baidu.com @192.168.31.212
现在,在 BIND 机器上,使用以下命令检查查询日志。
sudo journalctl -eu named
这将显示 bind9 服务单元的最新日志消息。我在日志中找到了以下行,该行指示已从 58461 的端口 192.168.31.181 收到 baidu.com A 记录的 DNS 查询。
6月 10 22:10:01 fanhl-2021 named[19690]: client @0x7fde1c01d650 192.168.31.181#58461 (baidu.com): query: baidu.com IN A +E(0)K (192.168.31.212)
为什么在 Ubuntu 22.04/20.04 服务器上设置默认 DNS 解析器呢? 因为很多种情况下,ubuntu 会自己安装一个 dns 解析服务器,例如使用 dig,可以看到127.0.0.5
不是127.0.0.1
使用此命令可以看到默认递归解析器。
resolvectl status
提示:如果上述命令没有立即退出,您可以通过按 Q 键使其退出。
不同的机器,看到的内容可能不一样,如果默认的是127.0.0.5
,那么Current DNS Server
是空。这一步的结果可以忽略,因为关键的解决方法在后面
如您所见,BIND 不是默认值。如果在 BIND 服务器上运行以下命令,
dig A baidu.com
在绑定日志中找不到此 DNS 查询。相反,您需要明确告诉 dig 使用 BIND。
dig A baidu.com @127.0.0.1
要将 BIND 设置为默认解析程序,请打开 systemd 解析的配置文件。
sudo vim /etc/systemd/resolved.conf
在该部分中,添加以下行。这将为您的服务器设置一个全局 DNS 服务器。[Resolve]
DNS=127.0.0.1
保存并关闭文件。然后重新启动 systemd 解析的服务。
sudo systemctl restart systemd-resolved
现在运行以下命令以检查默认 DNS 解析程序。
systemd-resolve --status
现在执行 DNS 查询而不指定 .127.0.0.1
dig A baidu.com
如果看到的是下图的127.0.0.5
而不是127.0.0.1
那么要进行如下处理了。
# This is the network config written by 'subiquity'network:ethernets:enp0s3:dhcp4: falseaddresses: [192.168.31.181/24]gateway4: 192.168.31.1nameservers:addresses: [192.168.31.212, 114.114.114.114, 192.168.31.1]version: 2
然后进行修改
sudo netplan apply
假如要设置ubuntu01 指向 192.168.31.181
建立一个文件夹
cd /etc/bindsudo mkdir my
复制db.local
到my/db.ubuntu01
cp db.local ./my/db.ubuntu01
修改db.ubuntu01
sudo vim ./my/db.ubuntu01
修改的内容如下
;; BIND data file for local loopback interface;$TTL 604800@ IN SOA localhost. root.localhost. (2 ; Serial604800 ; Refresh86400 ; Retry2419200 ; Expire604800 ) ; Negative Cache TTL;@ IN NS localhost.@ IN A 192.168.31.181
修改named.conf.local
sudo vim named.conf.local
结果如下:
//// Do any local configuration here//// Consider adding the 1918 zones here, if they are not used in your// organization//include "/etc/bind/zones.rfc1918";zone "ubuntu01" {type master;file "/etc/bind/my/db.ubuntu01";};
保存并关闭文件。然后测试刚才写的配置文件语法是否正确。
sudo named-checkconf
如果测试成功(没有提示),则重新启动 BIND9。
sudo systemctl restart named
检查/etc/resolv.conf
cat /etc/resolv.conf
如您所见,127.0.0.1 (BIND) 是默认的 DNS 解析器。如果看到不同的值,则表示 BIND 仍然不是默认的 DNS 解析程序。可以使用 resolveconf 实用程序将 BIND 设置为默认解析程序。
安装软件包resolvconf
sudo apt install resolvconf
然后启动该服务。named-resolvconf
sudo systemctl start named-resolvconf.service
在引导时启用自动启动。
sudo systemctl enable named-resolvconf.service
现在再次检查该文件。BIND 现在应该是 Ubuntu 服务器上的默认 DNS 解析器。/etc/resolv.conf
cat /etc/resolv.conf