Warum verwendet nslookup beim Ping keine mdns?

9

In der dnsmasq.conf:

address=/local/127.0.0.1

In der 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

Ich kann nslookup verwenden:

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

Name:   www.local
Address: 127.0.0.1

Aber ich kann Ping nicht verwenden:

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

Ich benutze tcpdump, um lo zu erfassen, während ich www.local pinge, keine Pakete, während Pakete mögen

# 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)

erschien von der physischen Schnittstelle.

Was bedeutet, dass Ping mdns verwendet, aber warum verwendet nslookup keine mdns? Warum verwendet Ping keine normalen DNS, wenn MDNS keinen nützlichen Fehler zurückgibt?

Vielen Dank.

dspjm
quelle

Antworten:

8

pingVerwenden Sie das Namensauflösungssystem von glibc namens Name Service Switch. Dies verwendet die /etc/nsswitch.confDatei, um zu wissen, wo gesucht werden muss, um einen Namen in eine IP aufzulösen. Die hosts:Zeile in dieser Datei gibt eine Präferenzreihenfolge für jeden Dienst an. Stellen Sie beispielsweise filesdie lokale /etc/hostsDatei dar, dnsverwenden Sie die /etc/resolv.confDatei, um einen DNS-Server zu kontaktieren, und mdnsverwenden Sie mdns.

Allerdings nslookupist es nicht verwenden. Es kommuniziert direkt mit dem in angegebenen DNS-Server /etc/resolv.confund kann daher nicht verwendet werden mdns.

Aber ich kann deine letzte Frage nicht beantworten. Wenn Sie beides haben mdnsund dnsin /etc/nsswitch.conf, auch mit mdnszuerst, sollte es zuerst versuchen, den Namen mit aufzulösen mdns, dann, wenn keine Antwort verwendet wird dns.

piernov
quelle
Vielen Dank an @priernov, ich habe auch die Antwort meiner letzten Antwort gefunden. Dies ist die Zeile "hosts: files mdns4_minimal [NOTFOUND = return] dns myhostname" in nsswitch.conf. Sie wird zurückgegeben, wenn keine mdns-IP gefunden wurde.
dspjm
1
Tatsächlich kann nslookup durch Angabe von Server 224.0.0.251 und Port 5353 zum Auflösen einer lokalen Adresse überredet werden: Rufen Sie den interaktiven Modus nslookup auf, geben Sie "Server 224.0.0.251", "set port = 5353" und dann den aufzulösenden Hostnamen ein, z. Microknoppix.local '. (getestet auf 2 Debian-Systemen. Unter Windows 10 funktioniert nslookup.exe von Microsoft nicht, das von isc.org/downloads/bind heruntergeladene )
NameOfTheRose
Verwenden getent hosts foo.localSie diese Option übrigens, wenn Sie nur eine IP-Adresse nachschlagen möchten, unabhängig davon, ob es sich um mDNS oder DNS handelt. Im Gegensatz dazu verwendet nslookupder getentBefehl den nsswitch der GNU C Library, sodass er immer funktioniert.
Hackerb9
3

Es ist sehr einfach - nslookupist speziell ein DNS-Tool - es ist Teil der BIND-Tools.

Es weiß einfach nichts über die anderen Namensdienste, auf die Bibliotheksaufrufe wie gethostbynameNSS zugreifen können, weil nslookupsie nicht verwendet gethostbynamewerden usw.

Alnitak
quelle