Introducción al Problema de Resolución DNS en Linux
Uno de los dolores de cabeza más comunes para los administradores de sistemas y usuarios avanzados de Linux es perder la conexión a internet a pesar de tener una IP asignada correctamente. El síntoma más claro es poder hacer ping a una dirección IP (como 8.8.8.8), pero recibir un error como Temporary failure in name resolution al intentar navegar o actualizar paquetes. Esto ocurre, en la gran mayoría de los casos, porque el archivo de configuración del sistema encargado de traducir los nombres de dominio a direcciones IP (/etc/resolv.conf) está vacío, mal configurado o ha sido sobrescrito por algún servicio de red como NetworkManager o systemd-resolved.
Causas Principales del Error en /etc/resolv.conf
- El archivo
/etc/resolv.confse ha quedado sin servidores DNS configurados (Nameservers). - Un cliente DHCP o gestor de redes sobrescribe o elimina los servidores DNS automáticamente al reiniciar la interfaz.
- El enlace simbólico de
systemd-resolvedestá roto o apunta a una dirección incorrecta (127.0.0.53). - Problemas temporales con la interfaz de red local o el demonio de red.
Método 1: Solución Temporal Añadiendo Servidores DNS Manualmente
Si necesitas recuperar la conexión a internet de inmediato para poder descargar paquetes o investigar más a fondo, puedes editar el archivo manualmente y añadir servidores DNS públicos (como los de Google o Cloudflare).
- Abre el terminal con permisos de superusuario ejecutando el siguiente comando:
sudo nano /etc/resolv.conf - Añade las líneas correspondientes a los servidores DNS de Google o Cloudflare al principio del archivo:
nameserver 8.8.8.8nameserver 1.1.1.1 - Guarda los cambios presionando
Ctrl + O, luegoEnter, y sal del editor conCtrl + X. - Prueba tu conexión haciendo ping a un dominio:
ping google.com
Nota: Este método es temporal; si reinicias el equipo o el servicio de red, es muy probable que el sistema vuelva a sobrescribir el archivo.
Método 2: Configurar NetworkManager para Evitar que Borre el Archivo
Si utilizas una distribución basada en Debian, Ubuntu o Fedora que emplea NetworkManager, puedes asegurar que los servidores DNS persistan incluso después de reiniciar los servicios de red.
- Abre el archivo de configuración principal de NetworkManager con tu editor preferido:
sudo nano /etc/NetworkManager/NetworkManager.conf - Busca la sección
[main]y asegúrate de añadir o modificar la línea de plugins de DNS de la siguiente manera:dns=default - Guarda y cierra el archivo.
- Reinicia el servicio de NetworkManager para aplicar los cambios de forma permanente:
sudo systemctl restart NetworkManager
Método 3: Restaurar el Enlace Simbólico de systemd-resolved
En sistemas modernos con systemd, /etc/resolv.conf debe ser un enlace simbólico que apunte al archivo stub gestionado por el sistema. Si este enlace se ha roto, la resolución de nombres fallará por completo.
- Comprueba el estado actual del archivo ejecutando:
ls -l /etc/resolv.conf - Si el archivo no es un enlace simbólico o apunta a una ruta errónea, elimínalo o renuévalo con el siguiente comando:
sudo rm /etc/resolv.conf - Crea nuevamente el enlace simbólico correcto hacia systemd-resolved:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf - Reinicia el servicio para restablecer las conexiones:
sudo systemctl restart systemd-resolved
Siguiendo estos pasos habrás recuperado por completo la capacidad de resolución DNS en tu sistema Linux y evitado futuros bloqueos en tus conexiones de red.