Tengo un servidor Fedora 20 recién construido que acabo de conectar a mi red. Es un servidor virtual que se ejecuta en un host VirtualBox. Todo parece estar funcionando pero tengo un problema con la resolución de nombres.
(Debo decir en este punto que la resolución de nombres la proporciona un servidor Windows en hardware separado que funciona bien para todas las demás máquinas de la red).
Desde la línea de comando puedo resolver un host externo como unix.stackexchange.com
. Puedo resolverlo felizmente y hacer ping, como con cualquier otro host externo que haya probado.
Sin embargo, mi red local (llamémosla xyz.local
) es diferente. La interfaz de red en mi máquina F20 está DOMAIN=xyx.local
en el script de red (script completo a continuación). Desde la línea de comando puedo resolver, digamos, server-01
pero no server-01.xyz.local
.
Puedo resolver un alias en forma corta, aunque el nombre canónico sea la forma larga, por lo que, por ejemplo, ping mysql
se resuelve con éxito en su alias linux-04.xyz.local
, pero no puedo resolver ni mysql.xyz.local
ni linux-04.xyz.local
.
Claramente me he perdido algo. ¿Alguien puede sugerir qué?
/etc/hosts sólo tiene las entradas estándar de localhost para 127.0.0.1
/etc/resolv.conf es el siguiente:
#Generated by Network Manager
search xyz.local
nameserver 192.168.xxx.xxx
Mi script de interfaz es
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=<uuid>
ONBOOT=yes
IPADDR0=192.168.xxx.xxx
PREFIX0=24
GATEWAY0=192.168.xxx.xxx
DNS1=192.168.xxx.xxx
HWADDR=<mac>
DOMAIN=xyz.local
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
Respuesta1
Es probable que parte de su problema se deba a que su ruta de búsqueda se genera automáticamente a través de NetworkManager:
search xyz.local
Esta línea realmente debería ser esta:
search xyz.local.
El punto al final es crítico ya que le indica al solucionador de DNS que se detenga. Entonces no te hará cosas como esta:
mysql.xyz.local.xyz.local
Puedes confirmar esto intentando resolver los nombres de host agregando manualmente un punto tú mismo, de forma temporal.
$ nslookup mysql.xyz.local.
Resolviendo este dominio en todo el mundo
Para resolver esto, deberá cambiar la definición de su dominio en su servidor DHCP para que sirva el dominio como xyz.local.
.
/etc/nsswitch.conf
El método utilizado para resolver un nombre de host está controlado por el archivo /etc/nsswitch.conf
. La notación NSS significa Name Service Switch y puede leer más sobre ella en la página de manual man nss
.
Aquí está la línea de mi archivo que controla cómo se resuelven los nombres de host:
$ grep ^hosts /etc/nsswitch.conf
hosts: files dns mdns4_minimal
Primero mira mi archivo local /etc/hosts
y luego consulta DNS.
Respuesta2
El problema se debe a la palabra clave "mdns4_minimal" en el archivo nsswitch.conf. Esta palabra clave le dice al solucionador que todo lo que termine en local debe consultarse usando mdns. Debería ser suficiente eliminar esa palabra clave (y las opciones adicionales que normalmente aparecen entre corchetes).
Más detalles puedes encontrar en micorreo
La razón por la cual nslookup resuelve todo es porque no busca en nsswitch.conf sino que usa /etc/resolv.conf directamente. ping, por otro lado, depende del solucionador que primero busca en nsswitch.conf y resuelve el nombre usando lo que esté escrito allí.