如何配置resolv.conf

如何配置resolv.conf

我最近遇到了一个明显的 DNS 解析问题,我已记录下来这里这促使我进一步调查 /etc/resolv.conf 。

在我的 Linux Mint 机器上,这是一个指向 /run/systemd/resolve/stub-resolv.conf 的符号链接,其内容为:

nameserver 127.0.0.53
options edns0 trust-ad

该文件实际上包含更多注释行,建议管理员不要更改其内容(我最终必须这样做才能解决我原来的问题)。

经过一番研究后,我想我明白了现代 Linux 系统使用了一个新的resolveconf软件包,尽管非常令人不安的sudo apt changelog resolvconf是,最新版本 1.82 是不稳定

我的理解是 127.0.0.53 正在将 DNS 请求重定向到resolveconf,后者将执行必要的查找。 有人可以确认一下吗?

这个帖子声称可以使用备用 DNS 服务器创建一个文件,然后通过sudo resolvconf -u更新 /etc/resolv.conf。嗯,在 1.82 版本中这个命令不存在。man resolvconf显示最接近的是resolvectl,但页面没有显示任何此类 -u 选项,也没有提及建议的基本文件。 事情又发生了变化吗?还是那篇文章中的评论根本就是错误的?

我的临时快捷方式是删除符号链接/etc/resolv.conf并创建一个具有相同名称和我选择的 DNS 服务器的文件,但我认为这完全使resolveconf 包变得无用,并可能产生其他负面影响。因此,我在完成我需要的操作后立即恢复我的黑客行为。与此同时,我正在寻求进一步的澄清,我希望有人能在这里阐明一些观点。

答案1

resolvconf曾经/现在是一个工具,旨在允许/etc/resolv.conf从多个源(例如 DHCP、系统管理员的静态配置、VPN 客户端、安装本地 DNS 服务器...)更新文件,其方式允许恢复每个源的设置,而无需对其他来源的干扰。它还允许为每个 DNS 配置源设置优先级,以便每当有超过三个候选 DNS 服务器时,只会选择前三个候选服务器。

(除非根据默认值调整 DNS 超时,否则在查询超时之前只能进行 3 次查询尝试,因此配置三个以上的 DNS 服务器/etc/resolv.conf通常没有用。)

然而,我认为 Ubuntu 和 Mint 已经迁移到使用systemd-resolved而不是经典的glibcDNS 解析器。如果hosts:in 中的行/etc/nsswitch.confhasresolve而不是 或 before ,则这是正确的dns。此配置将直接路由使用 glibc 的主机名解析 API 执行的任何 DNS 查询,而不进行任何systemd-resolved检查。 /etc/resolv.conf(从技术上讲,libnss_resolve.so使用 来代替libnss_dns.so。)

但是您的系统可能有一些不会使用的旧应用程序glibc,或者 DNS 诊断程序(nslookupdig),它们将实现自己的 DNS 查询,但会读取/etc/resolv.conf以找出要使用的默认 DNS 服务器。因此,systemd-resolved默认情况下将提供一个类似 DNS 服务器的接口,127.0.0.53:53并且(除非禁用此兼容性接口)将/etc/resolv.conf使用一条nameserver 127.0.0.53线路进行配置,因此即使是特殊情况也会最终使用systemd-resolved.

resolvectl主要是管理 的工具systemd-resolved,其功能是(经典libnss_dns.so解析器库 + resolvconf)的超集。该resolvectl命令与 具有一定的兼容性resolvconf,但兼容性并不完美:您可以通过等提供每个接口的 DNS 服务器配置,而不是修改 中的现有文件/etc/resolvconf/resolv.conf.d/或添加新文件然后[/var]/run/resolvconf/interface/运行​​。resolvconf -uresolvectl dns <interface name> 1.1.1.1 8.8.8.8resolvectl domain <interface name> domain.name.example

由于您似乎同时安装了resolvconfsystemd-resolved,因此您可能会遇到与 Debian 11 中相同的情况:man resolvconf实际上会显示 的手册页resolvectl,包括其兼容性说明。要查看实际的手册页resolvconf,您需要输入man 8 resolvconf.

输出中的“不稳定”sudo apt changelog resolvconf并不意味着该版本不稳定现在: 它的意思是做出改变时该版本在 Debian 中unstable。对于安全错误修复,您会看到<releasename>-security代替unstable.变更日志是单个软件包历史的一部分:当软件包从 Debian 不稳定版转移到测试版再转到稳定版时,或者从不稳定/测试版转移到 Ubuntu、Mint 或其他源自 Debian 的发行版时,它们不会被重写。

答案2

您可以尝试仅使用systemd-resolved

  • 将缺少的名称服务器添加到/etc/systemd/resolved.conf
  • 删除解析配置
  • 将符号链接保留在/run/systemd/resolve/stub-resolv.conf原处。

使用resolvectl status或检查您的 DNS 服务器systemd-resolve --status并使用 测试名称解析systemd-resolve NAME

相关内容