我升级到了 Ubuntu 17.04,现在似乎有一个新的 DNS 解析器机制在 Ubuntu 16.10 中首次引入。
我现在有 50% 的时间会遇到 DNS 查找失败的情况。 所有其他调用 nslookup 失败,一半的调用解析正常,另一半给出以下信息:
watch -n 1 nslookup google.com
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find google.com: SERVFAIL
据我所知,该 DNS 服务器 IP 地址现在用于表示 systemd-resolved,它会进行某种元查找以避免较慢的 DNS 查询(或其他...)。我上周在升级到 17.04 的两台机器上看到了完全相同的行为。
知道这里的问题是什么吗?以及解决该问题的正确方法是什么?
升级之前一切正常(从 16.04 或 16.10 开始,抱歉,我不记得是哪个了)。我以为 17.04 是一个 LTS 版本,但现在我发现我操之过急,它要到 4 月才会稳定。所以...我来了。
还值得注意的是...浏览器似乎没有出现问题,但 nslookup、ping、git 等却出现了。
更新
在我的特定情况下,我的 /etc/hosts 文件是一个符号链接(因为我是 stow 的狂热用户)。出于某种原因,Systemd 讨厌这种情况,并将其视为“权限失败”。一旦我用实际文件替换符号链接,systemd 就会停止故障。
答案1
自 2017-04-18 起,Ubuntu 17.04 无法解析具有 DNSSEC 支持的 DNS 服务器。使用此守护程序禁用 DNSSEC:
sudo mkdir -p /etc/systemd/resolved.conf.d
printf "[Resolve]\nDNSSEC=no\n" | sudo tee /etc/systemd/resolved.conf.d/no-dnssec.conf
如果您弄乱了 resolvconf,可以选择重新配置它(对“准备 /etc/resolve.conf 进行动态更新?”回答是):
sudo dpkg-reconfigure resolvconf
重新启动 systemd-resolved:
sudo systemctl restart systemd-resolved
您的 DNS 应该开始工作了。您可以通过尝试systemd-resolve www.google.com
并查看响应来检查。
答案2
我一直在 systemd-resolved 和手动 /etc/resolv.conf 管理之间来回切换,但发现 systemd DNS 解析器机制尚不稳定。
显然至少有一个libnss 错误在 Ubuntu 16.10 中,显然在 17.04 中也是如此。自从 Ubuntu 16.10 启用 systemd-resolved 以来,很多人都遇到了 DNS 问题,这里是一项分析,这里这是另一个人的解决方法。在我手动用 google 的 DNS 服务器覆盖 /etc/resolv.conf 之前,这些方法都不起作用。
nameserver 8.8.8.8 << or another if you don't trust google
nameserver 8.8.4.4
这是一个完全有效的解决方案如果您不需要动态 DNS 配置。只需确保停止并禁用 systemd-resolved:
sudo systemctl disable systemd-resolved.service
sudo service systemd-resolved stop
答案3
Ubuntu 17.04 和其他发行版正在采用 systemd,其中包括 systemd-resolved,这会要求用户接受相当严格的 DNS 解析。
- 正如 SjB 回答中提到的,DNSSEC 支持可能会导致问题。
- systemd-resolved 会 ping 所有 DNS 解析器,以便使用最快的解析器。这可能会导致更复杂的环境中的 VPN 等出现问题。
- DNS 服务器证书已经验证,如果我的时钟有偏差,就会出现错误。
我认为这不一定是坏的变化,只是变化很大。随着我了解更多信息,我会尝试更新和扩展此答案。
答案4
只需添加名称服务器 /etc/systemd/resolved.conf DNS=194.109.xxx.xxx (在您的路由器上,外部名称服务器)
systemctl 重新启动 systemd-resolved
无需将 rand 从 3 更改为 2,无需将 dnssec 设置更改为关闭