Headscale: Tenha todos os recursos do Tailscale SEM taxas de assinatura!

BBetter Stack
AI/미래기술재택/원격 근무컴퓨터/소프트웨어

Transcript

00:00:00Este é o Headscale, uma versão gratuita e de código aberto do Tailscale que você pode instalar em qualquer servidor,
00:00:06dando a você controle total da sua rede criptografada caso a internet caia ou a Tailscale resolva aumentar os preços de repente.
00:00:13Mas o que é estranho é que o Headscale foi criado por um funcionário da Tailscale.
00:00:18Por que eles estão pagando alguém para criar seu próprio concorrente?
00:00:22Se inscreva no canal e vamos descobrir.
00:00:25Vamos ver rapidinho o Headscale em ação antes de entrarmos nos detalhes.
00:00:30Certo, no momento eu tenho três servidores na Hetzner: um para o plano de controle principal do Headscale e dois nós aqui que quero conectar entre si.
00:00:40Então, esses dois fazem parte da minha rede criptografada no momento.
00:00:44Se eu rodar este comando, como tudo está no Docker, posso ver os nós atuais: o Ubuntu Test e o Ubuntu Test 2.
00:00:53E estes são os endereços IP que posso usar para conectá-los.
00:00:56Por enquanto, vamos conectar esses dois nós um ao outro.
00:00:59Primeiro, vou copiar este endereço IP.
00:01:02E agora, dentro do Ubuntu Test 2, vou acessar via SSH como root.
00:01:07Sim, eu não deveria usar o root, mas isso é só para teste.
00:01:09E este é o endereço IP do Headscale.
00:01:11Se eu der enter e limpar a tela, como podem ver, estou no Ubuntu Test 1.
00:01:17Ou seja, entrei no Ubuntu Test 1 a partir do Ubuntu Test 2, e posso sair para voltar ao Ubuntu Test 2.
00:01:24E posso fazer o mesmo no Ubuntu Test 1 se eu der SSH root e colar o IP do Ubuntu Test 2.
00:01:31Limpando a tela, vemos que estou no Ubuntu Test 2 a partir do Ubuntu Test 1.
00:01:36Mas se eu estiver fora da tailnet — se eu abrir uma nova aba, que é o terminal do meu Mac — e tentar SSH root no IP do Ubuntu Test 2...
00:01:48Vejam que a conexão trava, porque estou fora da tailnet.
00:01:52Como acabaram de ver, o Headscale te dá acesso total à sua rede.
00:01:56Você controla cada detalhe e pode adicionar quantos nós quiser sem ficar preso a um fornecedor.
00:02:03E pode funcionar sem internet se você o conectar a um NAS ou a um Raspberry Pi antigo.
00:02:08Mas a configuração é um pouco trabalhosa.
00:02:11Na verdade, deixe-me mostrar como funciona.
00:02:13Criei um novo servidor chamado Ubuntu Test 3 e vou criar uma nova tailnet ou um novo servidor criptografado com um novo usuário que conectará dois nós.
00:02:24No caso, o Ubuntu Test 3 e o Ubuntu Test 1, apenas para fins de teste.
00:02:29No meu plano de controle do Headscale, ele já está instalado, mas vou mostrar o processo que utilizei.
00:02:37No momento, tenho três containers Docker rodando.
00:02:40Um é o Headscale UI, outro é o Headscale e o terceiro é o Caddy.
00:02:45Se olharmos o arquivo Docker Compose, veremos que a configuração é muito similar à da documentação oficial do Headscale.
00:02:56Apesar de eu ter alterado algumas coisas, como a versão do Headscale e os caminhos dos meus diretórios.
00:03:03Também tenho um container para o Headscale UI, que é uma das várias interfaces web de código aberto que você pode usar.
00:03:11Vou mostrar isso mais adiante.
00:03:13Depois tem o Caddy, servindo como proxy reverso.
00:03:16Vou deixar o link deste arquivo Docker Compose específico na descrição, caso tenham interesse.
00:03:21Neste diretório, também temos as pastas "lib" e "config".
00:03:26A pasta lib, como podem ver, serve principalmente para armazenar o banco de dados SQLite, que controla usuários, nós, DNS e muito mais.
00:03:36Mas, na configuração, você pode mudar para um banco Postgres se não quiser usar SQLite.
00:03:43Já o diretório config contém a configuração do Tailscale e a política de lista de controle de acesso (ACL) em um arquivo JSON legível.
00:03:52Falaremos disso depois, mas vamos olhar este primeiro, que você consegue na documentação do Tailscale — eu até usei o curl para baixá-lo no servidor.
00:04:01Olhando a configuração de exemplo no GitHub, vemos tudo o que podemos alterar, desde o servidor até os prefixos e o local do arquivo de política.
00:04:11A minha configuração é bem parecida, só mudei a URL do servidor para um domínio da Cloudflare, para que os nós saibam onde encontrar os outros.
00:04:23Também adicionei o caminho para a minha política e basicamente foi isso.
00:04:28O domínio é um padrão da Cloudflare com um registro tipo A apontando para o IP do meu controle plane sob o subdomínio "headscale".
00:04:37Com isso pronto, se eu abrir o arquivo do Caddy, verão que temos duas URLs: uma para a interface web e outra para o proxy do headscale.
00:04:49Depois dessas etapas, o primeiro passo é criar um novo usuário com este comando.
00:04:56Vou criar um usuário chamado Tom, mas pode ser o nome que você quiser.
00:05:00Usuário criado, rodamos "users list" para ver todos e aqui está o nosso novo usuário com o ID 6.
00:05:08Só que agora ele não tem nenhum nó associado a ele.
00:05:11Então, vamos dar alguns nós ao Tom.
00:05:13No Ubuntu Test 3, que é o novo servidor, primeiro precisamos adicionar o cliente Tailscale rodando este comando.
00:05:23Isso nos dá acesso ao binário do Tailscale.
00:05:27Atenção: se você não for usuário root, talvez precise usar o "sudo" para rodar o Tailscale.
00:05:31Mas antes de rodar os comandos para subir o serviço ou logar, precisamos fazer de um jeito específico para funcionar com o Headscale.
00:05:38Para isso, criaremos chaves de pré-autenticação; o comando está na página inicial da documentação do Headscale.
00:05:46Vou rolar a página e copiar este comando.
00:05:49No meu plano de controle do Headscale, vou digitar "docker exec" e colar o comando.
00:05:54Onde diz "user ID", vamos colocar o ID do Tom, que é 6.
00:05:59E antes disso, preciso adicionar um segundo "headscale" já que estamos entrando no container.
00:06:04E agora temos nossa chave de pré-autenticação.
00:06:07Copiamos este comando e colamos lá no Ubuntu Test 3.
00:06:11Depois, pegamos a chave de pré-autenticação e colamos aqui.
00:06:15Aí temos que mudar o servidor de login para o nosso servidor Headscale, que configuramos como headscale.pandor.css.
00:06:23Pandora já estava ocupado, senão eu teria usado.
00:06:26Agora, ao dar enter, devemos ter um novo nó adicionado à nossa rede Headscale.
00:06:31Voltando ao controle plane e rodando "nodes list", vemos o Ubuntu Test 3 aqui, pertencente ao Tom, com seus endereços IPv4 e IPv6.
00:06:44Agora vamos adicionar o Ubuntu Test 1 ao usuário Tom.
00:06:47Mas primeiro vou deletar o nó Ubuntu Test existente com ID 1, forçando a exclusão para pular confirmações.
00:06:56Feito isso, vou criar outra chave de pré-autenticação e adicioná-la ao Ubuntu Test, sem esquecer de ativar o SSH com a flag correspondente.
00:07:06Vou também no Ubuntu Test 3 configurar o SSH, o que apenas habilita a capacidade de conexão.
00:07:13Agora, olhando a lista de nós disponíveis, tenho o Ubuntu Test 1 e o Ubuntu Test 3, ambos sob o usuário Tom.
00:07:20Vamos conectar aos dois.
00:07:21Vou pegar o IP do Ubuntu Test 3, ir no Ubuntu Test 1 e rodar SSH root com esse IP.
00:07:30Após validar a chave, vejam que estou no Ubuntu Test 3 a partir do Ubuntu Test 1.
00:07:35E posso fazer o caminho inverso, do 3 para o 1.
00:07:41Se você seguiu meus passos exatamente, há uma grande chance de não funcionar, porque você precisa adicionar uma política de controle de acesso.
00:07:49Deixe-me mostrar a minha.
00:07:51Vou limpar aqui e entrar no diretório do Headscale; na pasta de configuração, temos o arquivo ACL em JSON.
00:08:01Entrando nele, há uma configuração bem simples que basicamente aceita qualquer origem da minha rede para qualquer destino ou porta.
00:08:11E em SSH, aceita qualquer nó dentro da minha tailnet e permite a conexão via SSH sem aprovação, mas apenas para o usuário root.
00:08:24Claro que, dependendo da sua rede e situação, você vai querer restringir isso por segurança, permitindo que certos nós acessem outros apenas em portas específicas.
00:08:33Mas esta é uma configuração simples para começar.
00:08:37E repito: o link para isso estará na descrição.
00:08:40Agora você deve estar se perguntando: e a interface do Headscale?
00:08:43Ela facilita o processo?
00:08:45Eu diria que sim e não.
00:08:47Vou mostrar.
00:08:48Aqui está a URL da minha interface e vocês podem ver meus dois usuários, Tess e Tom, com informações sobre eles.
00:08:57Dá para ver as chaves e os nós conectados para que isso funcione.
00:09:01Inicialmente, você precisa adicionar uma chave de API do Headscale, que você gera com este comando.
00:09:06Mas o problema que tive foi com a visualização dos dispositivos.
00:09:09Como podem ver, não há muita informação aqui; parece ser um erro de tipo do TypeScript no console, o que não deve ser minha culpa, pois não mexi no código-fonte.
00:09:22Nesse ponto, o app costuma travar e nada funciona.
00:09:26Eu deveria conseguir adicionar novos dispositivos por aqui e mudar algumas configurações também.
00:09:32Mas, por ser tão instável, não achei a interface tão útil assim.
00:09:35Existem outras interfaces para o Headscale, algumas que facilitam ainda mais a criação de políticas de acesso.
00:09:42Mas, na minha opinião, ainda não encontrei uma interface realmente proveitosa.
00:09:46Então sim, a configuração é um pouco complexa.
00:09:49Ok, ela é bem complexa.
00:09:51Alguém sem base técnica ou até um desenvolvedor júnior teria dificuldade em configurar isso sozinho.
00:09:57Provavelmente por isso a equipe da Tailscale permitiu que seu funcionário trabalhasse nisso; não representa uma grande ameaça para a empresa no momento.
00:10:07Digo, bastaria alguém usar o Claude Opus para criar uma interface bonitinha em volta disso e teriam algo bem legal — mas que talvez fosse barrado pela licença.
00:10:18Mas depois que tudo está rodando, o Headscale funciona maravilhosamente bem.
00:10:22Ainda faltam alguns recursos, como os comandos "funnel" e "serve" para expor servidores publicamente ou só na rede.
00:10:32Também não suporta múltiplas tailnets, nós efêmeros ou logs nativos de fluxo de rede.
00:10:38Mas, para uma ferramenta de código aberto, é realmente impressionante.
00:10:42E se algum dia eu quiser rodar meu OpenClaw totalmente offline com um LLM local, certamente considerarei o Headscale.

Key Takeaway

O Headscale oferece uma alternativa robusta e gratuita ao Tailscale para usuários técnicos que buscam controle total sobre suas redes privadas sem custos de assinatura, apesar da complexidade de configuração.

Highlights

O Headscale é uma implementação de código aberto e gratuita do plano de controle do Tailscale, permitindo auto-hospedagem.

A ferramenta foi curiosamente criada por um funcionário da própria Tailscale, coexistindo como uma alternativa comunitária.

Permite o controle total da rede criptografada (VPN mesh) sem dependência de serviços em nuvem ou taxas de assinatura.

A configuração utiliza Docker, Caddy como proxy reverso e SQLite (ou Postgres) para gerenciar nós e usuários.

Embora poderoso, o Headscale possui uma configuração complexa e interfaces gráficas ainda instáveis.

O sistema suporta políticas de Controle de Acesso (ACL) personalizadas via arquivos JSON para maior segurança.

Funciona perfeitamente em ambientes offline, como em servidores NAS ou Raspberry Pi, garantindo soberania de dados.

Timeline

Introdução e Demonstração Prática

O apresentador introduz o Headscale como uma versão open source do Tailscale que evita aumentos inesperados de preços e quedas de internet. Ele demonstra a ferramenta em ação conectando três servidores na Hetzner através de uma rede criptografada privada. É exibido como nós Ubuntu podem se comunicar via SSH usando IPs internos da rede mesh, mesmo estando em máquinas distintas. O autor destaca que a conexão falha quando tentada de fora da 'tailnet', provando a segurança do sistema. Esta seção enfatiza a liberdade de adicionar nós ilimitados sem ficar preso a um único fornecedor de software.

Arquitetura e Configuração com Docker

Nesta parte, o vídeo detalha a infraestrutura necessária para rodar o plano de controle usando Docker Compose. A configuração envolve três containers principais: o Headscale, uma interface web (UI) e o Caddy para gerenciamento de certificados e proxy. O palestrante explica a estrutura de diretórios, mencionando o uso de SQLite para o banco de dados e a flexibilidade de migrar para Postgres. É mostrado como configurar o domínio via Cloudflare e apontar registros tipo A para o servidor de controle. O arquivo de configuração principal é editado para definir a URL do servidor e os caminhos das políticas de acesso.

Gerenciamento de Usuários e Registro de Nós

O processo de administração começa com a criação de usuários via linha de comando no container Docker do Headscale. O autor demonstra a criação do usuário 'Tom' e a geração de chaves de pré-autenticação para registrar novos dispositivos na rede. No lado do cliente, o binário oficial do Tailscale é instalado e conectado ao servidor Headscale personalizado em vez do servidor padrão da empresa. Vemos a exclusão de nós antigos e o registro bem-sucedido do 'Ubuntu Test 3' com suporte a IPv4 e IPv6. A etapa final mostra a conectividade bidirecional entre os novos nós configurados sob o mesmo usuário.

Políticas de Acesso (ACL) e Interface Gráfica

O vídeo aborda a importância das listas de controle de acesso (ACL) definidas em arquivos JSON para permitir o tráfego entre dispositivos. O autor compartilha um exemplo simples que libera conexões SSH para o usuário root em toda a rede interna. Em seguida, a interface gráfica (Headscale UI) é analisada, revelando algumas limitações e bugs de estabilidade atuais. Ele menciona erros de TypeScript que impedem a visualização correta de dispositivos, tornando a experiência visual menos confiável que a linha de comando. Esta seção serve como um alerta sobre a maturidade das ferramentas auxiliares em comparação ao núcleo do sistema.

Veredito e Limitações do Projeto

O apresentador conclui que a complexidade do Headscale é o que impede que ele seja uma ameaça direta ao modelo de negócios da Tailscale. Ele argumenta que usuários sem base técnica avançada terão dificuldades reais na implementação e manutenção do sistema. São listados recursos ausentes no momento, como os comandos 'funnel', 'serve' e o suporte a logs nativos de fluxo. Apesar dessas lacunas, o projeto é elogiado por sua eficiência e utilidade em cenários de auto-hospedagem e soberania digital. O vídeo termina reforçando que o Headscale é a escolha ideal para quem planeja rodar infraestruturas totalmente offline.

Community Posts

View all posts