Dlaczego nslookup nie używa mdns podczas pingowania?


9

W dnsmasq.conf:

address=/local/127.0.0.1

W 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

Mogę użyć nslookup:

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

Name:   www.local
Address: 127.0.0.1

Ale nie mogę użyć ping:

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

Używam tcpdump do przechwytywania lo podczas pingowania www.local, bez pakietów, podczas gdy pakiety są podobne

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

pojawił się z interfejsu fizycznego.

Co oznacza, że ​​ping używa mdns, ale dlaczego nslookup nie używa mdns? Dlaczego ping nie używa normalnych dns, gdy mdns nie zwraca użytecznego falue?

Dzięki.

Odpowiedzi:


8

pingużyj systemu rozpoznawania nazw glibc, zwanego Name Service Switch. Dzięki temu /etc/nsswitch.confplik wie, gdzie szukać, aby rozwiązać nazwę adresu IP. hosts:Linia w tym pliku reprezentuje kolejność preferencji dla każdej usługi. Na przykład filesreprezentuj /etc/hostsplik lokalny , dnsużywa /etc/resolv.confgo do nawiązania połączenia z serwerem DNS i mdnsużywa mdns.

Jednak nslookupgo nie używa. Mówi bezpośrednio do serwera DNS określonego w /etc/resolv.confi dlatego nie można go używać mdns.

Ale nie mogę odpowiedzieć na twoje ostatnie pytanie. Jeśli masz zarówno mdnsi dnsw /etc/nsswitch.conf, nawet z mdnspierwszą, należy najpierw spróbować rozwiązać nazwy z mdns, a następnie, jeśli nie korzysta odpowiedź dns.


Dzięki @priernov, znalazłem również odpowiedź na moją ostatnią odpowiedź, która jest wierszem „hosts: files mdns4_minimal [NOTFOUND = return] dns moja_nazwa_hosta” w pliku nsswitch.conf, zwróci, jeśli nie zostanie znaleziony adres IP mdns.
dspjm

1
W rzeczywistości nslookup można przekonać do rozwiązania adresu lokalnego, określając serwer 224.0.0.251 i port 5353: wejdź w tryb interaktywny nslookup, wydaj „serwer 224.0.0.251”, „ustaw port = 5353”, a następnie nazwę hosta, który ma zostać rozwiązany, np. „ Microknoppix.local ”. (testowany na 2 systemach Debian. W systemie Windows 10 nslookup.exe dostarczony przez Microsoft nie działa, ten pobrany z isc.org/downloads/bind robi)
NameOfTheRose

Nawiasem mówiąc, użyj, getent hosts foo.localjeśli chcesz po prostu wyszukać adres IP, niezależnie od tego, czy jest to mDNS, czy DNS. W przeciwieństwie do nslookuptego getentpolecenie używa nsswitch biblioteki GNU C, więc zawsze działa.
hackerb9

3

To bardzo proste - nslookupjest w szczególności narzędziem DNS - jest częścią narzędzi BIND.

Po prostu nie wie o innych usługach nazw, do których wywoływane są biblioteki, takie jak gethostbynameNSS, ponieważ nslookupnie używa gethostbynameitp.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.