El stack de resolución DNS en Linux
Introducción
Cuando escribes ping servidor.empresa.com, Linux necesita convertir ese nombre en una dirección
IP. Ese proceso pasa por tres capas en orden: primero consulta la tabla local
/etc/hosts, luego pregunta al servidor DNS configurado en
/etc/resolv.conf, y el orden de esas capas lo define
/etc/nsswitch.conf. Entender estas tres piezas es imprescindible para diagnosticar cualquier
fallo de resolución.
/etc/nsswitch.conf — el árbitro del orden
Define el orden en que el sistema consulta las distintas fuentes para resolver nombres, usuarios, grupos, etc.
La línea clave para DNS es hosts:
# /etc/nsswitch.conf (fragmento)
hosts: files dns myhostname
files— consulta primero/etc/hostsdns— si no lo encuentra, pregunta al servidor DNS de/etc/resolv.confmyhostname— resuelve el propio hostname de la máquina aunque no esté en ningún sitio
Si cambias el orden a dns files, el DNS tiene preferencia sobre /etc/hosts. En
sistemas con systemd-resolved, suele aparecer también resolve o
mdns4_minimal.
/etc/hosts — resolución local estática
Tabla de resolución local que tiene prioridad sobre el DNS (según el orden de
nsswitch.conf). Muy útil para pruebas, entornos sin DNS o redirecciones locales.
# Formato: IP nombre_principal [alias...]
127.0.0.1 localhost
127.0.1.1 mi-maquina.local mi-maquina
192.168.1.10 servidor.empresa.com servidor
10.0.0.1 router gw
El cambio es efectivo de inmediato, sin necesidad de reiniciar ningún servicio.
/etc/resolv.conf — el servidor DNS
Indica qué servidores DNS consultar y el dominio de búsqueda por defecto.
# /etc/resolv.conf
nameserver 8.8.8.8 # servidor DNS primario
nameserver 8.8.4.4 # servidor DNS secundario
search empresa.com local # dominio de búsqueda (prueba sin FQDN)
domain empresa.com # dominio por defecto
options timeout:2 attempts:3
Directivas más habituales:
nameserver— IP del servidor DNS (se pueden poner hasta 3)-
search— lista de dominios que se añaden automáticamente si el nombre no es un FQDN. Consearch empresa.com, una consulta aservidorprueba tambiénservidor.empresa.com domain— dominio local (equivalente a unsearchde un único dominio)options timeout:N— segundos de espera por respuestaoptions attempts:N— reintentos antes de pasar al siguiente servidor
Atención: en sistemas con systemd-resolved o NetworkManager,
/etc/resolv.conf suele ser un enlace simbólico gestionado automáticamente. Editarlo a mano puede ser
sobreescrito al reiniciar la red.
# Comprobar si es un enlace simbólico
ls -la /etc/resolv.conf
# → /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf