Headscale, una implementación de código abierto de Tailscale
Hace pocos dias hablábamos aquí en el blog sobre Firezone, la cual es una excelente utilidad para la creación de servidores VPNs basados en WireGuard.
Y ahora en esta ocasión toca hablar sobre una utilidad bastante similar llamada «Headscale» el cual es un proyecto que se desarrolla como una implementación de código abierto del componente de servidor de la red Tailscale VPN, que permite crear redes VPN similares a Tailscale en sus propias instalaciones, sin estar vinculado a servicios de terceros.
Tailscale permite combinar un número arbitrario de hosts dispersos geográficamente en una red, construida en la imagen de una red en malla, en la que cada nodo se comunica con otros nodos directamente (P2P) o mediante nodos vecinos, sin transmitir tráfico a través de servidores externos centralizados del proveedor de VPN.
Además de que se admite el control de ruta y acceso basado en ACL y que para poder establecer los canales de comunicación en las condiciones de uso de traductores de direcciones (NAT) se da soporte a los mecanismos STUN, ICE y DERP (análogos a TURN, pero basados en HTTPS). Si el canal de comunicación entre ciertos nodos está bloqueado, la red puede volver a enrutar para enrutar el tráfico a través de otros nodos.
Tailscale se diferencia del proyecto Nebula el cual también está diseñado para crear redes VPN distribuidas con enrutamiento en malla, utilizando el protocolo Wireguard para organizar la transferencia de datos entre nodos, mientras que Nebula usa los desarrollos del proyecto Tinc, que usa el algoritmo AES-256 para cifrar paquetes GSM (Wireguard usa el cifrado ChaCha20, que en las pruebas demuestra un mayor rendimiento y capacidad de respuesta).
Otro proyecto similar, Innernet, se está desarrollando por separado, en el que el protocolo Wireguard también se utiliza para intercambiar datos entre nodos. Por el contrario, de Tailscale y Nebula en Innernet se utilizó un sistema diferente de separación de acceso basado en la ACL no se vinculan etiquetas a nodos y subredes individuales en la separación y aislamiento de los diferentes rangos de las direcciones IP, como en la Internet convencional de redes.
Además, Innernet usa Rust en lugar de Go y cabe mencionar que hace algunos dias se publicó Innernet 1.5 con soporte transversal NAT mejorado. También hay un proyecto Netmaker, que le permite conectar redes con diferentes topologías utilizando Wireguard, pero su código se suministra bajo la SSPL (Licencia Pública del lado del servidor), que no está abierta debido a la presencia de requisitos discriminatorios.
Tailscale se distribuye utilizando un modelo Freemium de uso gratuito para personas y acceso de pago para empresas y equipos. Los componentes del cliente Tailscale, con la excepción de las aplicaciones gráficas para Windows y macOS, se desarrollan en forma de proyectos de código abierto bajo la licencia BSD.
El software de servidor subcontratado de Tailscale que autentica nuevos clientes, coordina la gestión de claves y organiza la comunicación entre nodos es propietario. El proyecto Headscale aborda este problema y proporciona una implementación de código abierto independiente de los componentes del servidor Tailscale.
Headscale asume las funciones de intercambio de claves públicas de nodos y también realiza las operaciones de asignación de direcciones IP y distribución de tablas de enrutamiento entre nodos.
En su forma actual, Headscale implementa todas las características principales del servidor de administración, con la excepción del soporte para MagicDNS y Smart DNS. En particular, admite las funciones de registrar nodos (incluso a través de la web), adaptar la red para agregar o eliminar nodos, dividir subredes utilizando espacios de nombres (se puede crear una red VPN para varios usuarios), organizar el acceso compartido de nodos a subredes en diferentes espacios de nombres, control de enrutamiento (incluida la asignación de nodos de salida para acceder al mundo exterior), acceso compartido a través de ACL y ejecución de DNS.
El código de Headscale está escrito en Go y se distribuye bajo la licencia BSD. El proyecto está siendo desarrollado por Juan Font de la Agencia Espacial Europea.
Finalmente, si estás interesado en poder conocer más al respecto puedes consultar los detalles en el siguiente enlace.