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 ?