Networking

為什麼 nslookup 在 ping 時不使用 mdns?

  • March 6, 2014

在 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 www.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?

謝謝。

ping使用 glibc 的名稱解析系統,稱為 Name Service Switch。這使用該/etc/nsswitch.conf文件來知道在哪裡查找以便將名稱解析為 IP。此文件中的hosts:行表示每個服務的優先順序。例如,files表示本地/etc/hosts文件,dns使用該/etc/resolv.conf文件聯繫 DNS 伺服器,並mdns使用 mdns。

但是,nslookup不使用它。它直接與 中指定的 DNS 伺服器對話/etc/resolv.conf,因此無法使用mdns.

但我無法回答你的最後一個問題。如果你有mdnsdns/etc/nsswitch.conf即使mdns第一個,它應該首先嘗試用 解析名稱mdns,然後如果沒有答案使用dns

引用自:https://serverfault.com/questions/579967