我的问题本质上与为什么 systemd-resolved 不使用我的本地 DNS 服务器?,但我正在寻找一种不同的答案。这个基本问题已经被问过很多次了,但到目前为止我找到的答案始终是“这就是如何阻止 systemd 执行其操作,并允许您手动执行它,这将使它像预期的。”。
我更好奇是否有可能让 systemd 实际使用本地(主)dns,并且仅在主 DNS 失败时才转到第二、第三等 dns?
它的行为有点像假设所有 DNS 都是平等的,因此它没有使用 dhcp 提供的第一个 DNS,而是选择了另一个它喜欢的 DNS,并坚持使用该 DNS。
这打破了组织为其私有 LAN 名称使用本地 DNS 的常见配置。 systemd 的解析器无法处理如此常见的配置,这似乎非常奇怪——太奇怪了,我不相信情况是这样。
不仅仅是禁用它——有没有办法让它明白它应该使用 dhcp 回复中给它的第一个 dns?
答案1
不,而且它很可能默认使用您的本地 DNS。 Systemd 会按照配置的 DNS 顺序进行查询。如果您通过 dhcp 从网络配置了一个,它将使用该配置。然而,Systemd 认为所有 DNS 服务器都是平等的,因此如果出现问题,将会失败到列表中的下一个服务器,并且不会从顶部重试,这与 resolv.conf 行为不同,resolv.conf 行为不记得失败的服务器并按顺序重试时间。
从我在大多数情况下看到的情况来看,这是一个问题,因为人们将一台服务器放在顶部,只为他们的本地域提供服务,并且在 google.com 上失败,并且他们的本地服务器不再被尝试。您所链接的问题似乎就是这种情况。
你可以做:
resolvectl query -i ethX <domain>
检查该接口上的 dns 服务器是否正确响应。 -i 将使用在该接口上配置的 DNS 服务器,这可以从状态中看到。
如果您遇到特定问题,包括特定的resolvctl 设置的输出将会有所帮助。我写这篇文章的笔记本电脑正在使用解析,无需修改,并且从我的路由器的 DNS 服务器进行解析。