Una VPN en malla es de esas herramientas que lo simplifican todo en silencio: tu portátil, tu servidor de casa, tu móvil y tus VPS se ven entre sí con direcciones privadas, estén donde estén. El problema de las VPN en malla alojadas es el servidor de coordinación: una empresa guarda el mapa de todos tus dispositivos. Headscale es un sustituto de código abierto para ese servidor de control. Ejecútalo en un VPS pequeño, sigue usando las apps de siempre, y el mapa es tuyo.
Cómo encaja todo
- Headscale (en tu VPS) reparte direcciones, distribuye claves públicas y aplica tus ACL.
- Los clientes son las apps estándar de Tailscale, apuntadas a tu servidor.
- El tráfico va de dispositivo a dispositivo por WireGuard. El servidor de control nunca lo transporta.
Ese último punto es la razón de que baste un plan diminuto: el VPS solo responde a pequeñas peticiones de coordinación.
Qué necesitas
- Nano-IP ($8/mes): 2 vCPU y 1 GB de RAM es muchísimo más de lo que usa Headscale.
- Una IPv4 dedicada y un dominio, por ejemplo
hs.example.com. Los dispositivos hablan con el servidor de control por HTTPS, así que el VPS debe aceptar el 443 entrante, algo que los planes NAT no hacen (detalles).
Instalación (Debian 12 / Ubuntu 24.04)
Descarga el .deb actual desde la página de versiones de Headscale en GitHub; sustituye la versión por la más reciente:
HS_VER=0.26.1
wget -O headscale.deb \
"https://github.com/juanfont/headscale/releases/download/v${HS_VER}/headscale_${HS_VER}_linux_amd64.deb"
apt install -y ./headscale.deb caddy
Edita /etc/headscale/config.yaml; estas son las dos líneas que importan:
server_url: https://hs.example.com
listen_addr: 127.0.0.1:8080
Pon Caddy delante para el HTTPS:
cat > /etc/caddy/Caddyfile <<'EOF'
hs.example.com {
reverse_proxy 127.0.0.1:8080
}
EOF
systemctl enable --now headscale
systemctl reload caddy
Añadir un usuario y un dispositivo
headscale users create alice
headscale users list # note the user's ID
headscale preauthkeys create --user 1 --expiration 24h
Las versiones antiguas esperan el nombre del usuario en lugar del ID en --user; headscale preauthkeys create --help te dirá qué espera la tuya.
En un dispositivo Linux:
tailscale up --login-server https://hs.example.com --authkey YOUR_KEY
En móviles y ordenadores, la app de Tailscale permite definir un servidor de control personalizado en sus ajustes. Ejecuta headscale nodes list en el VPS y tu dispositivo debería aparecer.
Relés y travesía de NAT
La mayoría de los dispositivos se conectan directamente. Cuando dos no pueden (redes móviles estrictas, doble NAT), el tráfico pasa por un relé DERP. De serie, Headscale usa los relés públicos de Tailscale, que solo ven paquetes cifrados. Si no quieres nada externo en el camino, activa el relé integrado en config.yaml (derp.server.enabled: true) y abre el UDP 3478. El tráfico retransmitido contará entonces contra el ancho de banda de tu VPS.
Límites, con honestidad
No hay panel web oficial: usuarios, claves y rutas son comandos de la CLI (a la segunda vez ya no cuesta). Las novedades del servicio alojado llegan tarde a Headscale, si es que llegan. Y el servidor de control ahora es responsabilidad tuya: si se cae, las conexiones existentes siguen funcionando, pero los dispositivos nuevos no pueden unirse y las claves no se renuevan. Haz copia: todo el estado está en /var/lib/headscale.
Para un homelab, una familia o un equipo pequeño que quiere sacar el mapa de sus dispositivos de servidores ajenos, es uno de los mejores usos de un VPS de $8.
Relacionado
- Autoalojar una VPN WireGuard: WireGuard a secas, si solo necesitas un túnel
- VPS para una VPN
- VPS para acceso remoto a Home Assistant
Comentarios
Aún no hay comentarios. Sé el primero.