Resolución de Nombres en Linux
Resumen de una línea
Sistema de traducción de nombres a IPs mediante /etc/resolv.conf, /etc/nsswitch.conf, /etc/hosts y systemd-resolved.
Concepto
Resolución de nombres es cómo Linux traduce nombres (www.example.com) a direcciones IP. Involucra múltiples ficheros y servicios en un orden específico.
Flujo de Resolución
Aplicación solicita IP
↓
Consulta /etc/nsswitch.conf (¿qué usar?)
↓
Si "files": busca en /etc/hosts
↓
Si "dns": consulta systemd-resolved (localhost:53 o 127.0.0.53:53)
↓
systemd-resolved consulta servidores en /etc/resolv.conf
↓
Retorna IP (en caché)
Fichero 1: /etc/resolv.conf
Especifica servidores DNS y comportamiento de búsqueda:
# Servidores DNS (en orden)
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
# Dominio por defecto (se añade a nombres incompletos)
domain example.com
# Dominios de búsqueda (varios)
search example.com subdomain.com
# Opciones de resolución
options timeout:2 attempts:3 rotateParámetros Clave
| Parámetro | Función |
|---|---|
nameserver | IP servidor DNS |
domain | Dominio a añadir a consultas incompletas |
search | Lista de dominios para búsqueda |
options timeout:N | Timeout en segundos |
options attempts:N | Reintentos por servidor |
options rotate | Rota entre servidores |
Fichero 2: /etc/nsswitch.conf
Define el orden de búsqueda para resolución de nombres:
# Buscar primero /etc/hosts, luego DNS
hosts: files dns
# Solo /etc/hosts (no DNS)
# hosts: files
# DNS primero, luego /etc/hosts
# hosts: dns filesValores Comunes
| Fuente | Función |
|---|---|
files | /etc/hosts (local) |
dns | systemd-resolved (servicios DNS) |
myhostname | Nombre de máquina del sistema |
mymachines | Contenedores systemd-nspawn |
Fichero 3: /etc/hosts
Base de datos local de nombres (no necesita DNS):
127.0.0.1 localhost
::1 localhost
# Máquinas en red local
192.168.1.10 servidor.example.local servidor
192.168.1.20 web.example.local web
192.168.1.30 db.example.local dbUso real: Máquinas internas que no están en DNS público:
# Evitar consultar DNS público cada vez
10.0.0.1 kubernetes.local
10.0.0.2 docker.localsystemd-resolved
Servicio DNS moderno que maneja resolución en sistemas systemd:
Características
- Caché DNS local (más rápido)
- mDNS para
.localdomains (sin servidor central) - DNSSEC (validación de seguridad)
- DNS over TLS (privacidad)
Puertos
- 127.0.0.53:53 — Stub resolver (recomendado)
- 127.0.0.1:53 — Legacy socket (antiguo)
Ubicación en Debian/Ubuntu
Ubuntu 22.04+: Usa stub resolver
# /run/systemd/resolve/stub-resolv.conf apunta a 127.0.0.53Debian 12: Enlaza directo a DNS configurado
# /run/systemd/resolve/resolv.conf lista servidores realesComandos de Gestión
# Ver estado DNS actual
resolvectl status
# Ver DNS por interfaz
resolvectl query example.com
# Estadísticas de caché
resolvectl statistics
# Limpiar caché
resolvectl flush-caches
# Configurar DNS globales
sudo resolvectl dns eth0 8.8.8.8 8.8.4.4
# Configurar DNS por interfaz
echo "nameserver 8.8.8.8" | sudo tee /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolvedConfiguración de systemd-resolved
Fichero: /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4 1.1.1.1
FallbackDNS=8.8.8.8
Domains=example.com ~localdomain
DNSSEC=yes
DNS_over_TLS=no
mDNS=yesmDNS: Nombres Locales sin DNS Central
Permite .local domains automáticamente (similar Bonjour):
# Con mDNS activado en systemd-resolved
ping servidor.local # Funciona sin DNS
ping micompu.local # Descubre en la red localRequiere: avahi-daemon (mDNS) instalado
Caso Real: Orden Completo
Cliente pregunta por www.example.com:
- nsswitch.conf dice:
hosts: files dns - Busca
/etc/hosts→ No encontrado - Consulta systemd-resolved (puerto 127.0.0.53)
- systemd-resolved mira
/etc/resolv.conf→ encuentranameserver 8.8.8.8 - Consulta Google DNS → Retorna 93.184.216.34
- Caché localmente → Siguientes consultas son instantáneas
- Retorna a cliente
Ventajas del Nuevo Sistema
✅ Caché — Faster DNS after first query ✅ DNSSEC — Validación de autenticidad ✅ DNS over TLS — Privacidad contra ISP ✅ mDNS — Nombres locales sin servidor ✅ Flexible — Diferentes DNS por interfaz
Troubleshooting Común
# ¿Qué DNS estoy usando?
resolvectl status
# ¿Está systemd-resolved activo?
systemctl status systemd-resolved
# ¿Resuelve correctamente?
nslookup example.com
dig example.com
# Ver logs de resolución
journalctl -u systemd-resolved -fComparativa: Evolución
| Aspecto | Antiguo (ifupdown) | Moderno (systemd-resolved) |
|---|---|---|
| DNS | /etc/resolv.conf estático | Dinámico, por interfaz |
| Caché | Ninguno (aplicación) | systemd-resolved caché |
| mDNS | No | avahi daemon |
| DNSSEC | No | ✅ Sí |
| Privacidad | No | DoT (DNS over TLS) |
Relaciones
Conecta con
- Resolución de Nombres en Linux — Concepto
- Configuración de Red en Linux — Parte de configuración
- Fundamentos de DNS — Protocolo DNS
- Bind9 — Servidor DNS autoritativo
- dnsmasq — DNS + DHCP local
Fuentes
- Resolución de Nombres en Linux — Configuración systemd-resolved y nsswitch