使用BIND9在Debian 10 Buster上设置您自己的DNS解析器

本教程将向您展示如何使用广泛使用的BIND9 DNS软件在Debian 10 Buster上设置本地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服务器。

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

在Debian 10 Buster上安装BIND9

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

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

sudo apt update
sudo apt install bind9 bind9utils bind9-doc bind9-host

检查版本信息。

sudo named -v

样本输出:

BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c>

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

sudo named -V

默认情况下,BIND在安装后自动启动。 您可以通过以下方式查看其状态:

systemctl status bind9

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

如果它没有运行,请使用以下命令启动它:

sudo systemctl start bind9

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

sudo systemctl enable bind9

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

sudo netstat -lnptu | grep named

Debian 10绑定DNS解析器

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

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

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

sudo rndc status

Debian 10 Buster绑定缓存dns服务器

本地DNS解析器的配置

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

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

Debian 10上的bind9软件包不附带 db.root 文件,现在使用根目录提示文件位于 /usr/share/dns/root.hints。 的 根提示 DNS解析器使用该文件查询根DNS服务器。 共有13组根DNS服务器, a.root-servers.netm.root-servers.net

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

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

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

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

sudo nano /etc/bind/named.conf.options

在里面 options 子句,添加以下行。 替换IP地址 allow-recursion 带有您自己的本地网络地址的声明。

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

 // optional - BIND default behavior is recursion
 recursion yes;

 // provide recursion service to trusted clients only
 allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; };

 // enable the query log
 querylog yes;

安装bind9 dns recursor debian 10 buster

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

sudo named-checkconf

如果测试成功(由静默输出指示),则重新启动BIND9。

sudo systemctl restart bind9

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

sudo ufw allow in from 192.168.0.0/24 to any port 53

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

dig A google.com @192.168.0.102

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

sudo journalctl -eu bind9

这将显示bind9服务单元的最新日志消息。 我可以在日志中找到以下行,这表明从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.102)

在Debian 10 Buster Server上设置默认DNS解析器

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

cat /etc/resolv.conf

样本输出:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#      DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 2001:19f0:300:1704::6
nameserver 108.61.10.10

Debian 10上的bind9软件包附带一个Systemd服务单元 bind9-resolvconf.service,这将帮助我们将BIND设置为Debian服务器上的默认DNS解析器。 默认情况下,此服务是禁用的,我们需要启动它并在启动时启用自动启动。

sudo systemctl start bind9-resolvconf

sudo systemctl enable bind9-resolvconf

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

在debian 10 buster上更改名称服务器

如果您的DNS解析器不是127.0.0.1,则可能是您的系统没有 resolvconf 二进制文件,导致 bind9-resolvconf 服务失败。 您需要安装 resolvconf 打包并重新启动服务。

sudo apt install resolvconf

sudo systemctl restart bind9-resolvconf

在客户端计算机上设置默认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,这将阻止您的Ubuntu系统从路由器获取DNS服务器地址。 然后指定一个DNS服务器。 在这里,我在局域网中输入BIND服务器的IP地址。

绑定本地DNS服务器局域网

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

sudo systemctl restart NetworkManager

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

在Linux上更改dns服务器

绑定自动重启

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

sudo systemctl restart bind9

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

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

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

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

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

[Service]
Restart=always
RestartSec=5s

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

sudo systemctl daemon-reload

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

sudo pkill named

然后检查绑定状态。 您会发现绑定自动重启。

systemctl status bind9

结论

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

Sidebar