诊断DNS查找问题 – 可能是错误的nsswitch.conf或其他问题

tl:dr我的ubuntu 16.04系统经常难以解决DNS,我的同事(主要是使用OSX / mac)没有问题。 我们都在同一个wifi网络中使用8.8.8.8。 有问题的域是经常创建或更新的AWS URL。 读过这个问题后 – 我担心我的nsswitch.conf没有意义。

/etc/nsswitch.conf包含以下行:

 hosts: files mdns4_minimal [NOTFOUND=return] dns 

那看起来不错吗? 如果我理解它会检查(按顺序)主机文件,mdns(本地dns?)然后在它检查dns服务器之前失败?

运行命令nmcli dev show | grep DNS nmcli dev show | grep DNS (来自这个问题 – 如何知道我正在使用的dns )返回以下内容:

 IP4.DNS[1]: 8.8.8.8 IP4.DNS[2]: 8.8.4.4 

我还检查了我的主机文件不包含任何意外的冲突条目。 我还应该在哪里寻找线索?

DNS查找一致地失败(即 – 在缓存值之前,它不是第一次尝试失败的慢速DNS服务器)。

nslookup失败的示例(域名已更改为删除工作域)如下所示:

 > nslookup example.somedomain.com: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: *** Can't find example.somedomain.com: No answer 

在线nslookup工具可以正确解析url,并显示生存时间为59秒,非常短但不疯狂。

编辑:在阅读了几个问题后,可以获得更多信息(我不太了解,但可能有助于专家):

上面的nslookup似乎使用nslookup使用本地DNS服务器( 127.0.1.1 ),但显式设置dns服务器正确解析了URL:

 > nslookup example.somedomain.com 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: example.somedomain.com Address: 10.116.[blah].[blah] Name: example.somedomain.com Address: 10.116.[blah].[blah] 

/etc/NetworkManager/NetworkManager.conf如下所示:

 [main] plugins=ifupdown,keyfile,ofono dns=dnsmasq [ifupdown] managed=false 

dnsmasq(在localhost,127.0.1.1上运行)提供的本地DNS缓存机制似乎存在问题。 不确定究竟是什么,但如果你禁用dnsmasq缓存并总是直接询问主(8.8.8.8)和辅助(8.8.4.4)DNS服务器,它可能会更好。

要禁用dnsmasq,请编辑文件/etc/NetworkManager/NetworkManager.conf并注释掉dns=dnsmasq如下面的配置:

 [main] plugins=ifupdown,keyfile,ofono #dns=dnsmasq 

希望它对你有帮助 :)