我花了几个小时试图理解这一点,我全新安装了 POP OS 19.10,看看这是否可以解决问题,但没有。
这似乎在我的 Mac Book、Windows 机器和我家里的 ubuntu 服务器机器上运行良好,但由于某些奇怪的原因,在我的流行操作系统安装中,内部名称解析只能在启动后运行大约 10 分钟,然后停止。
我删除了交换机配置中的最小 dns 4 条目...在 resolv.conf 上乱七八糟,但无济于事。大约十分钟后,它就停止工作了。
我有一个 mikrotik 路由器,我在其中为本地环境设置了一些静态 dns 条目。
mikrotik 通过 DHCP 分发所有三个解析器地址。经过一番研究后,我查看了systemd-resolve --status
cmd 的结果,发现有时主 DNS 会被辅助 DNS 替换。这似乎导致内部决议被忽略
Current DNS Server: 154.0.1.10
DNS Servers: 192.168.88.1
154.0.1.1
154.0.1.10
似乎 mikrotik DNS 查找间歇性超时导致此问题。超时后,systemd-resolved 会切换到后备 dns 条目之一,并且不再尝试主条目。
不知道如何解决这个问题。任何帮助将不胜感激
答案1
一切都按照您的定义进行。您误解的是 DNS 解析器如何用于解析地址,因此配置未按您的预期工作。
所有三个 DNS 解析器地址 ( 192.168.88.1
、154.0.1.1
、154.0.1.10
) 均通过 DHCP 从 Mikrotik 路由器分发。这告诉每个客户端任何(响应)解析器都能够处理任何 DNS 查找。
当您尝试查找仅知道如何解析的内部 LAN 地址时192.168.88.1
,理论上您只有三分之一的机会获得该解析;其余服务器将响应NXDOMAIN
。
将客户端查询分配给 DNS 服务器的具体过程是特定于实现的。某些实现可能会采用“第一个”DNS 服务器,并且更喜欢使用它。其他实现可能会采用任何一个可用的集合并使用它。其他实现可能会随机或循环分配查询。
这里的解决方案只是提供192.168.88.1
LAN DNS 服务器,并确保它知道如何在本地无法解析查询时将查询转发到上游。
如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器解析本地域并使用远程 DNS 服务器解析远程域可能对实际配置有帮助systemd-resolved
。
答案2
resolv.conf 是否被覆盖?
如果 POP 操作系统使用 systemd-networkd,您将需要编辑网络配置/etc/systemd/network/*.network
并指定静态 DNS 条目。
[Match]
Name=eth0
[Network]
DHCP=yes
DNS=1.1.1.1
如果 POP OS 未使用 systemd-networkd 并且 DHCPD 正在覆盖它,您可以编辑 dhcpd.conf 并添加nohook resolv.conf
以防止其被覆盖。