Guía de despliegue

Alojar Headscale en un VPS: servidor de control Tailscale

Desplegar en un VPS Cloud →

Tutorial

Alojar Headscale en un VPS: servidor de control Tailscale

Seguridad y monitorización6 min de lectura7 pasos

El plan gratuito de Tailscale se limita a 3 usuarios y guarda el mapa de su red en la nube. Headscale (BSD-3-Clause, ~41k estrellas) es un reemplazo de código abierto directo del servidor de coordinación de Tailscale: despliéguelo en su VPS y siga usando los clientes oficiales de Tailscale en cada dispositivo. Su equipo se conecta mediante túneles WireGuard zero-trust, magic DNS y control de acceso basado en ACL, todo auto-alojado y sin límite.

Contenido· Por qué auto-alojar el servidor de control1/6
  1. 01Por qué auto-alojar el servidor de control
  2. 02Lo que le aporta Headscale auto-alojado
  3. 03Requisitos previos
  4. 04Desplegar Headscale con Docker Compose
  5. 05Combinar Headscale con Authelia para un acceso de red protegido con MFA
  6. 06Headscale frente a Tailscale Cloud

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

  1. 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.

  2. Generar la configuración

    Headscale lee su configuración desde /etc/headscale/config.yaml. El único campo obligatorio es server_url: la URL HTTPS a la que se conectarán sus clientes Tailscale (por ejemplo https://vpn.su-dominio.com). Defina listen_addr: 0.0.0.0:8080 y database.type: sqlite3 con 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 escribe config.yaml a partir de su dominio automáticamente.

  3. 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/health debe devolver {"status":"pass"}. La CLI headscale está disponible dentro del contenedor: docker exec headscale headscale version para confirmar la versión en ejecución.

  4. 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.

  5. 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.

  6. Definir las políticas de control de acceso

    Cree /etc/headscale/acls.hujson y referéncielo en config.yaml mediante acls_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.

  7. 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.

Despliegue Headscale en su VPS con un clic

Auto-aloje su servidor de control Tailscale con usuarios ilimitados y sin dependencia de la nube. ServOrbit aprovisiona una instancia de Headscale lista para usar: configuración generada, HTTPS listo y la primera clave de autenticación mostrada en la salida del job.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva