Avahi: ping no puede resolver hostname, pero nslookup puede

ping me dice que no puede resolver un nombre de host ("ping: host desconocido dominio.company.local") en una URL, pero cuando uso host o nslookup en el mismo equipo en la línea de comandos, las resoluciones funcionan bien (es decir, es Rápido y confiable).

¿Qué podría estar causando esto?

Más pruebas: Firefox, wget y ping tienen el mismo problema. El ping de la dirección IP funciona.

SO: Linux (Ubuntu 13.04)

EDITAR Mi /etc/resolv.conf lee:

 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 - 

Por lo que algo se está ejecutando en este puerto ( nslookup también informa que utiliza 127.0.1.1 como servidor DNS).

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

Parece que dnsmasq se utiliza:

 /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. Desde nslookup dice que utiliza 127.0.1.1#53 mi conjetura es que dnsmasq funciona incluso sin una configuración. ¿Pero cómo sabe qué padre DNS para consultar?

EDIT2 La desactivación de dnsmasq como sugirió harrymc no ayudó. Así que corrí strace ping que me dio esta extraña salida (sólo 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í que ping busca en /etc/hosts que tiene sentido. Luego carga y mmap() s /lib/libnss_mdns4_minimal.so.2 que también tiene sentido.

Pero luego habla a avahi !?

Lo que me llevó a este foro: ping no hace una solicitud de dns .

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

 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

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

Así que mi conjetura es ahora que /lib/libnss_mdns4_minimal.so.2 está notando de algún modo que la dirección IP termina con .local y no con .com y luego se [NOTFOUND=return] .

¿Cómo puedo solucionar esto?

Como se describe en detalle en esta entrada del blog , necesitas editar /etc/avahi/avahi-daemon.conf :

 [server] domain-name=.alocal 

Esto enlaza el daemon con el dominio .alocal lugar del .local predeterminado.

Y reinicie el daemon con:

 sudo service avahi-daemon restart 

Nota de la entrada del blog:

Puede que necesite limpiar el DNS, el mDNS y el caché de resolución, así como reiniciar sus navegadores web para borrar su caché interno.

Después de eso, ping y nslookup comenzaron a estar de acuerdo.

Gracias a harrymc por conseguirme en el camino correcto.

Modificando /etc/nsswitch.conf y reemplazando:

 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

por:

 hosts: files dns 

Trabajado para mí.

Fácil de hacer: Editar /etc/default/avahi-daemon

Cambiar la línea:

 AVAHI_DAEMON_DETECT_LOCAL=1 

a

 AVAHI_DAEMON_DETECT_LOCAL=0 

Reinicie el avahi-daemon , o mátalo.

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

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

Parece que la dirección local no puede ser accesible en ubuntu.

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

 hosts: files mdns4_minimal [NOTFOUND=return] dns 

por esto :

 hosts: files dns 

Si no está compartiendo conexión con otros dispositivos o máquinas virtuales a través del equipo, puede desactivar dnsmasq en el Administrador de red.

Edite /etc/NetworkManager/NetworkManager.conf y comente la línea (ponga un # delante de ella):

 dns=dnsmasq 

Entonces hazlo :

 sudo restart network-manager 

Eso desactivará la resolución local.

Fuente: DNS en Ubuntu 12.04 .

Tuve un caso interesante con los mismos síntomas (ping, etc montaje no funciona, pero el anfitrión, el trabajo de excavación). Compruebe los permisos en el archivo /etc/resolv.conf . En mi caso, alguien lo cambió y yo no tenía derechos para leerlo (aunque cat /etc/resolv.conf y editar el archivo funcionaron 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 nameserver 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 estaba mostrando 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ía ser 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.

Otra razón es el formato de /etc/hosts . Asegúrese de que no hay espacios entre IP y nombre de host, en lugar de utilizar un TAB. Después de cambiar a TAB, el nombre de host podría resolverse mediante ping.

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