ping
me dit qu'il ne peut pas résoudre un nom d'hôte ("ping: unknown host domain.company.local") dans une URL, mais quand j'utilise l' host
ou nslookup
sur le même ordinateur sur la ligne de commande, les résolutions fonctionnent bien (c.-à-d. Rapide et fiable).
Qu'est-ce qui peut causer cela?
Plus de tests: Firefox, wget
et ping
ont le même problème. Le ping de l'adresse IP fonctionne.
OS: Linux (Ubuntu 13.04)
EDIT Mon /etc/resolv.conf
lit:
nameserver 127.0.1.1 search domain.company.local
netstat
rapports:
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
tant que serveur DNS).
Il n'y a pas de /etc/*inetd.conf
, donc je ne sais pas 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 et dossiers de configuration 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 doit interroger?
EDIT2 Désactivant dnsmasq
comme suggéré par harrymc n'a pas aidé. Alors j'ai couru strace ping
qui m'a donné cette sortie étrange (juste 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
Donc ping
regarde dans /etc/hosts
qui a du sens. Ensuite, il charge et mmap()
s /lib/libnss_mdns4_minimal.so.2
ce qui est également logique.
Mais alors, il parle à avahi !?
Ce qui m'a conduit à cette publication du forum: ping ne fait pas une requête dns .
Mon /etc/nsswitch.conf
contient également cette ligne:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Si je fais un ping
une adresse de travail, je vois que le processus charge également /lib/libnss_mdns4_minimal.so.2
mais alors, il fait une requête DNS via le port 53.
Donc, ma supposition est maintenant que /lib/libnss_mdns4_minimal.so.2
est en quelque sorte remarquant que l'adresse IP se termine par .local
et non avec .com
et que le [NOTFOUND=return]
est déclenché.
Comment puis-je réparer ça?
Comme décrit en détail dans cette publication du blog , vous devez modifier /etc/avahi/avahi-daemon.conf
:
[server] domain-name=.alocal
Cela lie le démon au domaine .alocal
au lieu de .alocal
.
Et redémarrez le démon avec:
sudo service avahi-daemon restart
Note de la publication du blog:
Vous devrez peut-être rincer le DNS, le mDNS et le cache du résolveur, ainsi que redémarrer vos navigateurs Web pour effacer leur cache interne.
Après cela, ping
et nslookup
commencé à accepter.
Merci à harrymc de me mettre sur la bonne voie.
Modification de /etc/nsswitch.conf et remplacement:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
par:
hosts: files dns
J'ai travaillé pour moi.
Facile à faire: Éditez /etc/default/avahi-daemon
Changez la ligne:
AVAHI_DAEMON_DETECT_LOCAL=1
à
AVAHI_DAEMON_DETECT_LOCAL=0
Redémarrez l' avahi-daemon
ou tuez-le.
Je n'aime pas Avahi, et je n'utilise aucune de ses fonctionnalités. Si vous souhaitez vraiment désactiver avahi, modifiez /etc/init/avahi-daemon.conf
, comme suit:
start on (never and filesystem and started dbus) stop on stopping dbus
Il semble. L'adresse locale ne peut pas être accessible dans ubuntu.
Une solution consiste à modifier /etc/nsswitch.conf
et à modifier cette ligne:
hosts: files mdns4_minimal [NOTFOUND=return] dns
par ça :
hosts: files dns
Si vous ne faites pas de partage de connexion avec d'autres périphériques ou des machines virtuelles via votre ordinateur, vous pouvez désactiver dnsmasq dans Network Manager.
Modifiez /etc/NetworkManager/NetworkManager.conf
et commentez la ligne (mettez un # en face)
dns=dnsmasq
Alors fais :
sudo restart network-manager
Cela éteindra le résolveur local.
Source: DNS dans Ubuntu 12.04 .
J'ai eu un cas intéressant avec les mêmes symptômes (ping, monture, etc. ne fonctionnant pas, mais hôte, creusage). Vérifiez les autorisations sur le fichier /etc/resolv.conf . Dans mon cas, quelqu'un l'a changé et je n'avais pas le droit de 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 de nameserver à partir 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 n'affiche aucun trafic DNS lors du ping. Tout fonctionne après une correction d'autorisation:
# 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 des attributs étendus du fichier ou tout autre problème d'accès. Dans ce cas, il suffit de supprimer le fichier /etc/resolv.conf et de le recréer à zéro.
Une autre raison est le format de /etc/hosts
. Assurez-vous qu'il n'y ait pas d'espaces entre l'adresse IP et le nom de l'hôte, utilisez un TAB. Après avoir changé pour TAB, le nom d'hôte peut être résolu par ping.
127.0.0.1 test.local ^^^^^^^^ → Should be a TAB not multiple spaces.