El servidor de Ubuntu no resuelve los nombres de host de LAN

Un poco atascado aquí.

Tengo 2 máquinas que no pueden resolver los nombres de los hosts de LAN, a menos que haya entradas específicas en / etc / hosts

Pero otras máquinas en la LAN pueden resolver nombres de host.

Mi LAN:

  • 1 x router Cisco ejecutando DD-WRT v24-sp2 con DNSMasq habilitado. He configurado esto con los nombres de host e IP en mi LAN.
  • 1 x Kubuntu 12.10 (resuelve todos los nombres de host correctamente siempre que se ingresen en DNSMasq en el enrutador)
  • 2 x NAS (también resuelve todos los nombres correctamente)

  • 1 x Ubuntu Server 12.04 (esto NO resuelve los nombres de host locales a menos que se ingresen en / etc / hosts)

  • 1 x XBMCLive (Dharma) (igual – no se resuelve a menos que las entradas estén en / etc / hosts)

¿Cómo obtengo los últimos 2 para usar las entradas DNSMasq en el enrutador? Cada máquina está configurada para usar el enrutador como servidor de nombres, y todas las unidades resuelven las direcciones externas correctamente.

Gracias.

más información:

Mientras estoy en el servidor, si hago ping a otra PC (wstation)

$ ping wstation PING wstation.local.domain (xxxx) 

Si luego agrego .local

 $ ping wstation.local PING wstation.local.local.domain (xxxx) 

y directamente

 $ ping 10.0.0.4 PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data. 64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.387 ms 64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.316 ms 64 bytes from 10.0.0.4: icmp_req=3 ttl=64 time=0.312 ms 64 bytes from 10.0.0.4: icmp_req=4 ttl=64 time=0.280 ms 64 bytes from 10.0.0.4: icmp_req=5 ttl=64 time=0.322 ms ^C --- 10.0.0.4 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3998ms rtt min/avg/max/mdev = 0.280/0.323/0.387/0.038 ms 

Sobre tu salida actual

 ping wstation PING wstation.local.domain 

Indica claramente que su PC está agregando .local.domain a las consultas que no son FQDN. Esto es algo configurado incorrectamente o al menos incorrecto en su configuración. (a menos que realmente use el sufijo .local.domain a propósito)

Resolución de nombres y puntos

Una cosa importante que mucha gente no sabe, es que un nombre completo siempre debe terminar con un punto ( . ). Si lo omite, la máquina intentará resolverlo dentro del dominio de búsqueda local (por ejemplo, mydomain.tld). Entonces, en ese caso, una consulta para mypc.local se convertiría en mypc.local.mydomain.tld . Para evitar esto, consulta con el punto.

Configuración de resolución

La configuración del resolutor es de gran importancia aquí. En Ubuntu (y Debian) esto está configurado en el archivo /etc/network/interfaces (asumiendo que no está ejecutando NetworkManager):

 iface eth0 inet static address 192.168.3.3 netmask 255.255.255.0 gateway 192.168.3.1 dns-nameservers 192.168.3.45 192.168.8.10 dns-search foo.org bar.com # <-- these are the search domains 

La resolución de nombres en Linux también se puede lograr de otras maneras. No es solo que el servidor DNS local está siendo consultado por todo esto. Eche un vistazo a su archivo /etc/nsswitch.conf para la configuración de los hosts de resolución:

 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

Esto significa que los archivos se prueban primero (este es el /etc/hosts ), luego mDNS y solo más tarde se consulta el servidor DNS real. mDNS se implementa utilizando Avahi en Linux y se llama Bonjour en dispositivos Apple. Utiliza el sufijo .local de forma predeterminada y funciona a través de mensajes de difusión. Al igual que ARP funciona, pero luego para DNS.

Todos estos sistemas pueden ser muy confusos e incluso más cuando se usa .local en una configuración de DNS normal combinada con dispositivos mDNS. Supongo que esta es la razón por la que ahora estás confundido en cuanto a por qué un dispositivo funciona y el otro no: no todos están usando el mismo método de resolución.

Para arreglar las cosas

  • Evite el uso si .local menos que quiera confiar completamente en mDNS. Por su pregunta, entiendo que le gustaría mantener las cosas configuradas en un lugar central, mi enfoque aquí es evitarlas.
  • Configure su servidor DNS local (el dispositivo DD-WRT en su caso) para usar un nombre de dominio especial, por ejemplo, my.home . Para dnsmasq, esta es una configuración única, pero en las configuraciones regulares debe configurarse tanto en el servidor DNS como en el servidor DHCP (como se anuncia a través de DHCP).
  • Configure todas las PC para tener un nombre de host simple y único. Usan esto en su solicitud de DHCP y esto se usa en dnsmasq que se ejecuta en su enrutador para resolverlos. Alternativamente, configúrelos manualmente para no tener que depender de DHCP.
  • Elimine cualquier configuración sobrante en /etc/resolv.conf en caso de que haya jugado con ella en el pasado.
  • Configure las PC en su red para usar my.home como el dominio de búsqueda local. Esto se puede hacer a través de DHCP automáticamente, o si se usan direcciones estáticas a través del /etc/network/interfaces o en Network Manager:

    introduzca la descripción de la imagen aquí

  • Ahora deberían funcionar tanto la resolución simple de nombres ( ping hostname ) como el nombre completo (nombre de ping hostname.my.home ).

Basado en la respuesta de gertvdijk, acabo de comentar la línea en nsswitch.conf

 sudo vim /etc/nsswitch.conf . . . hosts: files dns # mdns4_minimal [NOTFOUND=return] dns 

Tengo problemas similares con un / etc / hosts que contiene múltiples espacios entre la IP y el nombre de host, en lugar de usar una TAB Después de cambiar a TAB, el nombre de host se podría resolver haciendo ping.

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

vea también en https://superuser.com/a/938366/467479