Si has trabajado en redes, seguramente conoces la frustración de intentar conectarte a un equipo, como una Raspberry Pi, que se encuentra detrás de un router doméstico. Existen varias soluciones, desde abrir puertos en el router junto con DNS dinámico, hasta operar un servidor VPN en tu propia red. El Linux moderno cuenta con una herramienta llamada WireGuard que permite crear túneles de red seguros con facilidad, aunque su configuración puede ser compleja. Por otro lado, existen herramientas como Tailscale que simplifican este proceso. El único problema es que Tailscale es "más o menos" gratuito, pero no totalmente. Resulta que puedes construir tu propia red al estilo Tailscale, y es más sencillo de lo que imaginas.
En honor a la verdad, el nivel gratuito de Tailscale es bueno y recientemente se volvió más generoso, permitiendo nodos ilimitados y hasta seis usuarios. Eso es suficiente para la mayoría de los hackers. Sin embargo, como hemos visto anteriormente, lo que ofrecen hoy pueden retirarlo mañana. Además, hay servicios adicionales por los que debes pagar si los necesitas, pero en general, el nivel gratuito es suficiente para la mayoría de las personas.
Por otro lado, sin importar qué tan bueno sea el nivel gratuito, hay usuarios que no desean ejecutar servicios en hardware ajeno. Quizás necesitas un séptimo usuario o funciones restringidas por pago. No hay problema. Headscale es un servicio autohospedado que puede realizar casi todo lo que hace la porción en la nube de Tailscale, y si tienes un lugar donde alojarlo, puedes ser tu propio servidor Tailscale.
¿Y para el lado del cliente? Esa es la mejor parte. Headscale funciona sin problemas con los clientes existentes de Tailscale. Simplemente debes apuntarlos a tu servidor en lugar de a los valores predeterminados.
El original: Una visión general
WireGuard es maravillosamente simple. Cada par tiene un par de claves pública/privada y una lista de redes alcanzables a través de dicho par. La dificultad no radica en la criptografía de WireGuard, sino en la gestión de una red útil de máquinas que se mueven constantemente. Cada nodo obtiene una dirección IP 100.x.x.x y un nombre DNS que permite comunicarse a través de un túnel cifrado directamente (al menos, usualmente).
Supongamos que tu laptop está en una cafetería, tu Raspberry Pi está detrás de tu router doméstico y un servidor se encuentra en un VPS en algún lugar. Ninguno tiene necesariamente una dirección pública fija y conveniente. Ambos podrían estar detrás de un NAT de grado operador (CGNAT). Sus direcciones pueden cambiar. De alguna manera necesitan descubrirse entre sí, intercambiar suficiente información para establecer conexiones seguras y actualizar esa información a medida que cambian las circunstancias.

Tailscale opera lo que usualmente se denomina el plano de control. Los clientes se registran en él, se autentican, aprenden qué otras máquinas tienen permiso para ver y cómo alcanzarlas. Esta distinción es importante: tu tráfico real no fluye a través del servidor de control de Tailscale. Los clientes intentan establecer conexiones WireGuard directas entre sí. En circunstancias normales, tus datos no pasan por ningún otro lugar.
Si el NAT o los firewalls hacen que esto sea imposible, Tailscale puede recurrir a uno de sus servidores de relevo DERP. DERP significa "Designated Encrypted Relay for Packets" (Relevo Cifrado Designado para Paquetes). El relevo puede pasar tus paquetes cifrados, pero no puede descifrarlos.
Esta arquitectura explica por qué Tailscale funciona tan bien. Obtienes una dirección privada para cada máquina participante y, con MagicDNS, nombres convenientes en lugar de direcciones. También puedes designar una máquina como nodo de salida (es decir, enrutar todo el tráfico de red a través del nodo remoto), anunciar una LAN completa a través de un router de subred, controlar el acceso con políticas, acceder por SSH a un nodo remoto y realizar varios trucos adicionales.
Con límites gratuitos generosos, ¿por qué molestarse en montar tu propio servidor? La mayoría de los lectores de Hackaday ya pueden responder a esa pregunta. Puedes dar cualquier cantidad de justificaciones sobre por qué quieres ejecutar tu propio DNS, servidor de correo o servidores Git. Privacidad. Funciones extra. Control total. Pero la verdad es que simplemente queremos hacerlo, y eso está bien.
Entra Headscale
Headscale se describe a sí mismo como una implementación de código abierto y autohospedada del servidor de control de Tailscale, destinada principalmente a usuarios que prefieren el autoalojamiento y a entusiastas. Admite las funciones básicas que esperarías, incluyendo MagicDNS, IPv4 e IPv6, routers de subred, nodos de salida, etiquetas, ACLs, Tailscale SSH y compartición de archivos. No reproduce todas las funciones comerciales de Tailscale, por lo que vale la pena revisar la lista de compatibilidad si dependes de algo exótico.
También necesitarás un lugar donde alojarlo. La documentación oficial espera un servidor Linux o BSD con una dirección IP pública y recomienda hacer que Headscale esté disponible mediante HTTPS en el puerto 443. Eso suena más intimidante de lo que es. Un VPS pequeño es ideal. Si ya tienes un servidor público realizando otras tareas, Headscale puede colocarse detrás de un proxy inverso como Apache, nginx o Caddy.
Si realmente tienes un presupuesto ajustado, considera usar algo como el Oracle OCI Free Tier. Por supuesto, ahora estás cambiando un plan gratuito por otro. Y, en honor a la verdad, Oracle acaba de reducir algunos límites gratuitos a la mitad este mes. Pero es lo suficientemente fácil cambiar de servidor si surge la necesidad. Puedes usar igualmente una máquina local con DNS dinámico y un reenvío de puertos.
Hay un detalle: el protocolo de control de Tailscale utiliza una actualización de WebSocket algo inusual, así que no asumas que cualquier configuración de proxy HTTP arbitraria funcionará. La documentación de Headscale proporciona configuraciones funcionales para los sospechosos habituales.
La instalación es directa, particularmente en Debian o Ubuntu, donde los paquetes oficiales proporcionan una cuenta de usuario, configuración predeterminada y unidad de systemd. El archivo importante es normalmente:
/etc/headscale/config.yamlUna instalación básica utilizará SQLite, así que no hay necesidad de un paquete de base de datos pesado. Necesitarás crear tu primer usuario:
headscale users create hackaday
El truco para conectar un cliente es indicarle que utilice tu servidor de coordinación. Para Linux:
tailscale --up --login-server https://your-server-urlUsualmente, abrirá tu navegador para que inicies sesión. Podrías notar que no has proporcionado una contraseña. Para iniciar sesión, obtendrás un comando que debes ejecutar en el servidor. Sin embargo, también puedes crear claves para compartir previamente si eso no es factible. También existen opciones para configurar SSO con servicios como Google.
Incluso el cliente de Android puede aceptar un servidor alternativo, aunque es complicado de encontrar. En la página de cuentas, debes abrir el menú de los "tres puntos" para revelar "usar servidor alternativo".
¿Qué pasa con DERP?
Incluso con esta configuración, todavía estás usando los servidores DERP públicos, o al menos, podrías estar haciéndolo. Si miras el estado de una conexión activa, verás algo como esto:
active; offers exit node; direct 158.61.222.64:41641, tx 428 rx 348La palabra clave "direct" significa que tu computadora y ese nodo están conectados directamente. En ese caso, no estás usando ningún servidor DERP en absoluto. Es posible ejecutar tu propio servidor DERP, pero eso puede o no ser un problema de rendimiento. Si tu VPS barato está ejecutando a medio mundo de distancia, enviar paquetes de ida y vuelta podría volverse lento. Ten en cuenta que los servidores DERP solo manejan paquetes cifrados que no pueden leer, así que para la mayoría de las personas, probablemente sea mejor comenzar con los servidores públicos.
HeadPlane

Headscale en sí es, sin disculpas, un software de servidor. La administración se realiza principalmente a través de archivos de configuración y el comando headscale.
No me molesta eso, pero el panel de control web de Tailscale es innegablemente conveniente. Headplane ofrece algo similar. Es un proyecto de código abierto separado que proporciona una interfaz de administración web para Headscale. Puede mostrar y gestionar máquinas, rutas, usuarios, ACLs, etiquetas y configuraciones de DNS.
Vía Hackaday.




