44 votes

Avahi: le ping ne peut pas résoudre le nom d'hôte, mais nslookup peut

ping me dit qu'il ne peut pas résoudre certains noms d'hôte ("ping: unknown host domain.company.local") dans une URL mais lorsque j'utilise host ou nslookup sur le même ordinateur en ligne de commande, la résolution fonctionne bien (c'est-à-dire que c'est rapide et fiable).

Qu'est-ce qui pourrait causer cela ?

Plus de tests : Firefox, wget et ping ont le même problème. Pinger l'adresse IP fonctionne.

Système d'exploitation : Linux (Ubuntu 13.04)

MODIFICATION Mon /etc/resolv.conf indique :

nameserver 127.0.1.1
search domain.company.local

netstat rapporte :

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               

donc quelque chose fonctionne sur ce port (nslookup indique également qu'il utilise 127.0.1.1 comme serveur DNS).

Il n'y a pas de /etc/*inetd.conf, donc je ne suis pas sûr de quelle application sert ce port.

Il semble que dnsmasq soit utilisé :

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces
   --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1
   --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec
   --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
   --conf-dir=/etc/NetworkManager/dnsmasq.d

Tous les fichiers de configuration et dossiers sont vides. Comme nslookup dit qu'il utilise 127.0.1.1#53, je suppose que dnsmasq fonctionne même sans configuration. Mais comment sait-il quel DNS parent interroger ?

MODIFICATION2 Désactiver dnsmasq comme le suggère harrymc n'a pas aidé. J'ai donc exécuté strace ping qui m'a donné cette sortie étrange (seulement les parties intéressantes) :

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

Ainsi, ping regarde dans /etc/hosts ce qui est logique. Ensuite, il charge et mmap() /lib/libnss_mdns4_minimal.so.2 ce qui est également logique.

Mais ensuite, il parle à avahi !?

Cela m'a conduit à ce post de forum : ping doesn't make a dns request.

Mon /etc/nsswitch.conf contient également cette ligne :

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Si je ping une adresse qui fonctionne, je vois que le processus charge également /lib/libnss_mdns4_minimal.so.2 mais ensuite, il effectue une requête DNS via le port 53.

Donc, je suppose maintenant que /lib/libnss_mdns4_minimal.so.2 remarque d'une manière ou d'une autre que l'adresse IP se termine par .local et non par .com et alors le [NOTFOUND=return] est déclenché.

Comment puis-je réparer cela ?

1voto

MSalters Points 8049

Alors ma supposition maintenant est que /lib/libnss_mdns4_minimal.so.2 remarque d'une manière ou d'une autre que l'adresse IP se termine par .local et non par .com et alors le [NOTFOUND=return] est déclenché.

Comment puis-je réparer cela?

Plutôt une bonne supposition, mais les autres réponses vont trop loin. La solution simple est de supprimer la partie qui est en effet déclenchée, c'est-à-dire supprimer juste [NOTFOUND=return].

En le supprimant, cela signifie que si mdns4_minimal retourne NOTFOUND, l'entrée suivante dans la liste des résolveurs est utilisée. C'est le comportement normal; [NOTFOUND=return] est une optimisation pour échouer plus rapidement sur les noms inconnus mais cela suppose que tous les noms .local sont en mDNS.

0voto

strixaluco Points 31

J'ai eu un cas intéressant avec les mêmes symptômes (ping, montage, etc. ne fonctionnant pas, mais host, dig fonctionnant). Vérifiez les autorisations sur le fichier /etc/resolv.conf. Dans mon cas, quelqu'un l'avait modifié et je n'avais pas les droits pour le lire (même si cat /etc/resolv.conf et l'édition du fichier fonctionnaient bien).

Quoi qu'il en soit, strace montrait :

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

Et en conséquence, il essayait d'interroger localhost (127.0.0.1) au lieu d'une IP du serveur de noms du fichier resolv.conf :

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

Et tcpdump ne montrait aucun trafic DNS lors du ping. Tout fonctionne après une correction des autorisations :

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

Un autre problème pourrait être les attributs étendus du fichier ou tout autre problème d'accès. Dans ce cas, supprimez simplement le fichier /etc/resolv.conf et recréez-le à partir de zéro.

-1voto

Thomas Lauria Points 117

Une autre raison est le format de /etc/hosts. Assurez-vous qu'il n'y a pas d'espaces entre l'IP et le nom d'hôte, utilisez plutôt une TABULATION. Après avoir changé en TABULATION, le nom d'hôte pourrait être résolu par ping.

127.0.0.1        test.local
         ^^^^^^^^  Doit être une TABULATION pas plusieurs espaces.

-1voto

Achin Kumar Points 387

Configurez avahi-daemon sur Ubuntu pour pouvoir accéder au nom d'hôte ubuntu.local depuis le système d'exploitation hôte

sudo apt-get install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X