40 votos

El ping no puede resolver el nombre del host, pero nslookup puede

ping me dice que no puede resolver algún nombre de host ("ping: dominio de host desconocido.empresa.local") en una URL pero cuando uso host o nslookup en el mismo ordenador en la línea de mando, las resoluciones funcionan bien (es decir, es rápido y fiable).

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

OS: 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      -               

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

No hay ningún /etc/*inetd.conf así que no estoy seguro de qué aplicación sirve a 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 usa 127.0.1.1#53 mi suposición es que dnsmasq funciona incluso sin una configuración. ¿Pero cómo sabe qué DNS padre consultar?

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

Pero entonces habla con Avahi!?

Lo que me llevó a este post del foro: ping no hace una petición al dns .

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

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

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

Así que mi suposición es que ahora que /lib/libnss_mdns4_minimal.so.2 está notando de alguna manera que la dirección IP termina con .local y no con .com y luego el [NOTFOUND=return] se desencadena.

¿Cómo arreglo esto?

33voto

becko Puntos 114

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

[server]
domain-name=.alocal

Esto vincula al demonio con el dominio .alocal en lugar de la predeterminada .local .

y reiniciar el demonio con:

sudo service avahi-daemon restart

Nota de la entrada del blog:

Es posible que tenga que vaciar el DNS, el mDNS y la caché de resolución, así como reiniciar los navegadores web para vaciar su caché interna.

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

Gracias a harrymc por llevarme por el buen camino.

11voto

doep Puntos 21

Modificando /etc/nsswitch.conf y reemplazando:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

por:

hosts:          files dns

trabajaba para mí.

8voto

MikeDawg Puntos 87

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

Cambie la línea:

AVAHI_DAEMON_DETECT_LOCAL=1

a

AVAHI_DAEMON_DETECT_LOCAL=0

Reinicie el avahi-daemon o matarlo.

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

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

7voto

pppglowacki Puntos 33

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

3voto

Louis Puntos 121

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

Edita /etc/NetworkManager/NetworkManager.conf y comentar la línea (poner un # delante de ella) :

dns=dnsmasq

Entonces hazlo:

sudo restart network-manager

Eso apagará la resolución local.

Fuente: DNS en Ubuntu 12.04 .

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: