Headscale - implementação open source auto-hospedada do servidor de controle do Tailscale
(github.com/juanfont)- 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
- Para ver exemplos de configuração correspondentes à versão de release em uso, é preciso sempre selecionar a mesma tag do GitHub
- O branch
mainpode conter alterações ainda não lançadas - A documentação é oferecida em versões estável e de desenvolvimento
- A lista de recursos deve ser consultada na documentação de Features
- O escopo de suporte a clientes e sistemas operacionais deve ser consultado na documentação de Client and operating system support
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
mainsão fornecidas como imagens de contêiner e binários- Para detalhes, consulte a documentação de development builds
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 developinstala as ferramentas necessárias e fornece um shell - Esse método garante o mesmo ambiente de desenvolvimento usado pelos mantenedores do Headscale
- Executar
- O código Go é lintado com
golangci-linte formatado comgolinesegofumpt- A largura do
golinesé configurada como 88 - Recomenda-se executar
make lintemake fmtantes do commit
- A largura do
- O código Proto é lintado com
bufe formatado comclang-format - A documentação é formatada com
mdformat, e os demais arquivos, como Markdown e YAML, são formatados comprettier - 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
- O comando é
- Testes e build são executados com
make testemake build, respectivamente - O workflow recomendado é executar
make testemake buildapósnix 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
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
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
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
Parece robusto, poderoso e cheio de recursos, mas o Headscale auto-hospedado é bem mais simples e tem menos requisitos
Por enquanto ainda mantenho o Tailscale rodando, mas estou cada vez mais perto de aposentá-lo e migrar totalmente para o Netbird
A issue relacionada no GitHub está aqui
https://github.com/netbirdio/netbird/issues/1103
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
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 servidoresNã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
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
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
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
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
Eu escolhi o Netbird no passado porque achei a UI do Headscale básica demais, mas talvez ela tenha melhorado nos últimos anos
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
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