NoctisNode
← GuidesRéseau2026-10-238 min

WireGuard : PersistentKeepalive 25 et PresharedKey sur un VPS

PersistentKeepalive = 25 envoie un keepalive toutes les 25 s pour que le NAT garde le tunnel ouvert ; à définir sur le client derrière NAT. PresharedKey ajoute une couche symétrique contre les menaces post-quantiques.

En bref : `PersistentKeepalive = 25` demande à WireGuard d'envoyer un minuscule paquet authentifié au pair toutes les 25 secondes, ce qui maintient les correspondances NAT et celles des pare-feu à état pour que l'autre côté puisse toujours vous joindre. On ne le définit normalement que sur le pair situé derrière un NAT (ordinateur portable, téléphone ou box), pas sur un VPS doté d'une IP publique. `PresharedKey` est un secret symétrique optionnel de 256 bits par paire de pairs, généré avec `wg genpsk`, mélangé à la poignée de main comme protection contre de futures attaques quantiques sur Curve25519.

Ce guide explique les deux options et fournit une configuration serveur et client fonctionnelle pour un VPS WireGuard. Pour l'installation VPN complète avec NAT et DNS, voir le guide VPN WireGuard.

Ce que fait réellement PersistentKeepalive = 25

WireGuard est silencieux par conception : quand aucune donnée ne circule, il n'envoie rien. C'est bon pour la confidentialité et la batterie, mais les routeurs qui font du NAT et du suivi de connexions suppriment les correspondances UDP inactives, souvent après 30 secondes, parfois après quelques minutes. Une fois la correspondance perdue, les paquets du serveur ne peuvent plus atteindre un client derrière NAT tant que celui-ci n'envoie pas à nouveau quelque chose.

`PersistentKeepalive` est un intervalle en secondes. Avec `25`, le pair envoie un keepalive vide et chiffré dès qu'il n'a rien envoyé depuis 25 secondes. La valeur 25 est celle recommandée par la documentation de WireGuard, car elle reste sûrement sous les délais UDP courants les plus courts. Le paramètre est désactivé par défaut (`0`), et le surcoût est d'un petit paquet environ toutes les 25 secondes par pair.

ValeurEffetQuand l'utiliser
0 ou non définiPas de keepalive ; le tunnel est silencieux au reposLes deux pairs ont une IP publique, ou le client est toujours à l'initiative du trafic
25Keepalive toutes les 25 s d'inactivitéClient derrière NAT ou CGNAT qui doit rester joignable
15–20Keepalives plus fréquentsRéseaux aux délais UDP inhabituellement agressifs
60+Moins de paquets, plus de risque de perdre la correspondanceRarement utile ; la plupart des équipements NAT expirent plus tôt

Quel côté a besoin de PersistentKeepalive

Définissez le keepalive sur le pair qui ne peut pas être joint directement, c'est-à-dire celui derrière le NAT. Ce pair envoie les paquets vers l'extérieur et rafraîchit sa propre correspondance NAT. Un VPS avec une adresse IPv4 publique n'a pas de NAT devant lui : il n'a pas besoin de l'option pour rester joignable, et il ne peut pas maintenir seul un NAT distant ouvert, car il n'apprend l'endpoint du client qu'à partir des paquets de celui-ci.

Si le client ne fait que naviguer via le tunnel, il se reconnecte instantanément dès qu'il envoie du trafic : le keepalive est alors facultatif. Vous en avez besoin quand le serveur ou d'autres pairs doivent initier des connexions vers le client, par exemple du SSH vers une machine domestique, de la supervision ou une liaison site à site.

  • ▹Portable ou téléphone derrière NAT vers un VPS : définissez `PersistentKeepalive = 25` sur le client uniquement.
  • ▹VPS vers VPS, tous deux avec IP publique : laissez généralement non défini ; voir [le guide du maillage WireGuard](/guides/wireguard-mesh-vps-cluster).
  • ▹Serveur domestique derrière CGNAT exposé via un VPS : définissez-le sur le serveur domestique, sinon le VPS perd le chemin en quelques minutes.
  • ▹Clients mobiles : un keepalive consomme un peu de batterie ; activez-le seulement si l'appareil doit rester joignable.

PresharedKey : la couche symétrique optionnelle

La poignée de main de WireGuard utilise l'échange de clés Curve25519. Un ordinateur quantique suffisamment puissant pourrait, en théorie, casser cet échange, et un adversaire pourrait enregistrer le trafic aujourd'hui pour le déchiffrer plus tard. `PresharedKey` mélange une clé symétrique supplémentaire de 256 bits à la poignée de main. Les clés symétriques de cette taille ne sont pas considérées comme cassables en pratique par les algorithmes quantiques connus : tant que la PSK reste secrète, le trafic enregistré reste protégé même si la partie à clé publique est cassée.

La PSK est propre à chaque paire de pairs, doit être identique dans les sections `[Peer]` des deux pairs et devrait être unique pour chaque paire. Elle ne remplace pas les clés privées ; c'est une couche supplémentaire. Si les PSK ne correspondent pas, la poignée de main échoue silencieusement et `wg show` n'affiche aucun `latest handshake`.

  • ▹Générez-la avec `wg genpsk`, qui produit une clé aléatoire de 32 octets encodée en base64.
  • ▹Transmettez-la par un canal de confiance, comme SSH, jamais par messagerie ou e-mail.
  • ▹Utilisez une PSK par paire : dans un maillage de cinq nœuds, cela fait dix PSK différentes.
  • ▹Renouvelez-la comme tout autre secret lorsqu'un appareil est perdu ou retiré du service.

Générer les clés et une PresharedKey

Installez les outils sur Debian 12/13 ou Ubuntu 24.04 avec `apt install wireguard`, puis générez les clés sur la machine où chaque clé privée résidera. La PSK peut être générée d'un côté ou de l'autre puis copiée. `umask 077` garantit que les fichiers ne sont lisibles que par 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.psk

Configuration serveur sur le VPS : /etc/wireguard/wg0.conf

Le serveur a un port d'écoute fixe, ni keepalive ni `Endpoint` pour le client, car il apprend l'adresse actuelle du client à partir des paquets authentifiés.

[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/128

Note · Ouvrez UDP 51820 dans le pare-feu du VPS et démarrez le tunnel avec `systemctl enable --now wg-quick@wg0`. Verrouillez SSH comme décrit dans le guide de durcissement SSH, et vérifiez les permissions des clés avec le guide StrictModes, avant d'exposer quoi que ce soit d'autre.

Configuration client derrière NAT

Le client pointe vers l'adresse publique du VPS et porte le keepalive. Utilisez `AllowedIPs = 10.8.0.0/24, fd08::/64` pour un tunnel uniquement privé, ou `0.0.0.0/0, ::/0` pour faire passer tout le trafic par le 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 = 25

Note · Un VPS Wisp NoctisNode (1 vCPU, 1 Go de RAM, $6 par cycle de 28 jours) avec une IPv4 dédiée suffit pour un endpoint WireGuard personnel, et il peut être payé en Monero ou autres cryptos avec seulement un e-mail et un mot de passe à l'inscription.

Vérifier et dépanner

Lancez `wg show` des deux côtés. Un client en bonne santé affiche un `latest handshake` récent, `persistent keepalive: every 25 seconds` et `preshared key: (hidden)` pour le pair.

  1. 01.Aucune poignée de main : vérifiez que UDP 51820 est ouvert sur le VPS et que `Endpoint` utilise la bonne IP et le bon port.
  2. 02.La poignée de main fonctionne sans PSK mais pas avec : la PresharedKey diffère entre les deux configurations ; copiez-la à nouveau.
  3. 03.Le tunnel fonctionne, puis le serveur ne peut plus joindre le client au bout d'une minute : ajoutez `PersistentKeepalive = 25` sur le client.
  4. 04.Modifier le keepalive sans redémarrer : `wg set wg0 peer <server-public-key> persistent-keepalive 25`.
  5. 05.Ajouter une PSK depuis un fichier à chaud : `wg set wg0 peer <public-key> preshared-key /etc/wireguard/client.psk`.

FAQ

QQue signifie PersistentKeepalive 25 dans WireGuard ?

ALe pair envoie un paquet keepalive chiffré après 25 secondes sans autre trafic. Cela maintient ouvertes les correspondances NAT et pare-feu pour que le tunnel reste joignable depuis l'autre côté.

QPersistentKeepalive doit-il être sur le serveur ou sur le client ?

ASur le pair derrière NAT, c'est-à-dire presque toujours le client. Un VPS avec une IP publique n'en a pas besoin et ne peut pas maintenir seul ouverte la correspondance NAT du client.

QUne PresharedKey WireGuard est-elle obligatoire ?

ANon, elle est facultative. Elle ajoute un secret symétrique à la poignée de main pour se prémunir contre de futures attaques quantiques sur Curve25519 : c'est un bon choix par défaut pour les tunnels de longue durée.

QComment générer une PresharedKey WireGuard ?

ALancez `wg genpsk > peer.psk` et placez la même valeur sur la ligne `PresharedKey` des sections `[Peer]` des deux pairs. Utilisez une PSK différente pour chaque paire de pairs.

QPersistentKeepalive consomme-t-il beaucoup de bande passante ?

ANon. Il envoie un petit paquet environ toutes les 25 secondes d'inactivité, ce qui est négligeable sur un VPS, même si cela peut légèrement réduire l'autonomie des téléphones.

WireGuard : PersistentKeepalive 25 et PresharedKey sur un VPS · NoctisNode