WireGuard PersistentKeepalive 25 en PresharedKey op een VPS
PersistentKeepalive = 25 stuurt elke 25 s een keepalive zodat NAT de tunnel openhoudt; stel het in op de client achter NAT. PresharedKey voegt een symmetrische, post-quantum-buffer toe.
Kort gezegd: `PersistentKeepalive = 25` laat WireGuard elke 25 seconden een piepklein geauthenticeerd pakket naar de peer sturen, waardoor NAT- en stateful firewall-mappings actief blijven en de andere kant je nog kan bereiken. Je stelt het normaal alleen in op de peer achter NAT (een laptop, telefoon of thuisrouter), niet op een VPS met een publiek IP. `PresharedKey` is een optioneel extra symmetrisch geheim van 256 bits per peerpaar, gegenereerd met `wg genpsk`, dat in de handshake wordt meegemengd als buffer tegen toekomstige quantumaanvallen op Curve25519.
Deze gids legt beide opties uit en geeft een werkende server- en clientconfig voor een WireGuard-VPS. Voor de volledige VPN-opzet met NAT en DNS, zie de handleiding voor een WireGuard-VPN.
Wat PersistentKeepalive = 25 echt doet
WireGuard is van nature stil: als er geen data stroomt, stuurt het niets. Dat is goed voor privacy en batterij, maar routers die NAT en connection tracking doen, laten inactieve UDP-mappings vallen, vaak na 30 seconden en soms na een paar minuten. Is de mapping weg, dan kunnen pakketten van de server een client achter NAT niet meer bereiken totdat de client weer iets stuurt.
`PersistentKeepalive` is een interval in seconden. Met `25` stuurt de peer een leeg, versleuteld keepalive-pakket zodra hij 25 seconden niets heeft verzonden. De waarde 25 wordt aanbevolen in de documentatie van WireGuard, omdat die veilig onder de kortste gangbare UDP-time-outs blijft. De instelling staat standaard uit (`0`), en de overhead is ongeveer elke 25 seconden een klein pakket per peer.
| Waarde | Effect | Wanneer gebruiken |
|---|---|---|
| 0 of niet ingesteld | Geen keepalives; de tunnel is stil bij inactiviteit | Beide peers hebben een publiek IP, of de client start altijd zelf het verkeer |
| 25 | Keepalive na elke 25 s inactiviteit | Client achter NAT of CGNAT die bereikbaar moet blijven |
| 15–20 | Vaker keepalives | Netwerken met ongewoon agressieve UDP-time-outs |
| 60+ | Minder pakketten, meer risico op verlies van de mapping | Zelden nuttig; de meeste NAT-apparaten hebben een kortere time-out |
Welke kant PersistentKeepalive nodig heeft
Stel de keepalive in op de peer die niet direct bereikbaar is, dus degene achter NAT. Die peer stuurt de pakketten naar buiten en ververst zo zijn eigen NAT-mapping. Een VPS met een publiek IPv4-adres heeft geen NAT ervoor, dus heeft hij de optie niet nodig om bereikbaar te blijven, en hij kan een NAT aan de andere kant niet zelf openhouden, omdat hij het endpoint van de client alleen uit de pakketten van de client leert.
Surft de client alleen via de tunnel, dan maakt hij direct opnieuw verbinding zodra hij verkeer stuurt, dus is een keepalive optioneel. Je hebt hem nodig als de server of andere peers verbindingen naar de client moeten opzetten, bijvoorbeeld SSH naar een machine thuis, monitoring of een site-to-site-verbinding.
- ▹Laptop of telefoon achter NAT naar VPS: stel `PersistentKeepalive = 25` alleen op de client in.
- ▹VPS naar VPS, beide met een publiek IP: meestal niet instellen; zie [de handleiding voor een WireGuard-mesh](/guides/wireguard-mesh-vps-cluster).
- ▹Thuisserver achter CGNAT, bereikbaar gemaakt via een VPS: stel het in op de thuisserver, anders verliest de VPS het pad binnen enkele minuten.
- ▹Mobiele clients: een keepalive kost wat batterij; schakel hem alleen in als het apparaat bereikbaar moet zijn.
PresharedKey: de optionele symmetrische laag
De handshake van WireGuard gebruikt sleuteluitwisseling met Curve25519. Een voldoende grote quantumcomputer zou die uitwisseling in theorie kunnen breken, en een tegenstander zou verkeer vandaag kunnen opnemen en later ontsleutelen. `PresharedKey` mengt een extra symmetrische sleutel van 256 bits in de handshake. Symmetrische sleutels van die grootte worden met bekende quantumalgoritmen niet als praktisch breekbaar beschouwd, dus zolang de PSK geheim blijft, blijft opgenomen verkeer beschermd, ook als het deel met de publieke sleutel wordt gebroken.
De PSK geldt per peerpaar, moet in de `[Peer]`-secties van beide peers identiek zijn en hoort voor elk paar uniek te zijn. Hij vervangt de privésleutels niet; het is een extra laag. Komen de PSK's niet overeen, dan faalt de handshake stilzwijgend en zie je geen `latest handshake` in `wg show`.
- ▹Genereer hem met `wg genpsk`, dat een willekeurige base64-gecodeerde sleutel van 32 bytes uitvoert.
- ▹Breng hem over via een kanaal dat je al vertrouwt, zoals SSH, nooit via chat of e-mail.
- ▹Gebruik één PSK per paar: in een mesh van vijf nodes zijn dat tien verschillende PSK's.
- ▹Vervang hem net als elk ander geheim wanneer een apparaat verloren raakt of buiten gebruik gaat.
Sleutels en een PresharedKey genereren
Installeer de tools op Debian 12/13 of Ubuntu 24.04 met `apt install wireguard` en genereer de sleutels op de machine waar elke privésleutel komt te staan. De PSK kan aan beide kanten worden gegenereerd en naar de andere worden gekopieerd. `umask 077` zorgt ervoor dat de bestanden alleen door root leesbaar zijn.
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.pskServerconfig op de VPS: /etc/wireguard/wg0.conf
De server heeft een vaste luisterpoort en geen keepalive en geen `Endpoint` voor de client, omdat hij het actuele adres van de client uit geauthenticeerde pakketten leert.
[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 · Open UDP 51820 in de firewall van de VPS en start de tunnel met `systemctl enable --now wg-quick@wg0`. Scherm SSH af zoals beschreven in de handleiding voor SSH-hardening en controleer de rechten van sleutels met de handleiding over StrictModes, voordat je iets anders openstelt.
Clientconfig achter NAT
De client wijst naar het publieke adres van de VPS en heeft de keepalive. Gebruik `AllowedIPs = 10.8.0.0/24, fd08::/64` voor alleen een privétunnel, of `0.0.0.0/0, ::/0` om al het verkeer via de VPS te sturen.
[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 · Een NoctisNode-Wisp-VPS (1 vCPU, 1 GB RAM, $6 per cyclus van 28 dagen) met een dedicated IPv4 volstaat voor een persoonlijk WireGuard-endpoint, en is te betalen met Monero of andere crypto met alleen een e-mailadres en wachtwoord bij aanmelding.
Controleren en problemen oplossen
Voer `wg show` aan beide kanten uit. Een gezonde client toont een recente `latest handshake`, `persistent keepalive: every 25 seconds` en `preshared key: (hidden)` voor de peer.
- 01.Helemaal geen handshake: controleer of UDP 51820 open is op de VPS en of `Endpoint` het juiste IP en de juiste poort gebruikt.
- 02.Handshake werkt zonder PSK maar niet met: de PresharedKey verschilt tussen de twee configs; kopieer hem opnieuw.
- 03.De tunnel werkt, maar na een minuut kan de server de client niet meer bereiken: voeg `PersistentKeepalive = 25` toe op de client.
- 04.De keepalive wijzigen zonder herstart: `wg set wg0 peer <server-public-key> persistent-keepalive 25`.
- 05.Tijdens het draaien een PSK uit een bestand toevoegen: `wg set wg0 peer <public-key> preshared-key /etc/wireguard/client.psk`.
Veelgestelde vragen
QWat betekent PersistentKeepalive 25 in WireGuard?
AHet laat de peer na 25 seconden zonder ander verkeer een versleuteld keepalive-pakket sturen. Zo blijven NAT- en firewall-mappings open en blijft de tunnel vanaf de andere kant bereikbaar.
QHoort PersistentKeepalive op de server of de client?
AOp de peer achter NAT, en dat is bijna altijd de client. Een VPS met een publiek IP heeft het niet nodig en kan de NAT-mapping van de client niet zelf openhouden.
QIs een WireGuard-PresharedKey verplicht?
ANee, die is optioneel. Hij voegt een symmetrisch geheim toe aan de handshake als buffer tegen toekomstige quantumaanvallen op Curve25519, dus het is een goede standaard voor tunnels die lang meegaan.
QHoe genereer ik een WireGuard-PresharedKey?
AVoer `wg genpsk > peer.psk` uit en zet dezelfde waarde in de regel `PresharedKey` van de `[Peer]`-secties van beide peers. Gebruik voor elk peerpaar een andere PSK.
QGebruikt PersistentKeepalive veel bandbreedte?
ANee. Het stuurt ongeveer elke 25 seconden inactiviteit één klein pakket, wat op een VPS verwaarloosbaar is, al kan het op telefoons de batterijduur iets verkorten.