O que é Headscale e Por Que Migrar do Tailscale?
O Tailscale revolucionou a forma como profissionais de TI gerenciam redes privadas (Zero Trust Network Access), utilizando o protocolo WireGuard para criar túneis seguros e rápidos entre dispositivos. No entanto, a solução padrão da empresa depende dos servidores "MagicDNS" e de controle da Tailscale Inc., o que pode ser um ponto de dor para empresas que exigem conformidade rigorosa com LGPD, soberania de dados ou simplesmente preferem ter controle total sobre a infraestrutura.
O Headscale surge como a alternativa open-source e self-hosted para o protocolo DERP/UDP do Tailscale. Ele permite que você execute seu próprio servidor de controle, mantendo a mesma experiência de usuário e compatibilidade com clientes Tailscale, mas sem depender de serviços externos para a autenticação ou roteamento inicial. Ao configurar um headscale tailscale self-hosted, você ganha:
- Controle Total dos Dados: Nenhuma informação de metadata passa por servidores terceirizados.
- Custo Reduzido: Elimina a necessidade de licenças comerciais para grandes números de nós.
- Integração com Infraestrutura Existente: Facilita a criação de uma vpn própria com vps integrada ao seu domínio interno.
Neste tutorial, você aprenderá a instalar e configurar o Headscale em um ambiente Linux (Ubuntu/Debian), transformando sua VPS em um servidor de controle robusto. Embora o foco seja o Headscale, os conceitos de túneis privados aqui aplicados são fundamentais para quem busca soluções como zerotier auto hospedado ou deseja entender a fundo como funciona uma wireguard vps tutorial básica.
Pré-requisitos e Preparação do Ambiente
Antes de iniciar a instalação, certifique-se de ter acesso root ou sudo à sua VPS. Este guia assume um sistema Debian-based (como Ubuntu 22.04 LTS ou 24.04 LTS). A lógica é similar para outras distribuições, mas os comandos de pacote podem variar.
Você precisará de:
- Uma VPS com Linux instalado.
- Um domínio DNS apontando para o IP público da sua VPS (opcional, mas recomendado para MagicDNS alternativo).
- Pingua ou Firewall configurado para liberar as portas UDP necessárias.
O Headscale utiliza SQLite por padrão para armazenamento de dados, o que simplifica a instalação em máquinas pequenas. Para ambientes enterprise com alta carga, é possível migrar para PostgreSQL, mas para a maioria dos casos de uso de vpn site to site mikrotik vps ou redes domésticas avançadas, o SQLite é mais do que suficiente.
Passo 1: Instalação do Headscale
A maneira mais segura e recomendada de instalar o Headscale é através do repositório oficial ou binários compilados. Vamos utilizar o método via pacote `.deb` para garantir atualizações fáceis.
Primeiro, atualize a lista de pacotes do sistema:
sudo apt update && sudo apt upgrade -y
Baixe a última versão estável do Headscale. Verifique sempre o GitHub oficial para a versão mais recente. No momento da escrita deste tutorial, utilizaremos a estrutura de download padrão:
HEADSCALE_VERSION=$(curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | grep tag_name | cut -d '"' -f 4)
echo "Baixando versão: $HEADSCALE_VERSION"
wget https://github.com/juanfont/headscale/releases/download/$HEADSCALE_VERSION/headscale_${HEADSCALE_VERSION}_linux_amd64.tar.gz
Extraia o binário e mova-o para o diretório de execução:
tar -xvzf headscale_*.tar.gz
sudo mv headscale /usr/bin/headscale
sudo chmod +x /usr/bin/headscale
Agora, crie os usuários e grupos necessários para a execução segura do serviço. Nunca execute o servidor de controle como root:
sudo groupadd --system headscale
sudo useradd -r -d /var/lib/headscale/ -g headscale --no-create-home headscale
sudo mkdir -p /etc/headscale /var/lib/headscale /var/log/headscale
sudo chown -R headscale:headscale /etc/headscale /var/lib/headscale /var/log/headscale
Passo 2: Configuração do Arquivo de Configuração
O coração do Headscale é o arquivo config.yaml. Crie este arquivo com suas preferências. Este exemplo configura o servidor para usar HTTPS (recomendado) e define o domínio do seu ambiente.
sudo nano /etc/headscale/config.yaml
Insira a seguinte configuração básica (ajuste os campos destacados):
server_url: "https://headscale.seudominio.com.br"
listen_addr: ":8080"
metrics_listen_addr: ":9090"
grpc_listen_addr: ":50443"
private_key_path: "/var/lib/headscale/private.key"
db_type: "sqlite"
db_sqlite_path: "headscale.db"
# Configurações de DNS e DERP
derp:
server:
enabled: true
region_id: 999
region_code: "custom"
address: ":3478"
dns_config: null
# Autenticação e usuários
users:
- name: "admin"
policy:
paths: ["/etc/headscale/acls.yaml"]
Importante: Se você planeja usar certificados SSL, configure a seção tls_letscache ou tls_letsencrypt no final do arquivo. Para ambientes internos sem DNS público, você pode usar HTTP simples, mas isso exige configuração manual de trusted certificates nos clientes.
Passo 3: Inicialização e Geração de Chaves
Com a configuração salva, inicialize o banco de dados e gere as chaves criptográficas necessárias:
sudo headscale db init
sudo headscale serve generate-keys
Crie o serviço systemd para gerenciar o Headscale como um daemon:
sudo nano /etc/systemd/system/headscale.service
Adicione o seguinte conteúdo ao arquivo de serviço:
[Unit]
Description=Headscale Server
After=network.target
[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/bin/headscale serve
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Habilite e inicie o serviço:
sudo systemctl daemon-reload
sudo systemctl enable --now headscale
sudo systemctl status headscale
Se o status estiver active (running), seu servidor de controle está online. Você pode verificar os logs com journalctl -u headscale -f.
Passo 4: Gerenciamento de Usuários e Nodes
O Headscale não usa senhas tradicionais, mas sim chaves de tailnet. Vamos criar um usuário e gerar uma chave para conectar seu primeiro dispositivo.
Criar um novo usuário:
sudo headscale users create admin-user
Listar usuários:
sudo headscale users list
Agora, gere uma chave de autenticação para este usuário. Esta chave será usada no cliente Tailscale/Headscale:
sudo headscale keys create --user admin-user --expiry 365d
O comando retornará uma string longa (ex: ot2sdf...). Copie esta chave, pois ela é necessária para registrar o dispositivo na rede.
Passo 5: Conectando Clientes (Linux e Windows)
Aqui reside a beleza do ecossistema: você pode usar o cliente oficial do Tailscale em Linux, Windows ou macOS, apenas alterando o endpoint do servidor de controle.
Para Linux (Debian/Ubuntu)
Instale o cliente Tailscale normalmente:
curl -fsSL https://tailscale.com/install.sh | sh
Pare o serviço do tailscaled e configure-o para usar o Headscale:
sudo systemctl stop tailscaled
sudo systemctl disable tailscaled
Crie um arquivo de configuração para o cliente apontar para seu servidor self-hosted:
sudo mkdir -p /etc/tailscale
sudo nano /etc/tailscale/tailscaled.conf
Adicione a URL do seu Headscale:
[Control]
ServerURL=https://headscale.seudominio.com.br:443
Inicie o serviço novamente. O cliente irá se registrar automaticamente usando a chave gerada no passo anterior (se você passar a chave via linha de comando ou arquivo):
sudo tailscale up --login-server=https://headscale.seudominio.com.br:443 --backend=systemd
# Ou, se já estiver logado anteriormente, apenas force o login com a chave:
sudo tailscale up --login-server=https://headscale.seudominio.com.br:443 --authkey=ot2sdf...
Para Windows ou macOS
Baixe e instale o aplicativo Tailscale padrão. Antes de fazer login, abra o terminal (PowerShell no Windows) e execute:
tailscale configure --login-server=https://headscale.seudominio.com.br
tailscale up --authkey=ot2sdf...
O dispositivo aparecerá na dashboard do Headscale assim que se conectar.
Passo 6: Configuração de ACLs e DNS
Para controlar quem pode falar com quem, utilize o arquivo acls.yaml. Isso é crucial para segurança em redes corporativas. Exemplo de ACL simples:
# /etc/headscale/acls.yaml
acls:
# Regra para permitir que todos os usuários do grupo admin-user acessem qualquer host
- action: accept
sources:
- "group:admin-user"
destinations:
- "*:*"
Para aplicar as ACLs, reinicie o serviço:
sudo systemctl restart headscale
Você também pode configurar o MagicDNS no Headscale. Edite o config.yaml e adicione a seção dns_config com os domínios que deseja resolver internamente:
dns_config:
domains:
- "tailscale.seudominio.com.br"
magic_dns: true
base_domain: "tailscale.seudominio.com.br"
Com isso, você pode acessar seus servidores pela URL nome-do-host.tailscale.seudominio.com.br, eliminando a necessidade de lembrar IPs.
Dicas Avançadas e Manutenção
Backup do Banco de Dados: Como estamos usando SQLite, o backup é simples. Pare o serviço, copie o arquivo headscale.db e inicie novamente.
sudo systemctl stop headscale
cp /var/lib/headscale/headscale.db /backup/headscale-db-$(date +%F).bak
sudo systemctl start headscale
Monitoramento: O Headscale expõe métricas Prometheus na porta :9090. Você pode integrar isso ao Grafana para monitorar o número de nós conectados e tráfego.
Diferença para WireGuard Puro: Enquanto um tutorial de wireguard vps tutorial tradicional exige que você gerencie chaves públicas/privadas de cada peer manualmente, o Headscale automatiza isso. No entanto, se você precisar de tunelamento L2 ou integração específica com roteadores Mikrotik, a solução vpn site to site mikrotik vps via WireGuard nativo pode ser mais direta em casos muito específicos de baixa latência e roteamento complexo, mas perde a facilidade de gerenciamento de usuários do Headscale.
Segurança: Nunca exponha a porta gRPC (:50443) ou o painel web diretamente à internet sem proteção. Use um Reverse Proxy (Nginx/Caddy) com autenticação básica ou OAuth se precisar acessar a API/Interface Web publicamente.
Conclusão
Implementar um headscale tailscale self-hosted oferece o equilíbrio perfeito entre usabilidade moderna e controle administrativo. Você obtém a experiência "plug-and-play" do Tailscale sem abrir mão da privacidade e autonomia de dados.
Este setup é superior a soluções mais antigas como openvpn vps linux passo a passo em termos de velocidade (devido ao WireGuard nativo) e facilidade de configuração de roteamento mesh. Também compete diretamente com zerotier auto hospedado, oferecendo uma interface mais polida e integração direta com o ecossistema Tailscale.
Para administradores que já utilizam install pivpn ubuntu para WireGuard simples, o Headscale representa um upgrade natural quando a rede cresce e a necessidade de gerenciamento centralizado se torna crítica. Comece hoje mesmo migrando seu ambiente de testes para esta arquitetura moderna.