Files
wiki/Catalogue-Self-Hosted/apps/app-wg-easy.md
T
2026-06-09 18:40:21 +02:00

8.7 KiB
Raw Blame History


title: wg-easy created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, vpn, wireguard, tunneling, web-ui, typescript, beginner] confidence: high contested: false sources: [https://selfh.st/apps/?tag=VPN, https://github.com/wg-easy/wg-easy]

🔐 wg-easy

Le moyen le plus simple d'exposer un serveur WireGuard avec une interface web — configure, crée des clients et partage des QR codes en 5 minutes chrono.

📋 Informations Générales

Champ Valeur
Site web wg-easy.com (le projet vit surtout sur GitHub)
GitHub wg-easy/wg-easy
License MIT
Langage TypeScript (Node.js + Vue.js)
Étoiles GitHub 25 944
Dernière MAJ 2026-06-06
Catégorie [[cat-vpn

📝 Description

wg-easy est un wrapper convivial autour de WireGuard qui ajoute une interface web moderne pour gérer votre serveur VPN. Au lieu d'éditer à la main wg0.conf et de générer des clés avec wg genkey, vous obtenez un dashboard propre permettant d'ajouter/supprimer des clients, de télécharger des .conf ou de scanner un QR code depuis l'app mobile WireGuard. C'est le "Nextcloud du VPN" : simple, focalisé, parfait pour 1 serveur VPN partagé entre 5 et 50 utilisateurs.

Le projet, anciennement connu sous le nom "wg-easy" de angristan puis repris par l'organisation wg-easy, a explosé en popularité pendant l'explosion du télétravail post-2020. Sa force est de ne rien ajouter au protocole WireGuard — c'est juste un frontal de gestion. Vous gardez 100% de la performance, de la sécurité et de la philosophie "small surface area" de WireGuard.

  • Installation en 1 commande Docker (image ghcr.io/wg-easy/wg-easy)
  • UI web multilingue (EN/FR/DE/ES…) avec thèmes sombre/clair
  • QR codes dynamiques pour app mobile WireGuard (iOS/Android)
  • Export de configuration : .conf, QR code, envoi par email optionnel
  • Gestion de la bande passante par client (monitoring)
  • IPv4 + IPv6 supportés
  • Mises à jour automatiques du kernel : utilise le module WireGuard natif du noyau
  • Métriques simples : dernier handshake, octets transférés par client
  • 2FA (depuis la v14) via TOTP pour l'accès au dashboard
  • Backup/restore simple (un volume Docker)

Public cible : homelabbers qui veulent un VPN site-à-client (road warrior) sans prise de tête, petites structures (5-50 employés), associations. Idéal pour 1 serveur VPN unique. Pour des besoins multi-régions ou un mesh dynamique entre pairs, préférer app-headscale ou app-tailscale.

Vs OpenVPN + Pihole VPN : WireGuard est 2-4× plus rapide, plus simple à configurer et plus économe en énergie. OpenVPN reste utile uniquement pour des contraintes corporate ou clients exotiques.

🚀 Installation

Option 1 : Docker Compose (recommandé, ultra-simple)

# docker-compose.yml
version: '3.8'
services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest
    container_name: wg-easy
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv6.conf.all.forwarding=1
    environment:
      - LANG=fr
      - WG_HOST=wg.example.com         # IP publique ou DNS
      - PASSWORD=ChangeMeStrongP@ss    # Mot de passe UI web
      - WG_DEFAULT_DNS=1.1.1.1,9.9.9.9
      - WG_ALLOWED_IPS=10.8.0.0/24,192.168.0.0/24  # VPN + LAN
      - WG_PERSISTENT_KEEPALIVE=25
    volumes:
      - ./config:/etc/wireguard
    ports:
      - "51820:51820/udp"   # WireGuard
      - "51821:51821/tcp"   # UI Web (peut être proxifié par Traefik)
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.wg-easy.rule=Host(`wg.example.com`)"
      - "traefik.http.routers.wg-easy.entrypoints=websecure"
      - "traefik.http.routers.wg-easy.tls.certresolver=letsencrypt"
      - "traefik.http.routers.wg-easy.service=wg-easy-svc"
      - "traefik.http.services.wg-easy-svc.loadbalancer.server.port=51821"

⚠️ Le port 51820/UDP doit être accessible depuis Internet (NAT/PAT du routeur). Si vous êtes derrière un NAT (CGN, 4G), utiliser un VPS relais ou app-tailscale à la place.

Option 2 : Bare-metal (Debian/Ubuntu)

sudo apt update && sudo apt install -y wireguard qrencode
# Suivre ensuite https://github.com/wg-easy/wg-easy#manual-installation
# Générer clés : wg genkey | tee privatekey | wg pubkey > publickey
# Configurer /etc/wireguard/wg0.conf
sudo systemctl enable --now wg-quick@wg0

⚙️ Configuration Initiale

  1. Rediriger le port 51820/UDP sur votre box/routeur vers le serveur wg-easy
  2. Accéder à l'UI web : https://wg.example.com (ou http://IP:51821 la première fois)
  3. Changer le mot de passe admin (variable PASSWORD dans docker-compose)
  4. Activer le 2FA : Settings → TOTP (compatible avec app-2fauth)
  5. Créer un client : bouton "New Client", choisir un nom, scanner le QR code avec l'app mobile WireGuard
  6. Tester : depuis le client, vérifier l'IP publique (curl ifconfig.me) et l'accès au LAN (ping 192.168.1.1)

🔄 Alternatives

Open Source

  • app-wireguard — Le noyau dur, sans UI
  • app-wgdashboard — Alternative Python, multi-instance
  • app-openvpn + OpenVPN Access Server (libre mais features payantes)
  • app-tailscale / app-headscale — Mesh dynamique, plus évolué
  • PiVPN — Script bash pour installer WireGuard sur Raspberry Pi
  • Algo — VPN WireGuard auto-hébergé pour voyage (by Trail of Bits)

Propriétaires

  • NordVPN (client lourd, no-log claimé, juridiction Panama)
  • ExpressVPN (propriétaire Lightway protocol, audits PwC/Cure53)
  • Mullvad VPN (5€/mois, no account, no email, accepte cash/crypto)
  • ProtonVPN (suisse, intégré à Proton Mail/Drive, plan gratuit limité)
  • CyberGhost (grand public, no-logs claimé)
  • Cisco AnyConnect (entreprise, propriétaire)

Comparaison wg-easy vs alternatives

Critère wg-easy OpenVPN Tailscale NordVPN
Self-hosted (Headscale oui)
Prix Gratuit Gratuit (AS payante) Freemium ~3-12€/mois
UI web (incluse) (AS payante)
Performance Très rapide Modérée Très rapide Rapide
Configuration 5 min 30 min 2 min 0 min
Logs Aucun (toi) Aucun (toi) Métadonnées (Tailscale) Claim "no-log"
Juridiction Toi Toi USA Panama
Idéal pour 1 serveur, 5-50 users Legacy, compatibilité Mesh multi-machines Grand public

Verdict : wg-easy est le standard de fait pour un VPN WireGuard simple et auto-hébergé. Si vous avez besoin d'un mesh dynamique entre pairs dispersés, migrez vers Tailscale/Headscale.

🔐 Sécurité

  • WireGuard moderne : Curve25519 (ECDH), ChaCha20-Poly1305 (AEAD), BLAKE2s (hash) — cryptographie de pointe, code audité
  • ⚠️ Visibilité IP publique : WireGuard fait du routage IP ; le serveur voit les IPs publiques de chaque client. Pour un anonymat fort, combiner avec Tor (SOCKS5 via wg)
  • Clés privées : générées localement, JAMAIS exportées du serveur. Sauvegarder le volume config chiffré (app-vaultwarden pour les secrets, VeraCrypt ou age pour le dossier de backup)
  • 2FA obligatoire sur l'UI web d'admin (TOTP, compatible app-2fauth)
  • Logs d'audit : activer les logs kernel WireGuard (dmesg -w | grep wg), exporter vers app-loki ; surveiller les handshakes échoués
  • Posture zero-trust : ne pas donner accès au dashboard à n'importe qui, créer un user dédié par client (ou par device)
  • ⚠️ Pas de MFA par client : wg-easy gère l'admin, pas l'authentification des clients (c'est juste "qui a la clé privée, passe"). Pour du MFA par user, préférer app-defguard ou app-authentik + OpenVPN

📚 Ressources

Pages Liées