Un VPN WireGuard auto-hébergé offre à votre ordinateur portable et à votre téléphone un chemin chiffré vers un serveur que vous contrôlez. C'est utile lorsque vous voulez une IP de sortie stable, un accès sécurisé sur un Wi-Fi non fiable ou une route privée vers un autre réseau. Cela ne vous rend pas anonyme : les sites web voient toujours une seule adresse VPS, et l'hébergeur exploite toujours le réseau sous-jacent.
Ce guide construit un VPN IPv4 en tunnel complet sur Ubuntu Server. Vous installerez WireGuard, générerez des clés avec des permissions restrictives, activerez le routage, ajouterez des règles de pare-feu et de NAT, connecterez des clients de bureau et mobiles, puis vérifierez le tunnel. La même conception peut prendre en charge IPv6, mais seulement après que le VPS dispose d'un espace IPv6 routé et que vous avez configuré séparément le transfert et les règles de pare-feu IPv6.
Qu'est-ce que WireGuard ?
WireGuard est un protocole VPN moderne et multiplateforme, ainsi que son implémentation, qui transporte des paquets IP chiffrés sur UDP. La spécification du protocole WireGuard définit un ensemble fixe de primitives cryptographiques, dont ChaCha20-Poly1305, Curve25519, BLAKE2s, SipHash24 et HKDF. Cette conception volontairement réduite rend la configuration et l'audit plus simples qu'avec des protocoles offrant de nombreuses suites de chiffrement interchangeables.
WireGuard n'a ni système de comptes central ni annuaire d'utilisateurs intégré. Chaque appareil est un pair doté de sa propre paire de clés, de son adresse de tunnel et de ses règles AllowedIPs. Sur un VPS, un pair joue généralement le rôle de passerelle exposée à Internet, tandis que les ordinateurs portables et les téléphones initient les connexions vers lui.
Pourquoi utiliser WireGuard sur un VPS ?
- Modèle de pairs simple : Chaque appareil reçoit une paire de clés et une entrée de pair.
- Faible surface d'attaque : WireGuard s'appuie sur un protocole compact et une suite cryptographique fixe, plutôt que d'exposer un long menu d'options héritées.
- Bonnes performances : L'intégration au noyau sous Linux et une cryptographie efficace peuvent offrir un débit élevé, même si le résultat dépend toujours du CPU, de la capacité réseau, de la latence et de la taille des paquets.
- Clients multiplateformes : Des clients officiels sont disponibles pour Windows 10 et 11, macOS, Android et iOS, tandis que Linux et plusieurs systèmes BSD fournissent des outils ou des paquets natifs.
- Itinérance : Un pair peut changer de réseau et d'adresse IP source sans recevoir de nouvelle identité WireGuard ; le serveur apprend le dernier point de terminaison authentifié.
- Contrôle du routage clair : AllowedIPs détermine à la fois quelles destinations empruntent le tunnel et quelles adresses de tunnel appartiennent à chaque pair.
À lire également : le guide Cloudzy du VPS pour VPN. Pour les déploiements plus anciens, voir le guide de configuration PPTP de Cloudzy ; ne choisissez pas PPTP pour un nouveau VPN sensible en matière de sécurité.
Sauter l'installation manuelle : WireGuard en un clic
Si vous n'avez pas de bagage technique, ou si vous préférez ne pas gérer l'installation vous-même, Cloudzy propose un déploiement de VPN WireGuard en un clic. Le reste de ce guide traite de l'installation manuelle ; cette section traite du raccourci.
- Connectez-vous au panneau de contrôle Cloudzy.
- Sélectionnez WireGuard dans la liste des applications.
- Créez un VPS dans l'emplacement souhaité avec le forfait de votre choix. Une machine Ubuntu aux spécifications de base suffit.
Une fois votre VPS prêt, connectez-vous et exécutez la commande suivante pour afficher votre configuration :
cat client.conf
Vous verrez quelque chose comme ceci :
Utilisez cette configuration pour créer un nouveau tunnel dans le client WireGuard de votre PC, et la connexion est prête. Si vous préférez comprendre chaque rouage, ou s'il vous faut une architecture que l'image en un clic ne couvre pas, poursuivez avec l'installation manuelle ci-dessous.
Comment installer WireGuard sur Ubuntu
Les commandes ci-dessous visent une version actuelle d'Ubuntu Server. Exécutez-les via SSH avec un utilisateur disposant de sudo. Gardez la session SSH ouverte jusqu'à ce que le pare-feu soit confirmé, et prenez d'abord un instantané du VPS si votre hébergeur le permet.
Prérequis
- Un VPS Ubuntu avec une adresse IPv4 publique
- Un compte non root disposant de sudo
- Un accès SSH et les informations de la console de secours de l'hébergeur du VPS
- Un appareil client avec l'application officielle WireGuard ou les outils en ligne de commande
Vous n'avez pas besoin d'un second serveur Ubuntu. Le client peut être un PC Windows, un Mac, un portable Linux, un téléphone Android ou un iPhone.
Étape 1 : installer WireGuard
sudo apt update
sudo apt install wireguard -y
Vérifiez que les outils sont disponibles :
wg --version
Étape 2 : générer les clés du serveur en toute sécurité
Créez le répertoire WireGuard et générez la paire de clés avec un umask restrictif. La clé privée ne doit jamais être copiée sur un client ni apparaître dans des journaux.
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
Affichez les clés lorsque vous devez les coller dans des fichiers de configuration :
sudo cat /etc/wireguard/server.key
sudo cat /etc/wireguard/server.pub
Étape 3 : créer la configuration du serveur
Ouvrez la configuration de l'interface :
sudo nano /etc/wireguard/wg0.conf
Collez le bloc suivant et remplacez SERVER_PRIVATE_KEY par la clé privée de l'étape précédente :
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
Le réseau de tunnel 10.8.0.0/24 n'est qu'un exemple. Choisissez une autre plage privée s'il chevauche un réseau domestique, de bureau ou cloud que vous devez atteindre. N'ajoutez pas SaveConfig = true : ce paramètre peut réécrire le fichier à l'arrêt de l'interface et effacer vos modifications manuelles.
sudo chmod 600 /etc/wireguard/wg0.conf
Étape 4 : activer le transfert IPv4
Le VPS doit router les paquets entre wg0 et son interface réseau publique. Placez ce réglage dans un fichier sysctl dédié :
sudo nano /etc/sysctl.d/70-wireguard-routing.conf
net.ipv4.ip_forward = 1
Appliquez-le et vérifiez :
sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf
sysctl net.ipv4.ip_forward
Cela reprend le modèle de routage décrit dans le guide de passerelle WireGuard d'Ubuntu. IPv6 exige un préfixe IPv6 routé, des adresses de tunnel distinctes, le transfert IPv6 et des règles de pare-feu IPv6 ; n'envoyez pas le trafic client vers ::/0 tant que ce chemin n'est pas complet.
Étape 5 : ajouter les règles de pare-feu et de NAT
Trouvez le nom de l'interface publique du VPS. Dans la sortie ci-dessous, relevez la valeur qui suit dev ; les noms courants sont eth0, ens3 et enp1s0.
ip route show default
Rouvrez wg0.conf et ajoutez les lignes suivantes sous [Interface]. Remplacez eth0 partout si votre interface publique porte un autre nom :
PostUp = iptables -I FORWARD 1 -i %i -o eth0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Si UFW est actif, autorisez SSH avant de toucher à son état, puis ouvrez le port UDP de WireGuard :
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw status
Si UFW est actuellement inactif et que vous souhaitez l'activer, vérifiez d'abord que la règle OpenSSH existe. Ne désactivez pas puis ne réactivez pas UFW via SSH simplement pour appliquer ces règles : cela ajoute un risque de blocage évitable.
Étape 6 : démarrer l'interface WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show
Si le service échoue, exécutez journalctl avant de modifier quoi que ce soit d'autre :
sudo journalctl -u wg-quick@wg0 -n 50 --no-pager
Ajouter un client WireGuard
Chaque appareil a besoin d'une paire de clés et d'une IP de tunnel uniques. Ne réutilisez jamais une même configuration client sur deux appareils : des clés et des adresses en double rendent le routage imprévisible et empêchent une révocation propre.
Étape 1 : générer les clés du client
Les applications officielles pour ordinateur et mobile peuvent générer les clés lorsque vous créez un tunnel vide. Sur un client Linux, utilisez :
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
Conservez client.key sur cet appareil. Ne copiez que client.pub vers le serveur.
Étape 2 : ajouter le pair sur le serveur
sudo nano /etc/wireguard/wg0.conf
Ajoutez un bloc de pair. Remplacez CLIENT_PUBLIC_KEY par la clé publique du client :
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
La ligne Address = 10.8.0.2/32 attribue l'adresse de tunnel côté client. Dans le bloc [Peer] du serveur, AllowedIPs = 10.8.0.2/32 associe cette adresse à ce pair pour le routage et la validation de la source. Utilisez 10.8.0.3/32 pour l'appareil suivant, puis continuez en incrémentant sans doublons.
sudo systemctl restart wg-quick@wg0
Étape 3 : construire la configuration du client
Créez client.conf sur le client et remplacez tous les espaces réservés :
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = VPS_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 en fait un tunnel complet IPv4. Pour n'accéder qu'au réseau VPN, utilisez AllowedIPs = 10.8.0.0/24. PersistentKeepalive est utile pour un client derrière un NAT dont l'association doit rester joignable au repos ; le guide de démarrage rapide de WireGuard précise que la plupart des pairs n'en ont pas besoin.
Étape 4 : importer la configuration
Utilisez la guide d'installation des clients WireGuard pour obtenir le client pris en charge sur votre plateforme.
- Windows : Choisissez Add Tunnel, puis importez client.conf.
- macOS : Choisissez Import tunnel(s) from file et sélectionnez client.conf.
- Android ou iOS : Importez le fichier ou scannez un QR code généré à partir de celui-ci.
Sur un client Ubuntu ou Debian qui détient client.conf, installez qrencode et affichez le fichier dans le terminal de ce client :
sudo apt install qrencode -y
qrencode -t ansiutf8 < client.conf
Le QR code contient la clé privée du client. Ne l'affichez que dans un terminal de confiance, n'enregistrez pas de captures d'écran et effacez le terminal une fois que le téléphone l'a importé.
Étape 5 : vérifier le tunnel
Activez le tunnel, générez du trafic depuis le client, puis lancez ces vérifications sur le VPS :
sudo wg show
ip -brief address show wg0
Une poignée de main récente et des compteurs de transfert qui augmentent confirment que WireGuard échange bien des paquets. Vérifiez ensuite la sortie en tunnel complet depuis le client :
curl -4 https://api.ipify.org; echo
La commande doit renvoyer l'adresse IPv4 publique du VPS. En l'absence de poignée de main, vérifiez l'adresse du point de terminaison, le port UDP, le pare-feu du cloud, la règle UFW et les clés. Si la poignée de main a lieu mais qu'il n'y a pas d'accès à Internet, vérifiez le transfert IP, le nom de l'interface publique, les règles de NAT et le DNS.
Peut-on placer WireGuard derrière Nginx ?
The documentation du module stream de NGINX explique comment NGINX peut relayer l'UDP d'un port vers un autre : il peut donc transférer UDP/80 ou UDP/443 vers WireGuard sur UDP/51820. Il s'agit d'un relais UDP, pas d'un proxy inverse HTTP. Cela ne transforme pas WireGuard en TCP ou en HTTPS, et cela ne fait pas passer le protocole pour du trafic web ordinaire.
Pour la plupart des déploiements, changer le ListenPort de WireGuard et ouvrir le port UDP correspondant est plus simple que d'ajouter NGINX. Si un réseau bloque complètement l'UDP ou recourt à l'inspection profonde des paquets, un relais UDP NGINX ne résoudra pas le problème. La documentation des limitations de WireGuard précise que l'obscurcissement ne relève pas du périmètre du protocole.
Connecter le VPS à un réseau domestique
Un VPS peut servir de concentrateur entre un client itinérant et un appareil situé chez vous. Le pair côté domicile ouvre une connexion WireGuard sortante vers le VPS, ce qui évite d'avoir besoin d'une IP publique à la maison. Définissez PersistentKeepalive sur ce pair domestique lorsqu'il se trouve derrière un NAT.
Atteindre l'ensemble du réseau local domestique demande plus que l'ajout d'un pair. L'entrée de pair du VPS correspondant à la passerelle domestique doit inclure le sous-réseau de la maison dans AllowedIPs, par exemple 192.168.1.0/24. Un client distant en tunnel complet (AllowedIPs = 0.0.0.0/0) fait déjà passer ce trafic par le VPS ; n'ajoutez 192.168.1.0/24 côté client que si vous utilisez le tunnel partagé. La passerelle domestique doit elle aussi acheminer le trafic entre WireGuard et le réseau local. Ajoutez soit une route sur le routeur de la maison, soit une règle de NAT soigneusement délimitée sur la passerelle domestique. Vérifiez d'abord les chevauchements : un client connecté à un autre réseau 192.168.1.0/24 ne peut pas router proprement les deux réseaux sans renumérotage ou routage par politique plus avancé.
WireGuard auto-hébergé ou VPN commercial
L'auto-hébergement change qui exploite le VPN, mais il n'améliore pas automatiquement l'anonymat. Un VPS personnel vous donne une IP de sortie stable, facile à rattacher à un réseau d'hébergement. Un service commercial offre en général des adresses de sortie partagées et un changement de localisation facile, mais vous devez vous fier à ses politiques, à son exploitation et aux audits indépendants qu'il publie.
WireGuard est léger en soi, et un petit VPS constitue souvent un point de départ raisonnable pour une personne et quelques appareils. Ne considérez pas un chiffre fixe de RAM ou de vCPU comme une garantie de débit. Testez avec votre nombre réel d'appareils, votre région, la taille des paquets et la bande passante attendue, puis redimensionnez si la saturation du CPU, la perte de paquets ou la latence devient le facteur limitant.
Choisissez l'auto-hébergement lorsqu'une IP de sortie personnelle stable, l'accès à distance ou le contrôle du serveur comptent plus que le choix de la localisation et la commodité. Choisissez un VPN commercial lorsque vous voulez de nombreux pays, des sorties partagées, une large compatibilité avec les appareils grand public et quelqu'un d'autre pour gérer les pannes.
| Critère de décision | WireGuard auto-hébergé | VPN commercial |
|---|---|---|
| Modèle de coût | Un serveur, plus votre temps d'administration | Abonnement, souvent remisé sur les durées longues |
| Emplacements de sortie | Un emplacement par serveur | De nombreux emplacements disponibles dans l'application |
| Installation | Vous configurez les clés, le routage, les règles de pare-feu et les clients | Installer l'application et se connecter |
| Maintenance | Vous appliquez les correctifs, surveillez, sauvegardez et dépannez | Le fournisseur exploite le service |
| Modèle de confidentialité | Vous contrôlez le serveur, mais l'hébergeur peut toujours observer les métadonnées | Vous vous fiez aux politiques du fournisseur et aux audits indépendants qu'il publie |
| Idéal pour | IP de sortie personnelle stable, accès à distance et maîtrise de l'infrastructure | Changement d'emplacement, maintenance réduite et large prise en charge des appareils |
Conclusion
Un déploiement WireGuard fiable tient à cinq points : des clés privées protégées, des adresses de pairs uniques, des AllowedIPs corrects, un transfert et un NAT qui fonctionnent, et une règle de pare-feu pour le port UDP d'écoute. Vérifiez à la fois la poignée de main et l'adresse de sortie publique avant de vous fier au tunnel, et maintenez le VPS à jour après le déploiement.
Si vous voulez construire le serveur manuellement, partez d'un solution Cloudzy Ubuntu VPS. Si vous préférez sauter les étapes d'installation, utilisez le déploiement WireGuard en un clic de Cloudzy et passez directement à la configuration et à la vérification des clients.
Foire aux questions
Pourquoi WireGuard affiche-t-il un pair mais aucune poignée de main ?
Une entrée de pair prouve seulement que la configuration a été chargée. L'absence de poignée de main signifie en général que le client n'atteint pas le serveur ou que les clés ne correspondent pas. Vérifiez l'Endpoint du client, l'IP publique du serveur, le port UDP/51820 à la fois dans le pare-feu de l'hébergeur et dans UFW, ainsi que les clés publiques des deux côtés. Générez du trafic depuis le client avant de contrôler, car WireGuard reste silencieux au repos.
Pourquoi le tunnel se connecte-t-il alors que l'accès à Internet s'arrête ?
Une poignée de main sans accès à Internet pointe généralement vers le routage plutôt que vers le chiffrement. Vérifiez net.ipv4.ip_forward, confirmez le nom de l'interface publique dans la règle de NAT, contrôlez les règles FORWARD et testez le DNS séparément de la connectivité IP brute. Assurez-vous également que les AllowedIPs du client correspondent bien au tunnel complet ou partagé que vous visiez.
Chaque client a-t-il besoin de PersistentKeepalive ?
Non. Ajoutez-le lorsqu'un pair derrière un NAT a besoin de maintenir son association ouverte pendant les périodes d'inactivité, ce qui est courant pour les téléphones, les passerelles domestiques et certains réseaux restrictifs. Omettez-le lorsque le pair communique fréquemment ou n'a pas besoin d'être joignable depuis l'autre extrémité au repos.