Headscale: ¡Obtén todas las funciones de Tailscale SIN pagar suscripciones!

BBetter Stack
Internet TechnologyTelecommutingComputing/Software

Transcript

00:00:00Este es Headscale, una versión gratuita y de código abierto de Tailscale que puedes instalar en cualquier servidor,
00:00:06lo que te da el control total de tu red cifrada por si se cae el internet o Tailscale decide subir sus precios de golpe.
00:00:13Pero lo curioso es que Headscale fue creado por un empleado de Tailscale.
00:00:18¿Por qué le pagan a alguien para construir a su competencia?
00:00:22Suscríbete y vamos a descubrirlo.
00:00:25Veamos rápidamente Headscale en acción antes de entrar en detalles.
00:00:30Bien, ahora mismo tengo tres servidores de Hetzner: uno para el plano de control principal de Headscale y estos dos nodos de aquí, que quiero conectar entre sí.
00:00:40Así que estos dos forman parte actualmente de mi red cifrada.
00:00:44Si ejecuto este comando, como todo corre en Docker, puedo ver los nodos actuales: Ubuntu Test y Ubuntu Test 2.
00:00:53Y estas son las direcciones IP que puedo usar para conectarme a ellos.
00:00:56Por ahora, vamos a conectar estos dos nodos entre sí.
00:00:59Primero copiaré esta dirección IP.
00:01:02Y ahora, desde Ubuntu Test 2, voy a entrar por SSH como root.
00:01:07Sí, sé que no debería usar root, pero esto es solo para la prueba.
00:01:09Esa es la dirección IP de Headscale.
00:01:11Si pulso enter y limpio la pantalla, verán que ya estoy en Ubuntu Test 1.
00:01:17He pasado de Ubuntu Test 2 a Ubuntu Test 1, y puedo salir para volver a Ubuntu Test 2.
00:01:24Y puedo hacer lo mismo desde Ubuntu Test 1 si hago SSH root y pego la IP de Ubuntu Test 2.
00:01:31Al limpiar, vemos que estoy en Ubuntu Test 2 desde Ubuntu Test 1.
00:01:36Pero si estoy fuera de la tailnet (por ejemplo, en una pestaña nueva en mi Mac) e intento hacer SSH a Ubuntu Test 2...
00:01:48Se queda colgado porque estoy fuera de la red protegida.
00:01:52Como acaban de ver, Headscale te da acceso total a tu red.
00:01:56Puedes controlar cada detalle y añadir tantos nodos como quieras sin depender de un solo proveedor.
00:02:03Incluso puede funcionar sin internet si lo conectas a un NAS o a una Raspberry Pi vieja.
00:02:08Pero la configuración es algo compleja.
00:02:11De hecho, déjenme mostrarles cómo funciona.
00:02:13He creado un nuevo servidor llamado Ubuntu Test 3 y voy a crear una nueva tailnet con un usuario nuevo para conectar dos nodos.
00:02:24Usaremos Ubuntu Test 3 y Ubuntu Test 1 para la prueba.
00:02:29En mi servidor principal ya tengo Headscale instalado, pero repasaré el proceso que seguí.
00:02:37Ahora mismo tengo tres contenedores de Docker funcionando.
00:02:40Uno es Headscale UI, otro es Headscale y el tercero es Caddy.
00:02:45Si miramos el archivo Docker Compose, verán que es muy similar al de la documentación oficial de Headscale.
00:02:56Aunque he cambiado algunas cosas, como la versión de Headscale y las rutas de mis directorios.
00:03:03También tengo un contenedor para Headscale UI, que es una de las muchas interfaces web de código abierto disponibles.
00:03:11Se la mostraré más adelante.
00:03:13Luego está Caddy, que actúa como proxy inverso.
00:03:16Dejaré un enlace a este archivo Docker Compose en la descripción por si les interesa.
00:03:21En este directorio también tenemos las carpetas “lib” y “config”.
00:03:26La carpeta “lib” sirve principalmente para guardar la base de datos SQLite, que gestiona usuarios, nodos, DNS y demás.
00:03:36Pero en la configuración puedes cambiarla a Postgres si no quieres usar SQLite.
00:03:43La carpeta “config” contiene la configuración de Tailscale y la lista de control de acceso (ACL) en un archivo JSON legible.
00:03:52Hablaremos de esto luego, pero primero miremos esto que obtuve de la documentación de Tailscale.
00:04:01En el ejemplo de configuración de GitHub, vemos todo lo que podemos ajustar: desde el servidor hasta los prefijos y la ruta del archivo de políticas.
00:04:11Es muy parecido a mi configuración; solo cambié la URL del servidor a un dominio de Cloudflare para que los nodos sepan dónde encontrarse.
00:04:23También añadí la ruta a mi archivo de políticas y eso es prácticamente todo.
00:04:28El dominio es uno normal de Cloudflare con un registro A que apunta a la IP de mi servidor de Headscale.
00:04:37Con eso listo, si edito el archivo de Caddy, verán que usamos dos URLs: una para la interfaz web y otra para el proxy.
00:04:49Una vez configurado, lo primero es crear un usuario con este comando.
00:04:56Voy a crear un usuario llamado Tom, pero puede ser el nombre que quieran.
00:05:00Usuario creado. Podemos listar los usuarios y ver que el nuestro tiene el ID 6.
00:05:08Pero ahora mismo este usuario no tiene nodos asociados.
00:05:11Así que vamos a darle algunos nodos a Tom.
00:05:13En Ubuntu Test 3, el nuevo servidor, lo primero es añadir el cliente de Tailscale ejecutando este comando.
00:05:23Esto nos da acceso al binario de Tailscale.
00:05:27Ojo, si no son usuarios root, tendrán que usar “sudo” para ejecutar Tailscale.
00:05:31Pero antes de iniciar Tailscale o loguearnos, hay que hacerlo de una forma específica para que funcione con Headscale.
00:05:38Para ello, necesitamos crear llaves de pre-autenticación. El comando está en la guía de inicio de la documentación.
00:05:46Voy a bajar y copiar este comando.
00:05:49Luego, en mi servidor de Headscale, escribo “docker exec” y pego el comando.
00:05:54Donde dice ID de usuario, pondremos el de Tom, que es el 6.
00:05:59Y antes de ejecutar, añado un segundo “headscale” porque estamos entrando al contenedor.
00:06:04Listo, ya tenemos nuestra llave de pre-autenticación.
00:06:07Ahora copiamos este comando y lo pegamos en Ubuntu Test 3.
00:06:11Copiamos nuestra llave y la pegamos aquí.
00:06:15Y tenemos que cambiar el servidor de login por el nuestro: headscale.pandor.css.
00:06:23Pandora ya estaba ocupado, si no, me habría quedado con ese.
00:06:26Al pulsar enter, el nuevo nodo debería añadirse a nuestra red de Headscale.
00:06:31Si volvemos al control plane y listamos los nodos, vemos que aparece Ubuntu Test 3, del usuario Tom, con sus IPs.
00:06:44Ahora añadamos Ubuntu Test 1 al usuario Tom.
00:06:47Primero borraré el nodo Ubuntu Test existente (ID 1) y forzaré el borrado para saltarme las confirmaciones.
00:06:56Hecho esto, crearé otra llave y la añadiré a Ubuntu Test, sin olvidar activar SSH con el flag correspondiente.
00:07:06Vamos también a Ubuntu Test 3 para activar SSH, que simplemente permite las conexiones por esa vía.
00:07:13Al mirar la lista, ya tengo Ubuntu Test 1 y Ubuntu Test 3, ambos bajo el usuario Tom.
00:07:20Vamos a conectarlos.
00:07:21Copio la IP de Ubuntu Test 3, voy a Ubuntu Test 1 y ejecuto SSH root con esa IP.
00:07:30Tras aceptar la llave, ya estoy en Ubuntu Test 3 desde Ubuntu Test 1.
00:07:35Y puedo hacer lo mismo a la inversa.
00:07:41Si han seguido mis pasos, hay muchas posibilidades de que esto no les funcione porque necesitan añadir una política de control de acceso.
00:07:49Les mostraré la mía.
00:07:51Si limpio esto y voy a mi carpeta de Headscale, verán en la configuración el archivo ACL en formato JSON.
00:08:01Es una configuración muy simple que básicamente acepta cualquier origen de mi red hacia cualquier destino o puerto.
00:08:11En SSH, acepta cualquier nodo de mi tailnet y permite conectar a otros por SSH sin aprobación, pero solo como root.
00:08:24Obviamente, según su red, quizás quieran restringir esto para que ciertos nodos solo se conecten por puertos específicos.
00:08:33Pero para empezar, esta configuración sencilla funciona.
00:08:37Repito, dejaré el enlace en la descripción.
00:08:40¿Y qué pasa con la interfaz web de Headscale?
00:08:43¿Facilita las cosas?
00:08:45Diría que sí y que no.
00:08:47Miren esto.
00:08:48Aquí está la URL de mi interfaz de Headscale. Se ven mis usuarios, Test y Tom, con su información.
00:08:57Ahí están las llaves y los nodos conectados.
00:09:01Para que esto funcione, primero hay que añadir una API key de Headscale con este comando.
00:09:06El problema que tuve fue con la vista de dispositivos.
00:09:09No sale mucha información y parece ser un error de tipos en TypeScript, lo cual no es mi culpa porque no he tocado el código.
00:09:22Llegado a este punto, la aplicación suele quedarse colgada y nada funciona.
00:09:26En teoría debería poder añadir dispositivos y cambiar configuraciones desde aquí.
00:09:32Pero al tener tantos fallos, no me ha resultado muy útil.
00:09:35Hay otras interfaces para Headscale, algunas facilitan mucho la gestión de las políticas de acceso.
00:09:42Pero, en mi opinión, ninguna me ha parecido realmente indispensable.
00:09:46Así que sí, la instalación es algo compleja.
00:09:49Vale, es MUY compleja.
00:09:51Alguien sin base técnica o incluso un desarrollador junior sufriría para montarlo por su cuenta.
00:09:57Seguramente por eso Tailscale permite que su empleado trabaje en esto; no supone una gran amenaza para la empresa ahora mismo.
00:10:07Bastaría con que alguien use Claude Opus para crear una interfaz bonita y tendrían algo potente, aunque la licencia podría frenarlo.
00:10:18Pero una vez que logras que todo ruede, Headscale funciona de maravilla.
00:10:22Faltan algunas funciones, como los comandos “funnel” y “serve” para exponer servidores públicamente o a la red.
00:10:32Tampoco soporta múltiples tailnets, nodos efímeros o registros de flujo de red nativos.
00:10:38Aun así, para ser una herramienta abierta, es impresionante.
00:10:42Si algún día decido que mi OpenClaw funcione totalmente offline con un LLM local, me lo plantearé en serio.

Key Takeaway

Headscale ofrece una alternativa de autohospedaje potente y privada a Tailscale para usuarios avanzados que buscan control total de su red cifrada sin depender de suscripciones comerciales.

Highlights

Headscale es una implementación de código abierto del servidor de control de Tailscale que permite gestionar redes privadas virtuales de forma gratuita.

Fue desarrollado curiosamente por un empleado de Tailscale, lo que plantea preguntas sobre la estrategia de competencia de la empresa.

Permite un control total sobre los datos y la infraestructura, eliminando la dependencia de servidores externos y posibles subidas de precios.

La instalación se realiza habitualmente mediante contenedores Docker, incluyendo componentes como Caddy para el proxy inverso y bases de datos SQLite o Postgres.

Aunque ofrece libertad total, carece de algunas funciones avanzadas de Tailscale como 'funnel', 'serve' o el soporte nativo para múltiples tailnets.

La configuración es técnicamente compleja y las interfaces web actuales (UIs) presentan errores de estabilidad, lo que limita su adopción por usuarios novatos.

Timeline

Introducción y demostración de conectividad

El presentador introduce Headscale como la versión 'open source' que permite evitar suscripciones y mantener el control si Tailscale cambia sus políticas de precios. Se realiza una demostración práctica utilizando tres servidores de Hetzner para mostrar cómo dos nodos se comunican de forma segura mediante SSH dentro de la red privada. El vídeo enfatiza que, mientras los nodos internos se ven perfectamente, cualquier intento de conexión desde fuera de la 'tailnet' es bloqueado automáticamente. Esta sección es vital para entender la utilidad real de una red cifrada punto a punto en entornos de servidor. El autor destaca que incluso puede funcionar sin conexión a internet si se instala en hardware local como una Raspberry Pi.

Arquitectura técnica y Docker Compose

En este segmento se detalla la infraestructura necesaria para correr Headscale, basándose en una configuración de tres contenedores principales: Headscale, Headscale UI y Caddy. El autor explica cómo modificó el archivo Docker Compose oficial para ajustar rutas de directorios y versiones específicas del software. Se explora la estructura de carpetas, destacando que 'lib' gestiona la base de datos SQLite con los datos de usuarios y nodos, mientras que 'config' guarda las políticas de acceso (ACL). También se menciona la importancia de configurar correctamente un registro A en el DNS (como Cloudflare) para que el plano de control sea localizable. Esta parte es fundamental para usuarios que deseen replicar el entorno de despliegue en sus propios servidores.

Gestión de usuarios y registro de nodos

El vídeo profundiza en la línea de comandos para gestionar la red, empezando por la creación de un usuario llamado 'Tom' mediante el comando 'headscale users create'. El proceso de vinculación de un nuevo servidor (Ubuntu Test 3) requiere la generación de llaves de pre-autenticación dentro del contenedor de Docker. El autor muestra paso a paso cómo unir el cliente oficial de Tailscale a este servidor personalizado especificando la URL del login. Se resalta que es necesario habilitar explícitamente el flag de SSH durante el inicio para permitir la comunicación remota entre los nodos recién creados. Este procedimiento ilustra la diferencia operativa entre el servicio en la nube y la gestión manual de identidades en Headscale.

Políticas de acceso y evaluación de la interfaz web

La sección final aborda las Listas de Control de Acceso (ACL) en formato JSON, que son críticas para que los nodos puedan hablarse entre sí. El autor advierte que, sin una configuración de política correcta, las conexiones fallarán a pesar de que los nodos estén registrados. Se realiza una crítica honesta a la interfaz web actual, señalando que presenta errores de TypeScript y falta de estabilidad, lo que hace que la línea de comandos siga siendo la mejor opción. El vídeo concluye enumerando las limitaciones actuales frente a Tailscale, como la falta de nodos efímeros o el comando 'funnel'. A pesar de la complejidad, el autor considera que es una herramienta impresionante para quienes priorizan la soberanía de sus datos y la privacidad.

Community Posts

View all posts