avahi: ping no puede resolver el nombre de host, pero nslookup puede

41

pingme dice que no puede resolver algún nombre de host ("ping: host desconocido domain.company.local") en una URL, pero cuando uso hosto nslookupen la misma computadora en la línea de comando, las resoluciones funcionan bien (es decir, es rápido y confiable )

¿Qué podría estar causando esto?

Más pruebas: Firefox, wgety pingtienen el mismo problema. Hacer ping a la dirección IP funciona.

SO: Linux (Ubuntu 13.04)

EDITAR Mis /etc/resolv.conflecturas:

nameserver 127.0.1.1
search domain.company.local

netstat informes:

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      -               

entonces algo se está ejecutando en este puerto ( nslookuptambién informa que se usa 127.0.1.1como servidor DNS).

No hay /etc/*inetd.conf, así que no estoy seguro de qué aplicación sirve este puerto.

Parece que dnsmasqse usa:

/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

Todos los archivos y carpetas de configuración están vacíos. Como nslookupdice que usa 127.0.1.1#53mi conjetura es que dnsmasqfunciona incluso sin una configuración. Pero, ¿cómo sabe qué DNS primario consultar?

EDIT2 Desactivar dnsmasqcomo lo sugiere harrymc no ayudó. Así que corrí, lo strace pingque me dio esta salida extraña (solo las partes interesantes):

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

Así se pingve en lo /etc/hostsque tiene sentido. Luego se carga y mmap()s, lo /lib/libnss_mdns4_minimal.so.2que tiene sentido también.

¿Pero entonces habla con avahi?

Lo que me llevó a esta publicación en el foro: ping no realiza una solicitud de DNS .

Mi /etc/nsswitch.conftambién contiene esta línea:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Si tengo pinguna dirección de trabajo, veo que el proceso también se carga, /lib/libnss_mdns4_minimal.so.2pero luego realiza una consulta DNS a través del puerto 53.

Entonces, supongo que ahora /lib/libnss_mdns4_minimal.so.2es de alguna manera notar que la dirección IP termina con .localy no con .comy luego [NOTFOUND=return]se activa.

¿Cómo puedo solucionar esto?

Aaron Digulla
fuente
¿Qué hay en tu /etc/resolv.conf?
Joseph R.
¿Cuál es correcto y cuál es incorrecto? ¿Debería resolverse el nombre de host o no? No nos dijiste cuál de los dos problemas completamente diferentes tienes. (Y si se debe resolver, explicar con el mayor detalle posible cómo y por qué se debe resolver, ya que esto probablemente conducirá a la explicación de por qué no lo hace.)
David Schwartz
... y cuáles son sus configuraciones de proxy HTTP para Chrome, Firefox y wget.
JdeBP
@DavidSchwartz: espero que la resolución funcione. Lo que no entiendo cómo nslookupo hostpuedo resolver el nombre y cualquier otra cosa en el sistema no pueden.
Aaron Digulla
1
Si no está compartiendo la conexión con otros dispositivos o máquinas virtuales a través de su computadora, puede desactivar dnsmasq en Network Manager. Edite /etc/NetworkManager/NetworkManager.confy comente la dns=dnsmasqlínea (ponga un # delante) y luego haga un sudo restart network-manager. Eso apagará el resolutor local. ( fuente )
harrymc

Respuestas:

33

Como se describe en detalle en esta publicación de blog , debe editar /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

Esto vincula el demonio al dominio en .alocallugar del predeterminado .local.

y reinicia el demonio con:

sudo service avahi-daemon restart

Nota de la publicación del blog:

Es posible que deba vaciar el DNS, mDNS y el caché de resolución, así como reiniciar sus navegadores web para borrar su caché interno.

Después de eso, pingy nslookupcomenzó a estar de acuerdo.

Gracias a harrymc por llevarme por el buen camino.

Aaron Digulla
fuente
1
También tenga en cuenta, pingutilizará nss, nslookupno. (usa lwres y, bueno, enlace, para hablar directamente con un resolutor)
Ricky Beam
Para mí tiene más sentido configurarlo correctamente en lugar de deshabilitarlo para local.
keiki
@ otakun85: ¿Y cómo haría eso?
Aaron Digulla
@AaronDigulla Lo configuró y la respuesta más votada actual lo deshabilitó para local.
keiki
2
Esto es increíble. Muchas gracias. Luché con esto durante horas antes de encontrar esta publicación.
fpghost
11

Modificando /etc/nsswitch.conf y reemplazando:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

por:

hosts:          files dns

trabajó para mi.

doep
fuente
2
Esto funciona a costa de los servicios de AVAHI
Aaron Digulla
8

Algo fácil de hacer: editar /etc/default/avahi-daemon

Cambia la linea:

AVAHI_DAEMON_DETECT_LOCAL=1

a

AVAHI_DAEMON_DETECT_LOCAL=0

Reinicia el avahi-daemon, o mátalo.

No me gusta Avahi, y no uso ninguna de sus características. Si realmente desea deshabilitar avahi, modifique /etc/init/avahi-daemon.conf, similar a lo siguiente:

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus
MikeDawg
fuente
2
No me importa si se supone que no debes poner comentarios de "gracias" aquí, solo quería expresar mi agradecimiento y cuánto tiempo y energía me has ahorrado. Muchas gracias! Estoy usando una VPN de la compañía para hacer un trabajo de emergencia desde un centro comercial y no pude hacer que algunos de nuestros sitios funcionen a pesar de todo lo que pensé en intentar. No habría podido resolver esto por mi cuenta, eso es seguro ...
eresonance
7

Parece que la dirección .local no se puede acceder en ubuntu.

Una solución es editar /etc/nsswitch.confy cambiar esta línea:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

por esto :

hosts:          files dns
Dragouf
fuente
Esto me funcionó. En mi caso, la línea de hosts tenía "resolver archivos [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns" y cambiarlo a "files mdns4_minimal [NOTFOUND = return] dns" funcionó. Gracias por el puntero en la dirección correcta.
Andorbal
Intenté las otras respuestas anteriores, deshabilité avahi (lo cual es un alivio) y aún tuve el problema. Esta respuesta lo resolvió para mí. Gracias
Adam Plocher
3

Si no está compartiendo la conexión con otros dispositivos o máquinas virtuales a través de su computadora, puede desactivar dnsmasq en Network Manager.

Edite /etc/NetworkManager/NetworkManager.confy comente la línea (ponga un # delante):

dns=dnsmasq

Entonces hazlo :

sudo restart network-manager

Eso apagará el resolutor local.

Fuente: DNS en Ubuntu 12.04 .

harrymc
fuente
2

Entonces, supongo que ahora /lib/libnss_mdns4_minimal.so.2 está notando que la dirección IP termina con .local y no con .com y luego se activa [NOTFOUND = return].

¿Cómo puedo solucionar esto?

Bastante buena suposición, pero las otras respuestas son excesivas. La solución simple es eliminar el bit que efectivamente se dispara, es decir, eliminar solo [NOTFOUND=return] .

Eliminarlo significa que si mdns4_minimalregresa NOTFOUND, se usa la siguiente entrada en la lista de resolución. Este es el comportamiento normal; [NOTFOUND=return]es una optimización para fallar más rápido en nombres desconocidos, pero supone que todos los .localnombres están en mDNS.

MSalters
fuente
1

Tuve un caso interesante con los mismos síntomas (ping, montaje, etc.no funciona, pero host, excavación funciona). Verifique los permisos en el archivo /etc/resolv.conf . En mi caso, alguien lo cambió y no tenía derechos para leerlo (aunque cat /etc/resolv.confy editar el archivo funcionó bien).

De todos modos, strace estaba mostrando:

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

Y como resultado, intentaba consultar localhost (127.0.0.1) en lugar de una IP de servidor de nombres desde el archivo 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}])

Y tcpdump no mostraba ningún tráfico DNS al hacer ping. Todo funciona después de una corrección de permiso:

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

Otro problema podrían ser los atributos extendidos del archivo o cualquier otro problema de acceso. En ese caso, simplemente elimine el archivo /etc/resolv.conf y vuelva a crearlo desde cero.

Pik Master
fuente
Otro problema que tuve fue que todas las carpetas raíz habían perdido su xmarca y, por lo tanto, muchos binarios no se comportaron correctamente. La solución fue chmod +x /*.
Silex
0

Otra razón es el formato de /etc/hosts. Asegúrese de que no haya espacios entre la IP y el nombre de host, en su lugar use una TAB. Después de cambiar a TAB, el nombre de host podría resolverse haciendo ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.
Thomas Lauria
fuente
podría ser una respuesta pero está formateada como comentario ...
Francisco Tapia
-1

Configure avahi-daemon en Ubuntu para que pueda alcanzar el nombre ubuntu.localde host desde el sistema operativo host

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

João Pedro Rodrigues
fuente
Lo sentimos, esta respuesta no está relacionada con la pregunta. No estamos preguntando cómo instalar Avahi. La pregunta es cómo Avahi puede romper las búsquedas de DNS después de que se instaló.
Aaron Digulla