- 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
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
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
O nome do projeto, Headscale, deveria ser incluído no título
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
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"