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

41

pingsagt mir, dass es einige Hostnamen ("ping: unknown host domain.company.local") in einer URL nicht auflösen kann, aber wenn ich hostoder nslookupauf 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 wgetund pinghaben das gleiche Problem. Das Pingen der IP-Adresse funktioniert.

Betriebssystem: Linux (Ubuntu 13.04)

BEARBEITEN Meine /etc/resolv.confliest:

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 ( nslookupmeldet auch, dass er 127.0.1.1als DNS-Server verwendet wird).

Es gibt keine /etc/*inetd.conf, daher bin ich mir nicht sicher, welche Anwendung diesen Port bedient.

Es scheint, dass dnsmasqverwendet 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 nslookupsagt es nutzt 127.0.1.1#53meine Vermutung, dass dnsmasqdas auch ohne Konfiguration funktioniert. Aber woher weiß es, welches übergeordnete DNS abgefragt werden soll?

EDIT2 Deaktivieren dnsmasqwie von harrymc vorgeschlagen hat nicht geholfen. Also lief ich, strace pingwas 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 pingschaut /etc/hostswas Sinn macht. Dann lädt und mmap()s /lib/libnss_mdns4_minimal.so.2was auch Sinn macht.

Aber dann spricht es mit Avahi !?

Was mich zu diesem Forumbeitrag geführt hat: Ping stellt keine DNS-Anfrage .

Meine /etc/nsswitch.confenthält auch diese Zeile:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Wenn ich pingeine Arbeitsadresse habe, sehe ich, dass der Prozess auch geladen wird, /lib/libnss_mdns4_minimal.so.2aber dann führt er eine DNS-Abfrage über Port 53 durch.

Also meine Vermutung ist jetzt, dass /lib/libnss_mdns4_minimal.so.2irgendwie auffällt, dass die IP-Adresse mit .localund nicht mit endet .comund dann das [NOTFOUND=return]ausgelöst wird.

Wie behebe ich das?

Aaron Digulla
quelle
Was ist in deinem /etc/resolv.conf?
Joseph R.
Was ist richtig und was ist falsch? Sollte der Hostname aufgelöst werden oder nicht? Sie haben uns nicht gesagt, welches von zwei völlig unterschiedlichen Problemen Sie haben. (Und wenn es sich auflösen sollte , erklären Sie so detailliert wie möglich, wie und warum es sich auflösen sollte, da dies wahrscheinlich zu einer Erklärung führen wird, warum dies nicht der Fall ist.)
David Schwartz
... und wie lauten Ihre HTTP-Proxy-Einstellungen für Chrome, Firefox und wget.
JdeBP
@DavidSchwartz: Ich erwarte, dass die Auflösung funktioniert. Was ich nicht verstehe nslookupoder wie ich hostden Namen auflösen kann und alles andere auf dem System nicht.
Aaron Digulla
1
Wenn Sie keine Verbindung mit anderen Geräten oder VMs über Ihren Computer freigeben, können Sie dnsmasq in Network Manager deaktivieren. Bearbeiten /etc/NetworkManager/NetworkManager.confund kommentieren Sie die dns=dnsmasqZeile (setzen Sie ein # davor) und machen Sie dann ein sudo restart network-manager. Dadurch wird der lokale Resolver ausgeschaltet. ( Quelle )
Harrymc

Antworten:

33

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

[server]
domain-name=.alocal

Dadurch wird der Dämon an die Domäne .alocalanstatt an die Standarddomäne gebunden .local.

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, pingund nslookupzu einigen gestartet.

Vielen Dank an harrymc, dass sie mich auf den richtigen Weg gebracht haben.

Aaron Digulla
quelle
1
Beachten Sie auch, pingwird nss verwenden, nslookupnicht. (Es verwendet LWRES und, na ja, binden, um direkt mit einem Resolver zu sprechen)
Ricky Beam
Für mich ist es sinnvoller, es richtig zu konfigurieren, als es für lokal zu deaktivieren.
Keiki
@ otakun85: Und wie würde ich das machen?
Aaron Digulla
@AaronDigulla Sie haben es konfiguriert und die aktuell am höchsten bewertete Antwort hat es für lokal deaktiviert.
Keiki
2
Das ist großartig. Vielen Dank. Habe mich stundenlang damit auseinandergesetzt, bevor ich diesen Beitrag gefunden habe.
fpghost
11

/Etc/nsswitch.conf ändern und ersetzen:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

durch:

hosts:          files dns

arbeitete für mich.

doep
quelle
2
Dies funktioniert auf Kosten der AVAHI-Dienste
Aaron Digulla
8

Einfach zu machen: Bearbeiten /etc/default/avahi-daemon

Ändern Sie die Zeile:

AVAHI_DAEMON_DETECT_LOCAL=1

zu

AVAHI_DAEMON_DETECT_LOCAL=0

Starten Sie das neu avahi-daemonoder töten Sie es.

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

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus
MikeDawg
quelle
2
Es ist mir egal, ob du hier keine "Danke" -Kommentare machen sollst, ich wollte nur meinen Dank aussprechen und wie viel Zeit und Energie du mir gespart hast. Ich danke dir sehr! Ich verwende ein Firmen-VPN, um Notarbeiten in einem Einkaufszentrum auszuführen, und konnte einige unserer Websites trotz aller Überlegungen nicht zum Laufen bringen. Ich hätte das nicht alleine herausfinden können, das ist sicher ...
eresonance
7

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

Eine Lösung besteht darin, /etc/nsswitch.confdiese Zeile zu bearbeiten und zu ändern:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

dadurch :

hosts:          files dns
Dragouf
quelle
Diese Art arbeitete für mich. In meinem Fall hatte die Hosts-Zeile "files resolve [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns" und das Ändern in "files mdns4_minimal [NOTFOUND = return] dns" funktioniert. Danke für den Hinweis in die richtige Richtung.
Andorbal
Versuchte die anderen Antworten oben, deaktivierte Avahi (was eine Erleichterung ist) und hatte immer noch das Problem. Diese Antwort hat es für mich gelöst. Vielen Dank
Adam Plocher
3

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

Bearbeiten /etc/NetworkManager/NetworkManager.confund kommentieren Sie die Zeile (setzen Sie ein # davor):

dns=dnsmasq

Dann mach :

sudo restart network-manager

Dadurch wird der lokale Resolver ausgeschaltet.

Quelle: DNS in Ubuntu 12.04 .

Harrymc
quelle
2

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, dh nur zu entfernen [NOTFOUND=return].

Entfernen bedeutet, dass bei mdns4_minimalRückkehr NOTFOUNDder nächste Eintrag in der Auflösungsliste verwendet wird. Dies ist das normale Verhalten. [NOTFOUND=return]ist eine Optimierung, die bei unbekannten Namen schneller fehlschlägt, jedoch davon ausgeht, dass alle .localNamen in mDNS sind.

MSalters
quelle
1

Ich hatte einen interessanten Fall mit den gleichen Symptomen (Ping, Mount usw. funktioniert nicht, aber Host, Dig arbeiten). Ü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.confund das Bearbeiten der Datei gut funktionierte).

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 an. 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.

Pik Meister
quelle
Ein weiteres Problem, das ich mit einem einzigen Server hatte, war, dass alle Stammordner ihr xFlag verloren hatten und sich daher viele Binärdateien nicht richtig verhielten. Das Update war chmod +x /*.
Silex
0

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.
Thomas Lauria
quelle
Es könnte eine Antwort sein, aber es ist als Kommentar formatiert ...
Francisco Tapia
-1

Richten Sie den avahi-daemon unter Ubuntu ein, damit Sie den Hostnamen ubuntu.localvom Host-Betriebssystem aus erreichen können

sudo apt-get installiere avahi-daemon avahi-entdecke avahi-utils libnss-mdns mdns-scan

João Pedro Rodrigues
quelle
Entschuldigung, diese Antwort hat nichts mit der Frage zu tun. Wir fragen nicht, wie Avahi installiert werden soll. Die Frage ist, wie Avahi DNS-Lookups nach der Installation unterbrechen kann.
Aaron Digulla