使用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查找,因为
- 本地DNS解析程序只侦听您的DNS请求,不响应其他人的DNS请求,因此您直接从解析程序上的缓存获得DNS响应的可能性要高得多。
- 您的计算机和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
默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态:
systemctl status bind9
提示:如果上述命令没有立即退出,请按Q。
如果它没有运行,那么从以下内容开始:
sudo systemctl start bind9
并在启动时启用自动启动:
sudo systemctl enable bind9
BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示:
sudo netstat -lnptu | grep named
通常DNS查询被发送到UDP端口53。TCP端口53用于大小大于512字节的响应。
绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。
例如,我们可以检查绑定名称服务器的状态。
sudo rndc status
本地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;
保存并关闭文件。然后测试配置文件语法。
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解析程序。
如果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发行版上,需要右键单击网络管理器。)
然后选择当前连接并单击cog图标以编辑此连接。
选择IPv4设置选项卡,将方法从自动(DHCP)更改为仅自动(DHCP)地址,这将阻止Ubuntu系统从路由器获取DNS服务器地址。然后指定一个DNS服务器。在这里,我在局域网中输入绑定服务器的IP地址。
保存更改。然后重新启动NetworkManager,使更改生效。
sudo systemctl restart NetworkManager
重新连接后,再次单击网络管理器图标并选择连接信息。您可以看到您的Linux桌面计算机现在正在使用绑定DNS服务器。
如何在绑定中禁用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解析器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?