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 experimentar una pérdida repentina de conexión a internet debido a fallos en la resolución de nombres de dominio (DNS). A menudo, al revisar el archivo /etc/resolv.conf, notamos que la configuración de los servidores DNS (como los de Google o Cloudflare) ha desaparecido o ha sido modificada por el sistema.
Esto ocurre generalmente porque NetworkManager o servicios como systemd-resolved sobrescriben el archivo cada vez que la red se reinicia. En este artículo te mostraremos las causas y los mejores métodos para solucionarlo de forma definitiva.
Causas principales del error en resolv.conf
- El servicio NetworkManager sobrescribe el archivo en cada reconexión de red.
- El daemon
systemd-resolvedgestiona los enlaces simbólicos de forma incorrecta. - Permisos de modificación inadecuados en el archivo de configuración.
- Configuración estática incorrecta en interfaces de red.
Método 1: Bloquear los cambios en resolv.conf usando atributos de archivos
Si necesitas una solución rápida y directa para evitar que cualquier proceso modifique tu archivo resolv.conf, puedes utilizar el comando chattr para hacer que el archivo sea inmutable.
- Abre tu terminal de Linux.
- Edita el archivo con permisos de superusuario usando tu editor favorito:
sudo nano /etc/resolv.conf - Añade los servidores DNS deseados, por ejemplo:
nameserver 8.8.8.8ynameserver 1.1.1.1. - Guarda y cierra el archivo.
- Aplica el atributo de inmutabilidad ejecutando:
sudo chattr +i /etc/resolv.conf
Nota: Si en el futuro necesitas editar nuevamente el archivo, deberás retirar el atributo inmutable con el comando sudo chattr -i /etc/resolv.conf.
Método 2: Configurar correctamente NetworkManager
En distribuciones modernas como Ubuntu, Fedora o Debian, NetworkManager es el encargado de gestionar las conexiones. Forzarlo a no sobrescribir el archivo es la práctica recomendada.
- Abre el archivo de configuración de NetworkManager:
sudo nano /etc/NetworkManager/NetworkManager.conf - Dentro de la sección
[main], añade la siguiente línea:dns=none - Guarda los cambios y sal del editor.
- Reinicia el servicio de NetworkManager para aplicar los cambios:
sudo systemctl restart NetworkManager
Método 3: Configurar systemd-resolved de manera persistente
Si tu distribución utiliza systemd-resolved, la mejor práctica no es editar directamente resolv.conf, sino configurar el archivo auxiliar que este servicio utiliza.
- Edita el archivo de configuración global de systemd:
sudo nano /etc/systemd/resolved.conf - Busca la línea que dice
#DNS=, descoméntala y añade tus servidores separados por espacios:DNS=8.8.8.8 1.1.1.1 - Reinicia y habilita el servicio systemd-resolved:
sudo systemctl restart systemd-resolved - Verifica que el enlace simbólico apunte correctamente ejecutando:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf