avahi: ping non può risolvere il nome host, ma nslookup può farlo


41

pingmi dice che non è in grado di risolvere alcuni hostname ("ping: host sconosciuto domain.company.local") in un URL ma quando uso hosto nslookupsullo stesso computer sulla riga di comando, le risoluzioni funzionano bene (cioè è veloce e affidabile ).

Che cosa potrebbe causare questo?

Altri test: Firefox wgete pinghanno lo stesso problema. Il ping dell'indirizzo IP funziona.

Sistema operativo: Linux (Ubuntu 13.04)

EDIT Le mie /etc/resolv.confletture:

nameserver 127.0.1.1
search domain.company.local

netstat rapporti:

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      -               

quindi qualcosa è in esecuzione su questa porta ( nslookupsegnala anche che utilizza 127.0.1.1come server DNS).

No /etc/*inetd.conf, quindi non sono sicuro di quale applicazione serve questa porta.

Sembra che dnsmasqsia usato:

/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

Tutti i file e le cartelle di configurazione sono vuoti. Dal momento che nslookupdice che usa la 127.0.1.1#53mia ipotesi è che dnsmasqfunziona anche senza una configurazione. Ma come fa a sapere quale DNS genitore interrogare?

EDIT2 La disabilitazione dnsmasqcome suggerito da harrymc non ha aiutato. Quindi ho corso strace pingche mi ha dato questo strano risultato (solo le parti interessanti):

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

Quindi pingguarda in /etc/hostsche senso. Quindi carica e mmap()s /lib/libnss_mdns4_minimal.so.2che ha anche senso.

Ma poi parla con avahi !?

Il che mi ha portato a questo post sul forum: ping non fa una richiesta dns .

Il mio /etc/nsswitch.confcontiene anche questa riga:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Se ho pingun indirizzo funzionante, vedo che viene caricato anche il processo /lib/libnss_mdns4_minimal.so.2, ma esegue una query DNS tramite la porta 53.

Quindi la mia ipotesi ora è che in /lib/libnss_mdns4_minimal.so.2qualche modo sta notando che l'indirizzo IP termina con .locale non con .come quindi [NOTFOUND=return]viene attivato.

Come posso risolvere questo problema?


Cosa c'è nel tuo /etc/resolv.conf?
Joseph R.,

Qual è corretto e quale non è corretto? Il nome host dovrebbe risolversi o no? Non ci hai detto quale dei due problemi completamente diversi hai. (E se dovesse risolversi, spiega nel modo più dettagliato possibile come e perché dovrebbe risolversi, poiché ciò porterà probabilmente alla spiegazione del perché non lo fa.)
David Schwartz,

... e quali sono le impostazioni del proxy HTTP per Chrome, Firefox e wget.
JdeBP,

@DavidSchwartz: mi aspetto che la risoluzione funzioni. Quello che non capisco come nslookupo hostposso risolvere il nome e qualsiasi altra cosa sul sistema non può.
Aaron Digulla,

1
Se non si esegue la condivisione della connessione con altri dispositivi o VM tramite il computer, è possibile disattivare dnsmasq in Network Manager. Modifica /etc/NetworkManager/NetworkManager.confe commenta la dns=dnsmasqriga (metti un # davanti ad essa) quindi fai un sudo restart network-manager. Ciò disattiverà il resolver locale. ( fonte )
harrymc,

Risposte:


33

Come descritto in dettaglio in questo post del blog , è necessario modificare /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

Ciò lega il daemon al dominio .alocalanziché al valore predefinito .local.

e riavvia il demone con:

sudo service avahi-daemon restart

Nota dal post del blog:

Potrebbe essere necessario svuotare il DNS, mDNS e la cache del resolver, nonché riavviare i browser Web per svuotare la cache interna.

Dopo ciò, pinge nslookupho iniziato a concordare.

Grazie a harrymc per avermi portato sulla strada giusta.


1
Si noti inoltre pingche utilizzerà nss, nslookupnon lo fa. (usa lwres e, beh, bind, per parlare direttamente con un risolutore)
Ricky Beam,

Per me ha più senso configurarlo correttamente invece di disabilitarlo per locale.
keiki,

@ otakun85: E come lo farei?
Aaron Digulla,

@AaronDigulla L'hai configurato e l'attuale risposta più votata l'ha disabilitato per locale.
keiki,

2
Questo è fantastico Grazie mille. Combattuto con questo per ore prima di trovare questo post.
fpghost,

11

Modifica /etc/nsswitch.conf e sostituzione:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

di:

hosts:          files dns

ha funzionato per me.


2
Funziona a spese dei servizi AVAHI
Aaron Digulla,

8

Cosa facile da fare: modifica /etc/default/avahi-daemon

Cambia la linea:

AVAHI_DAEMON_DETECT_LOCAL=1

a

AVAHI_DAEMON_DETECT_LOCAL=0

Riavvia il avahi-daemono uccidilo.

Avahi non mi piace e non utilizzo nessuna delle sue funzionalità. Se si desidera disabilitare veramente avahi, modificare /etc/init/avahi-daemon.conf, in modo simile al seguente:

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

2
Non mi importa se non dovresti inserire qui commenti "grazie", volevo solo esprimere i miei ringraziamenti e quanto tempo ed energia mi hai risparmiato. Grazie mille! Sto usando una VPN aziendale per fare un po 'di emergenza in un centro commerciale e non riesco a far funzionare alcuni dei nostri siti nonostante tutto quello che ho pensato di provare. Non sarei stato in grado di capirlo da solo, questo è certo ...
Eresonance,

7

sembra che l'indirizzo locale non sia accessibile in Ubuntu.

una soluzione è modificare /etc/nsswitch.confe cambiare questa riga:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

da questo :

hosts:          files dns

Questo tipo di lavoro ha funzionato per me. Nel mio caso, la riga degli host aveva "file resolve [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns" e la modifica in "files mdns4_minimal [NOTFOUND = return] dns" ha funzionato. Grazie per il puntatore nella giusta direzione.
Andorbal,

Ho provato altre risposte sopra, disabilitato avahi (che è un sollievo) e ancora avuto il problema. Questa risposta l'ha risolto per me. Grazie
Adam Plocher,

3

Se non si esegue la condivisione della connessione con altri dispositivi o VM tramite il computer, è possibile disattivare dnsmasq in Network Manager.

Modifica /etc/NetworkManager/NetworkManager.confe commenta la riga (mettici un # davanti):

dns=dnsmasq

Quindi fa :

sudo restart network-manager

Ciò disattiverà il resolver locale.

Fonte: DNS in Ubuntu 12.04 .


2

Quindi la mia ipotesi è ora che /lib/libnss_mdns4_minimal.so.2 sta in qualche modo notando che l'indirizzo IP termina con .local e non con .com e quindi viene attivato [NOTFOUND = return].

Come posso risolvere questo problema?

Indovina abbastanza bene, ma le altre risposte sono eccessive. La soluzione semplice è quella di rimuovere il bit effettivamente attivato, ovvero rimuovere just [NOTFOUND=return] .

Rimuovendolo significa che se mdns4_minimalritorna NOTFOUND, viene utilizzata la voce successiva nell'elenco del resolver. Questo è il comportamento normale; [NOTFOUND=return]è un'ottimizzazione per fallire più velocemente su nomi sconosciuti ma presuppone che tutti i .localnomi siano in mDNS.


1

Ho avuto un caso interessante con gli stessi sintomi (ping, mount ecc. Non funzionante, ma host, scavo funzionante). Controlla le autorizzazioni sul file /etc/resolv.conf . Nel mio caso, qualcuno l'ha cambiato e non avevo i diritti per leggerlo (anche se cat /etc/resolv.confe modificando il file ha funzionato bene).

Comunque, strace stava mostrando:

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

E di conseguenza, stava provando a interrogare localhost (127.0.0.1) invece di un IP di nameserver dal file 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}])

E tcpdump non mostrava alcun traffico DNS durante il ping. Tutto funziona dopo una correzione dell'autorizzazione:

# 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 altro problema potrebbe essere rappresentato dagli attributi estesi del file o da qualsiasi altro problema di accesso. In tal caso, basta eliminare il file /etc/resolv.conf e ricrearlo da zero.


Un altro problema che avevo un solo server era che tutte le cartelle root avevano perso la loro xbandiera, e quindi molti binari non si comportavano correttamente. La correzione era chmod +x /*.
Silex,

0

Un altro motivo è il formato di /etc/hosts. Assicurarsi che non vi siano spazi tra IP e nome host, utilizzare invece una TAB. Dopo essere passato a TAB, il nome host può essere risolto tramite ping.

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

potrebbe essere una risposta ma è formattato come commento ...
Francisco Tapia,

-1

Installa avahi-daemon su Ubuntu in modo da poter raggiungere il nome host ubuntu.localdal sistema operativo host

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


Siamo spiacenti, questa risposta non è correlata alla domanda. Non stiamo chiedendo come installare Avahi La domanda è come Avahi può interrompere le ricerche DNS dopo l'installazione.
Aaron Digulla
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.