DNS 查找通常无需担心。有时你应该!
如果您的家庭或办公室 ISP 的名称服务器速度较慢,或者您的服务器执行大量搜索,则需要本地缓存 DNS 服务器。
缓存 DNS 服务器有何用处?
缓存 DNS 服务器的工作原理是执行系统发出的每个 DNS 查询并将结果存储或缓存在内存中。如果每次向域发出重复请求时将结果缓存在内存中,则几乎会立即从内存中提供结果。
这可能看起来并不重要,但如果您的 ISP 的 DNS 服务器需要很长时间才能响应,则可能会显着减慢您的 Internet 浏览速度。例如,美国新闻频道 MSNBC 需要访问 100 多个唯一域名才能正确加载其主页。如果您的 ISP 名称服务器的响应时间比平时长哪怕十分之一秒,也意味着您的页面加载时间将延长 10 秒。
本地缓存 DNS 服务器不仅在您的家庭或办公室中有用,而且在您的服务器上也有用。如果您的应用程序执行大量 DNS 查找(例如,运行反垃圾邮件软件的繁忙电子邮件服务器),您将从本地缓存 DNS 服务器获得速度提升。
最后, systemd-resolved支持最新的安全 DNS 标准 DNSSEC 和 DNSoverTLS ( DoT) 。这些可以帮助您保持安全并维护您的在线隐私。
您使用哪个本地缓存 DNS?
您在本指南中启用和配置的本地缓存 DNS 服务器由 systemd 解析。该工具是 systemd 系统管理工具套件的一部分。如果您的系统使用 systemd,并且几乎所有主要 Linux 发行版都使用 systemd,则 systemd-resolved 已安装但未运行。大多数发行版不使用 systemd-resolved,即使它存在。
systemd-resolved工作原理是运行一个小型本地缓存 DNS 服务器,您将其配置为在启动时启动。接下来,重新配置系统的其余部分,以将 DNS 查询发送到本地缓存 systemd 解析的 DNS。

如何检查我是否已经在使用 systemd-resolved?
某些 Linux 发行版(例如 Ubuntu 19.04)已经默认使用 systemd-resolved。
如果您已经在运行systemd-resolved ,则无需启用它或配置系统即可使用它。但是,网络管理工具(例如 NetworkManager)可能会忽略系统的网络配置,因此您可能需要验证其配置是否正确。
在继续下一部分之前,请通过运行以下命令检查 systemd-resolved 是否已在运行:
$ resolvectl status如果您看到以下消息:
$ resolvectl status
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.由于您没有运行 systemd-resolved,因此您应该继续下一部分。如果您看到以类似以下内容开头的输出:
Global
LLMNR setting: yes
MulticastDNS setting: yes
DNSOverTLS setting: opportunistic
DNSSEC setting: allow-downgrade
DNSSEC supported: no
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1
1.0.0.1在这种情况下,您已经运行了 systemd-resolved,无需启用它。

启用和配置 systemd-resolved
无需安装 systemd-resolved,它已包含在 systemd 中。您所需要做的就是启动它并运行 DNS 缓存服务器,以便它在启动时启动。
启用sudo以允许非 root 用户启动 systemd-resolved 后,从 shell 提示符运行以下命令:
$ sudo systemctl start systemd-resolved.service然后运行以下命令在系统启动时启动 systemd-resolved:
$ sudo systemctl enable systemd-resolved.service剩下的最后一个配置项是设置一个 DNS 服务器,systemd-resolved 将查询解析的域。这里有很多选项,但以下对都是免费的、快速的,并且都支持 DNSSEC 和 DoT。
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
- 1.0.0.1
在您喜欢的文本编辑器中打开主 systemd 解析的配置文件。我这里用的是nano。
$ sudo nano /etc/systemd/resolved.conf编辑行首
#DNS=确保列出了 IP 地址对。此处显示了 Cloudflare DNS 服务器。
DNS=1.1.1.1 1.0.0.1保存并退出文本编辑器。接下来,您需要重新启动 systemd-resolved 才能开始使用名称服务器。
$ sudo systemctl restart systemd-resolved.servicesystemd-resolved 现已运行,一旦您配置系统并开始使用它,您就可以开始加速和保护您的 DNS 查询。
配置您的系统以使用 systemd-resolved
有多种方法可以配置您的系统以使用 systemd-resolved,但我们将讨论涵盖大多数用例的两种配置。第一个是推荐配置,第二个是兼容配置。两者之间的区别在于/etc/resolv.conf文件的管理方式。
/etc/resolv.conf 文件保存系统上的程序查询的名称服务器的 IP 地址。需要执行 DNS 查询的程序会参考此文件来确定应联系哪个服务器来执行查询。
systemd-resolved 的两种模式重点关注如何管理该文件的内容。在推荐模式下,/etc/resolv.conf 成为 /run/systemd/resolve/stub-resolv.conf 的符号链接。该文件由 systemd-resolved 管理,它管理系统上所有其他程序的 DNS 配置信息。
当其他程序尝试管理 /etc/resolv.conf 的内容时,这可能会导致问题。兼容模式保留 /etc/resolv.conf 并允许其他程序管理它,而 systemd-resolved 使用其 DNS 信息。在此模式下,管理 /etc/resolv.conf 的其他程序必须配置为将 127.0.0.53 设置为 /etc/resolv.conf 的系统名称服务器。
设置推荐模式
设置为此模式时, systemd-resolved将/etc/resolv.conf作为 /run/systemd/resolve/stub-resolv.conf 的符号链接进行管理。这不会自动配置,必须手动完成。
首先,删除或重命名现有的 /etc/resolv.conf 文件。重命名是比删除更好的选择,因为它具有相同的效果,但如果需要原始信息,您可以随时参考原始文件。这里我们将使用mv命令重命名/etc/resolv.conf。
$ sudo mv /etc/resolv.conf /etc/resolv.conf.original接下来,创建一个符号链接。
$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf最后,重新启动systemd-resolved。
$ sudo systemctl restart systemd-resolved.service设置兼容模式
在这种模式下,由systemd-resolved启动的本地名称服务器必须由系统服务查询。在文本编辑器中打开 /etc/resolv.conf。这里使用的是nano编辑器。
$ sudo nano /etc/resolv.conf删除所有以“nameserver”开头的行并添加以下行:
nameserver 127.0.0.53此编辑可能会被管理 /etc/resolv.conf 的其他程序更改。在这种情况下,您必须将程序配置为使用此名称服务器,以使您的编辑永久有效。

systemd 解决了调试
进行这些更改后,可能很难准确地发现您的系统如何执行 DNS 查询。观察正在发生的情况的最有效方法是将 systemd-resolved 置于调试模式并观察日志文件。
systemd-resolved 是一个 systemd 服务。这意味着您可以通过创建包含调试设置的嵌入式服务文件轻松进入调试模式。以下命令将在正确的位置创建正确的文件。
$ sudo systemctl edit systemd-resolved.service将以下行粘贴到编辑器中,保存并退出。
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug成功保存并退出后,systemd 解析的服务会自动重新加载。
打开同一服务器的第二个终端并跟踪 systemd 解析服务的日志日志。
$ sudo journalctl -f -u systemd-resolved以“使用 DNS 服务器”开头的行,例如:
Using DNS server 1.1.1.1 for transaction 19995.准确显示哪个 DNS 服务器用于 DNS 查询。在本例中,查询位于 1.1.1.1 的 Cloudflare DNS 服务器。
“缓存未命中”行表示域名未缓存。例如:
Cache miss for example.com IN SOA以“Positive Cash Hit”开头的行,例如
Positive cache hit for example.com IN A指示 systemd-resolved 之前查询过该域,并且响应是从本地内存中的缓存提供的。
一旦 systemd-resolved 完成其工作,您应该禁用调试模式。这是因为在繁忙的系统上会创建非常大的日志文件。您可以通过运行以下命令来禁用调试日志记录:
$ sudo systemctl edit systemd-resolved.service删除您添加的两行,保存并退出编辑器。

使用安全 DNS 查询
systemd-resolved 是目前为数不多的同时支持 DNSSEC 和 DNSoverTLS 的 DNS 服务器之一。这两者都有助于确保您收到真实的 DNS 信息 (DNSSEC),并确保没有人可以窥探您通过互联网传递的 DNS 流量。 (点)。
通过在文本编辑器中打开 systemd-resolved 的主配置文件可以轻松启用这些选项。
$ sudo nano /etc/systemd/resolved.conf然后编辑该文件,设置以下两行:
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic保存,退出编辑器,然后重新加载 systemd-resolved。
$ sudo systemctl restart systemd-resolved.service只要您配置的 DNS 服务器支持 DNSSEC 和 DoT,您的 DNS 查询就会受到保护。 Google 和 Cloudflare 的公共 DNS 服务器都支持这些协议。
结论
您的系统现在已配置为快速有效地执行 DNS 查询,即使您的 ISP 的 DNS 服务器响应速度没有您想要的快。此外,我们使用最新的安全 DNS 协议来保护您的 DNS 查询,让您的数字生活更安全。
如果您是 Linux 爱好者并想了解更多信息,请查看这个精彩的在线课程。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

