Perché nslookup non usa mdns mentre fa ping?


9

In dnsmasq.conf:

address=/local/127.0.0.1

In 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

Posso usare nslookup:

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

Name:   www.local
Address: 127.0.0.1

Ma non posso usare il ping:

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

Uso tcpdump per catturare lo mentre eseguo il ping di www.local, nessun pacchetto, mentre i pacchetti mi piacciono

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

apparso dall'interfaccia fisica.

Il che significa che ping utilizza mdns, ma perché nslookup non usa mdns? Perché ping non usa DNS normali quando mdns non restituisce false utili?

Grazie.

Risposte:


8

pingusa il sistema di risoluzione dei nomi di glibc, chiamato Name Service Switch. Questo utilizza il /etc/nsswitch.conffile per sapere dove cercare per risolvere un nome in un IP. La hosts:riga in questo file rappresenta un ordine di preferenza per ciascun servizio. Ad esempio, filesrappresenta il /etc/hostsfile locale , dnsutilizza il /etc/resolv.conffile per contattare un server DNS e mdnsutilizza mdns.

Tuttavia, nslookupnon lo usa. Parla direttamente con il server DNS specificato in /etc/resolv.confe quindi non può essere utilizzato mdns.

Ma non posso rispondere alla tua ultima domanda. Se hai entrambi mdnse dnsdentro /etc/nsswitch.conf, anche con mdnsprima, dovresti prima provare a risolvere il nome con mdns, quindi se nessuna risposta usa dns.


Grazie @priernov, ho trovato anche la risposta della mia ultima risposta, che è la riga "host: files mdns4_minimal [NOTFOUND = return] dns nomehost" in nsswitch.conf, tornerà se non viene trovato nessun ip mdns.
dspjm,

1
In realtà nslookup può essere persuaso a risolvere un indirizzo .local specificando il server 224.0.0.251 e la porta 5353: accedere alla modalità interattiva nslookup, emettere "server 224.0.0.251", "impostare la porta = 5353", quindi il nome host da risolvere, ad es. " Microknoppix.local'. (testato su 2 sistemi debian. Su Windows 10 nslookup.exe fornito da Microsoft non funziona, quello scaricato da isc.org/downloads/bind funziona)
NameOfTheRose

A proposito, usa getent hosts foo.localse vuoi solo cercare un indirizzo IP indipendentemente dal fatto che sia mDNS o DNS. A differenza nslookupdel getentcomando, usa il nsswitch della GNU C Library, quindi funziona sempre.
hackerb9,

3

È molto semplice - nslookupè specificamente uno strumento DNS - fa parte degli strumenti BIND.

Semplicemente non conosce gli altri servizi di denominazione a cui le chiamate della biblioteca come gethostbynamepossono accedere tramite NSS perché nslookupnon usano gethostbyname, ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.