Question Pourquoi nslookup n'utilise-t-il pas les mdns alors que les ping le font?


Dans dnsmasq.conf:

address=/local/127.0.0.1

Dans 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

Je peux utiliser nslookup:

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

Name:   www.local
Address: 127.0.0.1

Mais je ne peux pas utiliser de ping:

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

J'utilise tcpdump pour capturer lo en faisant un ping sur www.local, pas de paquets, alors que les paquets aiment

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

est apparu de l'interface physique.

Ce qui signifie que ping utilise mdns, mais pourquoi nslookup n'utilise-t-il pas mdns? Pourquoi ping n'utilise-t-il pas les dns normaux lorsque les mdns ne renvoient pas d'erreurs utiles?

Merci.


8
2018-03-05 12:00


origine




Réponses:


ping utilisez le système de résolution de noms de glibc, appelé Name Service Switch. Cela utilise le /etc/nsswitch.conf fichier pour savoir où chercher afin de résoudre un nom en IP. le hosts: La ligne dans ce fichier représente un ordre de préférence pour chaque service. Par exemple, files représenter le local /etc/hosts fichier, dns utilise le /etc/resolv.conf fichier pour contacter un serveur DNS, et mdns utilise mdns.

cependant, nslookup ne l'utilise pas. Il parle directement au serveur DNS spécifié dans /etc/resolv.conf et donc ne peut pas utiliser mdns.

Mais je ne peux pas répondre à votre dernière question. Si vous avez les deux mdns et dns dans /etc/nsswitch.conf, même avec mdns d’abord, il faut d’abord essayer de résoudre le nom avec mdns, alors si pas de réponse utiliser dns.


6
2018-03-05 14:09



Merci @priernov, j'ai aussi trouvé la réponse de ma dernière réponse, à savoir la ligne "hôtes: fichiers mdns4_minimal [NOTFOUND = return] dns myhostname" dans nsswitch.conf, elle sera renvoyée si aucun ip mdns n'a été trouvé. - dspjm
En fait, il est possible de persuader nslookup de résoudre une adresse .local en spécifiant le serveur 224.0.0.251 et le port 5353: entrez le mode interactif nslookup, exécutez 'serveur 224.0.0.251', 'set port = 5353', puis le nom d'hôte à résoudre, par exemple ' Microknoppix.local '. (testé sur 2 systèmes Debian. Sous Windows 10, nslookup.exe fourni par Microsoft ne fonctionne pas, celui téléchargé depuis isc.org/downloads/bind Est-ce que) - NameOfTheRose


C'est très simple - nslookup est Plus précisément un outil DNS - il fait partie des outils BIND.

Il ignore tout simplement les autres services de noms que la bibliothèque appelle, tels que gethostbyname peut accéder via NSS parce que nslookup n'utilise pas gethostbyname, etc.


3
2018-03-06 16:42