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.