WireGuard PersistentKeepalive 25 e PresharedKey num VPS
PersistentKeepalive = 25 envia um keepalive a cada 25 s para que o NAT mantenha o túnel aberto; configure-o no cliente atrás do NAT. A PresharedKey acrescenta uma proteção simétrica pós-quântica.
Resposta curta: `PersistentKeepalive = 25` faz o WireGuard enviar um pacote autenticado minúsculo ao peer a cada 25 segundos, o que mantém vivos os mapeamentos de NAT e de firewall stateful para que o outro lado continue conseguindo alcançar você. Normalmente você o configura apenas no peer que fica atrás de NAT (um notebook, um celular ou um roteador doméstico), não num VPS com IP público. `PresharedKey` é um segredo simétrico extra e opcional de 256 bits por par de peers, gerado com `wg genpsk`, que é misturado ao handshake como proteção contra futuros ataques quânticos ao Curve25519.
Este guia explica as duas opções e traz uma configuração funcional de servidor e cliente para um VPS com WireGuard. Para o setup completo de VPN com NAT e DNS, veja o guia de VPN WireGuard.
O que PersistentKeepalive = 25 faz de fato
O WireGuard é silencioso por design: quando não há dados trafegando, ele não envia nada. Isso é bom para a privacidade e para a bateria, mas roteadores que fazem NAT e rastreamento de conexões descartam mapeamentos UDP ociosos, muitas vezes após 30 segundos e às vezes após alguns minutos. Quando o mapeamento some, os pacotes do servidor deixam de alcançar um cliente atrás de NAT até que o cliente envie algo de novo.
`PersistentKeepalive` é um intervalo em segundos. Com `25`, o peer envia um keepalive vazio e criptografado sempre que passar 25 segundos sem enviar nada. O valor 25 é o recomendado pela documentação do WireGuard porque fica com segurança abaixo dos timeouts UDP comuns mais curtos. A opção vem desativada por padrão (`0`), e o custo é um pacote pequeno a cada 25 segundos, aproximadamente, por peer.
| Valor | Efeito | Quando usar |
|---|---|---|
| 0 ou ausente | Sem keepalives; o túnel fica silencioso quando ocioso | Os dois peers têm IP público, ou o cliente sempre é quem inicia o tráfego |
| 25 | Keepalive a cada 25 s de ociosidade | Cliente atrás de NAT ou CGNAT que precisa continuar acessível |
| 15–20 | Keepalives mais frequentes | Redes com timeouts UDP excepcionalmente agressivos |
| 60+ | Menos pacotes, mais risco de perder o mapeamento | Raramente útil; a maioria dos dispositivos NAT expira antes |
Qual lado precisa de PersistentKeepalive
Configure o keepalive no peer que não pode ser alcançado diretamente, ou seja, o que está atrás de NAT. Esse peer envia os pacotes para fora, renovando o próprio mapeamento de NAT. Um VPS com endereço IPv4 público não tem NAT na frente, então não precisa da opção para continuar acessível, e não consegue manter aberto sozinho um NAT remoto, porque só descobre o endpoint do cliente pelos pacotes do próprio cliente.
Se o cliente só navega pelo túnel, ele reconecta na hora sempre que envia tráfego, então o keepalive é opcional. Você precisa dele quando o servidor ou outros peers têm de iniciar conexões até o cliente, por exemplo SSH para uma máquina em casa, monitoramento ou um link site-to-site.
- ▹Notebook ou celular atrás de NAT para um VPS: configure `PersistentKeepalive = 25` só no cliente.
- ▹VPS para VPS, ambos com IP público: geralmente deixe sem configurar; veja o [guia de malha WireGuard](/guides/wireguard-mesh-vps-cluster).
- ▹Servidor doméstico atrás de CGNAT exposto por um VPS: configure-o no servidor doméstico; caso contrário, o VPS perde o caminho em poucos minutos.
- ▹Clientes móveis: um keepalive gasta um pouco de bateria; ative-o só se o dispositivo precisar estar acessível.
PresharedKey: a camada simétrica opcional
O handshake do WireGuard usa troca de chaves Curve25519. Um computador quântico grande o bastante poderia, em teoria, quebrar essa troca, e um adversário poderia gravar o tráfego hoje e descriptografá-lo depois. A `PresharedKey` mistura uma chave simétrica adicional de 256 bits ao handshake. Chaves simétricas desse tamanho não são consideradas quebráveis na prática pelos algoritmos quânticos conhecidos, então, se a PSK continuar secreta, o tráfego gravado continua protegido mesmo que a parte de chave pública seja quebrada.
A PSK é por par de peers, precisa ser idêntica nas seções `[Peer]` dos dois lados e deve ser única para cada par. Ela não substitui as chaves privadas; é uma camada extra. Se as PSKs não baterem, o handshake falha em silêncio e você não vê nenhum `latest handshake` no `wg show`.
- ▹Gere-a com `wg genpsk`, que produz uma chave aleatória de 32 bytes codificada em base64.
- ▹Transfira-a por um canal em que você já confia, como SSH, nunca por chat ou e-mail.
- ▹Use uma PSK por par: numa malha de cinco nós, são dez PSKs diferentes.
- ▹Troque-a como qualquer outro segredo quando um dispositivo for perdido ou aposentado.
Gere as chaves e uma PresharedKey
Instale as ferramentas no Debian 12/13 ou no Ubuntu 24.04 com `apt install wireguard` e gere as chaves na máquina em que cada chave privada vai ficar. A PSK pode ser gerada em qualquer um dos lados e copiada para o outro. O `umask 077` garante que os arquivos só possam ser lidos pelo root.
umask 077
cd /etc/wireguard
# on the VPS
wg genkey | tee server.key | wg pubkey > server.pub
# on the client
wg genkey | tee client.key | wg pubkey > client.pub
# once, on either side; copy to the other over SSH
wg genpsk > client.pskConfiguração do servidor no VPS: /etc/wireguard/wg0.conf
O servidor tem uma porta de escuta fixa e não tem keepalive nem `Endpoint` para o cliente, porque descobre o endereço atual do cliente pelos pacotes autenticados.
[Interface]
Address = 10.8.0.1/24, fd08::1/64
ListenPort = 51820
PrivateKey = <contents of server.key>
[Peer]
# laptop
PublicKey = <contents of client.pub>
PresharedKey = <contents of client.psk>
AllowedIPs = 10.8.0.2/32, fd08::2/128Note · Abra a porta UDP 51820 no firewall do VPS e inicie o túnel com `systemctl enable --now wg-quick@wg0`. Proteja o SSH como descrito no guia de hardening de SSH e confira as permissões das chaves com o guia de StrictModes antes de expor qualquer outra coisa.
Configuração do cliente atrás de NAT
O cliente aponta para o endereço público do VPS e leva o keepalive. Use `AllowedIPs = 10.8.0.0/24, fd08::/64` só para um túnel privado, ou `0.0.0.0/0, ::/0` para enviar todo o tráfego pelo VPS.
[Interface]
Address = 10.8.0.2/32, fd08::2/128
PrivateKey = <contents of client.key>
[Peer]
PublicKey = <contents of server.pub>
PresharedKey = <contents of client.psk>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.8.0.0/24, fd08::/64
PersistentKeepalive = 25Note · Um VPS Wisp da NoctisNode (1 vCPU, 1 GB de RAM, $6 por ciclo de 28 dias) com IPv4 dedicado basta para um endpoint WireGuard pessoal e pode ser pago em Monero ou outras criptomoedas, com apenas e-mail e senha no cadastro.
Verifique e resolva problemas
Rode `wg show` nos dois lados. Um cliente saudável mostra um `latest handshake` recente, `persistent keepalive: every 25 seconds` e `preshared key: (hidden)` para o peer.
- 01.Nenhum handshake: confira se a porta UDP 51820 está aberta no VPS e se o `Endpoint` usa o IP e a porta certos.
- 02.O handshake funciona sem PSK, mas não com ela: a PresharedKey difere entre as duas configurações; copie-a de novo.
- 03.O túnel funciona, mas depois de um minuto o servidor não alcança mais o cliente: adicione `PersistentKeepalive = 25` no cliente.
- 04.Mude o keepalive sem reiniciar: `wg set wg0 peer <server-public-key> persistent-keepalive 25`.
- 05.Adicione uma PSK a partir de um arquivo em tempo de execução: `wg set wg0 peer <public-key> preshared-key /etc/wireguard/client.psk`.
Perguntas frequentes
QO que significa PersistentKeepalive 25 no WireGuard?
AFaz o peer enviar um pacote keepalive criptografado após 25 segundos sem outro tráfego. Isso mantém abertos os mapeamentos de NAT e de firewall, para que o túnel continue acessível do outro lado.
QO PersistentKeepalive deve ficar no servidor ou no cliente?
ANo peer atrás de NAT, que quase sempre é o cliente. Um VPS com IP público não precisa dele e não consegue manter sozinho o mapeamento de NAT do cliente aberto.
QA PresharedKey do WireGuard é obrigatória?
ANão, é opcional. Ela acrescenta um segredo simétrico ao handshake como proteção contra futuros ataques quânticos ao Curve25519, por isso é um bom padrão para túneis de longa duração.
QComo gero uma PresharedKey do WireGuard?
ARode `wg genpsk > peer.psk` e coloque o mesmo valor na linha `PresharedKey` das seções `[Peer]` dos dois peers. Use uma PSK diferente para cada par de peers.
QO PersistentKeepalive consome muita banda?
ANão. Ele envia um pacote pequeno a cada 25 segundos de ociosidade, aproximadamente, o que é desprezível num VPS, embora possa reduzir um pouco a duração da bateria em celulares.