2 pontos por GN⁺ 2025-04-04 | 1 comentários | Compartilhar no WhatsApp
  • Headscale é um projeto que implementa o servidor de controle do Tailscale de forma open source e auto-hospedada, voltado para self-hosters e ambientes de projetos e labs de desenvolvedores por hobby
  • Tailscale é uma VPN moderna baseada em WireGuard e funciona como uma rede overlay entre computadores da rede usando NAT traversal
  • O servidor de controle do Tailscale é responsável pela troca de chaves públicas WireGuard dos nós, atribuição de IPs aos clientes, criação de limites entre usuários, compartilhamento de máquinas entre usuários e exposição das rotas anunciadas pelos nós
  • O Headscale oferece, com escopo restrito, a implementação de uma única rede Tailscale (tailnet), adequada para uso pessoal ou pequenas organizações open source
  • O projeto não tem relação com a Tailscale Inc., e não há suporte nem recomendação para uso de proxy reverso e contêineres na execução do Headscale

Objetivo e escopo do Headscale

  • Headscale tem como objetivo ser uma alternativa open source e auto-hospedável ao servidor de controle do Tailscale
  • O público-alvo são self-hosters, desenvolvedores por hobby e usuários de projetos pessoais e ambientes de lab
  • O escopo da implementação é restrito e oferece uma única tailnet
    • Adequada para uso pessoal
    • Também adequada para pequenas organizações open source

Papel do Tailscale e do servidor de controle

  • Tailscale é uma VPN moderna construída sobre o WireGuard
  • O Tailscale funciona como uma rede overlay entre computadores da rede e usa NAT traversal
  • No Tailscale, todos os componentes são open source, exceto parte dos clientes GUI e o servidor de controle
    • Os clientes GUI mencionados como exceção são os clientes para sistemas operacionais proprietários, como Windows e macOS/iOS
  • O servidor de controle atua como ponto de troca de chaves públicas WireGuard entre os nós da rede Tailscale
    • Atribui endereços IP aos clientes
    • Cria limites entre usuários
    • Permite o compartilhamento de máquinas entre usuários
    • Expõe rotas anunciadas pelos nós
  • Uma rede Tailscale, ou tailnet, é uma rede privada que o Tailscale atribui a um usuário individual ou a uma organização

Observações sobre documentação e versões

Execução e build

  • Não há suporte nem recomendação para uso de proxy reverso e contêineres na execução do Headscale
  • Para instruções de execução, consulte a documentação oficial
  • O módulo para usuários de NixOS está no diretório nix/
  • Builds de desenvolvimento do branch main são fornecidas como imagens de contêiner e binários

Relação do projeto e contribuições

  • Este projeto não tem relação com a Tailscale Inc.
  • Um dos mantenedores principais ativos do Headscale é empregado pela Tailscale e pode contribuir com o projeto durante o expediente
    • As contribuições desse mantenedor são revisadas por outros mantenedores
  • Os mantenedores definem em conjunto a direção do projeto com o princípio de criar um projeto sustentável, apoiando a comunidade de self-hosters, usuários entusiastas e desenvolvedores por hobby
  • Contribuidores devem ler o CONTRIBUTING.md

Ambiente de desenvolvimento e workflow

  • Contribuições exigem versões recentes de Go e Buf
    • Buf é usado como gerador de Protobuf
  • Recomenda-se usar Nix para configurar o ambiente de desenvolvimento
    • Executar nix develop instala as ferramentas necessárias e fornece um shell
    • Esse método garante o mesmo ambiente de desenvolvimento usado pelos mantenedores do Headscale
  • O código Go é lintado com golangci-lint e formatado com golines e gofumpt
    • A largura do golines é configurada como 88
    • Recomenda-se executar make lint e make fmt antes do commit
  • O código Proto é lintado com buf e formatado com clang-format
  • A documentação é formatada com mdformat, e os demais arquivos, como Markdown e YAML, são formatados com prettier
  • Ao alterar proto/, é necessário gerar novamente o código Go a partir do Protobuf
    • O comando é make generate
    • Recomenda-se colocar as alterações em gen/ em um commit separado para facilitar a revisão
  • Testes e build são executados com make test e make build, respectivamente
  • O workflow recomendado é executar make test e make build após nix develop
    • Se você gerencia dependências diretamente, pode usar o Make de imediato
    • O Makefile emite um aviso se as ferramentas necessárias não estiverem presentes e sugere executar nix develop
    • Os targets disponíveis podem ser vistos com make help

1 comentários

 
GN⁺ 2025-04-04
Opiniões no Hacker News
  • A cada poucos meses acabo voltando a este repositório para ver se o Tailnet lock finalmente está funcionando e se, nesse meio-tempo, alguém fez uma auditoria de segurança
    Infelizmente, parece que não houve avanço em nenhum dos dois pontos, e por isso fico cada vez mais incerto sobre o quanto posso confiar nisso como componente central da minha infraestrutura
    A premissa do SaaS da Tailscale é criar um túnel que contorna o firewall e permitir que o usuário controle, de forma intuitiva e integrada, o que será roteado por esse túnel
    O Headscale parece fazer bem a parte de contornar firewalls e atravessar NATs avançados, mas fico em dúvida se ele consegue oferecer segurança própria suficiente para compensar a segurança que acabou de contornar
    Se o usuário não tem como entender ou recusar o que o servidor de controle manda os clientes fazerem, e se não há nenhuma auditoria de segurança do código do servidor, isso parece uma escolha bem ousada

    • O Tailnet lock parece muito menos importante no Headscale do que no Tailscale. Isso porque você controla diretamente a infraestrutura do Headscale
    • Fico curioso se o Headscale realmente implementou essas funcionalidades por conta própria
      Eu achava que isso fosse uma camada de controle por cima dos serviços de backend básicos da Tailscale; ele intermedeia conexões de uma forma nova?
      Uso bastante o ZeroTier, mas não conheço muito o Tailscale, então talvez seja uma pergunta óbvia
    • Um dos mantenedores agora trabalha na Tailscale
    • Sobre isso, vale consultar https://github.com/juanfont/headscale/issues/2416
  • Se você tem interesse em servidores de orquestração auto-hospedados, vale olhar também o Netbird
    É uma ferramenta parecida, mas o servidor também é open source, e o servidor de controle auto-hospedado vem com uma GUI razoável e recursos da versão paga
    https://netbird.io/knowledge-hub/tailscale-vs-netbird

    • Comparado ao Headscale, o Netbird tem mesmo muitas partes móveis
      Parece robusto, poderoso e cheio de recursos, mas o Headscale auto-hospedado é bem mais simples e tem menos requisitos
    • Estou migrando aos poucos do Tailscale para o Netbird e, tirando a palhaçada do Tailscale de tomar toda a rota CGNAT, ele funciona muito bem
      Por enquanto ainda mantenho o Tailscale rodando, mas estou cada vez mais perto de aposentá-lo e migrar totalmente para o Netbird
    • Gostaria de usar o Netbird, mas ele ainda não tem um recurso que possa ser embutido em um binário Go como o tsnet do Tailscale
      A issue relacionada no GitHub está aqui
      https://github.com/netbirdio/netbird/issues/1103
    • A falta de IPv6 é uma desvantagem realmente fatal: https://github.com/netbirdio/netbird/issues/46
    • Fico me perguntando se o Netbird também faz travessia de NAT sofisticada como o Tailscale
  • Seria bom colocar Headscale, o nome do projeto, no título
    O Headscale é um projeto que já apareceu várias vezes no HN

  • Seria ótimo se o Headscale desse suporte a peering/federação entre instâncias. Talvez depois da reformulação das ACLs
    Um dos principais problemas é a colisão de endereços
    A proposta é esta: definir uma rede overlay apenas IPv6 no intervalo de endereços locais únicos (ULA) e dividir os 121 bits restantes em 20 bits inferiores para endereços de dispositivos (cerca de 1 milhão) e 101 bits superiores como hash da chave pública do servidor
    Bastaria adicionar a chave pública de outra instância para federar e gerenciar a comunicação entre nós com políticas e ACLs
    Acho uma boa ideia, mas quando mencionei isso em 2023, o mantenedor kradalby disse que estava fora do escopo: https://github.com/juanfont/headscale/issues/1370

  • Estou usando o Headscale há meio ano, sem problemas
    Gosto tanto que nem sei como eu vivia antes sem uma rede Tailscale
    Ele está empacotado no OpenBSD, e uso esse pacote como servidor

  • Gosto do Headscale e acabei de colocá-lo em produção; está funcionando muito bem

    • Tenho operado o Headscale há 2,5 anos e ele tem sido bem bom
      Uso um domínio do Gmail para login, e a grande vantagem é que os usuários conseguem registrar seus próprios dispositivos
      No OpenVPN antigo, a equipe de operações precisava entregar certificados e configurações manualmente
      A única desvantagem é quando usuários conectam por engano ao servidor de login da Tailscale em vez do nosso servidor próprio e depois ficam tentando entender por que não conseguem acessar os serviços
      Estamos configurando os serviços acessíveis por grupos de usuários
      Ainda estamos usando uma versão antiga do Headscale, porque há integrações que precisamos portar para o novo plano de controle
      Pelo headscale node list | wc, temos cerca de 250 nós, a maioria servidores
      Não gosto muito da forma como o Tailscale mexe magicamente na tabela de roteamento e nas regras de firewall, mas em geral isso não foi um problema e funcionou bem
    • Fico me perguntando se isso quer dizer que ele foi implantado como serviço interno para a empresa inteira
  • Em vários casos de uso, por exemplo acesso móvel ou a GUI do macOS, o cliente oficial do Tailscale precisa manter a capacidade de configurar o servidor de controle para que seja possível usar o Headscale
    No momento em que a inevitável queda de qualidade começar na Tailscale, esse recurso vai desaparecer
    Digo isso como um cliente que hoje está muito satisfeito com a Tailscale, mas que já passou por isso várias vezes no passado, quando outras empresas foram vendidas ou ficaram sem capital de risco

    • Tirando as partes de GUI de sistemas operacionais não open source, a maioria dos clientes Tailscale não é open source?
    • Se minha memória não falha, acho que a Tailscale disse em algum lugar que o Headscale, na verdade, é positivo para a receita
      Faz sentido. O Headscale é usado principalmente por usuários de homelab e pequenos hobbistas, e compete com OpenVPN ou WireGuard auto-hospedados, não com Pulsesecure, Cisco Anyconnect ou GlobalProtect
      É um caminho para apresentar o Tailscale a pessoas que gostam de novas tecnologias no tempo livre, mas não querem abrir mão do controle da infraestrutura
      Essas pessoas acabam levando sua experiência e entusiasmo com o Tailscale para o trabalho
      Empresas não querem muito administrar infraestrutura de TI, a menos que isso seja uma competência central
      Claro que algumas empresas vão escolher o Headscale em vez do produto principal da Tailscale, mas, considerando o porte das empresas e os valores envolvidos, é provável que sejam poucas
      Isso se parece mais com custo de receita, não muito diferente de anúncios no Facebook ou outdoors nas estradas do Vale do Silício
    • Minha maior reclamação com o Tailscale é o cliente, especialmente o consumo de bateria do cliente móvel
      O motivo pelo qual não podemos usar Tailscale no trabalho é que o tráfego é roteado por servidores que não controlamos
      Eu realmente gostaria de usar Tailscale no trabalho, e ele resolveria muitos problemas
      Se precisarmos abrir uma porta, consigo aceitar, mas tunelar tráfego por essa porta me preocupa muito
  • Parece interessante. Fico curioso sobre qual valor adicional ele oferece em relação a uma configuração com WireGuard + OpenWrt

    • Os dispositivos se conectam entre si peer-to-peer, mesmo atrás de NATs complexos, sem configuração manual
      Tudo simplesmente funciona, sujeito às ACLs gerenciadas centralmente
      Às vezes menosprezam o Tailscale como “apenas um orquestrador de WireGuard”, mas, na prática, ele é muito mais do que isso
      Do ponto de vista do produto, o WireGuard é só um detalhe de implementação
    • Por ser uma VPN em malha, os peers se comunicam diretamente, então não há latência adicional
      Eu escolhi o Netbird no passado porque achei a UI do Headscale básica demais, mas talvez ela tenha melhorado nos últimos anos
    • A proposta de valor do Tailscale é ser um WireGuard que alguém com certo conhecimento técnico também consegue configurar e administrar sozinho
      Funciona em inúmeros clientes, e minhas Apple TVs também estão conectadas à rede Tailscale
      A configuração levou cerca de 1 minuto e elas também podem atuar como gateway
    • Também há pessoas que não têm IP fixo ou não querem algo escutando na rede de casa
      Com Tailscale ou um Headscale hospedado externamente, dá para usar assim
  • Fico curioso sobre qual seria o risco de meus dispositivos serem comprometidos se o servidor de coordenação da Tailscale fosse comprometido e o Tailnet lock estivesse ativado