Proxmox · 2 min
Tailscale te cambia el DNS del nodo Proxmox (y tus contenedores se quedan sin internet “a veces”)
Los fallos que más cuestan son los que no se repiten siempre. Este es uno de esos: después de reiniciar un nodo Proxmox, algunos contenedores se quedaban sin poder resolver nombres. Otros, en el mismo nodo, iban perfectamente. Y tras el siguiente reinicio, a lo mejor fallaban otros distintos.
El síntoma: Jellyfin sin carátulas
Lo noté por Jellyfin. Las películas nuevas entraban sin carátula, sin sinopsis, sin nada, y forzar la búsqueda a mano tampoco funcionaba. En el registro aparecían errores de TheMovieDb, OMDb y MusicBrainz a la vez.
Esa coincidencia es la primera pista: si fallan todos los proveedores al mismo tiempo, no es un proveedor caído. Es la red. Y efectivamente, dentro del contenedor:
ping 1.1.1.1 # responde
getent hosts api.themoviedb.org # se queda colgado y no devuelve nadaInternet salía, pero el DNS no contestaba.
La causa: MagicDNS escribe en el resolv.conf del nodo
Si instalas Tailscale en el propio nodo Proxmox con la opción de aceptar DNS activada (la que viene por defecto), Tailscale escribe esto en el /etc/resolv.conf del nodo:
nameserver 100.100.100.100Esa dirección es el servidor DNS de Tailscale, y solo existe para quien tiene Tailscale instalado. El nodo lo tiene, así que a él le funciona.
El problema son los contenedores LXC que no tienen un DNS propio configurado: al arrancar, Proxmox les copia el DNS del nodo. Se llevan el 100.100.100.100… y como dentro del contenedor no hay Tailscale, todas sus consultas DNS acaban en el vacío.
Por qué falla “solo a veces”
Depende del orden de arranque. Si un contenedor arranca antes de que Tailscale haya tocado el resolv.conf del nodo, se lleva el DNS bueno y funciona. Si arranca después, se lleva el de Tailscale y se queda ciego. Por eso el fallo se mueve de un contenedor a otro entre reinicios, y por eso es tan fácil “arreglarlo” cambiando el DNS a mano sin entender qué pasó… hasta que vuelve.
El arreglo
1. Decirle a Tailscale que no toque el DNS del nodo:
tailscale set --accept-dns=falseTailscale sigue funcionando exactamente igual; solo deja de reescribir el resolv.conf. Si usas los nombres *.ts.net desde el nodo, eso sí dejará de resolverse; si te conectas por IP, no notarás nada.
2. Poner en el nodo un DNS normal, el de tu red (tu router, AdGuard, Pi-hole…) y uno público de respaldo, en /etc/resolv.conf.
3. Dar a cada contenedor su propio DNS, para que no dependa nunca de lo que tenga el nodo:
pct set <ID> --nameserver "192.168.1.53 1.1.1.1"Se aplica en el siguiente arranque del contenedor. Si no quieres esperar, edita a mano su /etc/resolv.conf por dentro.
Cómo comprobarlo
En el nodo, para ver si Tailscale está gestionando el DNS:
tailscale debug prefs | grep CorpDNSTiene que dar false. Ojo: un tailscale up con otras opciones o una reinstalación pueden volver a activarlo.
Lo que me llevé de esto
- Si fallan todos los servicios externos a la vez, mira el DNS antes que nada:
getent hostsdentro del contenedor te lo dice en un segundo. - “Hace ping pero no funciona” casi siempre es DNS.
- El mismo problema aparece en contenedores que llevan Tailscale dentro con MagicDNS: también ahí conviene
--accept-dns=falsesi no usas los nombres de la tailnet. - Y un efecto secundario con Jellyfin: las pelis que entraron mientras no había DNS se quedaron con un
.nfosin identificar, que Jellyfin se cree a pies juntillas. Hubo que borrarlos y volver a identificar esas pelis.