Bind9

如果要做复杂的组网,可以用这个。 否则用/etc/hosts作为只向。

参考文档

安装自己的 DNS 服务器,用来内部网络测试。为了也可以与 ApiSix 配合使用.

BIND(Berkeley Internet Name Domain)是一种开源 DNS 服务器软件,由于其稳定性和高质量而在 Unix / Linux 上广泛使用。

1、安装

安装 BIND

sudo apt update
sudo 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

2、配置本地 DNS 服务

/etc/bind/是包含 BIND 配置的目录。

  • named.conf:主配置文件,包括其他三个文件的配置。
  • db.127:本地主机 IPv4 反向映射区域文件。
  • db.local:本地主机转发 IPv4 和 IPv6 映射区域文件。
  • db.empty:一个空区域文件

开箱即用,Ubuntu 上的 BIND9 服务器仅为本地主机和本地网络客户端提供递归服务。外部查询将被拒绝。因此,您不必编辑配置文件。为了让您熟悉 BIND 9 配置,我将向您展示如何启用递归服务。

主 BIND 配置文件从其他 3 个文件中获取设置。/etc/bind/named.conf

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

要启用递归服务,请编辑第一个文件。

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)

3、将默认 DNS 服务设置成 BIND

为什么在 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那么要进行如下处理了。

4、设置每台机器的 DNS 地址

4.1 通过界面设置

  • 设置了多个 nds 服务
    • 127.0.0.1 是本地 bind9 服务
    • 192.168.31.1 是我买的小米路由器,上面有一个 dns 服务器
    • 114.114.114.114:是全国通用 DNS 地址

4.2 通过/etc/netplan 设置

# This is the network config written by 'subiquity'
network:
ethernets:
enp0s3:
dhcp4: false
addresses: [192.168.31.181/24]
gateway4: 192.168.31.1
nameservers:
addresses: [192.168.31.212, 114.114.114.114, 192.168.31.1]
version: 2

然后进行修改

sudo netplan apply

5、设置域名地址

假如要设置ubuntu01 指向 192.168.31.181

建立一个文件夹

cd /etc/bind
sudo mkdir my

复制db.localmy/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 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; 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

6、故障排除

6.1 默认 DNS 不是 127.0.0.1

检查/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