Por qué auto-alojar el servidor de control
Tailscale es un software excepcional: el rendimiento de WireGuard, clientes multiplataforma y un magic DNS que funciona a la primera. El plano de control (el servidor de coordinación que distribuye las claves y las ACL) es la parte que se ejecuta en la nube de Tailscale. Headscale reimplementa ese servidor de coordinación en Go de código abierto para que usted pueda ejecutarlo en su propia infraestructura.
Más allá del límite de 3 usuarios del plan gratuito, la principal razón para auto-alojarlo es la residencia de los datos: el plano de control sabe qué máquinas están en su red, sus IP y sus políticas de ACL. Ejecutar Headscale significa que esa información se queda en su VPS, y no en la nube de otra persona.
Lo que le aporta Headscale auto-alojado
- Usuarios y dispositivos ilimitados: sin tope de 3 usuarios ni tarifas por puesto; su red mallada crece con su equipo.
- Los clientes oficiales de Tailscale en todas partes: Linux, macOS, Windows, iOS, Android; no hace falta ningún fork propio ni cliente alternativo.
- Túneles WireGuard punto a punto: Headscale solo gestiona el intercambio de claves y la distribución de las ACL; todo el tráfico real circula directamente por WireGuard entre los pares.
- Magic DNS: resuelva cada nodo de su red mallada por su nombre de host (machine.headnet.local) sin tocar su DNS público.
- Listas de control de acceso HuJSON: el mismo formato de política de ACL que Tailscale; defina qué usuarios y qué dispositivos pueden acceder a qué servicios.
- Compatibilidad con los relés DERP: use el mapa DERP público de Tailscale para atravesar el NAT, o despliegue su propio relé privado.
- API REST y CLI headscale: cree namespaces, emita claves de preautenticación y gestione los pares mediante programación.
- Menos de 50 MB de RAM en reposo: funciona con holgura en un VPS de 1 GB junto a otras cargas de trabajo.
Requisitos previos
Un VPS con al menos 1 vCPU y 512 MB de RAM bajo Ubuntu 22.04, con Docker y Docker Compose v2 instalados. Un nombre de dominio que apunte al VPS es obligatorio: los clientes Tailscale se conectan al servidor de control por URL, y el HTTPS (mediante un reverse proxy como Caddy o Nginx con Let's Encrypt) es muy recomendable. El puerto 8080 debe ser accesible desde Internet (o únicamente desde sus dispositivos si prefiere un plano de control puramente interno).
Desplegar Headscale con Docker Compose
Redactar el archivo Compose
Cree
/opt/headscale/compose.yaml. La stack solo tiene un servicio:headscale/headscale:0.29.2. Headscale almacena todo (claves, base de datos, registros de los nodos) en volúmenes Docker con nombre, montados en/etc/headscale(configuración) y/var/lib/headscale(datos). No hace falta ningún servicio externo de base de datos ni de caché; SQLite viene integrado.Generar la configuración
Headscale lee su configuración desde
/etc/headscale/config.yaml. El único campo obligatorio esserver_url: la URL HTTPS a la que se conectarán sus clientes Tailscale (por ejemplohttps://vpn.su-dominio.com). Definalisten_addr: 0.0.0.0:8080ydatabase.type: sqlite3con una ruta bajo/var/lib/headscale. Las rutas de las claves privadas (private_key_path,noise.private_key_path) las genera Headscale automáticamente en el primer arranque si no existen. En ServOrbit, el job de aprovisionamiento escribeconfig.yamla partir de su dominio automáticamente.Arrancar el contenedor y verificar
Ejecute
docker compose up -d. Headscale genera automáticamente su clave privada WireGuard y su clave noise, y luego se pone a escuchar en el puerto 8080. Compruebe el endpoint de salud:curl -s http://localhost:8080/healthdebe devolver{"status":"pass"}. La CLI headscale está disponible dentro del contenedor:docker exec headscale headscale versionpara confirmar la versión en ejecución.Crear un usuario y generar una clave de autenticación
Tailscale organiza los dispositivos en «usuarios» (antes llamados namespaces). Cree uno:
docker exec headscale headscale users create myteam. Genere después una clave de preautenticación para registrar los dispositivos:docker exec headscale headscale preauthkeys create --user myteam --reusable --expiration 24h. Copie la clave que se muestra: la usará para registrar cada dispositivo.Registrar un dispositivo
En cualquier dispositivo que tenga el cliente oficial de Tailscale, apúntelo a su instancia de Headscale:
tailscale up --login-server https://vpn.su-dominio.com --authkey <su-clave-preauth>. El dispositivo aparece en la lista de nodos de Headscale en unos segundos:docker exec headscale headscale nodes list. Repita la operación con cada dispositivo. Una vez registrados, los dispositivos pueden comunicarse entre sí por su IP de malla (100.x.x.x) o por su nombre de host de magic DNS.Definir las políticas de control de acceso
Cree
/etc/headscale/acls.hujsony referéncielo enconfig.yamlmedianteacls_path. Headscale usa el mismo formato de ACL HuJSON que Tailscale Cloud: defina grupos de usuarios, etiquete los dispositivos como servidores o estaciones de trabajo, y escriba reglas que precisen qué grupos pueden alcanzar qué puertos. Una política mínima permite a todos los usuarios alcanzar todos los nodos; refuércela restringiendo el acceso a los servicios sensibles (bases de datos, paneles de administración) a grupos de usuarios concretos.Conectarse por primera vez
Headscale no tiene interfaz web ni cuenta: es el servidor de control de su red privada, y se pilota desde la línea de comandos. Por SSH: docker exec -it headscale headscale users create monuser, después headscale preauthkeys create --user monuser --reusable --expiration 24h, y conecte sus máquinas con tailscale up --login-server https://<su-dominio> --authkey <clave>.
Combinar Headscale con Authelia para un acceso de red protegido con MFA
Headscale gestiona el control de acceso a nivel de red (qué IP pueden comunicarse con qué pares), pero no aplica autenticación a nivel de aplicación. Combínelo con Authelia en el mismo VPS: haga pasar sus servicios internos (accesibles únicamente a través de la malla) por la capa forward-auth de Authelia. Los usuarios deben validar un MFA para acceder a los servicios, incluso una vez dentro de la malla: defensa en profundidad para las cargas sensibles.
Headscale frente a Tailscale Cloud
Tailscale Cloud sigue siendo la vía más sencilla para los equipos pequeños: ningún servidor que mantener, actualizaciones automáticas y facturación integrada. Headscale cobra todo su sentido cuando usted tiene más de 3 usuarios y quiere evitar las tarifas por puesto, cuando la residencia de los datos obliga a mantener la topología de su red fuera de servidores de terceros, o cuando quiere una auditabilidad completa de sus logs de coordinación. Los clientes son idénticos: pasar de Tailscale Cloud a Headscale se reduce a volver a ejecutar tailscale up --login-server en cada dispositivo, nada más.