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

  • 技术文档
  • 2022.03.23
  • 浏览:776

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

  • 全解析程序(与存根解析程序相反)
  • DNS递归器
  • 递归DNS服务器
  • 递归解析器

还要注意,DNS服务器也可以称为名称服务器。DNS解析器的示例有8.8.8.8(谷歌公共DNS服务器)和1.1.1.1(Cloudflare公共DNS服务器)。你电脑上的操作系统也有一个解析器,不过由于功能有限,它被称为存根解析器。存根解析器是终端用户计算机上的一个小型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解析器也是一个很好的做法。

如果你不喜欢你的互联网浏览历史记录存储在第三方服务器上,你可能还想运行自己的DNS解析器。

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

请注意,在Debian上安装软件时,您需要拥有root权限。可以在命令开头添加sudo,或者使用su-command切换到root用户。

在Debian 10 Buster上安装BIND9

BIND(Berkeley Internet Name Domain)是一款开源DNS服务器软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初由加州大学伯克利分校(UC Berkeley)开发,后来在1994年被转移到互联网系统联盟(Internet Systems Consortium,Inc.)进行开发。

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

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

检查版本信息。

sudo named -v

样本输出:

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

要检查版本号和生成选项,请运行

sudo named -V

debian 10 buster bind9

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

systemctl status bind9

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

如果它没有运行,那么从以下内容开始:

sudo systemctl start bind9

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

sudo systemctl enable bind9

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

sudo netstat -lnptu | grep named

debian 10 bind dns resolver

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

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

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

sudo rndc status

debian 10 buster bind caching dns server

本地DNS解析程序的配置

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

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

Debian 10上的bind9软件包没有附带db。根文件,它现在使用位于/usr/share/dns/root的根提示文件。提示。DNS解析程序使用根提示文件来查询根DNS服务器。有13组根DNS服务器,来自a.root-servers。net到m.root服务器。网

Debian上的BIND9服务器开箱即用,只为本地主机和本地网络客户端提供递归服务。外界的质疑将被拒绝。所以你不必编辑配置文件。为了让您熟悉BIND 9配置,我将向您展示如何启用递归服务。

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

  • /etc/bind/named。形态选项
  • /etc/bind/named。conf.local
  • /etc/bind/named。conf.default-zones

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

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

在options子句中,添加以下行。将allow recursion语句中的IP地址替换为您自己的本地网络地址。

 // 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;

install bind9 dns recursor debian 10 buster

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

sudo named-checkconf

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

sudo systemctl restart bind9

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

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

这将打开专用网络192.168.0.0/24的TCP和UDP端口53。然后从同一局域网内的另一台计算机上,我们可以运行以下命令来查询google的A记录。通用域名格式。用绑定解析程序的IP地址替换192.168.0.102。

dig A google.com @192.168.0.102

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

sudo journalctl -eu bind9

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

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服务器上设置默认DNS解析程序

在绑定服务器上,我们需要将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。服务,这将帮助我们在Debian服务器上将BIND设置为默认DNS解析程序。默认情况下,这个服务是禁用的,我们需要启动它并在启动时启用自动启动。

sudo systemctl start bind9-resolvconf  sudo systemctl enable bind9-resolvconf

现在可以检查/etc/resolv的内容。又来了。如您所见,127.0.0.1(BIND)现在是Debian 10 Buster上的默认DNS解析程序。

change name server on debian 10 buster

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

sudo apt install resolvconf  sudo systemctl restart bind9-resolvconf

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

现在,您可以在局域网上配置其他计算机,将绑定服务器用作DNS解析程序。对于Windows和MacOS计算机,您可以在谷歌上搜索以了解如何设置默认DNS解析程序。在这里,我将向您展示如何在Linux桌面计算机上设置DNS解析器。以下方法适用于任何使用NetworkManager的Linux发行版。

单击Linux桌面上的Network Manager图标以查找编辑连接。(在某些Linux发行版上,需要右键单击网络管理器。)

network-manager-change-DNS-server

然后选择当前连接并单击cog图标以编辑此连接。

dns server bind9

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

bind local dns server lan

保存更改。然后重新启动NetworkManager,使更改生效。

sudo systemctl restart NetworkManager

重新连接后,再次单击网络管理器图标并选择连接信息。您可以看到您的Linux桌面计算机现在正在使用绑定DNS服务器。

change dns server on linux

如何在绑定中禁用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

要在Ubuntu上的BIND中禁用IPv6,只需打开/etc/default/bind9文件

sudo nano /etc/default/bind9

在选项中添加-4。

OPTIONS="-u bind -4"

保存并关闭文件。然后重启BIND,就完成了。

sudo systemctl restart bind9

绑定服务失败

如果绑定解析程序无法回答DNS查询(SERVFAIL),并且在绑定日志中看到以下行。

dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out

这可能是因为您的服务器没有可用的IPv6连接。这发生在我的一台服务器上。我以为IPv6连接正常工作,但由于我不知道的原因,它突然中断了。一旦我在BIND中禁用了IPv6,DNS解析将再次工作。

绑定自动重启

如果由于任何原因导致绑定进程被终止,则需要运行以下命令来重新启动它。

sudo systemctl restart bind9

我们不需要手动输入这个命令,而是可以通过编辑指定的。服务系统服务单位。为了覆盖默认的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

保存并关闭文件。然后重新加载系统D。

sudo systemctl daemon-reload

要检查这是否有效,请使用以下方法杀死Bind:

sudo pkill named

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

systemctl status bind9

绑定最大缓存大小

BIND可以在服务器上缓存DNS结果,以加快客户端的DNS查找。BIND假设您正在运行一个专用的DNS解析程序,即没有其他web服务在同一台主机上运行,因此默认缓存大小(由最大缓存大小定义)设置为总RAM的90%,以实现最佳性能。绑定开始时,可以在绑定日志(sudo journalctl-eu bind9)中看到下面这样的一行。

none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)

请注意,BIND不会立即使用90%的RAM。如果只有几个DNS请求,BIND只使用少量RAM,因为缓存的DNS结果不多。如果有大量DNS请求,那么它将使用大量RAM来存储DNS缓存。

如果RAM有限,您可能不希望BIND将90%的RAM用于缓存。编辑绑定配置文件/etc/BIND/named。形态选项。

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

在options子句中添加以下指令。将50%更改为您的首选值。

max-cache-size 50%;

重新启动BIND以使更改生效。

sudo systemctl restart bind9

结论

我希望本教程能帮助您使用BIND9在Debian 10 Buster上设置本地DNS解析器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?