Informações gerais
WireGuard
WireGuard is a modern, fast, and secure VPN protocol. It provides a simple and efficient way to create secure connections between devices over an untrusted network.
Setup a WireGuard Gateway on Linux
Configurar um gateway WireGuard no mesmo Linux que roda seu IoT Gateway é a forma mais segura e performática de acessar dashboards (Grafana, Node-RED) e gerenciar a infraestrutura remotamente sem expor nenhuma porta do IoT Gateway para a internet pública.
Abaixo está o passo a passo completo para configurar o servidor WireGuard no Linux, habilitar o encaminhamento de rede (IP Forwarding) e conectar um dispositivo cliente (como seu notebook ou smartphone).
Arquitetura da Solução
[ Cliente Remoto ] (Notebook / Celular)
│
│ (Túnel Encriptado UDP - ex: Porta 51820)
▼
┌───────────────────────────────────────────────────────────┐
│ LINUX SERVER (IoT + WireGuard) │
│ │
│ Interface WireGuard: wg0 (ex: 10.8.0.1) │
│ │
│ ───► Docker / Serviços Locais: │
│ • Grafana (10.8.0.1:3000 / localhost:3000) │
│ • Node-RED (10.8.0.1:1880 / localhost:1880) │
│ • Mosquitto (10.8.0.1:1883 / localhost:1883) │
└───────────────────────────────────────────────────────────┘
- Instalar o WireGuard no Servidor Linux: Pré-requisito para criação do túnel VPN. Atualize os pacotes e instale as ferramentas do WireGuard no servidor:
sudo apt update && sudo apt install -y wireguard qrencode
- Habilitar o Encaminhamento de IP (IP Forwarding): Permite rotear o tráfego da VPN para a rede interna.
Edite o arquivo
/etc/sysctl.confpara permitir que o Linux atue como roteador:
sudo nano /etc/sysctl.conf
Descomente ou adicione a seguinte linha:
net.ipv4.ip_forward=1
Aplique as alterações imediatamente:
sudo sysctl -p
- Gerar as Chaves do Servidor e do Cliente: Garante o modelo de criptografia assimétrica de ponta a ponta. Acesse o diretório do WireGuard e gere os pares de chaves públicas e privadas para o Servidor e para o Cliente:
cd /etc/wireguard
umask 077
# Chaves do Servidor
wg genkey | tee server_private.key | wg pubkey > server_public.key
# Chaves do Cliente (ex: notebook)
wg genkey | tee client_private.key | wg pubkey > client_public.key
- Configurar a Interface wg0 do Servidor: Cria a rede privada virtual para os dispositivos conectados.
Identifique primeiro o nome da sua interface de rede física (ex:
eth0ouenp3s0):
ip route show default | awk '{print $5}'
Crie o arquivo /etc/wireguard/wg0.conf substituindo <SERVER_PRIVATE_KEY>, <CLIENT_PUBLIC_KEY> e <INTERFACE_FISICA> (ex: eth0):
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
# Regras do Firewall (NAT) ao levantar e baixar a VPN
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o <INTERFACE_FISICA> -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o <INTERFACE_FISICA> -j MASQUERADE
# ---------------------------------------------------
# Configuração do Cliente 1 (ex: Notebook)
# ---------------------------------------------------
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32
- Iniciar e Habilitar o Serviço WireGuard: Garante que a VPN inicie com o sistema.
Inicie o serviço da interface
wg0e habilite a inicialização automática no boot:
sudo systemctl enable --now wg-quick@wg0
Verifique o status do túnel:
sudo wg show
- Ajustar o Firewall do Servidor (UFW): Libera a porta UDP da VPN e o tráfego da sub-rede. Se estiver utilizando o UFW (Uncomplicated Firewall), libere a porta 51820/UDP e o tráfego oriundo da interface da VPN:
sudo ufw allow 51820/udp
sudo ufw allow in on wg0 to any
sudo ufw reload
Criar o Arquivo de Configuração do Cliente
No seu computador/cliente, crie um arquivo chamado iot-gateway-vpn.conf com a seguinte estrutura:
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
# Endpoint: IP público ou DDNS do seu roteador/servidor e a porta UDP
Endpoint = SEU_IP_PUBLICO_OU_DDNS:51820
# Apenas direciona o tráfego da rede VPN (10.8.0.0/24) pelo túnel
AllowedIPs = 10.8.0.0/24, 192.168.1.0/24
# Envia keepalive a cada 25s para manter a conexão ativa atrás de NAT
PersistentKeepalive = 25
Dica para Smartphones: Se for usar a VPN no celular, gere um QR Code no terminal do servidor para escaneá-lo direto no aplicativo WireGuard:
qrencode -t ansiutf8 < /caminho/para/o/arquivo_cliente.conf
Como Acessar os Serviços Remotamente
Uma vez com a VPN conectada no seu notebook/celular:
- Acesso por IP da VPN (
10.8.0.1):
- Grafana:
[http://10.8.0.1:3000](http://10.8.0.1:3000) - Node-RED:
[http://10.8.0.1:1880](http://10.8.0.1:1880) - Mosquitto MQTT:
10.8.0.1:1883 - SSH do Servidor:
ssh usuario@10.8.0.1
- Acesso pelo IP da LAN Local (
192.168.x.x): Como adicionamos a subnet da LAN local no campoAllowedIPsdo cliente e configuramos oMASQUERADEnas regras dePostUpdo servidor, você também conseguirá acessar o servidor pelo IP local original da rede do laboratório/empresa.
WireGuard Config Generator
- WireGuard Config Generator - Gera arquivos de configuração para o servidor e clientes WireGuard de forma rápida e prática.
- https://wireguard.otaviomiranda.com.br/