web-dev-qa-db-ja.com

nslookupがping中にmdnsを使用しないのはなぜですか?

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

Www.localにpingしているときにtcpdumpを使用して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を使用しないのはなぜですか?

ありがとう。

9
dspjm

pingネームサービススイッチと呼ばれるglibcの名前解決システムを使用します。これは、/etc/nsswitch.confファイルを使用して、名前をIPに解決するために検索する場所を認識します。このファイルのhosts:行は、各サービスの優先順位を表しています。たとえば、filesはローカルの/etc/hostsファイルを表し、dns/etc/resolv.confファイルを使用してDNSサーバーに接続し、mdnsはmdnsを使用します。

ただし、nslookupは使用しません。 /etc/resolv.confで指定されたDNSサーバーと直接通信するため、mdnsを使用できません。

しかし、最後の質問にはお答えできません。 /etc/nsswitch.confmdnsdnsの両方がある場合、最初にmdnsを使用しても、最初にmdnsで名前を解決しようとする必要があります。その後、答えがない場合はdnsを使用します。

8
piernov

非常に簡単です-nslookup具体的には DNSツールです-これはBINDツールの一部です。

gethostbynamenslookupを使用しないため、gethostbynameなどのライブラリ呼び出しがNSS経由でアクセスできる他のネームサービスについては単に知りません。

3
Alnitak