为什么nslookup在ping时不使用mdns?


9

在dnsmasq.conf中:

address=/local/127.0.0.1

在resolv.conf中:

# Generated by NetworkManager
domain example.com
search example.com
nameserver 127.0.0.1
nameserver 10.66.127.17
nameserver 10.68.5.26

我可以使用nslookup:

# nslookup www.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   www.local
Address: 127.0.0.1

但我不能使用ping:

# ping www.local
ping: unknown host www.local

我使用tcpdump来捕获ping lo.local时的lo,没有数据包,而像

# tcpdump -i em1 -n | grep local

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:14:38.189335 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:39.190700 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:41.192979 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)

从物理界面出现。

这意味着ping正在使用Mdns,但是为什么nslookup不使用mdns?当mdns不返回有用信息时,为什么ping不使用普通dns?

谢谢。

Answers:


8

ping使用glibc的名称解析系统,称为名称服务开关。这使用/etc/nsswitch.conf文件来知道在哪里寻找以便将名称解析为IP。该hosts:文件中的行表示每种服务的优先顺序。例如,files代表本地/etc/hosts文件,dns使用该/etc/resolv.conf文件联系DNS服务器,并mdns使用mdns。

但是,nslookup不要使用它。它直接与中指定的DNS服务器通信/etc/resolv.conf,因此不能使用mdns

但是我不能回答你的最后一个问题。如果同时使用in mdnsdnsin /etc/nsswitch.conf,则即使使用mdnsfirst,也应首先尝试使用来解析名称mdns,然后使用no回答dns


感谢@priernov,我也找到了我最后一个答案的答案,即nsswitch.conf中的“主机:文件mdns4_minimal [NOTFOUND = return] dns myhostname”行,如果找不到mdns ip,它将返回。
dspjm 2014年

1
实际上,可以通过指定服务器224.0.0.251和端口5353来说服nslookup解析.local地址:进入nslookup交互模式,发出“ server 224.0.0.251”,“ set port = 5353”,然后解析主机名,例如“ Microknoppix.local”。(在2个debian系统上进行了测试。在Microsoft提供的Windows 10 nslookup.exe上不起作用,从isc.org/downloads/bind下载的那一个起作用
NameOfTheRose

顺便说一句,getent hosts foo.local如果您只是想查找IP地址(无论它是mDNS还是DNS),请使用。与命令不同nslookup,该getent命令使用GNU C库的nsswitch,因此它始终有效。
hackerb9

3

这很简单- nslookup就是专门一个DNS工具-它的一部分的BIND工具。

它根本不了解库调用之类的其他名称服务,例如gethostbyname由于nslookup不使用gethostbyname等等而可以通过NSS访问。

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.