O que é WireGuard?
WireGuard é um protocolo VPN de código aberto integrado ao kernel Linux desde a versão 5.6 (disponível também no Windows, macOS, Android e iOS). Seu design é minimalista: menos de 4.000 linhas de código, criptografia moderna (Curve25519, ChaCha20-Poly1305, BLAKE2s) e configuração reproduzível baseada em pares de chaves. Ao contrário do OpenVPN ou IPsec, não requer infraestrutura de certificados e o handshake leva milissegundos.
Por que usá-lo em IoT?
Gateways IoT implantados em campo se conectam por redes de operadora com NAT ou CGNAT — não têm IP pública fixa e não são diretamente acessíveis. Com WireGuard, cada dispositivo estabelece um túnel criptografado para um servidor central com IP estático. O sistema central vê todos os gateways como se estivessem na mesma rede local, sem abrir portas para o exterior.
O WireGuard permite estabelecer túneis VPN cifrados com footprint mínimo e configuração reproduzível. Este guia cobre a instalação e configuração de um servidor WireGuard no Linux (Ubuntu/Debian) e no Windows 10/11: geração de chaves, arquivo wg0.conf, ativação do serviço e verificação do handshake com o peer. O mesmo servidor suporta múltiplos peers simultâneos sem degradação de desempenho.
Arquitetura do túnel
O túnel WireGuard é ponto-a-ponto: um servidor central (sua instância na AWS, GCP ou on-premise) atua como peer estático com IP público fixo, e o peer remoto é o cliente dinâmico que inicia a conexão. Isso cria um canal de acesso criptografado para configuração remota, diagnóstico ou qualquer serviço que exija comunicação segura entre os dois extremos.
| Componente | Papel WireGuard | IP do túnel (exemplo) |
|---|---|---|
| Servidor VPN (Linux / Windows) | Peer estático (ListenPort ativo) | 10.8.0.1/24 |
| Peer / cliente remoto | Peer dinâmico (inicia conexão) | 10.8.0.2/32 |
Passo 1 — Instalar WireGuard no servidor
Linux (Ubuntu / Debian)
Em um servidor Ubuntu 22.04 ou Debian 12 (recomendado):
sudo apt update && sudo apt install -y wireguard sudo modprobe wireguard # carrega o módulo do kernel
Verifique se o módulo está disponível:
lsmod | grep wireguard # wireguard 90112 0
Windows 10 / 11
Baixe o instalador oficial em wireguard.com/install ou via winget:
# Opção A — winget (Windows 10 v1709+ / Windows 11) winget install WireGuard.WireGuard # Opção B — instalador gráfico # Baixe o .msi em wireguard.com/install e execute como Administrador
Verifique se wg.exe está disponível abrindo o PowerShell ou CMD:
wg --version # wireguard-windows v0.5.3
Passo 2 — Gerar par de chaves no servidor
Linux (Ubuntu / Debian)
# Gera a chave privada do servidor wg genkey | sudo tee /etc/wireguard/server_private.key # Deriva a chave pública sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key sudo chmod 600 /etc/wireguard/server_private.key
Guarde a chave pública do servidor em local seguro — você precisará compartilhá-la com cada peer que se conectar.
Windows 10 / 11
O wg.exe é instalado em C:\Program Files\WireGuard\. Execute o PowerShell como Administrador:
cd "C:Program FilesWireGuard" # Gera a chave privada do servidor .wg.exe genkey | Set-Content server_private.key # Deriva a chave pública Get-Content .server_private.key | .wg.exe pubkey | Set-Content server_public.key
Alternativa GUI: no app WireGuard clique em 'Add Tunnel' → 'Add empty tunnel'. O app gera o par de chaves automaticamente e exibe a chave pública. Basta adicionar Address, ListenPort e os blocos [Peer].
Passo 3 — Criar o arquivo de configuração do servidor
Linux (Ubuntu / Debian)
Crie /etc/wireguard/wg0.conf com o seguinte conteúdo (substitua os valores entre < >): (/etc/wireguard/wg0.conf)
[Interface] PrivateKey = <conteúdo de server_private.key> Address = 10.8.0.1/24 ListenPort = 51820 # Habilita IP forwarding para roteamento entre peers PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] # Index AMI gateway IoT / embedded device — unidade 001 PublicKey = <chave pública do Index AMI — gerada no Passo 4> AllowedIPs = 10.8.0.2/32
Nota: a porta 51820 UDP deve estar aberta no firewall do servidor. Na AWS: regra de entrada UDP 51820 no Security Group. Na GCP: regra de firewall VPC com protocolo UDP e porta 51820.
Windows 10 / 11
O formato de wg0.conf é idêntico ao do Linux. O Windows não precisa das linhas PostUp/PostDown (roteamento manual se necessário):
[Interface] PrivateKey = <contenido de server_private.key> Address = 10.8.0.1/24 ListenPort = 51820 [Peer] PublicKey = <clave pública del peer — generada en Paso 4> AllowedIPs = 10.8.0.2/32
Importe o arquivo como serviço Windows (PowerShell ou CMD como Administrador):
# Instala o túnel como serviço Windows wireguard /installtunnelservice "C:WireGuardwg0.conf" # O serviço inicia automaticamente com o nome: WireGuardTunnel$wg0
Abra a porta UDP 51820 no Firewall do Windows (PowerShell como Administrador):
New-NetFirewallRule -DisplayName "WireGuard VPN" ` -Direction Inbound -Protocol UDP ` -LocalPort 51820 -Action Allow
Passo 4 — Adicionar o peer ao servidor
Quando o peer enviar sua chave pública, adicione um bloco [Peer] ao final do arquivo wg0.conf do servidor:
[Peer] # Nome descritivo do peer (comentário opcional) PublicKey = <chave pública do peer> AllowedIPs = 10.8.0.2/32
Recarregue a configuração sem reiniciar o serviço:
Linux (Ubuntu / Debian)
sudo wg syncconf wg0 <(wg-quick strip wg0)
Windows 10 / 11
Abra a GUI do WireGuard → selecione o túnel wg0 → edite o arquivo e adicione o bloco [Peer] → aplique as alterações.
Passo 5 — Levantar a interface e verificar o handshake
Linux (Ubuntu / Debian)
No servidor:
sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0
Verifique o estado da interface:
sudo wg show # Saída esperada: interface: wg0 public key: <chave pública do servidor> private key: (hidden) listening port: 51820 peer: <chave pública do Index AMI> endpoint: <IP 4G do Index AMI>:XXXXX allowed ips: 10.8.0.2/32 latest handshake: 3 seconds ago transfer: 1.23 KiB received, 2.45 KiB sent
O campo latest handshake com um valor recente (menos de 3 minutos) confirma que o túnel está ativo. Se não aparecer, verifique a seção de resolução de problemas.
Windows 10 / 11
Se você instalou o serviço com /installtunnelservice, o túnel inicia automaticamente. Para controle manual pelo PowerShell:
sc start WireGuardTunnel$wg0 # o para detenerlo: sc stop WireGuardTunnel$wg0
Alternativa GUI: abra o WireGuard pela bandeja do sistema ou menu Iniciar e ative o interruptor do túnel wg0.
Verifique o status do túnel com wg.exe (precisa estar no PATH ou use o caminho completo):
wg show # interface: wg0 # public key: ... # listening port: 51820 # peer: ... # latest handshake: 3 seconds ago
Passo 6 — Verificar conectividade de ponta a ponta
A partir do servidor, faça ping ao IP do túnel do Index AMI:
ping 10.8.0.2 # PING 10.8.0.2 (10.8.0.2): 56 data bytes # 64 bytes from 10.8.0.2: icmp_seq=0 ttl=64 time=8.3 ms
Latência abaixo de 15 ms sobre LTE é normal. Se a sua aplicação de gestão rodar no mesmo servidor, já pode alcançar o peer diretamente via 10.8.0.2.
Resolução de problemas
| Sintoma | Causa provável | Solução |
|---|---|---|
| Sem handshake após 2 min | Porta UDP 51820 bloqueada | Abra UDP 51820 no firewall / security group do servidor |
| Handshake OK mas sem ping | Rotas ou AllowedIPs mal configurados | Verifique que AllowedIPs do peer inclua o IP destino |
| Túnel cai após 3–5 min sem tráfego | NAT 4G expira a sessão UDP | Garanta PersistentKeepalive = 25 no peer Index AMI |
| Chave pública inválida | Caracteres cortados ao copiar | A chave tem exatamente 44 caracteres base64; copie-a completa |
Topologia em malha (múltiplos gateways)
Para implantações com mais de um Index AMI, adicione um bloco [Peer] adicional por unidade no wg0.conf do servidor. Cada Index AMI recebe um IP de túnel único (10.8.0.2, 10.8.0.3, …). O servidor atua como hub central — os gateways não precisam de visibilidade entre si.
[Peer] # Index AMI gateway IoT / embedded device — unidade 002 PublicKey = <chave pública unidade 002> AllowedIPs = 10.8.0.3/32 [Peer] # Index AMI gateway IoT / embedded device — unidade 003 PublicKey = <chave pública unidade 003> AllowedIPs = 10.8.0.4/32
Linux (Ubuntu / Debian)
Aplique as alterações em tempo real sem reiniciar o serviço:
sudo wg addconf wg0 /etc/wireguard/wg0.conf # ou se adicionar o peer diretamente: sudo wg set wg0 peer <public key> allowed-ips 10.8.0.3/32
Windows 10 / 11
No Windows, as alterações em tempo real com wg addconf não estão disponíveis diretamente. Para adicionar um peer, edite wg0.conf, pare o serviço com sc stop WireGuardTunnel$wg0 (ou pela GUI) e reinicie-o.
Próximos passos
Com o servidor ativo e o handshake verificado, o túnel cifrado está operacional. O peer remoto é acessível com segurança pelo seu IP de túnel de qualquer ponto da rede. Se o barramento RS485 do peer apresentar falhas de comunicação, consulte o guia de diagnóstico RS485 em campo.