← Todos os artigos
Open Source

Como Configurar o Headscale: Guia de VPN Mesh Privada

Aprenda a instalar e configurar o Headscale para criar uma VPN mesh privada e auto-hospedada baseada no protocolo WireGuard, sem limite de dispositivos.

5 de leitura
Como Configurar o Headscale: Guia de VPN Mesh Privada
Foto por Kevin Paster

Como Configurar o Headscale: VPN Mesh Privada, Open Source e sem Limites

Conectar dispositivos de forma segura em redes e locais geográficos diferentes é um desafio frequente em infraestrutura. Tradicionalmente, redes privadas virtuais (VPNs) centralizadas roteiam todo o tráfego por um único servidor gateway, criando gargalos de banda e aumentando a latência. A topologia em malha (mesh VPN) resolve essa limitação ao permitir que os dispositivos se comuniquem diretamente entre si (peer-to-peer), utilizando criptografia ponta a ponta baseada no protocolo WireGuard.

O Tailscale se popularizou como uma das soluções mais eficientes de mesh VPN, mas seu painel de controle (control plane) é proprietário e possui limites no plano gratuito. É aqui que entra o Headscale: uma implementação open source e auto-hospedada (self-hosted) do painel de controle do Tailscale.

Aprenda neste guia como instalar e configurar o Headscale para criar uma VPN mesh 100% privada, sem dependência de terceiros e sem limites de nós ou dispositivos.


O que é o Headscale e Como Ele Funciona?

Para entender o Headscale, é fundamental separar a arquitetura de conexão em duas camadas distintas:

  1. Plano de Dados (Data Plane): É o tráfego real de dados criptografados entre os dispositivos. É gerenciado diretamente pelo protocolo WireGuard em execução em cada cliente.
  2. Plano de Controle (Control Plane): É responsável por autenticar nós, trocar chaves públicas criptográficas e coordenar quais dispositivos podem se enxergar na rede.

[IMAGEM] tipo: diagrama assunto: Comparativo de arquitetura da VPN mesh mostrando o servidor Headscale atuando apenas no plano de controle e as conexoes diretas de dados entre os dispositivos clientes via WireGuard motivo: Ilustra visualmente que o trafego de dados nao passa pelo servidor Headscale, reduzindo a latencia e aumentando a privacidade da rede [/IMAGEM]

O Headscale substitui os servidores centrais proprietários do Tailscale, mantendo compatibilidade com os aplicativos oficiais do Tailscale para Linux, macOS, Windows, Android e iOS. O tráfego de dados continua fluindo de forma direta entre os nós, garantindo velocidade máxima e privacidade total.


Pré-requisitos

Antes de iniciar a configuração, certifique-se de possuir:

  • Um servidor Linux (VPS ou servidor próprio) com IP público estático.
  • Um nome de domínio configurado apontando para o IP do servidor.
  • Docker e Docker Compose instalados no servidor.
  • Um proxy reverso (como Caddy ou Nginx) para gerenciar o certificado SSL/TLS.

Passo 1: Preparar a Estrutura de Diretórios e Configuração

No servidor onde o Headscale será hospedado, crie a estrutura de diretórios necessária para armazenar as configurações e o banco de dados interno:

bash mkdir -p /opt/headscale/config mkdir -p /opt/headscale/data cd /opt/headscale

Crie o arquivo de configuração principal do Headscale em /opt/headscale/config/config.yaml com as definições essenciais:

```yaml server_url: https://headscale.seudominio.com:443 listen_addr: 0.0.0.0:8080 metrics_listen_addr: 127.0.0.1:9090

db_type: sqlite3 db_path: /var/lib/headscale/db.sqlite

tls_cert_path: "" tls_key_path: ""

prefixes: v4: 100.64.0.0/10 v6: fd7a:115c:a1e0::/48

dns_config: nameservers: - 1.1.1.1 - 8.8.8.8 base_domain: mesh.local ```


Passo 2: Subir o Headscale com Docker Compose e Caddy

Para facilitar a instalação e a geração automática de certificados HTTPS, utilize o Docker Compose junto com o Caddy como proxy reverso.

Crie o arquivo docker-compose.yml no diretório /opt/headscale:

```yaml version: "3.7"

services: headscale: image: headscale/headscale:latest container_name: headscale restart: unless-stopped volumes: - ./config:/etc/headscale - ./data:/var/lib/headscale command: headscale serve ports: - "8080:8080"

caddy: image: caddy:latest container_name: headscale-caddy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config

volumes: caddy_data: caddy_config: ```

Crie o arquivo Caddyfile no mesmo diretório, substituindo o domínio pelo seu domínio real:

text headscale.seudominio.com { reverse_proxy headscale:8080 }

Inicie os serviços:

bash docker compose up -d


Passo 3: Criar um Usuário na Rede

No Headscale, os dispositivos são vinculados a usuários. Crie o seu primeiro usuário executando o comando no contêiner do Headscale:

bash docker exec -it headscale headscale users create meu-usuario


Passo 4: Conectar os Dispositivos Clientes

Com o servidor em execução, você pode registrar seus dispositivos na VPN mesh.

Em sistemas Linux ou macOS (Terminal):

Instale o cliente oficial do Tailscale no dispositivo e inicie o registro apontando para a URL do seu Headscale:

bash tailscale up --login-server https://headscale.seudominio.com

O terminal exibirá um link ou uma chave de autenticação. Copie a chave fornecida e registre-a no servidor Headscale:

bash docker exec -it headscale headscale nodes register --user meu-usuario --key CHAVE_EXIBIDA_NO_CLIENTE

Em dispositivos Windows, Android ou iOS:

  1. Abra o aplicativo oficial do Tailscale.
  2. Acesse as configurações da conta e selecione a opção para alterar o servidor de controle (Custom Control Server).
  3. Insira o endereço do seu servidor: https://headscale.seudominio.com.
  4. Realize a autenticação utilizando a chave gerada pelo comando no servidor.

Passo 5: Gerenciamento e Testes de Conectividade

Para verificar quais dispositivos estão conectados à sua rede mesh, execute no servidor:

bash docker exec -it headscale headscale nodes list

Para testar a comunicação, selecione o IP atribuído (na faixa 100.64.X.X) de um dos nós e envie um comando de ping a partir de outro dispositivo conectado:

bash ping 100.64.0.2

Como a conexão é ponto a ponto (peer-to-peer), a comunicação entre os nós ocorrerá com latência mínima, sem sobrecarregar a largura de banda da sua VPS.


Recursos Avançados: Exit Nodes e Subnet Routers

O Headscale também suporta funcionalidades avançadas de rede:

  • Subnet Routers: Permitem expor redes locais inteiras (ex.: 192.168.1.0/24) para a malha VPN sem a necessidade de instalar o cliente em cada dispositivo da rede interna.
  • Exit Nodes: Redirecionam todo o tráfego de internet do cliente através de um nó específico, funcionando exatamente como uma VPN tradicional para navegação em redes Wi-Fi públicas de forma segura.

Para anunciar uma sub-rede a partir de um nó Linux:

bash tailscale up --login-server https://headscale.seudominio.com --advertise-routes=192.168.1.0/24

Em seguida, aprove a rota no servidor Headscale:

bash docker exec -it headscale headscale routes list docker exec -it headscale headscale routes enable -r ID_DA_ROTA


Considerações de Segurança

O Headscale é uma excelente escolha para quem busca controle absoluto sobre sua infraestrutura de rede privada. Para manter a instalação segura ao longo do tempo:

  • Mantenha o Docker e as imagens do Headscale e do Caddy sempre atualizados.
  • Configure regras estritas no firewall (ufw ou painel do provedor de nuvem), liberando apenas as portas 80 e 443 para o público.
  • Realize backups regulares do arquivo db.sqlite contido no volume de dados.

Fique por dentro das novidades

Receba as principais notícias do DigitalTech por e-mail ou WhatsApp.

Você poderá cancelar a inscrição quando desejar.