Installer WireGuard sur un VPS KVM
WireGuard est un VPN simple et rapide, intégré au noyau Linux. Sur un VPS, il sert à relier vos appareils entre eux, à joindre des services du VPS sans les exposer sur Internet (base de données, interface d'administration) ou à faire sortir le trafic d'un appareil par le VPS. Ce guide monte un serveur WireGuard sur un VPS machine virtuelle (KVM) et y connecte un premier client.
LXC ou machine virtuelle ?
WireGuard s'appuie sur un module du noyau. Sur un VPS machine virtuelle, c'est votre noyau : le module est disponible. Sur un VPS conteneur (LXC), le noyau est celui de l'hôte et vous ne pouvez pas charger de module vous-même.
Pour un VPN, choisissez une machine virtuelle. Voir LXC ou KVM : choisir.
Ce qu'il faut savoir sur le réseau
- WireGuard utilise un port UDP. Votre VPS n'a pas d'IP dédiée : ce port doit être ouvert comme port public depuis l'espace client (10, 20 ou 50 selon la formule).
- Dans ce guide,
PORTdésigne le port public attribué. - Le VPS n'a pas d'IPv6 pour l'instant : le tunnel transporte de l'IPv4.
1. Installer WireGuard
apt update
apt install -y wireguardLe paquet installe les outils wg et wg-quick. Le module est fourni par le noyau de Debian 12, Debian 13 et Ubuntu 24.04.
2. Générer les clés du serveur
cd /etc/wireguard
umask 077
wg genkey | tee serveur.key | wg pubkey > serveur.pubLa clé privée (serveur.key) ne quitte jamais le VPS. La clé publique (serveur.pub) ira dans la configuration des clients.
3. Configurer le serveur
Le tunnel utilise un petit réseau privé à part, ici 10.8.0.0/24 : le serveur prend 10.8.0.1, chaque client une adresse suivante.
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.8.0.1/24
ListenPort = PORT
PrivateKey = $(cat /etc/wireguard/serveur.key)
# Client 1 : ordinateur portable
[Peer]
PublicKey = CLE_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.8.0.2/32
EOF
chmod 600 /etc/wireguard/wg0.confRemplacez PORT par le port public, et CLE_PUBLIQUE_DU_CLIENT à l'étape 5.
4. Ouvrir le port
- Dans l'espace client, ouvrez un port public UDP vers votre VPS.
- Dans le pare-feu du VPS, autorisez ce port en UDP :
udp dport PORT acceptavec nftables, ouufw allow PORT/udp. Voir Configurer un pare-feu.
5. Préparer le client
Installez WireGuard sur l'appareil client (application officielle sur wireguard.com/install pour Windows, macOS, Android et iOS ; paquet wireguard sous Linux). Générez une paire de clés dans l'application, ou en ligne de commande :
wg genkey | tee client.key | wg pubkey > client.pubConfiguration du client :
[Interface]
PrivateKey = CLE_PRIVEE_DU_CLIENT
Address = 10.8.0.2/32
[Peer]
PublicKey = CLE_PUBLIQUE_DU_SERVEUR
Endpoint = nom.vps.heberghub.fr:PORT
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25AllowedIPs = 10.8.0.0/24: seul le trafic vers le réseau du tunnel passe par le VPN (accès aux services du VPS). C'est le réglage le plus sûr pour commencer.PersistentKeepalive = 25maintient le tunnel ouvert derrière une box ou un réseau mobile.
Reportez la clé publique du client dans wg0.conf sur le serveur (CLE_PUBLIQUE_DU_CLIENT).
6. Démarrer et vérifier
Sur le serveur :
systemctl enable --now wg-quick@wg0
wg showActivez le tunnel sur le client, puis :
ping 10.8.0.1wg show sur le serveur doit afficher un latest handshake récent pour le client.
7. Faire sortir le trafic par le VPS (facultatif)
Pour que tout le trafic d'un appareil passe par le VPS (Wi-Fi public, par exemple), il faut autoriser le routage et masquer les adresses du tunnel.
Sur le serveur, activez le routage :
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-wireguard.conf
sysctl --systemAjoutez dans la section [Interface] de wg0.conf (remplacez eth0 par le nom de l'interface réseau du VPS, visible avec ip route) :
PostUp = nft add table ip wgnat; nft add chain ip wgnat post '{ type nat hook postrouting priority 100; }'; nft add rule ip wgnat post ip saddr 10.8.0.0/24 oifname "eth0" masquerade
PostDown = nft delete table ip wgnatCôté client, remplacez AllowedIPs par 0.0.0.0/0 et ajoutez DNS = 1.1.1.1 (ou le résolveur de votre choix) dans [Interface]. Comme le VPS n'a pas d'IPv6, le trafic IPv6 de l'appareil ne passera pas par le tunnel : désactivez l'IPv6 sur l'appareil si c'est important pour vous.
Si votre pare-feu nftables a une chaîne forward avec policy drop, autorisez-y le trafic de l'interface wg0.
Le trafic qui sort par votre VPS engage votre responsabilité : les usages interdits par les CGU (attaques, scans de réseaux tiers, spam) le restent à travers un VPN.
Ajouter un client
Pour chaque nouvel appareil : une nouvelle paire de clés, une nouvelle adresse (10.8.0.3, 10.8.0.4…) et un bloc [Peer] de plus dans wg0.conf, puis :
systemctl restart wg-quick@wg0Une paire de clés par appareil : si un téléphone est perdu, vous retirez son bloc sans toucher aux autres.
Problèmes fréquents
| Symptôme | Cause probable |
|---|---|
Aucun latest handshake |
Port public non ouvert, pas en UDP, ou fermé par le pare-feu du VPS ; clés inversées entre client et serveur. |
| Handshake mais pas de ping | Address ou AllowedIPs incohérents entre les deux côtés. |
| Le tunnel se coupe après quelques minutes | PersistentKeepalive absent côté client. |
Plus d'Internet avec 0.0.0.0/0 |
Routage ou masquerade absent sur le serveur. |
RTNETLINK answers: Operation not supported |
Module WireGuard indisponible : VPS conteneur, ou noyau sans le module. |
Besoin d'aide ?
Ouvrez un ticket depuis votre espace client avec le nom du VPS, le port public utilisé et la sortie de wg show, sans les clés privées.