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 en Linux es la modificación del archivo /etc/resolv.conf para cambiar los servidores DNS. A menudo, el usuario edita el archivo, guarda los cambios, pero al reiniciar la red o el equipo, la configuración anterior regresa o el archivo se sobrescribe por completo. Esto interrumpe la navegación y la resolución de nombres.
Causas principales por las que se sobrescribe resolv.conf
En las distribuciones modernas de Linux (como Ubuntu, Debian, Fedora o CentOS), la gestión de la red se delega a servicios automatizados como NetworkManager, systemd-resolved o resolvconf. Estos demonios sobrescriben dinámicamente el archivo /etc/resolv.conf cada vez que se establece una nueva conexión de red, ignorando cualquier cambio manual realizado por el usuario.
Método 1: Desactivar la gestión estática y usar NetworkManager
Si tu distribución utiliza NetworkManager, la forma más limpia de mantener tus DNS personalizadas sin que el archivo sea reemplazado es configurarlo a través de la interfaz de red o mediante el archivo de configuración de NetworkManager.
- Abre el archivo de configuración principal de NetworkManager con privilegios de superusuario:
sudo nano /etc/NetworkManager/NetworkManager.conf - Busca la sección
[main]y asegúrate de añadir o modificar la línea del plugin de DNS:dns=defaultodns=systemd-resolved - Guarda el archivo presionando
Ctrl + Oy sal conCtrl + X. - Configura las DNS estáticas directamente para tu conexión activa usando la herramienta
nmclio la interfaz gráfica.
Método 2: Configurar systemd-resolved correctamente (Ubuntu y Debian)
En sistemas que utilizan systemd-resolved, el archivo /etc/resolv.conf suele ser un enlace simbólico a /run/systemd/resolve/stub-resolv.conf. Para fijar tus DNS de forma permanente:
- Abre el archivo de configuración de systemd-resolved:
sudo nano /etc/systemd/resolved.conf - Busca la línea que dice
#DNS=y descoméntala borrando el signo #, añadiendo tus servidores DNS deseados separados por espacios. Ejemplo:DNS=8.8.8.8 1.1.1.1 - Guarda los cambios y reinicia el servicio para aplicar la nueva configuración:
sudo systemctl restart systemd-resolved - Verifica que el enlace simbólico apunte correctamente ejecutando:
ls -l /etc/resolv.conf
Método 3: Hacer el archivo inmutable (Solución rápida pero drástica)
Si los métodos anteriores fallan o necesitas una solución inmediata que evite cualquier modificación automática por parte del sistema operativo, puedes utilizar los atributos extendidos del sistema de archivos para hacer que /etc/resolv.conf sea completamente inmutable.
- Primero, edita el archivo manualmente con tus servidores DNS preferidos:
sudo nano /etc/resolv.conf - Añade las líneas correspondientes, por ejemplo:
nameserver 8.8.8.8nameserver 1.1.1.1 - Guarda y cierra el editor.
- Aplica el atributo de inmutabilidad mediante el comando chattr:
sudo chattr +i /etc/resolv.conf
Nota importante: Si en el futuro necesitas cambiar las DNS nuevamente, primero tendrás que quitar el atributo inmutable ejecutando sudo chattr -i /etc/resolv.conf.