avahi:ping无法解析主机名,但是nslookup可以


41

ping告诉我它无法解析URL中的某些主机名(“ ping:未知主机domain.company.local”),但是当我在命令行中使用hostnslookup在同一台计算机上时,解析度很好(即快速可靠) )。

是什么原因造成的?

更多测试:Firefox,wget并且ping有相同的问题。对IP地址执行Ping操作。

操作系统:Linux(Ubuntu 13.04)

编辑我的/etc/resolv.conf读物:

nameserver 127.0.1.1
search domain.company.local

netstat 报告:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               

因此该端口上正在运行某些内容(nslookup还报告该端口127.0.1.1用作DNS服务器)。

没有/etc/*inetd.conf,所以我不确定哪个应用程序服务于此端口。

似乎dnsmasq使用了:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces
   --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1
   --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec
   --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
   --conf-dir=/etc/NetworkManager/dnsmasq.d

所有配置文件和文件夹均为空。由于nslookup说它使用127.0.1.1#53我的猜测是,dnsmasq即使没有配置也可以工作。但是如何知道要查询哪个父DNS?

EDIT2dnsmasq由harrymc建议禁用并没有帮助。所以我跑strace ping了给我这个奇怪的输出(只是有趣的部分):

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

因此ping看起来/etc/hosts有意义。然后加载和mmap()s /lib/libnss_mdns4_minimal.so.2也有意义。

但随后它与avahi对话!?

这导致我转到此论坛帖子:ping不发出dns请求

我的/etc/nsswitch.conf也包含此行:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

如果我ping是工作地址​​,则可以看到该进程也正在加载,/lib/libnss_mdns4_minimal.so.2但是它通过端口53进行了DNS查询。

因此,我现在的猜测是/lib/libnss_mdns4_minimal.so.2某种程度上注意到IP地址以.local而不是以结尾,.com然后[NOTFOUND=return]被触发。

我该如何解决?


你有什么/etc/resolv.conf
2014年

哪个是正确的,哪个是不正确的?如若主机名解析或不应该吗?您没有告诉我们您遇到两个完全不同的问题中的哪一个。(如果它应该解决,请尽可能详细地解释它应该如何解决以及为什么要解决,因为这很可能导致对为什么不解决的解释。)
David Schwartz 2014年

...以及您对Chrome,Firefox和的HTTP代理设置是什么wget
JdeBP 2014年

@DavidSchwartz:我希望解决方案能够奏效。我不明白该如何nslookuphost可以解析该名称,而系统上的其他任何内容都无法解析。
2014年

1
如果您不通过计算机与其他设备或VM进行连接共享,则可以在网络管理器中关闭dnsmasq。编辑/etc/NetworkManager/NetworkManager.conf并注释dns=dnsmasq行(在其前面加上#),然后执行sudo restart network-manager。这将关闭本地解析器。(来源
harrymc

Answers:


33

本博客文章中所述,您需要编辑/etc/avahi/avahi-daemon.conf

[server]
domain-name=.alocal

这会将守护程序绑定到域,.alocal而不是默认绑定到域.local

并使用以下命令重新启动守护程序:

sudo service avahi-daemon restart

博客文章中的注释:

您可能需要刷新DNS,mDNS和解析器缓存,以及重新启动Web浏览器以清除其内部缓存。

在那之后,pingnslookup开始认同。

感谢harrymc让我走上正确的道路。


1
另请注意,ping将使用nss,nslookup不会。(它使用lwres并绑定,直接与解析器对话)
Ricky Beam

对我来说,正确配置而不是在本地禁用它更有意义。
凯基

@ otakun85:那我该怎么办?
亚伦·迪古拉

@AaronDigulla您已配置它,而当前投票最高的答案已将其禁用为本地。
凯基

2
这真太了不起了。非常感谢。在找到这篇文章之前,与它进行了数小时的战斗。
fpghost

11

修改/etc/nsswitch.conf并替换为:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

通过:

hosts:          files dns

为我工作。


2
这项工作需要AVAHI服务
亚伦·迪古拉

8

简单的事情:编辑 /etc/default/avahi-daemon

更改行:

AVAHI_DAEMON_DETECT_LOCAL=1

AVAHI_DAEMON_DETECT_LOCAL=0

重新启动avahi-daemon,或将其杀死。

我不喜欢Avahi,也不使用其任何功能。如果要真正禁用avahi,请修改/etc/init/avahi-daemon.conf,类似于以下内容:

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus

2
我不在乎您是否不应该在这里说“谢谢”评论,我只是想表达我的感谢,以及您为我节省了多少时间和精力。非常感谢!我正在使用公司VPN在购物中心进行一些紧急工作,尽管我想尝试一切,但仍无法使我们的某些站点正常工作。我当然无法自己弄清楚这一点,这是肯定的……
eresonance 2014年

7

看来.local地址无法在ubuntu中访问。

一个解决方案是编辑/etc/nsswitch.conf和更改此行:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

这样 :

hosts:          files dns

这种为我工作。在我的情况下,hosts行具有“文件解析[!UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns”并将其更改为“ files mdns4_minimal [NOTFOUND = return] dns”的功能。感谢您指出正确方向的指针。
Andorbal

尝试了上述其他答案,禁用了avahi(这是一种缓解方法),仍然存在问题。这个答案为我解决了。谢谢
Adam Plocher

3

如果您不通过计算机与其他设备或VM进行连接共享,则可以在网络管理器中关闭dnsmasq。

编辑/etc/NetworkManager/NetworkManager.conf并注释该行(在其前面加上#):

dns=dnsmasq

然后做 :

sudo restart network-manager

这将关闭本地解析器。

来源:Ubuntu 12.04中的DNS


2

因此,我现在的猜测是/lib/libnss_mdns4_minimal.so.2某种程度上注意到IP地址以.local结尾,而不是以.com结尾,然后触发了[NOTFOUND = return]。

我该如何解决?

很好的猜测,但其他答案过于夸张。一种简单的解决方案是删除确实触发的位,即删除just [NOTFOUND=return]

删除它意味着如果mdns4_minimalreturn NOTFOUND,则使用解析程序列表中的下一个条目。这是正常现象;[NOTFOUND=return]是一项优化措施,可以使未知名称更快消失,但它假定所有.local名称都在mDNS中。


1

我有一个有趣的案例,带有相同的症状(Ping,Mount等。不起作用,但是主机,挖工作)。检查/etc/resolv.conf文件的权限。以我为例,有人对其进行了更改,但我无权读取它(尽管cat /etc/resolv.conf编辑文件效果很好)。

无论如何,strace显示:

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

结果,它试图从resolv.conf文件中查询本地主机(127.0.0.1)而不是名称服务器的IP:

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

ping时,tcpdump没有显示任何DNS流量。权限修复后,所有人都可以使用:

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

另一个问题可能是文件的扩展属性或任何其他访问问题。在那种情况下,只需删除/etc/resolv.conf文件并从头开始重新创建即可。


我有一台服务器的另一个问题是所有根文件夹都丢失了x标志,因此许多二进制文件无法正常运行。解决方法是chmod +x /*
Silex

0

另一个原因是的格式/etc/hosts。确保IP和主机名之间没有空格,而是使用TAB。更改为TAB后,可以通过ping解析主机名。

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

它可能是一个答案,但是它的格式为注释...
Francisco Tapia

-1

在Ubuntu上设置avahi-daemon,以便您可以ubuntu.local从主机操作系统访问主机名

sudo apt-get install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan


抱歉,这个答案与问题无关。我们不问如何安装Avahi,问题是Avahi在安装后如何破坏DNS查找。
亚伦·迪古拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.