2 pontos por GN⁺ 2025-04-04 | 1 comentários | Compartilhar no WhatsApp
  • O Headscale é um projeto alternativo open source criado para permitir a auto-hospedagem da funcionalidade de servidor de controle do Tailscale
  • O Tailscale é uma solução moderna de VPN baseada em WireGuard, capaz de montar uma rede overlay que funciona mesmo em ambientes com NAT
  • O servidor Control original do Tailscale é um software fechado, mas o Headscale foi desenvolvido como um software de servidor livremente instalável que pode substituí-lo
  • Os clientes Windows, macOS e iOS ainda precisam da GUI do Tailscale

Objetivo e características do Headscale

  • O Headscale oferece suporte a apenas um tailnet (rede privada virtual), pensado para uso pessoal e pequenas organizações open source
  • É uma solução adequada para usuários que querem operar seu próprio servidor e entusiastas de software livre
  • Seu escopo de design é deliberadamente mais enxuto, facilitando manutenção e administração

Principais recursos

  • Troca de chaves públicas WireGuard entre nós clientes
  • Atribuição de endereços IP e definição de limites para cada nó
  • Recurso de compartilhamento de máquinas entre usuários
  • Gerenciamento de anúncios de rotas dos nós
  • A lista oficial de recursos pode ser consultada aqui

Sistemas operacionais de clientes compatíveis

  • A lista de sistemas operacionais e clientes compatíveis com o Headscale pode ser consultada na documentação oficial

Orientações sobre instalação e execução

  • Proxy reverso (reverse proxy) ou execução baseada em contêineres não são oficialmente recomendados
  • Para métodos de execução e configuração, consulte a documentação oficial

Comunidade e contribuição

Ambiente de desenvolvimento e estilo de código

  • Principais ferramentas necessárias para desenvolvimento:
    • versão mais recente do Go
    • Buf (gerador de Protobuf)
    • é possível configurar o ambiente de desenvolvimento com Nix (comando nix develop)
  • Estilo de código:
    • Código Go: uso de golangci-lint, golines, gofumpt
    • Código Proto: uso de buf, clang-format
    • Outros arquivos: formatação com prettier
  • Antes de fazer commit, é obrigatório organizar o código com make lint e make fmt

Build e testes

  • Ao alterar código Protobuf, é necessário regenerar o código Go: make generate
  • Execução de testes: make test
  • Build:
    • nix build
    • ou usar o comando make build

Outras informações

  • Houve uma apresentação sobre o Headscale no FOSDEM 2023: ver vídeo
  • O projeto não tem vínculo direto com a Tailscale Inc., mas conta com a participação de colaboradores ligados ao Tailscale e define de forma independente suas revisões de código e direcionamento

1 comentários

 
GN⁺ 2025-04-04
Comentários do Hacker News
  • A cada poucos meses volto a visitar este repositório para ver se o Tailnet lock está funcionando ou se uma auditoria de segurança foi realizada. Infelizmente, não houve progresso em nenhum dos dois, então fico em dúvida se dá para confiar neste sistema como parte central da infraestrutura

    • Toda a premissa do SaaS da Tailscale é gerenciar de forma intuitiva e integrada a criação de túneis ao redor de firewalls e permitir que os usuários façam roteamento por esses túneis
    • O Headscale parece resolver bem a parte de contornar firewalls e fazer NAT traversal. No entanto, fica a dúvida se ele consegue oferecer segurança suficiente para compensar o que contorna, ou se acaba virando apenas uma ferramenta para atrapalhar o administrador da rede local
    • Parece ousado não auditar em absoluto o código do servidor, ao mesmo tempo em que não se oferece ao usuário uma forma de entender ou recusar o que o servidor de controle instrui os clientes a fazerem na implementação do Tailscale
  • Se você tem interesse em hospedar por conta própria o servidor de orquestração, vale dar uma olhada no Netbird. A ferramenta é muito parecida, mas o servidor é disponibilizado como open source. Assim, você pode ter um servidor de controle self-hosted com todos os recursos da versão paga e uma GUI bacana

  • Seria ótimo se o Headscale permitisse peering/federação entre instâncias (mesmo que só depois de uma reformulação das ACLs). Um dos principais problemas é o conflito de endereços

    • Proposta: dedicar-se a uma rede overlay somente IPv6 dentro da faixa de Unique Local Address (ULA), dividindo os 121 bits restantes em 20 bits para endereço do dispositivo (~1 milhão) e 101 bits para o hash da chave pública do servidor. Depois, adicionar a chave pública de outras instâncias e usar políticas e ACLs para gerenciar a comunicação entre nós
    • Acho que a ideia é boa, mas quando levantei essa questão em 2023, o mantenedor kradalby disse que estava fora do escopo Link para a issue no GitHub
  • O nome do projeto, Headscale, deveria ser incluído no título

    • Headscale já apareceu várias vezes no HN
  • Fico curioso se ele roda no Plan 9

  • Adoro o Headscale. Nós o colocamos em produção e foi excelente

  • Fico me perguntando qual é o risco de meus dispositivos serem comprometidos se o servidor de coordenação do Tailscale for comprometido e o tailnet lock estiver ativado

  • Em muitos casos de uso (acesso móvel, GUI no macOS), o cliente oficial do Tailscale depende da capacidade de configurar o servidor de controle

    • Se a inevitável redução de funcionalidades começar no Tailscale, essa capacidade vai desaparecer
    • Digo isso como um cliente atualmente muito satisfeito da Tailscale, embora já tenha me decepcionado várias vezes no passado com outras empresas que foram vendidas ou ficaram sem capital de VC
  • Fico pensando que valor adicional essa configuração oferece em comparação com uma configuração wireguard + openwrt

  • A afirmação "Parece ousado não auditar em absoluto o código do servidor, ao mesmo tempo em que não se oferece ao usuário uma forma de entender ou recusar o que o servidor de controle instrui os clientes a fazerem na implementação do Tailscale" sugere que apenas disponibilizar o código-fonte do servidor de controle do Headscale não é condição suficiente para que o usuário possa "entender ou recusar o que o servidor de controle instrui os clientes a fazerem"

    • Ao usar o servidor de controle do Headscale, o usuário pode "entender ou recusar tudo o que o servidor de controle instrui os clientes a fazerem". Isso pode ser alcançado lendo, editando e compilando o código-fonte
    • Ao usar o servidor de controle do Tailscale, o usuário só pode "entender ou recusar o que o servidor de controle instrui os clientes a fazerem" dentro do que a empresa Tailscale permitir. O usuário é proibido de editar ou compilar o código-fonte
    • Nem todo usuário quer a opção de ler, editar e compilar software de terceiros que utiliza. Alguns podem ficar satisfeitos em depender das garantias contínuas de uma empresa do Vale do Silício financiada por capital de risco. Para quem quer um projeto 100% open source, o Headscale pode ser útil
    • O autor do Headscale chamou o servidor de coordenação do Tailscale de "essencialmente um Dropbox compartilhado para chaves públicas"