16.10无法解析DNS
将我的16.04安装升级到16.10后,我遇到了DNS问题。
首先,当连接到WiFi时,我遇到了几次问题,而它在以太网上工作。 现在它似乎也适用于WiFi。 不知道为什么,如果它与我现在遇到的问题有任何关系:
使用Cisco Anyconnect VPN连接到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
,用ANSWER SECTION返回一个很好的答案,显示所请求主机的ip,它指的是由vpn客户端添加到/etc/resolv.conf的dns服务器作为SERVER。 当vpn连接被禁用时,我得不到答案。 即挖掘/etc/resolv.conf 。
平
另一方面,浏览器无法访问/etc/resolv.conf,并且无法解析主机名。 顺便说一下,ping / curl都没有。
nmcli
我发现了一个相关的post ,并试着跑步
nmcli device show | 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
resolved.conf的手册页说明了这一点
DNS =用作系统DNS服务器的以空格分隔的IPv4和IPv6地址列表。 …出于兼容性原因,如果未指定此设置,则使用/etc/resolv.conf中列出的DNS服务器,如果该文件存在且在其中配置了任何服务器。 此设置默认为空列表。
FallbackDNS =以空格分隔的IPv4和IPv6地址列表,用作备用DNS服务器。 从systemd-networkd.service(8)获得的任何每链路DNS服务器优先于此设置,通过DNS = above或/etc/resolv.conf设置的任何服务器也是如此。 因此,仅在未知其他DNS服务器信息时才使用此设置。 如果未给出此选项,则使用已编译的DNS服务器列表 。
在我的案例中,似乎回退最终会出现在/run/systemd/resolve/resolv.conf中。
编辑:我不确定是什么问题,说实话我仍然不知道这是如何工作的,但至少我发现在我的情况下解决方案是禁用systemd-resolved
服务。 我认为该服务是必需的,它是为所有本地应用程序提供DNS服务的组件,但显然还有其他东西可以完成这项工作。
我遇到了类似的问题,例如添加了额外的USB wifi加密狗。 首先我如上所述在networkmanager中禁用了dnsmasq,我停止了dnsmasq(服务dnsmasq停止)
我注意到在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泄漏。
[/更新]
当我在ubuntuforums上提出建议时,OpenVPN连接期间的DNS行为立即得到改善:
- 在具有root权限的编辑器中打开
/etc/NetworkManager/NetworkManager.conf
。 - 删除(或使用井号
#
注释掉)读取dns=dnsmasq
- 通过
sudo service NetworkManager restart
陷入同样的问题。 不知何故,我必须在某些应用程序中安装DNSmasq。 简单地删除dnsmasq解决了我的问题。
sudo apt-get remove dnsmasq
从那时起,不再断开连接或某些网站无法加载(我在加载gmail时遇到了问题,即突然之间它无法连接到gmail,尽管其他网站都有效)。
编辑/etc/nsswitch.conf
并进行更改
hosts: files mdns4_minimal [NOTFOUND=return] dns
至
hosts: files dns mdns4_minimal [NOTFOUND=return]
编辑:
很长一段时间我都遇到了同样的问题。 我能够从vpn解析域名但我无法ping或curl这些域名或在其他应用程序中使用它们。 上面描述的变化为我解决了它。