在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来捕获lo,同时ping www.local,没有数据包,而数据包像
# 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? 为什么ping当mdns不返回有用的falue时不会使用普通的dns?
谢谢。
ping使用glibc的名字parsing系统,叫做Name Service Switch。 这使用/etc/nsswitch.conf文件来知道在哪里查找以便将名称parsing为IP。 该文件中的hosts:行表示每个服务的优先顺序。 例如, files表示本地/etc/hosts文件, dns使用/etc/resolv.conf文件联系DNS服务器,而mdns使用mdns。
但是, nslookup不使用它。 它直接与/etc/resolv.conf指定的DNS服务器通信,所以不能使用mdns 。
但是我不能回答你最后的问题。 如果你在/etc/nsswitch.conf有mdns和dns ,那么即使先使用mdns ,也应该首先用mdns来parsing名字,如果没有答案使用dns 。
这非常简单 – nslookup 特别是一个DNS工具 – 它是BIND工具的一部分。
它根本不知道库调用的其他名称服务,如gethostbyname可以通过NSS访问,因为nslookup不使用gethostbyname等。