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.