名称解析:主机命令有效,但不能 ping

名称解析:主机命令有效,但不能 ping

这个问题有很多重复,但没有一个适用于我的设置。这让我很困惑,因为我的设置相对简单:

设置

mdns我没有/etc/nsswitch.conf

# cat /etc/nsswitch.conf  | grep hosts
hosts:          files dns

我的/etc/hostsubuntu 是纯净的。

我有一个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,libc62.21-0ubuntu4.1)。 但在装有 的 Ubuntu 12.04.1 上失败libc6 2.15-0ubuntu10.10

答案1

我自己找到了一个解决方案,这样ping它就可以再次正常工作了。但没有答案说明为什么这在计算机上不起作用。所以我不会接受这个解决方案,但这可能会帮助遇到同样问题的人:

此行为是由于 中的行在两个版本之间domain .以某种方式表现不一样所致。/etc/resolv.conflibc6

我可以通过强制进行不存在的本地搜索(虽然不是很优雅,但有效)来实现我所寻找的内容,方法是用domain .替换search doesnotexist

然后神奇的是,一切都按预期工作,但我收到了之前发送的额外虚假 DNS 请求dnsmasq(它首先尝试解析www.doesnotexist失败的请求,然后尝试www解析存在的请求。

我的配置中需要此设置,因为wwwwww.myactualdomainname指向不同的 IP。

相关内容