![16.10 无法解析 DNS](https://linux22.com/image/1141452/16.10%20%E6%97%A0%E6%B3%95%E8%A7%A3%E6%9E%90%20DNS.png)
将我的 16.04 安装升级到 16.10 后,我遇到了 DNS 问题。
首先,我在连接 WiFi 时遇到了几次问题,而以太网上却可以。现在它似乎也可以在 WiFi 上工作。不知道为什么,也不知道这是否与我现在面临的问题有关:
使用以下方式连接到 VPN 主机时思科 Anyconnect VPN, 它在 '/etc/resolv.conf' 中添加一行. 我了解到 Ubuntu 现在正在使用systemd-resolve,手册页说有三种不同的模式来处理 /etc/resolv.conf。我的 /etc/resolv.conf 不是符号链接,并且没有将 127.0.0.53 列为 DNS 服务器,因此据我所知,systemd-resolved 应该“读取它以获取 DNS 配置数据”。但是,它似乎并不关心它。
挖
对我来说,奇怪的是dig host.customer.tld
,它返回了一个不错的答案,其中的答案部分显示了请求主机的 IP,并且它将 VPN 客户端添加到 /etc/resolv.conf 的 DNS 服务器称为服务器。当 VPN 连接被禁用时,我没有得到任何答案。即dig 读取 /etc/resolv.conf。
平
另一方面,浏览器无法访问 /etc/resolv.conf,无法解析主机名。顺便说一句,ping/curl 也是如此。
命令行
我发现了一个相关帖子并尝试跑步
nmcli device show <interfacename> | grep IP4.DNS
但它没有列出 cscotun0 设备的 dns。(不过 16.04 中也没有。)此外,nmcli 将我的 dhcp 服务器(我的路由器)列为我的 eth/wlan 连接的 IP4.DNS 主机。用于dig @192.168.0.1 xxx
任何公共域都可以正常工作。
配置
我的 /run/systemd/resolve/resolv.conf 中列出了一些其他 DNS 服务器:
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
# Too many DNS servers configured, the following entries may be ignored.
nameserver 2001:4860:4860::8844
我的 DHCP 服务器不提供这些服务。文件 /etc/systemd/resolved.conf 仅包含注释行,除了节标题:
[Resolve]
#DNS=
#FallbackDNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
手册页已解析的配置文件说
DNS= 用作系统 DNS 服务器的 IPv4 和 IPv6 地址的空格分隔列表。... 出于兼容性原因,如果未指定此设置,则将使用 /etc/resolv.conf 中列出的 DNS 服务器(如果该文件存在且其中配置了任何服务器)。此设置默认为空列表。
后备DNS= 用作后备 DNS 服务器的 IPv4 和 IPv6 地址的空格分隔列表。从 systemd-networkd.service(8) 获取的任何每链接 DNS 服务器都优先于此设置,通过上述 DNS= 或 /etc/resolv.conf 设置的任何服务器也优先于此设置。因此,只有在不知道其他 DNS 服务器信息的情况下才使用此设置。如果未提供此选项,已编译的列表而是使用 DNS 服务器。
在我看来,回退似乎最终出现在 /run/systemd/resolve/resolv.conf 中。
编辑:我不确定问题是什么,说实话我仍然不知道这是如何工作的,但至少事实证明解决方案在我的例子中,禁用该systemd-resolved
服务。我以为该服务是必需的,它是为所有本地应用程序提供 DNS 服务的组件,但显然还有其他东西在做这项工作。
答案1
当我遵循以下操作时,OpenVPN 连接期间的 DNS 行为立即得到改善一条建议在 ubuntuforums 上:
/etc/NetworkManager/NetworkManager.conf
使用 root 权限在编辑器中打开。- 删除(或用井号注释掉
#
)以下行:dns=dnsmasq
- 通过以下方式重新启动 NetworkManager
sudo service NetworkManager restart
答案2
我遇到过类似的问题,例如添加额外的 USB wifi 适配器。首先,我按照上述方法在网络管理器中禁用了 dnsmasq,然后停止了 dnsmasq(service dnsmasq stop)
我注意到,在 VPN 连接期间解析中断时,路由表看起来略有不同(路由命令的输出)。如果网关不工作,则网关的名称为 DD-WRT;如果网关工作,则网关的名称为“网关”。此命令的输出没有变化:
nmcli device show wlp1s0 | grep IP4.DNS
它一直显示我的路由器 IP。让它工作一段时间的解决方法是重新启动 systemd-resolvd:
sudo service systemd-resolved restart
由于 dnsmasq 不在考虑范围内,因此要么是 systemd-resolvd 导致了问题,要么是任何改变了路由表的因素导致了问题。
这是我看到的唯一区别:
ubuntu@ubuntu-Lenovo-Yoga-2-11:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 601 0 0
可以正常工作。当它不起作用时,如下所示:
ubuntu@ubuntu-Lenovo-Yoga-2-11:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default DD-WRT 0.0.0.0 UG 601 0 0 wlp1s0
VPN 线路上的名称也有同样的差异:
vpn-dns.name gateway 255.255.255.255 UGH 0 0 0 wlp1s0
谁知道什么会影响路由表?如果我们能识别出这一点,以便提交错误报告,那就太好了。我已经厌倦了追踪所有这些错误,但我希望修复它们,这样未来的用户和我们都会很高兴 :)。
[更新] 似乎停止 systemd-resolved 可能会解决这个问题,并且不会对其他内容产生负面影响。您可以尝试这样做,并告知它是否确实会破坏某些内容。我在调试中运行 systemd-resolvd 时看到它坏了:
Removing scope on link wlp1s0, protocol llmnr, family AF_INET
Removing scope on link wlp1s0, protocol llmnr, family AF_INET6
Removing scope on link *, protocol dns, family *
禁用方法:
sudo systemctl disable systemd-resolved.service
我根据建议更新了 Ubuntu 报告。[/update] 添加:注意:错误报告: https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624317 针对某些问题,已为 17.04 版提供补丁。请查看错误报告,如果可能,请测试该补丁。谢谢!
[更新]
请检查上面提到的错误报告,该问题似乎已在 17.10 中得到解决,并且使用一个简单的命令就可以禁用 DNS 泄漏。
[/更新]
答案3
遇到了同样的问题。我一定是用某个应用程序安装了 DNSmasq。只需删除 dnsmasq 即可解决问题。
sudo apt-get remove dnsmasq
从那时起,就不再出现断开连接或某些网站无法加载的情况(我遇到了加载 Gmail 的问题,即突然无法连接到 Gmail,但其他网站可以正常运行)。
答案4
编辑/etc/nsswitch.conf
和更改
hosts: files mdns4_minimal [NOTFOUND=return] dns
到
hosts: files dns mdns4_minimal [NOTFOUND=return]
编辑:
我有一段时间遇到同样的问题。我能够从 vpn 解析域名,但无法 ping 或 curl 这些域名,也无法在其他应用程序中使用它们。上面描述的更改帮我解决了这个问题。