Por qué replantear la red mesh en 2026
Tailscale no transporta su tráfico: los paquetes WireGuard viajan directamente entre sus máquinas, cifrados de extremo a extremo. Lo que Tailscale gestiona en la nube es el plano de control — el intercambio de claves públicas, el descubrimiento de pares, la asignación de direcciones 100.x.x.x, la resolución MagicDNS y la distribución de los relés DERP. Puede alojar este plano de control usted mismo con Headscale. En 2026, el aumento de precios hace que esta opción sea financieramente obvia para cualquier equipo con al menos dos personas en un plan de pago.
- Control total de los datos: ninguna lista de sus máquinas, direcciones IP internas, nombres de nodos o registros de conexión pasa por un servidor de terceros.
- Sin límites de nodos ni usuarios impuestos por el software: Headscale está limitado únicamente por los recursos de su VPS.
- Compatibilidad total con los clientes oficiales de Tailscale: la bandera
--login-serveres suficiente para apuntar a su propio plano de control. - MagicDNS en su propio dominio: cada nodo es accesible por su nombre corto bajo el sufijo que elija.
- OIDC opcional: delegue la autenticación a Keycloak, Authelia o cualquier proveedor OIDC compatible.
- Durabilidad operativa: su red mesh ya no depende de una decisión de precios o una interrupción externa.
- Mantenimiento razonable: una actualización de paquete cada pocas semanas, una copia de seguridad de SQLite programable en una línea de cron.
Análisis financiero: el punto de equilibrio
Tailscale Personal sigue siendo gratuito para hasta seis usuarios en uso no comercial. En cuanto pasa al plan Standard — un equipo profesional, acceso multiusuario o funciones ACL avanzadas — el coste es $8 por asiento al mes. Un VPS de 1 vCPU / 1 GB RAM es suficiente para ejecutar Headscale para docenas de nodos; funciona con menos de 64 MB de RAM en reposo. El coste de ese VPS en ServOrbit comienza en unos pocos euros al mes.
Tailscale Standard vs Headscale en VPS
Desplace la tabla
| Criterio | Tailscale Standard | Headscale en VPS |
|---|---|---|
| Coste mensual (1 asiento) | $8 | coste del VPS (~99 DH/mes) |
| Coste mensual (5 asientos) | $40 | coste del VPS (~99 DH/mes) |
| Coste mensual (10 asientos) | $80 | coste del VPS (~99 DH/mes) |
| Funnel / Serve | Incluido | No disponible |
| SSH Recording | Solo plan Premium | No disponible |
| Mantenimiento | Ninguno (servicio gestionado) | ~2h/mes (actualizaciones, copias de seguridad) |
| Control de datos | Nube de Tailscale | Su servidor |
| Límite de nodos | 100 (Standard) | Sin límite de software |
| Límite de usuarios | Ilimitado en Standard | Sin límite de software |
Requisitos técnicos detallados
Headscale es ligero: un VPS de entrada gestiona una decena de nodos. Estos son los recursos mínimos y los puertos necesarios.
- VPS con Debian 11/12 o Ubuntu 22.04/24.04 — 1 vCPU, 512 MB RAM mínimo (Headscale funciona con menos de 64 MB en reposo; se recomiendan 1 GB para mayor margen).
- Puerto TCP 443 abierto para tráfico entrante: los clientes se conectan aquí para el registro y la recuperación de configuración vía HTTPS.
- Puerto UDP 3478 abierto: se usa para la negociación STUN (descubrimiento de direcciones candidatas para conexiones directas).
- Puerto UDP 41641 abierto: puerto de señalización WireGuard que los clientes Tailscale usan para contactar con el coordinador.
- Un nombre de dominio o subdominio apuntando al VPS: necesario para un certificado TLS válido. Let's Encrypt funciona mediante certbot o el módulo nginx integrado.
- SQLite integrado: Headscale no necesita ninguna base de datos externa — un único archivo SQLite en
/var/lib/headscale/es suficiente para cientos de nodos.
Instalar Headscale en un VPS de ServOrbit
Los pasos parten de un VPS Debian 12 limpio. La instalación tarda menos de diez minutos.
Actualizar el sistema e instalar dependencias
Conéctese por SSH y actualice los paquetes:
apt update && apt upgrade -yInstale nginx y certbot para el reverse proxy HTTPS:
apt install -y nginx certbot python3-certbot-nginxDescargar e instalar el paquete Headscale
Headscale v0.29.4 (septiembre 2026) proporciona paquetes
.debpara amd64 y arm64. Descargue e instale:curl -Lo /tmp/headscale.deb https://github.com/juanfont/headscale/releases/download/v0.29.4/headscale_0.29.4_linux_amd64.debdpkg -i /tmp/headscale.debVerifique la instalación:
headscale versiondebe devolver0.29.4. En ARM64, sustituyalinux_amd64porlinux_arm64.Configurar Headscale
El paquete crea el usuario del sistema
headscaley el directorio/etc/headscale/. Edite la configuración mínima:nano /etc/headscale/config.yamlDefina como mínimo:
server_url: https://headscale.your-domain.com,listen_addr: 0.0.0.0:8080,db_type: sqlite3,db_path: /var/lib/headscale/db.sqlite, y endns_config:magic_dns: true,base_domain: your-domain.com. Cree el directorio de datos:mkdir -p /var/lib/headscale && chown headscale:headscale /var/lib/headscale.Activar e iniciar el servicio
El paquete instala la unidad de systemd automáticamente:
systemctl enable --now headscaleCompruebe el estado:
systemctl status headscale. La salida debe mostrarActive: active (running). Si hay un error, consulte los registros:journalctl -u headscale -f. El error más frecuente en el primer inicio es unserver_urlmalformado — debe comenzar conhttps://.Configurar el reverse proxy HTTPS
Obtenga un certificado Let's Encrypt y configure nginx:
certbot --nginx -d headscale.your-domain.comEn el vhost de nginx generado, añada en el bloque
location /:proxy_pass http://127.0.0.1:8080;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;Recargue nginx:
systemctl reload nginx. Verifique quehttps://headscale.your-domain.com/healthdevuelve{"status":"pass"}.Crear el primer usuario y una clave de autenticación previa
Headscale organiza los nodos por usuarios. Cree su primer usuario:
headscale users create mi-equipoGenere una clave de autenticación previa (preauthkey) para registrar máquinas sin aprobación manual:
headscale preauthkeys create --user mi-equipo --expiration 24hCopie la clave devuelta — la necesitará al migrar los clientes. La opción
--reusablepermite reutilizar la misma clave para varias máquinas.Abrir los puertos necesarios en el cortafuegos
Si su VPS usa
ufw, abra los puertos necesarios:ufw allow 443/tcpufw allow 3478/udpufw allow 41641/udpSi usa
iptablesdirectamente o un panel de seguridad (CSF, Imunify360), añada estos puertos a la lista de puertos entrantes permitidos. Verifique desde una máquina externa que los puertos UDP son accesibles antes de migrar sus clientes.
Migrar los clientes desde Tailscale en 3 pasos
La migración no requiere reinstalar los clientes de Tailscale. El cliente oficial soporta la bandera --login-server desde hace varias versiones; basta con desconectar el cliente de la red antigua y reconectarlo a su servidor Headscale. El tráfico WireGuard entre nodos no se interrumpe durante la migración — solo la breve ventana de desconexión/reconexión (pocos segundos por nodo) causa una interrupción momentánea.
Desconectar el cliente de la red Tailscale existente
En cada máquina a migrar, desconecte el cliente de la red Tailscale:
tailscale logoutEn macOS y Windows, use el menú de la bandeja del sistema: clic derecho en el icono de Tailscale → Log out. En iOS y Android, vaya a los ajustes de la aplicación → Log out. Este paso revoca la autenticación en la red antigua pero no desinstala el cliente.
Reconectar el cliente a su servidor Headscale
Reconecte el cliente apuntando a su nuevo servidor Headscale. En Linux:
tailscale up --login-server https://headscale.your-domain.com --authkey SU_PREAUTHKEYEn macOS, desde el terminal:
tailscale up --login-server https://headscale.your-domain.com --authkey SU_PREAUTHKEYSi no pasa una preauthkey, el cliente muestra una URL de autenticación para validar en el lado del servidor con:
headscale nodes register --user mi-equipo --key <NODE_KEY>. Verifique el registro:headscale nodes listdebe mostrar el nodo con estadoonline.Verificar la conectividad entre los nodos migrados
Desde un nodo migrado, verifique que los demás nodos son visibles:
tailscale statusLa lista debe mostrar todos los nodos registrados en su servidor Headscale con sus IPs mesh (
100.64.x.x). Pruebe la conectividad directa con un ping:ping 100.64.0.2. Un estadoactive (direct)confirma que la conexión WireGuard está establecida sin relé. Si activó MagicDNS, pruebe la resolución:ping nombre-nodo.your-domain.com.Migrar los nodos restantes y cerrar la cuenta de Tailscale
Repita los dos pasos anteriores para cada máquina. Migre primero las máquinas de desarrollo o prueba para validar el proceso, luego las de producción. Una vez migrados y verificados todos los nodos, puede cerrar su cuenta de Tailscale o degradar al plan Personal si aún tiene casos de uso personal (seis usuarios máximo, gratuito). Conserve la preauthkey utilizada o genere una nueva para futuros nodos.
Configuración de ACLs y DNS internos
Headscale gestiona las políticas de acceso mediante un archivo de política en formato HuJSON (JSON extendido con comentarios), compatible con la sintaxis de Tailscale ACL. Este archivo define qué usuarios o grupos pueden acceder a qué nodos en qué puertos. Por defecto, todos los nodos de la misma red Headscale pueden comunicarse entre sí en todos los puertos — este comportamiento permisivo es adecuado para un equipo pequeño de confianza, pero debe restringirse cuando coexisten nodos de distintos niveles de confianza en la misma red.
- Edite el archivo de política:
headscale policy set --policy-file /etc/headscale/policy.hujson - Defina grupos de usuarios (
groups) y ACLs por puerto para segmentar el acceso entre los entornos dev, staging y prod. - Active el split DNS para resolver nombres internos: en
dns_config, definanameserverscon sus servidores DNS internos ysearch_domainspara los sufijos de búsqueda. - Exporte y versione su archivo de política en un repositorio Git privado — esto facilita las auditorías y los retrocesos.
- Pruebe los cambios de política en un nodo de prueba antes de aplicarlos a toda la red:
headscale policy check.
Endurecimiento, copias de seguridad y actualizaciones automáticas
Algunas precauciones para una instalación robusta. Haga copias de seguridad de la base de datos SQLite regularmente: cp /var/lib/headscale/db.sqlite /backup/headscale-$(date +%Y%m%d).sqlite — una tarea cron diaria o un script hacia almacenamiento S3 es suficiente. Haga también copias de las claves privadas en /var/lib/headscale/private.key y /var/lib/headscale/noise_private.key: firman la identidad de su servidor y no pueden regenerarse sin forzar que todos los nodos se reconecten. Restrinja el acceso a la API de administración de Headscale (puerto gRPC 50443) solo a 127.0.0.1 — nunca la exponga directamente a internet.
Resolución de problemas frecuentes
Los errores más comunes tras la migración y sus soluciones.
- El nodo aparece como
offlineenheadscale nodes list: verifique que los puertos UDP 3478 y 41641 están abiertos en el VPS. Pruebe desde una máquina externa connc -vzu headscale.your-domain.com 41641. - La conexión muestra
relayen lugar dedirect: las conexiones indirectas vía DERP ocurren cuando los dos nodos no pueden alcanzarse directamente (NAT estricto, cortafuegos). Ejecutetailscale netchecken ambos nodos para identificar las restricciones de red. - MagicDNS no resuelve los nombres: verifique que
magic_dns: trueybase_domainestán definidos en la configuración de Headscale, y que el cliente recuperó la nueva configuración DNS tras la reconexión (tailscale status --self). - Certificado TLS inválido al iniciar: el
server_urlenconfig.yamldebe coincidir exactamente con el dominio del certificado. Una URL que empieza conhttp://cuando nginx esperahttps://genera un bucle infinito de redirección. - Los clientes de macOS o Windows no ven la opción
--login-serveren la interfaz gráfica: use siempre el terminal para la migración. La interfaz gráfica de Tailscale no permite cambiar el servidor de coordinación; solo la línea de comandos lo admite.
Lo que Headscale no reemplaza
Headscale implementa el protocolo del plano de control de Tailscale, pero no el conjunto completo de funciones de la plataforma comercial. Tailscale Funnel (exposición de servicios locales a internet) y Serve (reverse proxy local) no están disponibles en Headscale. SSH Recording (grabación de sesiones SSH a través de la red mesh) es una función de Tailscale Premium ausente en Headscale. Estas carencias están documentadas y son estables: el proyecto Headscale sigue activamente la compatibilidad de protocolo, no la paridad de funciones de interfaz. Si su uso se limita a la conectividad mesh, MagicDNS y ACLs — el caso de la gran mayoría de los equipos técnicos — Headscale cubre la necesidad completamente. Si utiliza activamente Funnel o SSH Recording, evalúe si esas funciones justifican el diferencial de coste antes de migrar.