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を使用しないのはなぜですか?
ありがとう。
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.conf
にmdns
とdns
の両方がある場合、最初にmdns
を使用しても、最初にmdns
で名前を解決しようとする必要があります。その後、答えがない場合はdns
を使用します。
非常に簡単です-nslookup
は具体的には DNSツールです-これはBINDツールの一部です。
gethostbyname
はnslookup
を使用しないため、gethostbyname
などのライブラリ呼び出しがNSS経由でアクセスできる他のネームサービスについては単に知りません。