Roteiro para descobrir por que a VPN WireGuard não conecta ou não acessa as VMs: handshake, rotas, firewall, MTU e DNS.
Para que serve
Quando a VPN WireGuard não conecta ou conecta e não acessa nada, o problema quase sempre está em uma de cinco camadas: o túnel não fecha (handshake), o túnel fecha mas os pacotes não têm rota, o firewall bloqueia, o MTU quebra conexões maiores ou o DNS não resolve os nomes internos. Este roteiro testa uma camada por vez, na ordem, para você achar a causa sem adivinhar. Os exemplos usam WireGuard; no fim há os equivalentes para IPsec.
Pré-requisitos
- Acesso root à VM de VPN e ao host Proxmox (pela VPN, pelo console noVNC do Proxmox ou, se o painel estiver bloqueado, pelo console IPMI/iLO, que continua acessível mesmo sem VPN).
- Acesso ao cliente com problema (notebook, celular ou roteador do escritório).
- Pacote
tcpdumpno servidor:apt install tcpdump. - Exemplos (fictícios): VM de VPN com ID
110, IP público203.0.113.5, placa internaens19em10.10.10.2; host em10.10.10.1; VPN10.8.0.0/24; VMs10.10.10.0/24.
Passo a passo para diagnosticar a VPN WireGuard
-
Camada 0: a VM de VPN está ligada?
No host (pelo iLO, se necessário):
qm status 110. Se estiver parada,qm start 110e confira se ela tem início automático (qm config 110 | grep -E 'onboot|startup'). -
Camada 1: o handshake acontece?
Na VM de VPN:
wg show wg0Para cada peer, observe
latest handshake. Com tráfego, o WireGuard renova o handshake a cada dois minutos; se a última for de muitos minutos atrás ou a linha não existir, o túnel não está fechando. Se o handshake está recente, pule para a camada 3. -
Camada 2: os pacotes do cliente chegam ao servidor?
Na VM de VPN, deixe a captura rodando e ative o túnel no cliente:
tcpdump -ni any udp port 51820- Nenhum pacote chega: o problema está antes do servidor. Confira o
Endpoint(IP e porta) no cliente, se a rede do cliente bloqueia UDP (redes corporativas e Wi-Fi de hotel costumam bloquear) e teste pelo 4G do celular. - Pacotes chegam, mas o servidor não responde: o WireGuard descarta em silêncio pacotes com chave errada. Compare a chave pública configurada no servidor com a chave derivada da privada do cliente (no app, ela aparece no topo do túnel). Se nada chega na VM, confira o firewall dela no host:
cat /etc/pve/firewall/110.fwdeve terIN ACCEPT -i net0 -p udp -dport 51820, e o firewall precisa estar ativo no Datacenter. - Interface não existe:
systemctl status wg-quick@wg0ejournalctl -u wg-quick@wg0mostram o erro de sintaxe ou de chave.
Relógio: o WireGuard usa um carimbo de tempo no handshake para evitar replay. Se o relógio de um peer voltou no tempo (comum em roteadores sem bateria de relógio após reiniciar), o outro lado recusa o handshake até reiniciar a interface ou o relógio ser corrigido. Confira a data e hora nos dois lados (timedatectlno Linux). - Nenhum pacote chega: o problema está antes do servidor. Confira o
-
Camada 3: as rotas estão certas?
Com handshake ok, mas sem acesso às VMs, confira os três pontos do caminho:
# VM de VPN: o encaminhamento e o NAT estão ativos? sysctl net.ipv4.ip_forward nft list table ip wgnat # VM de VPN: existe rota para clientes e escritório? ip route get 10.8.0.2 ip route get 192.168.10.5No Windows do cliente, veja se a rede das VMs aponta para a interface do túnel:
route print 10.10.10.* Find-NetRoute -RemoteIPAddress 10.10.10.20- A rede das VMs não aparece na tabela do cliente: falta ela no
AllowedIPsdo cliente. OAllowedIPsfunciona como tabela de roteamento: só vai pelo túnel o que está ali. - A VM de VPN recebe o pacote, mas o host ou a VM de destino não responde: na VM de VPN, rode
tcpdump -ni wg0 icmpe, em paralelo,tcpdump -ni ens19 icmp. Se o ping sai pelaens19com origem10.8.0.x, o NAT não está ativo; sem NAT, o destino precisa da rota10.8.0.0/24 via 10.10.10.2, senão responde pela internet. - Pacotes do escritório somem no servidor: a origem precisa estar nas Allowed IPs do peer do escritório. Pacote de origem não listada é descartado sem aviso.
- Rede local do usuário igual à rede das VMs: conflito de rotas. Troque uma das faixas.
- A rede das VMs não aparece na tabela do cliente: falta ela no
-
Camada 4: o firewall está bloqueando?
Teste a porta do serviço, não só o ping:
# Windows Test-NetConnection 10.10.10.20 -Port 3389 # Linux/macOS nc -vz -w 3 10.10.10.20 3389- No Proxmox, o firewall da VM só filtra se estiver ativo em Datacenter, na VM e na placa de rede. Confira se existe regra liberando a origem
10.10.10.2(com NAT na VM de VPN) ou10.8.0.0/24(com rota estática). No host, essa origem precisa estar no IPSetmanagementpara acessar 8006 e SSH. - No Windows da VM, a regra de RDP pode estar limitada a outra faixa:
Get-NetFirewallRule -DisplayGroup *Remot* | Get-NetFirewallAddressFilter. - Se a VM de VPN usa UFW, o tráfego roteado tem política própria:
ufw status verbosedeve mostrar a regraroute allow in on wg0 out on ens19.
- No Proxmox, o firewall da VM só filtra se estiver ativo em Datacenter, na VM e na placa de rede. Confira se existe regra liberando a origem
-
Camada 5: o MTU está quebrando conexões?
Sintoma clássico: ping funciona, SSH conecta, mas o RDP trava na tela preta, páginas carregam pela metade ou cópias de arquivo param. O WireGuard acrescenta 60 bytes (IPv4) ou 80 bytes (IPv6) a cada pacote e usa MTU 1420 por padrão. Em links PPPoE, comuns em fibra no Brasil, o MTU da internet já é 1492, então sobra menos.
Descubra o maior pacote que passa sem fragmentar:
# Linux: 1392 de dados + 28 de cabeçalho = 1420 ping -M do -s 1392 10.10.10.20 # Windows ping -f -l 1392 10.10.10.20Diminua o valor até o ping passar. Some 28 ao maior valor que funcionou e use esse resultado como
MTU =na seção[Interface]do cliente (por exemplo,MTU = 1380). Em túneis site-to-site, aplique também o ajuste de MSS na VM de VPN:nft add table inet mss nft add chain inet mss fwd '{ type filter hook forward priority mangle; }' nft add rule inet mss fwd oifname "wg0" tcp flags syn tcp option maxseg size set rt mtu nft add rule inet mss fwd iifname "wg0" tcp flags syn tcp option maxseg size set rt mtuPara tornar permanente, coloque essas linhas no
PostUpdowg0.confenft delete table inet mssnoPostDown. -
Camada 6: o DNS resolve os nomes internos?
Se acessa por IP mas não por nome (ex.:
erp.empresa.local):- Defina o servidor DNS interno no cliente:
DNS = 10.10.10.10na seção[Interface]. Com split tunnel, o IP do DNS precisa estar dentro doAllowedIPs. - Em Linux, a linha
DNS =exige o comandoresolvconf. Se aparecer "resolvconf: command not found", instale osystemd-resolved(Debian/Ubuntu) ou remova a linha. - Teste a resolução diretamente no DNS interno:
nslookup erp.empresa.local 10.10.10.10(Windows) oudig @10.10.10.10 erp.empresa.local(Linux).
- Defina o servidor DNS interno no cliente:
Equivalentes para IPsec (strongSwan)
- Estado dos túneis:
swanctl --list-sas. Conexões configuradas:swanctl --list-conns. - Log em tempo real:
journalctl -u strongswan -f. - Captura:
tcpdump -ni any udp port 500 or udp port 4500. - Erros frequentes:
NO_PROPOSAL_CHOSEN(criptografia diferente nos dois lados),TS_UNACCEPTABLE(redes local/remota não batem),AUTHENTICATION_FAILED(PSK ou ID errado).
Como saber se funcionou
wg showcom handshake recente e contadores detransfersubindo nos dois sentidos.Test-NetConnectioncomTcpTestSucceeded : Truena porta do serviço.- Uma cópia de arquivo grande ou uma sessão RDP longa sem travar (valida o MTU).
Problemas comuns
- Funciona por alguns minutos e para: falta
PersistentKeepalive = 25no lado que está atrás de NAT. - Funcionava e parou após reiniciar o servidor: a VM de VPN não tem início automático (
qm set 110 --onboot 1 --startup order=1), o serviço não está habilitado no boot da VM (systemctl enable wg-quick@wg0) ou o forwarding não foi gravado em/etc/sysctl.d/. - Mexeu no firewall e perdeu tudo: entre pelo IPMI/iLO no console do host e rode
pve-firewall stop(libera temporariamente a 8006 pelo IP público). Corrija e volte compve-firewall start.
Perguntas frequentes
Por que o WireGuard não mostra erro quando a chave está errada?
Por projeto: ele não responde a quem não se autentica. Por isso o diagnóstico é pelo handshake e pela captura de pacotes.
Qual MTU usar na VPN em internet PPPoE?
Comece com 1412 (1492 menos 80) e reduza até o teste de ping sem fragmentar passar.
A VPN funciona no 4G e não no Wi-Fi da empresa. Por quê?
A rede da empresa provavelmente bloqueia UDP de saída. Peça a liberação da porta ou use OpenVPN em TCP 443.
Precisa de ajuda?
Se mesmo seguindo o roteiro a VPN não funcionar, abra um ticket informando em qual camada o teste falhou e anexe as saídas de wg show, ip route e da captura do tcpdump (nunca envie chaves privadas).
