Evitar que resolv.conf sea modificado por aplicaciones externas


Este apunte documenta cómo evitar que /etc/resolv.conf sea modificado o destruido por herramientas como Netbird o Tailscale, asegurando una configuración DNS estable y bajo control.


Por qué este archivo se vuelve problemático

En versiones recientes, tanto Tailscale como Netbird tienden a modificar o incluso eliminar y recrear /etc/resolv.conf para introducir sus propios resolvers.

Esto rompe configuraciones personalizadas y, en algunos casos, deja al sistema sin resolución DNS funcional.


Caso real: configuración inmutable en Ubuntu 24.04

Sistema: Ubuntu 24.04

1. Desactivar systemd-resolved

sudo systemctl disable --now systemd-resolved

Esto lo detiene y evita que arranque de nuevo.

2. Eliminar el symlink dinámico

sudo rm -f /etc/resolv.conf

Esto borra el enlace simbólico que apunta a los archivos de resolved.

3. Crear resolv.conf manual

sudo tee /etc/resolv.conf > /dev/null <<EOF
nameserver 192.168.1.5
nameserver 192.168.1.155
search nb.net
options trust-ad edns0 timeout:1 attempts:2 rotate
EOF

4. Hacerlo inmutable

sudo chattr +i /etc/resolv.conf

Esto evita que cualquier programa lo modifique.


Evitar que Tailscale lo modifique

Al iniciar Tailscale, usar:

tailscale up --accept-dns=false

Esto evita que inyecte sus propios DNS.


Evitar que Netbird lo destruya

En versiones anteriores a la 0.52.2, Netbird eliminaba directamente el archivo y lo recreaba.

Opciones:


Restaurar el sistema si algo falla

  1. Quitar la inmutabilidad:
sudo chattr -i /etc/resolv.conf
  1. Borrar el archivo:
sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
  1. Rehabilitar systemd-resolved:
sudo systemctl enable --now systemd-resolved
  1. Verificar:
resolvectl status

Resumen breve


Notas personales

Este sistema evita conflictos incluso tras reinicios y actualizaciones. Hasta ahora, ni Tailscale ni Netbird han vuelto a tocar el archivo tras aplicar todo esto.


Enlaces de interés

Error DNS al usar Tailscale con Headscale (tras aplicar los cambios en resolv.conf, tailscale status mostraba un error de conexión; se solucionó siguiendo ese artículo)


Revision #2
Created 2025-08-03 09:25:07 UTC by Juan Francisco
Updated 2025-12-22 20:13:31 UTC by Juan Francisco