VPNSmith
self-host-vpnINFO

wg-easy (2026) : héberger WireGuard avec une interface web, en quelques minutes

wg-easy donne à WireGuard un tableau de bord web : créez des clients, scannez des QR codes, suivez le trafic en direct. Le guide complet 2026 — docker-compose, le changement de mot de passe v14, sécuriser le panneau d'admin, et quand le préférer à la ligne de commande.

Par Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR8 min de lecturePhoto via Pixabay

Transparence affiliation — Ce guide renvoie vers Contabo, le VPS sur lequel nous faisons tourner notre propre WireGuard auto-hébergé. Si vous commandez via notre lien, nous touchons une commission sans surcoût pour vous. Chaque commande ci-dessous est documentée à partir du projet officiel wg-easy et écrite pour être reproductible sur votre machine.

WireGuard est rapide et moderne, mais l'installation standard, ce sont des fichiers et la ligne de commande : générer des clés, éditer wg0.conf à la main, lancer wg set pour chaque appareil, faire circuler les configs. Pour un appareil, ça va. Pour une famille, quelques ordinateurs et deux téléphones, ça devient pénible — et c'est dans le pénible que les erreurs (et les clés qui fuitent) surviennent. wg-easy résout exactement ça : il garde le vrai WireGuard en dessous, intact, et y greffe un tableau de bord web propre. Ajouter un client en deux clics, afficher un QR code pour un téléphone, voir qui est connecté et combien il transfère. Voici l'installation complète 2026, y compris le changement de mot de passe qui piège tous ceux qui mettent à jour.

Ce qu'est wg-easy (et ce qu'il n'est pas)

wg-easy est un unique conteneur Docker qui fait tourner un serveur WireGuard et une petite application web pour le gérer. Le point clé à comprendre d'emblée : il ne remplace ni ne réimplémente WireGuard. Le tunnel reste le même WireGuard du noyau, avec les mêmes clés et le même protocole sur le fil. wg-easy, c'est de la gestion, pas un nouveau VPN. Deux conséquences :

  • Aucune perte de vitesse. Le débit et la latence sont identiques à une config écrite à la main, car le chemin des données ne touche jamais l'application web.
  • L'interface web est la surface d'attaque. Le tableau de bord peut créer des clients : qui le contrôle contrôle votre VPN. Protéger ce panneau, c'est toute l'histoire de la sécurité (voir plus bas).

Ce que vous y gagnez : une page navigateur listant chaque client, créer/désactiver/supprimer en un clic, un QR code par client pour les téléphones, et un compteur de transfert en direct par peer. Pour intégrer une poignée d'appareils sans toucher au terminal, rien n'est plus rapide.

Un ordinateur portable sur un bureau affichant des lignes de code source dans un éditeur sombre, avec un smartphone posé à côté du clavier
Un ordinateur portable sur un bureau affichant des lignes de code source dans un éditeur sombre, avec un smartphone posé à côté du clavier

Avant de commencer : l'hôte qu'il vous faut

wg-easy est un conteneur, il vous faut donc un hôte Linux capable de faire tourner Docker et disposant d'une IP publique. Pour un VPN joignable de partout, cela signifie un petit VPS — WireGuard est si léger qu'une instance à 4–6 €/mois sature son port réseau bien avant que le CPU ne s'en aperçoive. Nous faisons tourner le nôtre sur Contabo pour le rapport prix/bande passante, et la procédure bare-metal est dans notre guide WireGuard auto-hébergé sur Contabo si vous voulez comparer avec la voie manuelle.

Prends un VPS Contabo pour faire tourner wg-easy →

Sur l'hôte, il vous faut Docker et le plugin Compose installés, le module noyau WireGuard disponible (toute distro moderne, Linux 5.6+, le livre), et la possibilité d'ouvrir l'UDP 51820 dans à la fois le pare-feu de l'hôte et le groupe de sécurité de votre fournisseur.

Le fichier docker-compose

Voici le déploiement wg-easy moderne. Remplacez WG_HOST par l'IP publique ou le nom d'hôte de votre serveur, et définissez un mot de passe d'admin fort (la section suivante explique l'exigence de hachage en v14+) :

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest
    container_name: wg-easy
    environment:
      - WG_HOST=ip.publique.de.votre.serveur
      - PASSWORD_HASH=$2a$12$REMPLACEZ_PAR_VOTRE_HASH_BCRYPT
      - WG_DEFAULT_DNS=1.1.1.1
    volumes:
      - ./etc_wireguard:/etc/wireguard
    ports:
      - "51820:51820/udp"   # données WireGuard — ouvert à Internet
      - "51821:51821/tcp"   # interface web — à limiter à VOTRE IP seule
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Trois éléments font le vrai travail et sont les points de défaillance habituels :

  • cap_add: NET_ADMIN permet au conteneur de gérer l'interface WireGuard. Sans ça, le conteneur démarre mais ne peut pas monter le tunnel.
  • sysctls: net.ipv4.ip_forward=1 transforme la machine en routeur. Sans ça, le tunnel se connecte puis ne route rien — le classique « connecté mais pas d'Internet ».
  • volumes persiste les clés et les clients sur l'hôte, pour qu'un docker compose down && up n'efface pas tous les appareils.

Lancez avec docker compose up -d, puis ouvrez http://IP_DE_VOTRE_SERVEUR:51821 et connectez-vous.

Le changement de mot de passe qui casse les mises à jour

C'est le plus gros piège de 2026. L'ancien wg-easy utilisait une variable d'environnement PASSWORD en clair. Les versions récentes (v14 et suivantes) ont supprimé le PASSWORD en clair et exigent désormais un hash bcrypt dans PASSWORD_HASH. Si vous copiez la ligne PASSWORD=secret d'un vieux tutoriel dans une image actuelle, le conteneur refusera la connexion ou ne démarrera pas, et vous jurerez que la doc est fausse.

Générez le hash avec l'image elle-même pour ne jamais coller de mot de passe en clair dans l'historique du shell :

docker run --rm ghcr.io/wg-easy/wg-easy wgpw 'votre-mot-de-passe-fort'
# affiche : PASSWORD_HASH=$2a$12$....

Copiez la valeur $2a$12$... entière dans le fichier compose. Notez que les caractères $ doivent être échappés (doublés en $$) si vous mettez le hash dans un fichier .env interpolé par Compose — ce bug d'échappement est la deuxième plainte la plus fréquente après le renommage de la variable.

Ajouter votre premier client

Dans le tableau de bord, cliquez sur New Client, donnez-lui un nom (ex. portable, telephone-pixel), et wg-easy génère la paire de clés et une config prête. Pour un ordinateur, téléchargez le .conf et importez-le dans l'application WireGuard ou les modèles de config ; pour un téléphone, cliquez sur l'icône QR et scannez-le avec l'app mobile WireGuard — aucune saisie, aucun transfert de fichier. L'interrupteur par client désactive un appareil instantanément sans le supprimer, c'est la bonne façon de révoquer un téléphone perdu.

Verrouiller le panneau d'admin — à faire tout de suite, pas plus tard

L'interface web peut créer des clients VPN : un panneau exposé et mal protégé est le vrai danger de wg-easy. Trois couches, par ordre de préférence :

  1. Ne publiez jamais 51821 sur Internet. Dans le pare-feu de votre fournisseur VPS, laissez l'UDP 51820 ouvert et gardez le TCP 51821 fermé au monde. N'atteignez le panneau que depuis votre propre IP, ou — le plus propre — connectez-vous d'abord au VPN puis ouvrez le tableau de bord à travers le tunnel, pour que le port d'admin ne soit jamais exposé.
  2. Utilisez un mot de passe fort et haché. L'exigence PASSWORD_HASH existe pour ça. Traitez-le comme un mot de passe root.
  3. Mettez du TLS devant s'il vous faut l'atteindre à distance : un reverse proxy (Caddy, Traefik, nginx) terminant le HTTPS sur un vrai certificat, idéalement avec une liste d'autorisation. Du HTTP en clair sur un port public est la seule configuration à éviter.

Un VPN auto-hébergé que n'importe quel passant peut s'ajouter est pire que pas de VPN. Le panneau, ce sont les clés du royaume — protégez-le en conséquence.

wg-easy face aux alternatives

  • vs PiVPNPiVPN installe WireGuard directement sur l'hôte et gère les peers au terminal (pivpn add, pivpn -qr). Pas de conteneur, pas d'interface web. Prenez PiVPN pour une machine bare-metal épurée et scriptable ; prenez wg-easy quand vous voulez vraiment un tableau de bord cliquable et des stats en direct.
  • vs une config écrite à la main — Éditer wg0.conf soi-même est l'option la plus transparente et la plus légère, idéale pour une machine VPN mono-usage et l'infrastructure-as-code. wg-easy échange un peu de surface supplémentaire (l'app web) contre une gestion des clients rapide et sans CLI.
  • vs les autres stacks auto-hébergées — Si vous voulez un mesh (chaque appareil parlant directement aux autres, traversée de NAT gérée pour vous) plutôt qu'un serveur classique en étoile, wg-easy n'est pas la bonne forme ; c'est le terrain de Tailscale/Headscale/NetBird, comparé dans notre guide du meilleur VPN auto-hébergé.

wg-easy tourne aussi très bien aux côtés d'autres conteneurs, d'où son association naturelle avec une installation WireGuard dans Docker plus large.

Quand wg-easy est le bon choix — et quand il ne l'est pas

Utilisez wg-easy quand vous intégrez plusieurs personnes ou appareils, voulez la config par QR code, aimez voir l'état des connexions en direct, ou préférez simplement un panneau à un fichier de config. Il transforme « configurer un client VPN » d'une corvée CLI de cinq minutes en deux clics.

Passez votre chemin quand la machine ne sert qu'un ou deux peers WireGuard (une config à la main est plus simple et a une pièce mobile en moins), quand vous ne pouvez pas garder le port d'admin hors d'Internet en sécurité, ou quand vous voulez en fait un mesh plutôt qu'un serveur. Pour tous les autres, wg-easy est le chemin honnête le plus rapide d'un VPS neuf vers un VPN WireGuard fonctionnel et gérable.

La limite honnête

wg-easy rend WireGuard plus facile à gérer, pas plus privé ni plus sûr que WireGuard ne l'est déjà. Il partage le noyau de l'hôte, tourne avec NET_ADMIN, et n'est verrouillé qu'autant que l'hôte et le panneau d'admin que vous placez devant. Il n'audite pas vos clients, n'empêche pas seul les fuites DNS (réglez WG_DEFAULT_DNS et vérifiez), et ne vous protège pas si vous laissez 51821 ouvert. Traitez-le comme une couche de confort par-dessus le vrai WireGuard : déployez-le, durcissez l'hôte et le panneau, gardez le port de données public et le port d'admin privé — et vous avez un VPN auto-hébergé que vous pouvez réellement faire tourner pour tout un foyer sans vivre dans le terminal.

★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis

Héberge ton VPN sur ton propre VPS → ContaboAccès root complet · IPv4 publique · choisis ta région

Questions fréquentes

Qu'est-ce que wg-easy ?
wg-easy est un projet open-source qui enveloppe WireGuard dans une petite interface web. Vous le lancez comme un unique conteneur Docker ; il gère le serveur WireGuard à votre place et vous offre un tableau de bord dans le navigateur pour ajouter ou retirer des clients, télécharger ou scanner leur config en QR code, et suivre l'envoi/réception en direct par peer. Le chiffrement reste du WireGuard standard tournant dans le noyau de l'hôte — wg-easy ne gère que la gestion des peers et l'interface, donc aucune perte de performance par rapport à une config écrite à la main.
Est-il sûr d'exposer wg-easy à Internet ?
Seul le port de données WireGuard (UDP 51820 par défaut) doit faire face à Internet. Le port web d'admin (51821) ne doit PAS être ouvert au monde — quiconque l'atteint et devine ou force le mot de passe peut se créer un client VPN. Limitez le port web à votre propre IP via une règle de pare-feu, placez-le derrière un reverse proxy en TLS, ou atteignez-le à travers le tunnel lui-même. Les versions récentes de wg-easy exigent un mot de passe d'admin haché (PASSWORD_HASH) précisément parce qu'un panneau non protégé est le risque principal.
Quelle est la différence entre wg-easy et PiVPN ?
Les deux simplifient WireGuard, mais différemment. PiVPN est un script d'installation qui installe WireGuard (ou OpenVPN) directement sur l'hôte et vous donne des commandes CLI (pivpn add, pivpn -qr) pour gérer les peers — pas de conteneur, pas d'interface web. wg-easy tourne comme un conteneur Docker et tout son intérêt est le tableau de bord navigateur. Choisissez PiVPN si vous aimez une installation bare-metal pilotée au terminal sur un Raspberry Pi ou un VPS ; choisissez wg-easy si vous voulez un panneau cliquable et des stats en direct.
Ai-je encore besoin d'un VPS pour wg-easy ?
Si vous voulez un VPN joignable de partout avec une IP publique stable, oui — wg-easy a toujours besoin d'un hôte avec une adresse routable, comme tout serveur WireGuard. Un petit VPS (4–6 €/mois) est le choix standard et sature facilement son lien réseau avec WireGuard. Pour un simple accès distant à un réseau domestique, vous pouvez faire tourner wg-easy sur un serveur maison derrière une redirection de port, mais vous perdez l'IP statique propre.
Pourquoi wg-easy se connecte mais ne route aucun trafic ?
Presque toujours le pare-feu de l'hôte ou le routage IP. Le conteneur a besoin de la capacité NET_ADMIN et l'hôte doit transférer les paquets (net.ipv4.ip_forward=1) — wg-easy règle cela dans son fichier compose, mais le groupe de sécurité distinct d'un hébergeur cloud peut quand même bloquer l'UDP 51820. Ouvrez ce port dans le pare-feu du fournisseur, pas seulement sur l'hôte. Si la poignée de main aboutit mais que les pages se figent, le suspect suivant est le MTU plutôt que wg-easy lui-même.