Minha configuração do Wireguard parou de funcionar repentinamente ontem, sem nenhuma alteração de configuração ou chave. Para solucionar o problema, reduzi-a à configuração mais simples. Um cliente na minha rede deve se conectar a um servidor rodando em um VPS.
Configuração do servidor ("posto avançado"):
outpost:~# cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <outpost-privkey>
Address = 10.5.0.1/16
MTU = 1440
ListenPort = 51820
[Peer]
PublicKey = <rp-pubkey>
AllowedIPs = 10.5.0.2/32
PersistentKeepAlive = 13
Configuração do cliente ("rp"):
rp:~# cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <rp-privkey>
Address = 10.5.0.2/16
MTU = 1440
[Peer]
PublicKey = <outpost-pubkey>
Endpoint = <outpost-ip>:51820
AllowedIPs = 10.5.0.1/32
PersistentKeepAlive = 23
Usando dmesg
e tcpdump
posso observar repetidas tentativas de iniciação de handshake enviadas pelo cliente:
rp:~# dmesg -wT
...
[Fri Apr 25 23:45:18 2025] wireguard: wg0: Sending handshake initiation to peer 1 (<outpost-ip>:51820)
rp:~# tcpdump -n -vvv -i ens18 udp port 51820
...
23:45:19.115710 IP (tos 0x88, ttl 64, id 34886, offset 0, flags [none], proto UDP (17), length 176)
<rp-ip>.48825 > <outpost-ip>.51820: [bad udp cksum 0x825d -> 0x3db4!] UDP, length 148
O servidor recebe o pacote:
outpost:~# tcpdump -n -vvv -i enp0s6 udp port 51820
...
23:45:19.129033 IP (tos 0x8, ttl 55, id 34886, offset 0, flags [none], proto UDP (17), length 176)
<rp-ip>.46567 > <outpost-rp>.51820: [udp sum ok] UDP, length 148
Mas o Wireguard no servidor não mostra nenhuma indicação de que recebeu algo.
outpost:~# wg
interface: wg0
public key: <outpost-pubkey>
private key: (hidden)
listening port: 51820
peer: <rp-pubkey>
allowed ips: 10.5.0.2/32
persistent keepalive: every 13 seconds
O servidor tenta regularmente enviar sua própria iniciação de handshake:
outpost:~# dmesg -wT
[Fri Apr 25 23:46:45 2025] wireguard: wg0: Sending handshake initiation to peer 1 ((einval))
Mas como o servidor não tem conhecimento do IP público (dinâmico) do cliente, essa iniciação de handshake não aparece nem no servidor nem no cliente que o utiliza tcpdump
.
Ambas as máquinas usam o mesmo servidor NTP ( ntp.ubuntu.com
) e estão sincronizadas corretamente. Minha MTU de 1440 está otimizada para minha configuração, e o comportamento não muda sem esta linha. Também regenerei as chaves do servidor/cliente várias vezes sem alterações no comportamento.
iptables estão definidos corretamente no servidor/cliente:
# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
...
O UFW não está instalado.
Qualquer sugestão é bem-vinda.
Estava faltando uma
iptables
regra nafilter
tabela que, de alguma forma, esqueci (e precisei adicionar como primeira regra naINPUT
cadeia):Agora o WireGuard se conecta. Eu entendi errado a ordem dos
iptables
pacotes de processamento e pensei que isso-P INPUT ACCEPT
fosse suficiente. Agora, com uma configuração funcional, posso substituir essa regra por uma mais seletiva (segura).