Diagnóstico y resolución de fallos DNS

Introducción

Los fallos de resolución DNS son uno de los problemas más frecuentes en administración de sistemas: el servicio está activo pero no se puede acceder por nombre. Con un método sistemático y las herramientas adecuadas, se diagnostican en minutos.

Metodología de diagnóstico

Sigue este orden para aislar el problema:


# 1. ¿Hay conectividad IP básica?
ping -c 3 8.8.8.8          # si falla → problema de red, no de DNS

# 2. ¿El propio nombre de máquina resuelve?
hostname -f
ping -c 1 $(hostname)

# 3. ¿/etc/hosts tiene algo que interfiera?
grep nombre-a-resolver /etc/hosts

# 4. ¿Qué servidor DNS está configurado?
cat /etc/resolv.conf
resolvectl status           # si hay systemd-resolved

# 5. ¿El servidor DNS responde?
dig @$(awk '/^nameserver/{print $2; exit}' /etc/resolv.conf) google.com +short

# 6. ¿La resolución falla solo para un dominio concreto?
dig nombre-problemático.com         # consulta al resolver local
dig @8.8.8.8 nombre-problemático.com  # consulta a DNS público

# 7. ¿Cuál es el orden de resolución?
grep ^hosts /etc/nsswitch.conf
          

Seguir la cadena completa con dig +trace

Muestra la delegación desde los root servers hasta el servidor autoritativo, sin usar caché ni resolver local. Útil para detectar problemas de propagación o configuración de zona:


dig +trace google.com
# Verás la cadena completa:
# . (root) → .com (TLD) → google.com (autoritativo) → respuesta final
          

Problemas comunes y soluciones

1. /etc/resolv.conf vacío o con servidor incorrecto


# Síntoma: dig falla, ping por IP funciona
cat /etc/resolv.conf     # comprobar si hay nameserver

# Solución temporal (se pierde al reiniciar en sistemas gestionados)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

# Solución persistente en Ubuntu con Netplan:
# añadir nameservers en /etc/netplan/xx.yaml y ejecutar:
sudo netplan apply
          

2. systemd-resolved caído o con caché corrupta


systemctl status systemd-resolved
systemctl restart systemd-resolved
resolvectl flush-caches
          

3. Entrada incorrecta en /etc/hosts


# Síntoma: un nombre resuelve a la IP equivocada
grep nombre /etc/hosts
# Si existe una entrada errónea, editarla o eliminarla:
sudo nano /etc/hosts
          

4. El servidor DNS interno no resuelve nombres públicos


# Comparar resolución interna vs. externa
dig nombre.empresa.com              # usa el DNS configurado
dig @8.8.8.8 nombre.empresa.com     # usa DNS público

# Si el DNS interno no reenvía consultas externas (forwarders),
# solo resolverá los nombres de la zona interna
          

5. El TTL de la caché da respuestas antiguas


# Ver el TTL restante en la respuesta de dig
dig google.com | grep -A5 'ANSWER SECTION'
# El número antes de IN es el TTL en segundos

# Limpiar la caché de systemd-resolved
resolvectl flush-caches
resolvectl statistics    # verificar que Cache Size bajó a 0
          

6. Orden de resolución incorrecto en nsswitch.conf


# Síntoma: /etc/hosts no tiene efecto
cat /etc/nsswitch.conf | grep ^hosts
# Si dice "dns files" en vez de "files dns", /etc/hosts queda ignorado
# Corrección: editar y poner "files dns" primero
          

Resumen de comandos de diagnóstico


dig nombre.com                      # consulta al resolver del sistema
dig +short nombre.com               # solo la IP de respuesta
dig @8.8.8.8 nombre.com             # consulta a un DNS específico
dig +trace nombre.com               # traza completa desde root servers
dig -x 1.2.3.4                      # resolución inversa
host nombre.com                     # consulta rápida
nslookup nombre.com                 # compatible con entornos Windows
resolvectl query nombre.com         # consulta a systemd-resolved
resolvectl status                   # estado del resolver y DNS por interfaz
resolvectl flush-caches             # limpiar caché DNS
cat /etc/resolv.conf                # servidor DNS configurado
grep ^hosts /etc/nsswitch.conf      # orden de resolución
grep nombre /etc/hosts              # entradas locales estáticas
          

Para el examen LPIC-1 (objetivo 109.3): dominar el flujo de diagnóstico y saber en qué capa (hosts, resolver, DNS) está el problema.

Servicio de directorio con OpenLDAP

Índice de la sección

Índice del curso