Créer son propre serveur VPN WireGuard avec wg-easy
wg-easy est une application Docker qui exécute un serveur VPN WireGuard avec un panneau web. Dans le panneau, vous créez des clients, téléchargez leurs fichiers de configuration ou scannez un code QR avec un téléphone, et voyez quels clients sont connectés. Ce guide montre comment installer la version actuelle, wg-easy v15, sur un serveur Linux avec Docker Compose et connecter le premier appareil.
wg-easy v15 diffère des versions précédentes. Le mot de passe administrateur n'est plus transmis dans la variable PASSWORD : un conteneur lancé avec PASSWORD ou PASSWORD_HASH ne démarre pas. L'identifiant et le mot de passe se définissent désormais dans le navigateur au premier lancement.
Prérequis
Un VPS avec une adresse IP publique et un accès root ou sudo suffit. wg-easy est léger : 1 vCPU et 1 Go de RAM suffisent pour un VPN personnel. Les commandes de ce guide ont été vérifiées sous Ubuntu 24.04 LTS. Comme wg-easy s'exécute dans Docker, elles fonctionnent de la même manière sous Ubuntu 22.04, Debian 12, AlmaLinux 9 et Rocky Linux 9.
Si vous ne souhaitez rien installer manuellement, commandez sur la marketplace d'applications INTROSERV un VPS avec wg-easy déjà déployé et passez directement au premier lancement.
Installer Docker
Connectez-vous au serveur en SSH et installez Docker Engine avec le plugin Compose à l'aide du script officiel :
curl -fsSL https://get.docker.com | sudo sh
Vérifiez que Docker et Compose sont installés :
sudo docker --version sudo docker compose version
Télécharger le fichier docker-compose.yml
wg-easy s'installe avec le fichier docker-compose.yml officiel du dépôt du projet. Créez un dossier pour ce fichier et téléchargez-le :
sudo mkdir -p /etc/docker/containers/wg-easy sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml
Les lignes principales du fichier sont l'image et les ports :
image: ghcr.io/wg-easy/wg-easy:15 ports: - "51820:51820/udp" - "51821:51821/tcp"
Le port 51820/udp est utilisé par WireGuard lui-même et le port 51821/tcp par le panneau web. Le tag 15 signifie que les mises à jour restent dans la version 15. La configuration et les clients sont stockés dans un volume Docker, ils sont donc conservés lorsque le conteneur est recréé.
Démarrer wg-easy
Placez-vous dans le dossier contenant le fichier et démarrez le conteneur :
cd /etc/docker/containers/wg-easy sudo docker compose up -d
Vérifiez que le conteneur est en cours d'exécution :
sudo docker compose ps
La colonne STATUS doit afficher Up et la colonne PORTS les ports 51820/udp et 51821/tcp.
Ouvrir le port dans le pare-feu
Les clients se connectent au serveur via le port UDP 51820. Si UFW est activé sur le serveur, autorisez ce port :
sudo ufw allow 51820/udp
Sous AlmaLinux et Rocky Linux avec firewalld, utilisez :
sudo firewall-cmd --permanent --add-port=51820/udp sudo firewall-cmd --reload
Ouvrir le panneau web
wg-easy v15 n'autorise pas la connexion au panneau en HTTP simple. Le moyen sûr le plus simple est d'ouvrir le panneau via un tunnel SSH. Sur votre ordinateur, exécutez :
ssh -L 51821:localhost:51821 USER@SERVER_IP
Laissez cette session SSH ouverte et rendez-vous sur http://localhost:51821 dans votre navigateur.
Vous pouvez aussi autoriser l'accès en HTTP simple : dans docker-compose.yml, décommentez le bloc environment, définissez INSECURE=true et relancez sudo docker compose up -d. Dans ce cas, le mot de passe du panneau est envoyé sans chiffrement ; n'utilisez donc cette option que pour des tests. Pour un accès permanent par nom de domaine, placez le panneau derrière un reverse proxy avec HTTPS.
Terminer le premier lancement
Au premier lancement, wg-easy ouvre un assistant de configuration. Après l'écran d'accueil, créez un compte administrateur : saisissez un nom d'utilisateur et un mot de passe, puis confirmez le mot de passe.

Lorsque l'assistant demande si vous disposez d'une configuration existante, choisissez No. Cela crée une nouvelle configuration.
Sur l'écran suivant, indiquez le Host et le Port que les clients utiliseront pour se connecter. Dans Host, saisissez l'adresse IP publique ou le nom de domaine du serveur, et non localhost, même si vous avez ouvert le panneau via le tunnel SSH. Laissez Port à 51820. Le bouton Suggest renseigne l'adresse que wg-easy détecte automatiquement.

L'adresse saisie dans Host est reprise dans la configuration de chaque client. Si vous saisissez une adresse erronée, les clients ne pourront pas se connecter.
Une fois l'assistant terminé, connectez-vous avec le nom d'utilisateur et le mot de passe que vous avez créés.
Créer un client
Sur la page principale du panneau, cliquez sur New Client, saisissez un nom pour l'appareil, par exemple laptop ou phone, et confirmez. Le client apparaît dans la liste. À côté se trouvent des boutons pour afficher le code QR et télécharger le fichier de configuration.

Créez un client distinct pour chaque appareil. Vous pourrez ainsi désactiver ou supprimer l'accès d'un appareil sans affecter les autres.
Connecter un appareil
Installez l'application WireGuard officielle sur votre appareil. Elle est disponible pour Windows, macOS, Android et iOS sur la page de téléchargement officielle de WireGuard.
Sur un téléphone, ouvrez l'application WireGuard, choisissez d'ajouter un tunnel par code QR et scannez le code affiché dans le panneau.

Sur un ordinateur, téléchargez le fichier de configuration du client dans le panneau et importez-le dans l'application WireGuard avec Import tunnel(s) from file. Cliquez ensuite sur Activate.
Sous Linux, installez wireguard-tools et openresolv. Sans openresolv, la commande wg-quick échoue sur la ligne DNS du fichier de configuration. Sous Ubuntu et Debian :
sudo apt install wireguard-tools openresolv sudo wg-quick up ./CLIENT_NAME.conf
Pour vous déconnecter sous Linux, exécutez sudo wg-quick down ./CLIENT_NAME.conf.
Vérifier la connexion
Lorsque le tunnel est actif, vérifiez quelle adresse IP voit Internet :
curl -4 ifconfig.me
La commande doit renvoyer l'adresse IP de votre serveur. Vous pouvez aussi ouvrir n'importe quel site de vérification d'IP dans le navigateur. Dans le panneau wg-easy, le client connecté affiche l'activité et le trafic récents.
Gérer les clients
Tous les clients se gèrent sur la page principale du panneau. Chaque client peut être temporairement désactivé avec l'interrupteur placé à côté : l'appareil reste dans la liste mais ne peut pas se connecter tant que vous ne le réactivez pas. Pour retirer complètement l'accès, supprimez le client. Son fichier de configuration et son code QR cessent immédiatement de fonctionner. Si un appareil est perdu ou si un fichier de configuration a pu être copié, supprimez ce client et créez-en un nouveau.
Si quelque chose ne fonctionne pas
Si le panneau ne s'ouvre pas, vérifiez avec sudo docker compose ps que le conteneur est en cours d'exécution et consultez le journal :
sudo docker logs wg-easy
Si le panneau s'ouvre mais que vous ne pouvez pas vous connecter et voyez un message sur une connexion non sécurisée, vous l'avez ouvert en HTTP simple. Utilisez le tunnel SSH décrit dans la section précédente.
Si le client ne parvient pas à se connecter, vérifiez que le port UDP 51820 est ouvert dans le pare-feu du serveur et dans le pare-feu du panneau de votre hébergeur, le cas échéant. Ouvrez également le fichier de configuration du client et vérifiez la ligne Endpoint : elle doit contenir l'adresse publique du serveur. Si elle contient une adresse erronée, le Host a été mal saisi dans l'assistant de configuration.
Si le tunnel est actif mais que l'appareil n'a pas accès à Internet, consultez le journal du serveur avec sudo docker logs wg-easy et assurez-vous que le conteneur a été démarré à partir du docker-compose.yml officiel, sans modification de la section sysctls.
Sous Linux, si wg-quick échoue avec une erreur concernant resolvconf, installez openresolv comme indiqué dans la section sur la connexion d'un appareil.
Mettre à jour wg-easy
Pour installer une version plus récente de la version 15, téléchargez la nouvelle image et recréez le conteneur :
cd /etc/docker/containers/wg-easy sudo docker compose pull sudo docker compose up -d
Les clients et les paramètres sont conservés, car ils sont stockés dans le volume Docker.
Arrêter et supprimer wg-easy
Pour arrêter le serveur VPN, exécutez dans le dossier contenant docker-compose.yml :
sudo docker compose down
La configuration reste dans le volume, et sudo docker compose up -d redémarre le serveur avec les mêmes clients.
Pour supprimer complètement wg-easy, avec tous les clients et toutes les clés, ajoutez l'option -v :
sudo docker compose down -v
Après sudo docker compose down -v, toutes les configurations des clients cessent de fonctionner. Pour utiliser à nouveau le VPN, vous devrez terminer le premier lancement et recréer les clients.