2 puntos por GN⁺ 2025-04-04 | 1 comentarios | Compartir por WhatsApp
  • Headscale es un proyecto que implementa el servidor de control de Tailscale como open source y autohospedado, orientado a self-hosters y a entornos de proyectos y laboratorios de desarrolladores aficionados
  • Tailscale es una VPN moderna basada en WireGuard y usa NAT traversal para funcionar como una red superpuesta entre computadoras de una red
  • El servidor de control de Tailscale se encarga del intercambio de claves públicas de WireGuard de los nodos, la asignación de IPs de clientes, la creación de límites entre usuarios, el uso compartido de máquinas entre usuarios y la exposición de rutas anunciadas por los nodos
  • Headscale ofrece, con un alcance acotado, la implementación de una única red Tailscale (tailnet) adecuada para uso personal u organizaciones open source pequeñas
  • El proyecto no está relacionado con Tailscale Inc., y para ejecutar Headscale no se admite ni se recomienda usar un proxy inverso ni contenedores

Objetivo y alcance de Headscale

  • Headscale apunta a ser una alternativa open source y autohospedable al servidor de control de Tailscale
  • Sus usuarios objetivo son self-hosters, desarrolladores aficionados y usuarios de proyectos personales y entornos de laboratorio
  • El alcance de la implementación es acotado y ofrece una única tailnet
    • Es adecuado para uso personal
    • También es adecuado para organizaciones open source pequeñas

Tailscale y el rol del servidor de control

  • Tailscale es una VPN moderna construida sobre WireGuard
  • Tailscale funciona como una red superpuesta entre computadoras de una red y usa NAT traversal
  • En Tailscale, todos los componentes son open source excepto parte de los clientes GUI y el servidor de control
    • Los clientes GUI mencionados como excepción son los clientes para sistemas operativos propietarios como Windows y macOS/iOS
  • El servidor de control funciona como punto de intercambio de claves públicas de WireGuard entre los nodos de una red Tailscale
    • Asigna direcciones IP a los clientes
    • Crea límites entre usuarios
    • Permite compartir máquinas entre usuarios
    • Expone las rutas anunciadas por los nodos
  • Una red Tailscale, o tailnet, es una red privada que Tailscale asigna a un usuario individual o a una organización

Documentación y advertencias sobre versiones

Ejecución y compilación

  • Para ejecutar Headscale no se admite ni se recomienda usar proxy inverso ni contenedores
  • Para los métodos de ejecución, se indica consultar la documentación oficial
  • El módulo para usuarios de NixOS está en el directorio nix/
  • Los builds de desarrollo de la rama main se ofrecen como imágenes de contenedor y binarios

Relación del proyecto y contribuciones

  • Este proyecto no está relacionado con Tailscale Inc.
  • Uno de los mantenedores activos de Headscale está empleado por Tailscale y puede contribuir al proyecto durante su horario laboral
    • Las contribuciones de ese mantenedor son revisadas por otros mantenedores
  • Los mantenedores definen en conjunto la dirección del proyecto bajo el principio de crear un proyecto sostenible mientras apoyan a la comunidad de self-hosters, usuarios entusiastas y desarrolladores aficionados
  • Los contribuidores deben leer CONTRIBUTING.md

Entorno de desarrollo y flujo de trabajo

  • Para contribuir se requiere una versión reciente de Go y Buf
    • Buf se usa como generador de Protobuf
  • Para configurar el entorno de desarrollo se recomienda usar Nix
    • Al ejecutar nix develop, se instalan las herramientas necesarias y se proporciona una shell
    • Este método garantiza el mismo entorno de desarrollo que usan los mantenedores de Headscale
  • El código Go se revisa con golangci-lint y se formatea con golines y gofumpt
    • El ancho de golines está configurado en 88
    • Se recomienda ejecutar make lint y make fmt antes de hacer commit
  • El código Proto se revisa con buf y se formatea con clang-format
  • La documentación se formatea con mdformat, y el resto de los archivos, como Markdown y YAML, con prettier
  • Al modificar proto/, se debe volver a generar el código Go desde Protobuf
    • El comando es make generate
    • Se recomienda incluir los cambios en gen/ en un commit separado para facilitar la revisión
  • Las pruebas y la compilación se ejecutan con make test y make build, respectivamente
  • El flujo de trabajo recomendado es ejecutar make test y make build después de nix develop
    • Si se gestionan las dependencias directamente, se puede usar Make sin pasos adicionales
    • Si faltan herramientas necesarias, el Makefile muestra una advertencia y sugiere ejecutar nix develop
    • Los targets disponibles se pueden consultar con make help

1 comentarios

 
GN⁺ 2025-04-04
Comentarios de Hacker News
  • Cada pocos meses vuelvo a este repositorio para ver si por fin funciona Tailnet lock y si, mientras tanto, alguien hizo una auditoría de seguridad
    Lamentablemente, no parece haber avances en ninguno de los dos frentes, así que cada vez tengo más dudas sobre cuánto puedo confiar en esto como componente central de mi infraestructura
    La premisa del SaaS de Tailscale es crear túneles que atraviesan el firewall y permitir que el usuario controle de forma intuitiva e integrada qué se enruta a través de esos túneles
    Headscale parece resolver bien el cruce de firewalls y la travesía avanzada de NAT, pero queda la duda de si puede ofrecer suficiente seguridad propia como para compensar la seguridad que acaba de eludir
    Si no hay forma de que el usuario entienda o rechace lo que el servidor de control le indica al cliente que haga, y además no existe ninguna auditoría de seguridad del código del servidor, parece una apuesta bastante audaz

    • Tailnet lock parece mucho menos importante en Headscale que en Tailscale, porque controlas directamente la infraestructura de Headscale
    • Me pregunto si Headscale realmente implementó esas funciones por su cuenta
      Yo pensaba que esto era una capa de control montada sobre los servicios backend base de Tailscale, pero ¿está mediando las conexiones de una forma nueva?
      Uso ZeroTier con bastante frecuencia, pero no conozco mucho Tailscale, así que quizá sea una pregunta obvia
    • Uno de los mantenedores ahora trabaja en Tailscale
    • Sobre eso, se puede consultar https://github.com/juanfont/headscale/issues/2416
  • Si te interesan los servidores de orquestación autoalojados, Netbird también vale la pena
    Es una herramienta similar, pero el servidor también es open source, y junto con el servidor de control autoalojado ofrece una GUI decente y funciones de la versión de pago
    https://netbird.io/knowledge-hub/tailscale-vs-netbird

    • En comparación con Headscale, Netbird tiene muchísimas partes móviles
      Se ve sólido, potente y con muchas funciones, pero el autoalojamiento de Headscale es mucho más simple y requiere menos cosas
    • Me estoy cambiando poco a poco de Tailscale a Netbird, y funciona muy bien salvo por esa jugada medio absurda de Tailscale de tomar toda la ruta de CGNAT
      Por ahora sigo ejecutando Tailscale, pero cada vez estoy más cerca de retirarlo por completo y pasarme totalmente a Netbird
    • Quiero usar Netbird, pero todavía no tiene algo que se pueda embeber en un binario Go como tsnet de Tailscale
      El issue correspondiente en GitHub está aquí
      https://github.com/netbirdio/netbird/issues/1103
    • La falta de IPv6 es un defecto realmente grave: https://github.com/netbirdio/netbird/issues/46
    • Me pregunto si Netbird también hace una travesía de NAT tan sofisticada como Tailscale
  • Estaría bien poner el nombre del proyecto, Headscale, en el título
    Headscale es un proyecto que ya ha salido varias veces en HN

  • Estaría genial si Headscale soportara peering/federación entre instancias. Quizá podría venir después del rediseño de ACL
    Uno de los principales problemas es el conflicto de direcciones
    La propuesta es esta: definir una red superpuesta solo IPv6 dentro del rango de direcciones locales únicas (ULA), y dividir los 121 bits restantes en 20 bits inferiores para la dirección del dispositivo (aprox. 1 millón) y 101 bits superiores como hash de la clave pública del servidor
    Luego bastaría con agregar las claves públicas de otras instancias para federarlas y gestionar la comunicación entre nodos con políticas y ACL
    Me parece una buena idea, pero cuando la propuse en 2023, el mantenedor kradalby dijo que estaba fuera del alcance del proyecto: https://github.com/juanfont/headscale/issues/1370

  • Llevo medio año usando Headscale sin problemas
    Me gusta tanto que ya ni sé cómo vivía antes sin una red de Tailscale
    Está empaquetado para OpenBSD, y yo uso ese paquete como servidor

  • Me gusta Headscale y acabo de ponerlo en producción; funciona muy bien

    • Llevo operando Headscale desde hace 2.5 años y me ha parecido bastante bueno
      Para el inicio de sesión uso un dominio de Gmail, y una gran ventaja es que los usuarios pueden registrar sus dispositivos por su cuenta
      Con OpenVPN antes, el equipo de operaciones tenía que entregar manualmente los certificados y la configuración
      El único inconveniente es que a veces los usuarios se conectan por error al servidor de inicio de sesión de Tailscale en vez de al nuestro y luego se confunden tratando de entender por qué no pueden acceder al servicio
      Estoy configurando servicios accesibles por grupos de usuarios
      Todavía uso una versión vieja de Headscale porque tengo integraciones que debo portar al nuevo plano de control
      Según headscale node list | wc, hay unos 250 nodos, y la mayoría son servidores
      No me encanta que Tailscale toque como por arte de magia la tabla de enrutamiento y las reglas del firewall, pero en general no ha sido un problema y ha funcionado bastante bien
    • ¿Te refieres a que lo desplegaron como servicio interno para toda la empresa?
  • En varios casos de uso, por ejemplo el acceso móvil o la GUI de macOS, se necesita que el cliente oficial de Tailscale mantenga la capacidad de configurar el servidor de control para poder usar Headscale
    En el momento en que empiece el inevitable deterioro de calidad en Tailscale, esa función desaparecerá
    Lo digo como un cliente muy satisfecho con Tailscale hoy, pero también desde la experiencia de haber visto esto pasar muchas veces en el pasado cuando otras empresas fueron vendidas o se quedaron sin financiamiento de riesgo

    • Excepto por la parte de GUI en sistemas operativos no open source, ¿la mayoría de los clientes de Tailscale no son open source?
    • Si no recuerdo mal, creo que Tailscale dijo en algún lado que Headscale incluso es positivo para sus ingresos
      Suena lógico. Headscale lo usan sobre todo usuarios de homelab y pequeños aficionados, y compite con OpenVPN o WireGuard autohospedados, no con Pulsesecure, Cisco Anyconnect o GlobalProtect
      Es una vía para presentar Tailscale a gente a la que le encantan las tecnologías nuevas en su tiempo libre, pero que no quiere renunciar al control de su infraestructura
      Esa gente luego lleva su experiencia y entusiasmo por Tailscale a su trabajo
      Las empresas, salvo que administrar infraestructura de TI sea una competencia central, en general no quieren hacerlo
      Claro, algunas empresas elegirán Headscale en lugar del producto principal de Tailscale, pero considerando el tamaño de esas empresas y el monto involucrado, probablemente serán pocas
      Eso se parece más a un costo de ventas, no muy distinto de anuncios de Facebook o espectaculares al lado de las carreteras en Silicon Valley
    • Lo que más me molesta de Tailscale es el cliente, especialmente el consumo de batería del cliente móvil
      La razón por la que no podemos usar Tailscale en el trabajo es que el tráfico se enruta a través de servidores que no controlamos
      De verdad quiero usar Tailscale en el trabajo, y resolvería muchos problemas
      Si hubiera que abrir puertos, lo podríamos aceptar, pero tunelizar tráfico por ese puerto sí me preocupa mucho
  • Se ve interesante. Me pregunto qué valor agregado ofrece frente a una configuración de WireGuard + OpenWrt

    • Los dispositivos se conectan entre sí peer-to-peer sin configuración manual, incluso si están detrás de NAT complejos
      Simplemente funciona, bajo las restricciones de ACL administradas centralmente
      A veces se menosprecia a Tailscale como “solo un orquestador de WireGuard”, pero en realidad es mucho más que eso
      Desde la perspectiva del producto, WireGuard es solo un detalle de implementación
    • Es una VPN en malla, así que los peers se comunican directamente y no hay latencia adicional
      Yo antes elegí Netbird porque sentía que la UI de Headscale era demasiado básica, aunque puede que haya mejorado en estos años
    • La propuesta de valor de Tailscale es WireGuard que incluso alguien medianamente técnico puede configurar y administrar por su cuenta
      Funciona en muchísimos clientes, y hasta mis Apple TV están conectados a la red de Tailscale
      La configuración tomó como un minuto y también pueden actuar como gateway
    • También hay gente que no tiene una IP fija o que no quiere que haya algo escuchando en su red doméstica
      Con Tailscale o con Headscale alojado externamente se puede usar así
  • Me pregunto qué tan en riesgo estarían mis dispositivos si el servidor coordinador de Tailscale fuera comprometido y Tailnet lock estuviera activado