这个问题有很多重复,但没有一个适用于我的设置。这让我很困惑,因为我的设置相对简单:
设置
mdns
我没有/etc/nsswitch.conf
# cat /etc/nsswitch.conf | grep hosts
hosts: files dns
我的/etc/hosts
ubuntu 是纯净的。
我有一个dnsmasq
端口 127.0.0.1:53,但这并不重要,因为我认为tcpdump
当解析实际失败时实际上不会向 dnsmasq 发送任何查询。
问题大概出在这里:
# cat /etc/resolv.conf
nameserver 127.0.0.1
domain .
对我而言很domain .
重要,因为我不想www.localdomain
在进行名称解析时寻找www
。
此精确设置正在另一台计算机上运行。
实际问题
# host www
172.128.0.170
# ping www
ping: unknown host www
我必须得有这个:
使用
host
:我lo
在端口 53 上的设备上获取数据包,要求解析。因此,我在日志文件dnsmasq
中获取一行... 等等...dnsmasq
与
ping
:我没有在lo
设备上收到任何数据包,因此显然 dnsmasq 日志中没有行。
任何不带点的新主机名(故意无效的主机名)都会产生相同的行为(不发送带有 的数据包ping
,发送带有 的数据包host
)。当然,这两个解析都会失败。
任何带有点的新主机名都可以正常工作。
这在另一台没有相同服务器的服务器上有效libc6
(Ubuntu 15.10,libc6
是2.21-0ubuntu4.1
)。 但在装有 的 Ubuntu 12.04.1 上失败libc6
2.15-0ubuntu10.10
。
答案1
我自己找到了一个解决方案,这样ping
它就可以再次正常工作了。但没有答案说明为什么这在计算机上不起作用。所以我不会接受这个解决方案,但这可能会帮助遇到同样问题的人:
此行为是由于 中的行在两个版本之间domain .
以某种方式表现不一样所致。/etc/resolv.conf
libc6
我可以通过强制进行不存在的本地搜索(虽然不是很优雅,但有效)来实现我所寻找的内容,方法是用domain .
替换search doesnotexist
。
然后神奇的是,一切都按预期工作,但我收到了之前发送的额外虚假 DNS 请求dnsmasq
(它首先尝试解析www.doesnotexist
失败的请求,然后尝试www
解析存在的请求。
我的配置中需要此设置,因为www
和www.myactualdomainname
指向不同的 IP。