Introducción al problema del archivo /etc/resolv.conf en Linux
Uno de los dolores de cabeza más comunes para los administradores de sistemas Linux es configurar de forma manual los servidores DNS en el archivo /etc/resolv.conf y descubrir que, tras reiniciar el servidor o el servicio de red, todos los cambios han desaparecido y el archivo ha vuelto a su estado original o ha sido reemplazado por defecto.
Causas principales de este fallo en distribuciones Linux
Este comportamiento no es un error del sistema operativo en sí, sino una característica gestionada por demonios de red automatizados. Las causas más frecuentes son:
- El uso de gestores de red como NetworkManager que sobrescriben la configuración de DNS dinámicamente.
- Servicios como
resolvconfosystemd-resolvedque controlan de forma centralizada la resolución de nombres. - Interfaces de red configuradas con DHCP que actualizan automáticamente los servidores de nombres proporcionados por el router o proveedor de internet.
Método 1: Desactivar la gestión automática en NetworkManager
Si tu distribución utiliza NetworkManager, puedes configurarlo para que no modifique el archivo /etc/resolv.conf de forma automática.
- Abre el archivo de configuración de NetworkManager con tu editor favorito:
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 (en nano, pulsa Ctrl+O, Enter y luego Ctrl+X).
- Reinicia el servicio de NetworkManager para aplicar los cambios ejecutando:
sudo systemctl restart NetworkManager
Método 2: Configurar correctamente systemd-resolved (Ubuntu / Debian)
En sistemas modernos basados en systemd, el servicio systemd-resolved gestiona las peticiones DNS. Para establecer DNS estáticos de forma permanente:
- Abre el archivo de configuración de systemd-resolved:
sudo nano /etc/systemd/resolved.conf - Busca las líneas comentadas correspondientes a
DNS=yFallbackDNS=. - Descoméntalas (elimina el símbolo #) y añade tus servidores DNS deseados, por ejemplo:
DNS=8.8.8.8 8.8.4.4 - Guarda el archivo y reinicia el servicio con el comando:
sudo systemctl restart systemd-resolved
Método 3: Convertir resolv.conf en un archivo estático inmutable
Si los métodos anteriores no funcionan o necesitas una solución drástica, puedes bloquear los atributos del archivo para que ningún proceso pueda modificarlo, ni siquiera el propio sistema.
- Primero, edita el archivo manualmente y deja los servidores DNS que necesites:
sudo nano /etc/resolv.conf - Aplica el atributo de inmutabilidad al archivo ejecutando el siguiente comando:
sudo chattr +i /etc/resolv.conf - Nota: Si en el futuro necesitas volver a modificar el archivo, deberás quitar el atributo inmutable primero con:
sudo chattr -i /etc/resolv.conf