Introducción al Problema con /etc/resolv.conf en Linux
Uno de los dolores de cabeza más comunes para los administradores de sistemas y usuarios avanzados de Linux ocurre al intentar cambiar los servidores DNS editando el archivo /etc/resolv.conf. A menudo, tras reiniciar el equipo o el servicio de red, los cambios desaparecen misteriosamente y el archivo vuelve a su estado original o es sobrescrito por herramientas como NetworkManager o systemd-resolved.
Causas Principales de la Sobrescritura de DNS
Las causas de este comportamiento se deben principalmente a la automatización de la red en las distribuciones modernas de Linux:
- El servicio NetworkManager gestiona dinámicamente las conexiones y regenera el archivo en cada arranque.
- El daemon systemd-resolved utiliza un enlace simbólico que apunta a una configuración interna (
/run/systemd/resolve/stub-resolv.conf). - Herramientas como resolvconf están configuradas para actualizar automáticamente el archivo basándose en la interfaz de red activa.
Método 1: Configurar NetworkManager para Evitar que Sobrescriba resolv.conf
Si tu distribución utiliza NetworkManager (común en Ubuntu, Fedora y Debian), puedes indicarle que no modifique el archivo de configuración de DNS.
- Abre el archivo de configuración principal de NetworkManager con tu editor favorito:
sudo nano /etc/NetworkManager/NetworkManager.conf - Busca la sección
[main]y añade la siguiente línea:dns=none - Guarda los cambios y sal del editor (en nano presiona
Ctrl+O,Entery luegoCtrl+X). - Reinicia el servicio de NetworkManager para aplicar los cambios:
sudo systemctl restart NetworkManager
Método 2: Desactivar systemd-resolved y Usar un Archivo Estático
Si systemd-resolved es el culpable de que no puedas editar libremente tu archivo de DNS, puedes desactivarlo y crear un enlace simbólico manual.
- Detén y desgracia el servicio systemd-resolved ejecutando:
sudo systemctl disable --now systemd-resolved sudo rm /etc/resolv.confecho 'nameserver 8.8.8.8' | sudo tee /etc/resolv.confecho 'nameserver 1.1.1.1' | sudo tee -a /etc/resolv.conf
Elimina el enlace simbólico actual que apunta al archivo dinámico:
Crea un nuevo archivo /etc/resolv.conf de forma manual con tus servidores DNS deseados:
Método 3: Hacer el Archivo Inmutable (Solución Definitiva)
Si las opciones anteriores no funcionan debido a paquetes de red intrusivos, puedes utilizar los atributos del sistema de archivos de Linux para proteger el archivo contra cualquier modificación, incluso por parte del sistema.
- Configura primero tus DNS preferidos en
/etc/resolv.confmediante tu editor de texto. - Aplica el atributo de inmutabilidad ejecutando el siguiente comando:
sudo chattr +i /etc/resolv.conf - Si en el futuro necesitas modificar los DNS nuevamente, deberás remover primero el atributo inmutable con:
sudo chattr -i /etc/resolv.conf