Comment configurer votre serveur VPN personnel WireGuard | INTROSERV
EUR
european

EUR

usa

USD

French Fr
Ex. VAT Ex. VAT 0%

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.

Info

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.

Tip

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.

Warning

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.

Warning

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

Warning

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.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA