it-swarm.com.de

avahi: ping kann den Hostnamen nicht auflösen, nslookup jedoch

ping teilt mir mit, dass ein Hostname ("ping: unknown Host domain.company.local") in einer URL nicht aufgelöst werden kann, aber wenn ich Host oder nslookup auf demselben Computer in der Befehlszeile verwende, funktionieren die Auflösungen einwandfrei (dh es ist schnell und zuverlässig).

Was könnte das verursachen?

Weitere Tests: Firefox, wget und ping haben das gleiche Problem. Das Pingen der IP-Adresse funktioniert.

Betriebssystem: Linux (Ubuntu 13.04)

EDITMein /etc/resolv.conf lautet:

nameserver 127.0.1.1
search domain.company.local

netstat Berichte:

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      -               

auf diesem Port läuft also etwas (nslookup meldet auch, dass es 127.0.1.1 als DNS-Server verwendet).

Da es keinen /etc/*inetd.conf gibt, bin ich mir nicht sicher, welche Anwendung diesen Port bedient.

Es scheint, dass dnsmasq verwendet wird:

/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

Alle Konfigurationsdateien und -ordner sind leer. Da nslookup angibt, 127.0.1.1#53 zu verwenden, funktioniert dnsmasq vermutlich auch ohne Konfiguration. Aber woher weiß es, welches übergeordnete DNS abzufragen ist?

EDIT2 Das Deaktivieren von dnsmasq, wie von harrymc vorgeschlagen, hat nicht geholfen. Also habe ich strace ping ausgeführt, was mir diese seltsame Ausgabe brachte (nur die interessanten Teile):

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

Also sieht ping in /etc/hosts aus, was Sinn macht. Dann lädt es und mmap()s /lib/libnss_mdns4_minimal.so.2 das macht auch Sinn.

Aber dann spricht es mit Avahi !?

Was mich zu diesem Forumsbeitrag geführt hat: Ping macht keine DNS-Anfrage .

Mein /etc/nsswitch.conf enthält auch diese Zeile:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Wenn ich eine Arbeitsadresse ping, sehe ich, dass der Prozess auch /lib/libnss_mdns4_minimal.so.2 lädt, aber dann führt er eine DNS-Abfrage über Port 53 durch.

Ich vermute jetzt, dass /lib/libnss_mdns4_minimal.so.2 irgendwie bemerkt, dass die IP-Adresse mit .local und nicht mit .com endet und dann der [NOTFOUND=return] ausgelöst wird.

Wie behebe ich das?

39
Aaron Digulla

Wie in diesem Blogbeitrag ausführlich beschrieben, müssen Sie /etc/avahi/avahi-daemon.conf bearbeiten:

[server]
domain-name=.alocal

Dadurch wird der Dämon an die Domäne .alocal anstelle des Standardcodes .local gebunden.

und starte den Daemon neu mit:

Sudo service avahi-daemon restart

Anmerkung aus dem Blogbeitrag:

Möglicherweise müssen Sie den DNS-, mDNS- und Resolver-Cache leeren und Ihre Webbrowser neu starten, um den internen Cache zu leeren.

Danach stimmten ping und nslookup überein.

Danke an harrymc , dass du mich auf den richtigen Weg gebracht hast.

32
Aaron Digulla

/Etc/nsswitch.conf ändern und ersetzen:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

durch:

hosts:          files dns

arbeitete für mich.

11
doep

Einfache Aufgabe: /etc/default/avahi-daemon bearbeiten

Ändern Sie die Zeile:

AVAHI_DAEMON_DETECT_LOCAL=1

zu

AVAHI_DAEMON_DETECT_LOCAL=0

Starten Sie den avahi-daemon neu oder töten Sie ihn.

Ich mag Avahi nicht und verwende keine seiner Funktionen. Wenn Sie avahi wirklich deaktivieren möchten, ändern Sie /etc/init/avahi-daemon.conf, ähnlich wie folgt:

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus
8
MikeDawg

es scheint, dass die lokale Adresse in Ubuntu nicht zugänglich ist.

eine Lösung besteht darin, /etc/nsswitch.conf zu bearbeiten und diese Zeile zu ändern:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

dadurch :

hosts:          files dns
7
Dragouf

Wenn Sie keine Verbindung mit anderen Geräten oder VMs über Ihren Computer freigeben, können Sie dnsmasq in Network Manager deaktivieren.

Bearbeite /etc/NetworkManager/NetworkManager.conf und kommentiere die Zeile (setze ein # davor):

dns=dnsmasq

Dann mach :

Sudo restart network-manager

Dadurch wird der lokale Resolver ausgeschaltet.

Quelle: DNS in Ubuntu 12.04 .

3
harrymc

Ich hatte einen interessanten Fall mit den gleichen Symptomen (Ping, Mount usw. funktioniert nicht, aber Host, Dig funktioniert). Überprüfen Sie die Berechtigungen für die Datei /etc/resolv.conf . In meinem Fall hat es jemand geändert und ich hatte keine Rechte, es zu lesen (obwohl cat /etc/resolv.conf und das Bearbeiten der Datei gut funktionierten).

Wie auch immer, Strace zeigte:

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

Infolgedessen wurde versucht, localhost (127.0.0.1) anstelle einer IP-Adresse des Nameservers aus der Datei resolv.conf abzufragen:

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}])

Und tcpdump zeigte beim Pingen keinen DNS-Verkehr. Alles funktioniert nach einer Berechtigungskorrektur:

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

Ein weiteres Problem können erweiterte Attribute der Datei oder andere Zugriffsprobleme sein. In diesem Fall löschen Sie einfach die Datei /etc/resolv.conf und erstellen Sie sie neu.

1
Pik Master

Ich vermute also jetzt, dass /lib/libnss_mdns4_minimal.so.2 irgendwie bemerkt, dass die IP-Adresse mit .local und nicht mit .com endet und dann die [NOTFOUND = return] ausgelöst wird.

Wie behebe ich das?

Ziemlich gut geraten, aber die anderen Antworten sind übertrieben. Die einfache Lösung besteht darin, das tatsächlich ausgelöste Bit zu entfernen, d. H. nur [NOTFOUND=return] zu entfernen.

Entfernen bedeutet, dass der nächste Eintrag in der Auflösungsliste verwendet wird, wenn mdns4_minimalNOTFOUND zurückgibt. Dies ist das normale Verhalten. [NOTFOUND=return] ist eine Optimierung, die bei unbekannten Namen schneller fehlschlägt. Es wird jedoch davon ausgegangen, dass sich alle .local-Namen in mDNS befinden.

1
MSalters

Ein weiterer Grund ist das Format von /etc/hosts. Stellen Sie sicher, dass zwischen IP und Hostname keine Leerzeichen stehen, und verwenden Sie stattdessen ein TAB. Nach dem Wechsel zu TAB konnte der Hostname durch Ping aufgelöst werden.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.
0
Thomas Lauria