Avancé ⏱ 30 min de mise en œuvre Mis à jour le 11 août 2026

Installer et configurer un VPN WireGuard sur un VPS

Accéder à ses services privés sans les exposer, ou faire sortir son trafic via le VPS : WireGuard est le VPN moderne, rapide et simple. Voici comment l'installer et le configurer.

WireGuard est un VPN moderne, rapide et compact. Là où OpenVPN repose sur davantage de composants et d’options, WireGuard privilégie une configuration courte, des primitives cryptographiques récentes et une excellente efficacité. Installé sur un VPS, il permet de créer un point d’entrée privé vers ses services ou une passerelle chiffrée pour son trafic Internet.

Héberger ce VPN sur un serveur situé en France permet de garder la maîtrise de son infrastructure et de ses clés. Les VPS TalCloud s’inscrivent dans cette logique avec des serveurs en France, une infrastructure conforme au RGPD, du stockage NVMe, une protection Anti-DDoS Netrix et un support humain.

À quoi sert un VPN WireGuard sur un VPS

Le premier usage consiste à accéder à des services privés sans exposer leurs interfaces d’administration sur Internet. Un tableau de bord, une base de données, Home Assistant, AdGuard Home ou un outil de supervision peut écouter uniquement sur une adresse privée. Les appareils autorisés y accèdent ensuite à travers le tunnel WireGuard.

Cette approche réduit la surface d’attaque. Au lieu d’ouvrir plusieurs ports publics, le VPS n’expose que le port UDP de WireGuard. L’authentification repose sur les clés cryptographiques des appareils.

Le second usage transforme le VPS en relais Internet. Tout le trafic du client traverse alors le tunnel avant de sortir avec l’adresse IP publique du VPS. Cette configuration protège les échanges sur un réseau Wi-Fi non fiable et fournit une adresse de sortie stable en France.

WireGuard peut également relier plusieurs serveurs ou réseaux. Pour atteindre un réseau domestique derrière Home Assistant ou AdGuard, une machine présente sur ce réseau doit devenir un pair WireGuard et annoncer le sous-réseau concerné.

Comment fonctionne WireGuard

Chaque participant, appelé pair, possède une clé privée et une clé publique. La clé privée reste exclusivement sur l’appareil qui l’a générée. La clé publique est communiquée aux autres pairs autorisés.

Le serveur utilise généralement une interface virtuelle nommée wg0. Dans ce guide, le réseau du VPN sera 10.8.0.0/24 :

  • le serveur recevra l’adresse 10.8.0.1 ;
  • le premier client recevra l’adresse 10.8.0.2 ;
  • les clients suivants pourront utiliser 10.8.0.3, 10.8.0.4 et ainsi de suite.

Le paramètre AllowedIPs joue deux rôles. Il indique quelles adresses appartiennent à un pair et détermine quelles destinations doivent passer dans le tunnel. Une mauvaise valeur peut donc empêcher le routage ou détourner davantage de trafic que prévu.

Prérequis

Il faut disposer des éléments suivants :

  • un VPS Debian ou Ubuntu avec une adresse IP publique ;
  • un accès root ou un compte autorisé à utiliser sudo ;
  • un port UDP ouvert, par exemple 51820 ;
  • le forwarding IP activé pour faire transiter des paquets ;
  • le nom de l’interface réseau publique du VPS.

Pour identifier cette interface, utilisez :

ip route show default

Elle peut s’appeler eth0, ens3 ou autrement. Les exemples suivants utilisent eth0. Remplacez cette valeur si nécessaire.

Installer WireGuard

Mettez à jour l’index des paquets, puis installez WireGuard :

sudo apt update
sudo apt install wireguard

Créez le répertoire de configuration et protégez les futurs fichiers de clés :

sudo install -m 700 -d /etc/wireguard
cd /etc/wireguard
sudo sh -c 'umask 077; wg genkey | tee server_private.key | wg pubkey > server_public.key'

La commande génère la clé privée du serveur, puis calcule sa clé publique. Pour consulter cette dernière :

sudo cat /etc/wireguard/server_public.key

Ne transmettez jamais le contenu de server_private.key.

Activer le forwarding IP

Créez un fichier sysctl dédié :

sudo nano /etc/sysctl.d/99-wireguard.conf

Ajoutez cette ligne :

net.ipv4.ip_forward=1

Appliquez la configuration :

sudo sysctl --system

Vérifiez le résultat :

sysctl net.ipv4.ip_forward

La valeur retournée doit être 1.

Configurer le serveur WireGuard

Affichez temporairement la clé privée afin de la copier dans la configuration :

sudo cat /etc/wireguard/server_private.key

Créez ensuite /etc/wireguard/wg0.conf :

sudo nano /etc/wireguard/wg0.conf

Utilisez la configuration suivante en remplaçant la valeur de PrivateKey :

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = CLE_PRIVEE_DU_SERVEUR

PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Les règles FORWARD autorisent le passage des paquets entre le tunnel et l’interface publique. La règle MASQUERADE effectue la traduction d’adresse nécessaire lorsque le VPS sert de passerelle Internet.

Protégez le fichier :

sudo chmod 600 /etc/wireguard/wg0.conf

Démarrer et activer WireGuard

Démarrez l’interface :

sudo wg-quick up wg0

Activez son lancement automatique au démarrage du VPS :

sudo systemctl enable wg-quick@wg0

Contrôlez l’état de WireGuard :

sudo wg show

Pour diagnostiquer le service avec systemd :

sudo systemctl status wg-quick@wg0

Ajouter un client

Les clés du client doivent idéalement être générées directement sur l’appareil concerné. Sur un poste Linux équipé de WireGuard :

umask 077
wg genkey | tee client_private.key | wg pubkey > client_public.key

Récupérez uniquement la clé publique :

cat client_public.key

Ajoutez ensuite ce pair à la fin du fichier /etc/wireguard/wg0.conf du serveur :

[Peer]
PublicKey = CLE_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.8.0.2/32

Rechargez le service :

sudo systemctl restart wg-quick@wg0

Sur le client, créez une configuration comme celle-ci :

[Interface]
Address = 10.8.0.2/24
PrivateKey = CLE_PRIVEE_DU_CLIENT

[Peer]
PublicKey = CLE_PUBLIQUE_DU_SERVEUR
Endpoint = IP_PUBLIQUE_DU_VPS:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

PersistentKeepalive = 25 est utile lorsque le client se trouve derrière un routeur NAT ou un pare-feu qui ferme rapidement les connexions UDP inactives.

Si un résolveur DNS, comme AdGuard Home, écoute sur 10.8.0.1, vous pouvez ajouter dans la section [Interface] du client :

DNS = 10.8.0.1

Choisir les réseaux dans AllowedIPs

Pour faire passer tout le trafic IPv4 par le VPS, utilisez côté client :

AllowedIPs = 0.0.0.0/0

Le VPS devient alors la route par défaut du client. Le forwarding et la règle NAT sont indispensables. Pour un tunnel IPv6 complet, il faut aussi configurer IPv6 sur le serveur et ajouter ::/0. Sans cela, le trafic IPv6 peut continuer à sortir directement par la connexion locale.

Pour accéder uniquement au VPN et aux services privés associés, limitez les routes :

AllowedIPs = 10.8.0.0/24

La navigation Internet habituelle ne traversera pas le VPS. Si un pair distant donne accès à un réseau interne, par exemple 192.168.10.0/24, ajoutez aussi ce sous-réseau :

AllowedIPs = 10.8.0.0/24, 192.168.10.0/24

Côté serveur, le pair qui représente ce réseau distant doit annoncer 192.168.10.0/24 dans ses propres AllowedIPs. Il faut également activer le routage sur cette passerelle distante.

Configurer le pare-feu

Le port WireGuard doit être accessible en UDP. Avec UFW :

sudo ufw allow 51820/udp

Pour autoriser le routage entre wg0 et l’interface publique :

sudo ufw route allow in on wg0 out on eth0

Si le fournisseur dispose également d’un pare-feu réseau, ajoutez une règle entrante UDP pour le port 51820. N’ouvrez pas l’interface d’administration de vos services sur toutes les adresses si elle doit rester privée. Faites-la écouter sur 10.8.0.1 ou filtrez son accès afin de n’autoriser que 10.8.0.0/24. Notre guide sur le pare-feu UFW détaille ces règles.

Utiliser WireGuard sur mobile et ordinateur

Les applications WireGuard pour Windows, macOS, Linux, Android et iOS peuvent importer directement un fichier de configuration. Chaque appareil doit posséder sa propre paire de clés et une adresse VPN unique.

Pour afficher une configuration sous forme de QR code dans le terminal du VPS, installez qrencode :

sudo apt install qrencode

Générez ensuite le code depuis un fichier client :

qrencode -t ansiutf8 < client.conf

Scannez-le avec l’application mobile WireGuard. Cette opération expose temporairement la configuration, donc la clé privée du client, à l’écran. Effectuez-la dans une session sûre, puis supprimez du serveur les fichiers clients qui n’ont pas besoin d’y rester.

Renforcer la sécurité

Une clé distincte par appareil facilite la révocation. Si un téléphone est perdu, supprimez uniquement son bloc [Peer] du serveur et rechargez WireGuard. Les autres clients restent fonctionnels.

Conservez les fichiers contenant des clés privées avec des permissions strictes. Ne les envoyez pas par messagerie non sécurisée et ne les ajoutez jamais à un dépôt Git. Maintenez Debian ou Ubuntu à jour :

sudo apt update
sudo apt upgrade

Restreignez aussi les services à leurs adresses nécessaires. WireGuard sécurise le transport, mais ne remplace pas les mises à jour, l’authentification des applications ni une politique de pare-feu cohérente.

Dépanner la connexion

Si aucun handshake n’apparaît dans sudo wg show, vérifiez l’adresse Endpoint, le port UDP, les pare-feu du VPS et la correspondance des clés publiques. Confirmez également que WireGuard écoute :

sudo ss -lunp | grep 51820

Si le handshake fonctionne mais que le client ne peut pas accéder à Internet, contrôlez net.ipv4.ip_forward, le nom de l’interface publique et la règle MASQUERADE :

sysctl net.ipv4.ip_forward
sudo iptables -t nat -L POSTROUTING -n -v

Si seuls les services privés sont inaccessibles, vérifiez leurs adresses d’écoute, leurs pare-feu et les réseaux déclarés dans AllowedIPs. Enfin, contrôlez que chaque client possède une adresse unique en /32 côté serveur. Deux pairs utilisant la même adresse VPN provoquent un routage incohérent.