在CentOS 8 / RHEL 8上设置您自己的BIND9 DNS解析器

本教程将向您展示如何使用广泛使用的BIND9 DNS软件在CentOS 8 / RHEL 8上设置本地DNS解析器。 DNS解析器有很多同义词,下面列出其中一些。 他们都指同一件事。

  • 完整解析器(与存根解析器相反)
  • DNS递归
  • 递归DNS服务器
  • 递归解析器

另外,请注意,DNS服务器也可以称为名称服务器。 DNS解析器的示例是8.8.8.8(Google公共DNS服务器)和1.1.1.1(Cloudflare公共DNS服务器)。 您的PC上的操作系统也具有解析器,尽管由于其功能有限而被称为存根解析器。 存根解析器是最终用户计算机上的小型DNS客户端,它从Firefox等应用程序接收DNS请求,并将请求转发到递归解析器。 几乎每个解析器都可以缓存DNS响应以提高性能,因此它们也称为缓存DNS服务器。

为什么要运行自己的DNS解析器

通常,您的计算机或路由器使用ISP的DNS解析器查询域名以获取IP地址。 运行您自己的本地DNS解析器可以加快DNS查找的速度,因为

  1. 本地DNS解析器仅侦听您的DNS请求,而不会回答其他人的DNS请求,因此您更有可能直接从解析器的缓存中获取DNS响应。
  2. 消除了计算机和DNS解析器之间的网络延迟(几乎为零),因此DNS查询可以更快地发送到根DNS服务器。

如果运行邮件服务器并使用DNS黑名单(DNSBL)阻止垃圾邮件,则建议您运行本地DNS解析器以加快DNS查找速度。 如果您在VPS(虚拟专用服务器)上运行自己的VPN服务器,那么在同一VPS上安装DNS解析器也是一个好习惯。

如果您不希望Internet浏览历史记录存储在第三方服务器上,则可能还需要运行自己的DNS解析器。

如果您拥有一个网站并希望自己的DNS服务器处理域名的名称解析而不是使用域注册商的DNS服务器,那么您将需要设置与DNS解析器不同的权威DNS服务器。 BIND可以同时充当权威DNS服务器和DNS解析器,但是 最好是将两个角色分开放在不同的盒子上。 本教程说明了如何设置本地DNS解析器,并且由于它将在本地主机/本地网络上使用,因此不需要加密(TLS上的DNS或HTTPS上的DNS)。 在以后的文章中将讨论设置DoT或DoH服务器。

请注意,在CentOS / RHEL上安装软件时,您需要具有root特权。 你可以加 须藤 在命令开头或使用 su - 命令切换到root用户。

在CentOS 8 / RHEL 8上安装BIND9

BIND(伯克利Internet名称域)是一种开源DNS服务器软件,由于其稳定性和高质量而广泛用于Unix / Linux。 它最初由加州大学伯克利分校(UC Berkeley)开发,并于1994年后期移至Internet Systems Consortium,Inc(ISC)。

运行以下命令,从默认存储库在CentOS 8 / RHEL 8上安装BIND 9。 BIND 9是当前版本,BIND 10是无效项目。

sudo dnf update
sudo dnf install bind

检查版本信息。

named -v

样本输出:

BIND 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 (Extended Support Version) <id:7107deb>

要检查版本号和构建选项,请运行

named -V

现在,我们可以从以下内容开始BIND 9:

sudo systemctl start named

并在启动时启用自动启动:

sudo systemctl enable named

您可以通过以下方式查看其状态:

systemctl status named

提示:如果上述命令没有立即退出,请按Q。

BIND服务器将以 named 用户,它是在安装过程中创建的,并且侦听TCP和UDP端口53,如运行以下命令所示:

sudo dnf install net-tools
sudo netstat -lnptu | grep named

centos 8 rhel 8绑定dns解析器

通常,DNS查询发送到UDP端口53。TCP端口53用于大于512字节的响应。

BIND守护程序称为 命名。 (守护程序是在后台运行的软件。) named 二进制文件由 bind 包,还有另一个重要的二进制文件: rndc,远程名称守护程序控制器。 的 rndc 二进制文件用于重新加载/停止和控制BIND守护程序的其他方面。 通过TCP端口953进行通信。

例如,我们可以检查BIND名称服务器的状态。

sudo rndc status

centos 8缓存dns服务器

本地DNS解析器的配置

CentOS 8 / RHEL 8上的命名守护程序在以下位置使用了根提示文件: /var/named/named.ca。 的 根提示 DNS解析器使用该文件查询根DNS服务器。 共有13组根DNS服务器, a.root-servers.netm.root-servers.net

开箱即用,CentOS / RHEL上的BIND9服务器仅为本地主机提供递归服务。 外部查询将被拒绝。 编辑BIND主配置文件 /etc/named.conf

sudo nano /etc/named.conf

在里面 options 子句,您可以找到以下两行。

listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };

这使得 named 仅在localhost上侦听。 如果要允许同一网络中的客户端查询域名,请注释掉这两行。 (在每行的开头添加双斜杠)

// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };

找到以下行。

allow-query { localhost; };

添加客户端可以从中查询域名的网络范围,如下所示。

allow-query { localhost; 192.168.0.0/24; 10.10.10.0/24; };

以下行启用了递归服务,这很好。

recursion yes;

我还建议您在 options 条款。

 // hide version number from clients for security reasons.
 version "not currently available";

 // enable the query log
 querylog yes;

centos 8绑定启用递归服务

保存并关闭文件。 然后测试配置文件语法。

sudo named-checkconf

如果测试成功(通过静默输出指示),则重新启动 named

sudo systemctl restart named

如果在BIND服务器上运行防火墙,则需要打开端口53,以允许LAN客户端发送DNS查询。

sudo firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="udp" port="53" accept"

重新加载防火墙以使更改生效。

sudo systemctl reload firewalld

这将打开UDP端口53到专用网络192.168.0.0/24。 然后,从同一局域网中的另一台计算机上,我们可以运行以下命令来查询google.com的A记录。 将192.168.0.101替换为BIND解析器的IP地址。

dig A google.com @192.168.0.101

注意:在CentOS / RHEL上,您需要安装 bind-utils 包才能使用 dig 命令。

sudo dnf install bind-utils

现在,在BIND解析器上,使用以下命令检查查询日志。

sudo journalctl -eu named

这将显示指定服务单元的最新日志消息。 我可以在日志中找到以下行,这表明从IP地址192.168.0.103的端口57806收到了google.com的A记录的DNS查询。

named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.101)

在CentOS 8 / RHEL 8服务器上设置默认DNS解析器

在BIND服务器上,我们需要将127.0.0.1设置为默认DNS解析器。 您可以使用以下命令在CentOS 8 / RHEL 8上检查当前的DNS解析器。

cat /etc/resolv.conf

样本输出:

# Generated by NetworkManager
nameserver 192.168.0.1
nameserver 8.8.8.8

如果您在BIND服务器上运行以下命令,

dig A facebook.com

在BIND日志中找不到此DNS查询。 相反,您需要明确告知dig使用BIND。

dig A facebook.com @127.0.0.1

要将BIND设置为默认解析器,首先需要使用以下命令查找主网络接口的名称。

ip addr

我的是 ens3。 接下来,运行以下命令以编辑网络接口配置文件。 更换 ens3 使用您自己的接口名称。 如果BIND解析器在使用Wi-Fi连接的笔记本电脑上运行,则您需要编辑 ifcfg-wireless-network-name 文件。

sudo nano /etc/sysconfig/network-scripts/ifcfg-ens3

找出 DNS1 参数并将其值更改为 127.0.0.1。 请注意,如果此文件中其他参数的值用双引号引起来,则还需要包装 127.0.0.1 用双引号引起来。

DNS1="127.0.0.1"

如果找不到 DNS1 参数,然后在底部添加以上行。 保存并关闭文件。 然后重新启动NetworkManager,以使更改生效。

sudo systemctl restart NetworkManager

您现在可以检查的内容 /etc/resolv.conf 再次。 如您所见,127.0.0.1(BIND)现在是CentOS 8 / RHEL 8上的默认DNS解析器。

在centos 8上更改名称服务器

在客户端计算机上设置默认DNS解析器

现在,您可以在LAN上配置其他计算,以将BIND服务器用作DNS解析器。 对于Windows和MacOS计算机,您可以在Google上搜索以了解如何设置默认的DNS解析器。 在这里,我将向您展示如何在Linux台式机上设置DNS解析器。 以下方法适用于使用NetworkManager的任何Linux发行版。

点击Linux桌面上的网络管理器图标,找到 Edit connections。 (在某些Linux发行版上,您需要右键单击“网络管理器”。)

网络管理员更改DNS服务器

然后选择当前连接,然后单击齿轮图标以编辑此连接。

DNS服务器bind9

选择 IPv4设置 选项卡,更改方法从 Automatic(DHCP)Automatic(DHCP) addresses only,这将阻止您的系统从路由器获取DNS服务器地址。 然后指定一个DNS服务器。 在这里,我在局域网中输入BIND服务器的IP地址。

绑定本地DNS服务器局域网

保存您的更改。 然后重新启动NetworkManager以使更改生效。

sudo systemctl restart NetworkManager

重新连接后,再次单击网络管理器图标,然后选择 connection information。 您可以看到您的Linux台式计算机现在正在使用BIND DNS服务器。

在Linux上更改dns服务器

如何在BIND中禁用IPv6

如果您的网络中未使用IPv6,则最好在BIND中关闭IPv6,否则在BIND日志中将有很多关于IPv6的错误,如下所示。

network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53

要在CentOS / RHEL的BIND中禁用IPv6,只需打开/ etc / sysconfig / named文件

sudo nano /etc/sysconfig/named

并在文件末尾添加以下行。

OPTIONS="-4"

保存并关闭文件。 然后重新启动named,您就完成了。

sudo systemctl restart named

现在运行以下命令。 您可以看到BIND不再侦听IPv6地址。

sudo netstat -lnptu | grep named

命名为自动重启

如果由于某种原因您的命名进程被杀死,则需要运行以下命令来重新启动它。

sudo systemctl restart named

无需手动输入此命令,我们可以通过编辑 named.service 系统服务单元。 要覆盖默认的systemd服务配置,我们创建一个单独的目录。

sudo mkdir -p /etc/systemd/system/named.service.d/

然后在此目录下创建一个文件。

sudo nano /etc/systemd/system/named.service.d/restart.conf

在文件中添加以下行,这将使Named在检测到故障后5秒钟自动重新启动。

[Service]
Restart=always
RestartSec=5s

保存并关闭文件。 然后重新加载systemd。

sudo systemctl daemon-reload

要检查是否可行,请杀死Named with:

sudo pkill named

然后检查命名状态。 您会发现Named自动重新启动。

systemctl status named

结论

我希望本教程可以帮助您在具有BIND9的CentOS 8 / RHEL 8上设置本地DNS解析器。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar