Ce guide suit la documentation d'installation de WireGuard, son guide de démarrage, les pages de manuel d'Ubuntu 26.04 wg et wg-quick (celles de Debian 13 sont wg et wg-quick), et la page d'Ubuntu Utiliser le VPN comme passerelle par défaut, relues le 14 octobre 2026. Les commandes valent pour Ubuntu 26.04 et Debian 13. Les adresses 10.8.0.x sont un exemple de réseau privé pour le VPN.
Installer WireGuard et créer les clés du serveur
- Installez le paquet :
sudo apt install wireguard - Créez la paire de clés du serveur, lisible par vous seul, puis rangez-la :
(umask 077 && wg genkey > serveur.key && wg pubkey < serveur.key > serveur.pub), puissudo mv serveur.key serveur.pub /etc/wireguard/ - Notez le nom de l'interface réseau du serveur, celle qui sort sur Internet :
ip route show default. Il suit le motdev, par exempleeth0.
La clé privée ne quitte jamais le serveur. Seule la clé publique, dans serveur.pub, se recopie sur les appareils.
Configurer le serveur
- Créez le fichier
/etc/wireguard/wg0.confavec le contenu suivant, en remplaçanteth0par le nom de l'interface relevé avant la configuration. Le nom du fichier devient celui de l'interface VPN,wg0.
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PostUp = wg set %i private-key /etc/wireguard/serveur.key
PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostUp = iptables -I DOCKER-USER -i %i -o eth0 -j ACCEPT
PostUp = iptables -I DOCKER-USER -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D DOCKER-USER -i %i -o eth0 -j ACCEPT
PostDown = iptables -D DOCKER-USER -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[Peer]
PublicKey = CLE_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.8.0.2/32
- Autorisez le serveur à relayer le trafic : créez
/etc/sysctl.d/70-wireguard-routing.confcontenant la lignenet.ipv4.ip_forward = 1, puis appliquez-le avecsudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf - Au démarrage du serveur, faites attendre Docker par WireGuard. Les règles
DOCKER-USERdu fichier visent une chaîne que Docker crée en démarrant : si WireGuard part avant lui, la règle échoue etwg-quickretire l'interface. Ouvrezsudo systemctl edit wg-quick@wg0, ajoutez les trois lignes suivantes, puis enregistrez. D'après la page de manuel de systemd,After=fixe l'ordre etRequires=empêche WireGuard de démarrer si Docker échoue. Conséquence : arrêter Docker, ou une mise à jour de Docker qui l'arrête, arrête aussi WireGuard ; relancez-le ensuite avecsudo systemctl start wg-quick@wg0. Sans Docker sur le serveur, sautez cette étape.
[Unit]
After=docker.service
Requires=docker.service
- Démarrez WireGuard, et au démarrage du serveur :
sudo systemctl enable --now wg-quick@wg0
Ce que font les lignes de wg0.conf :
PostUp = wg set %i private-key …charge la clé privée depuis son fichier, comme dans l'exemple d'Ubuntu, au lieu de l'écrire dans la configuration.%iest remplacé par le nom de l'interface.- La règle
MASQUERADEfait sortir sur Internet, sous l'adresse du serveur, le trafic venu du VPN. - Les deux règles
DOCKER-USERexistent parce que Docker, quand il est installé, bloque par défaut le trafic relayé entre deux interfaces. La documentation de Docker sur iptables indique d'ajouter une règle dans la chaîneDOCKER-USERpour l'autoriser. Sans Docker sur le serveur, cette chaîne n'existe pas : retirez les quatre lignes qui la citent. [Peer]décrit un appareil autorisé : sa clé publique et l'adresse qu'il prend dans le VPN. Ajoutez une section[Peer]par appareil, chacun avec sa propre adresse.
Ouvrir le port UDP
WireGuard écoute en UDP sur le port de ListenPort, 51820 ici. Ouvrez-le en UDP dans le pare-feu qui protège le serveur, voir Ouvrir un port. Une règle en TCP ne suffit pas.
Configurer un ordinateur ou un téléphone
- Installez l'application WireGuard de votre système, depuis la page d'installation officielle.
- Créez un tunnel vide : l'application génère la paire de clés de l'appareil et affiche sa clé publique.
- Complétez la configuration comme ci-dessous, avec la clé publique du serveur et son adresse.
- Recopiez la clé publique de l'appareil à la place de
CLE_PUBLIQUE_DU_CLIENTdanswg0.confsur le serveur, puis redémarrez l'interface :sudo systemctl restart wg-quick@wg0 - Activez le tunnel dans l'application.
[Interface]
PrivateKey = (générée par l'application)
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = CLE_PUBLIQUE_DU_SERVEUR
Endpoint = adresse-du-serveur:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 envoie tout le trafic IPv4 de l'appareil dans le VPN. Le trafic IPv6, lui, n'y est pas couvert : si votre réseau en fournit, il continue de sortir directement, hors du tunnel. Pour ne joindre que le serveur et son réseau privé, écrivez 10.8.0.0/24 à la place. PersistentKeepalive = 25 envoie un paquet toutes les 25 secondes, la valeur que suggère la page de manuel de wg pour un appareil placé derrière un routeur ou un réseau mobile. DNS désigne le résolveur utilisé tant que le tunnel est actif.
La clé privée de l'appareil reste dans l'application qui l'a créée : ne la recopiez ni sur le serveur ni dans un message.
Vérifier
Sur le serveur, sudo wg show liste les appareils. Une ligne « latest handshake » récente prouve que l'échange a eu lieu. Depuis l'appareil, un site qui affiche votre adresse IP doit montrer celle du serveur.
Sur un VPS Hubspace
Le pare-feu réseau placé devant le serveur ne laisse passer que 22, 80 et 443 : le port UDP de WireGuard est donc fermé tant que vous ne l'ouvrez pas. Dans votre espace client, sur votre VPS, onglet « Firewalls », créez un pare-feu avec une règle UDP sur 51820, elle s'ajoute aux nôtres. Il n'y a pas d'ufw sur le serveur. Docker est installé à la livraison : gardez les règles DOCKER-USER du fichier. Les serveurs VPS décrivent ce qui est livré.
Questions fréquentes
Pourquoi le tunnel s'active-t-il sans que rien ne passe ?
Si sudo wg show n'affiche aucun « latest handshake », le port UDP n'est pas joignable ou les clés publiques sont inversées. Si l'échange a lieu mais qu'Internet ne répond pas, vérifiez le relais (net.ipv4.ip_forward), le nom d'interface dans la règle MASQUERADE et les règles DOCKER-USER.
Combien d'appareils peut-on relier ?
Autant que de sections [Peer], chacune avec sa clé publique et une adresse différente du réseau 10.8.0.0/24. Un appareil égaré se retire en supprimant sa section, puis en redémarrant l'interface.
WireGuard remplace-t-il SSH ?
Non, les deux se complètent. SSH sert à administrer le serveur ; WireGuard relie vos appareils à son réseau privé. Un service que vous ne voulez pas ouvrir sur Internet peut n'écouter que sur l'adresse du VPN, 10.8.0.1.
Articles liés
- Vaultwarden : installer et sécuriser avec DockerInstaller Vaultwarden avec Docker Compose sur un serveur Linux, derrière Caddy en HTTPS, fermer les inscriptions et protéger la page d'administration.
- Installer n8n avec Docker Compose sur un serveurInstaller n8n avec Docker Compose sur un serveur Linux, derrière Traefik en HTTPS, avec les bonnes variables pour les webhooks, sauvegarder et mettre à jour.
- Nextcloud Docker : installer Nextcloud sur un VPSInstaller Nextcloud avec Docker sur un VPS grâce à l'image officielle All-in-One, ouvrir son interface sans l'exposer et le servir sur votre domaine en HTTPS.