VPNSmith
Outil gratuit - wg-easy v15

Générateur docker-compose wg-easy

Indiquez votre serveur et la façon dont vous voulez accéder au panneau d'administration. Vous obtenez un docker-compose.yml conforme à l'image wg-easy v15 actuelle, un Caddyfile si vous voulez du HTTPS, et les commandes exactes pour le lancer. Tout est construit dans votre navigateur.

Tout est généré dans votre navigateur. Rien de ce que vous saisissez, mot de passe compris, n'est envoyé à nos serveurs.

L'adresse à laquelle les clients WireGuard se connectent.

Comment accéderez-vous au panneau ?

Un enregistrement A pour ce nom doit pointer vers le serveur, ports 80 et 443 ouverts.

Trafic des clients
  • Cliquez sur « Nouveau » pour générer le mot de passe administrateur.
  • Indiquez le domaine du panneau : Caddy en a besoin pour obtenir le certificat.
docker-compose.yml
# wg-easy v15 - generated on vpnsmith.com/en/tools/wg-easy-compose-generator
# Host: vpn.example.com - WireGuard port: 51820/udp - panel: https://wg.example.com

volumes:
  etc_wireguard:
  caddy_data:
  caddy_config:

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:15
    container_name: wg-easy
    environment:
      - PORT=80
      - TRUSTED_PROXIES=10.42.42.43,fdcc:ad94:bacf:61a3::2b
      - INIT_ENABLED=true
      - INIT_USERNAME=admin
      - INIT_PASSWORD=GENERATE-A-PASSWORD
      - INIT_HOST=vpn.example.com
      - INIT_PORT=51820
      - INIT_DNS=1.1.1.1,9.9.9.9
    networks:
      wg:
        ipv4_address: 10.42.42.42
        ipv6_address: fdcc:ad94:bacf:61a3::2a
    volumes:
      - etc_wireguard:/etc/wireguard
      - /lib/modules:/lib/modules:ro
    ports:
      - "51820:51820/udp"   # WireGuard: the only port clients need
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.all.forwarding=1
      - net.ipv6.conf.default.forwarding=1

  caddy:
    image: caddy:2-alpine
    container_name: caddy
    ports:
      - "80:80/tcp"
      - "443:443/tcp"
      - "443:443/udp"
    networks:
      wg:
        ipv4_address: 10.42.42.43
        ipv6_address: fdcc:ad94:bacf:61a3::2b
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    restart: unless-stopped

networks:
  wg:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 10.42.42.0/24
        - subnet: fdcc:ad94:bacf:61a3::/64
Caddyfile
wg.example.com {
	reverse_proxy wg-easy:80
}
install.sh
# 1. Pare-feu : SSH d'abord, puis le port WireGuard
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
# Attention : les ports publiés par Docker contournent ufw. Ouvrez/fermez-les aussi dans le pare-feu de l'hébergeur.

# 2. Créez le dossier et collez le ou les fichiers générés
sudo mkdir -p /etc/docker/containers/wg-easy
cd /etc/docker/containers/wg-easy
sudo nano docker-compose.yml
sudo nano Caddyfile

# 3. Démarrez wg-easy
sudo docker compose up -d
# Suivez les journaux (Ctrl+C pour quitter)
sudo docker compose logs -f wg-easy

# 4. Ouvrez le panneau: https://wg.example.com

# 5. Une fois connecté, retirez les lignes INIT_* et relancez docker compose up -d

Ce fichier a besoin d'un serveur avec une IP publique

Un VPS Cloud Contabo fournit une IPv4 dédiée, des images Linux prêtes pour Docker et un trafic illimité : tout ce dont wg-easy a besoin.

Lien affilié : nous touchons une commission, sans surcoût pour vous.

Voir l'offre VPS Contabo

Pourquoi votre ancien fichier wg-easy ne marche plus

wg-easy v15 est une réécriture complète. La plupart des variables des tutoriels v14 sont tout simplement ignorées par la nouvelle image : le conteneur démarre, mais votre hôte, votre mot de passe et vos DNS ne sont pas appliqués. Le guide de migration officiel indique que la plupart des réglages sont passés dans le panneau d'administration. Voici la correspondance :

Variable v14Équivalent v15
WG_HOSTINIT_HOST (premier démarrage seulement), puis le panneau
PASSWORD / PASSWORD_HASHINIT_USERNAME + INIT_PASSWORD, ou l'assistant d'installation
WG_PORTINIT_PORT, avec le mappage UDP correspondant
WG_DEFAULT_DNSINIT_DNS
WG_DEFAULT_ADDRESSINIT_IPV4_CIDR avec INIT_IPV6_CIDR
Panneau en HTTP simpleINSECURE=true est désormais obligatoire

Trois façons d'accéder au panneau

Le panneau peut créer des clients VPN : qui l'atteint contrôle votre VPN. Seul le port UDP de WireGuard doit être exposé à Internet.

Le HTTPS avec Caddy est la configuration que recommande la documentation de wg-easy : Caddy obtient un vrai certificat pour un sous-domaine qui pointe vers votre serveur, et le panneau n'est jamais servi en HTTP simple. Le générateur place les deux conteneurs sur le même réseau, donne à Caddy une adresse fixe et la déclare dans TRUSTED_PROXIES, pour que les échecs de connexion soient journalisés avec la vraie IP du client.

Le tunnel SSH ne publie le panneau que sur 127.0.0.1. Rien n'est exposé ; vous l'ouvrez avec ssh -L quand vous en avez besoin. C'est l'option sûre la plus simple quand vous n'avez pas de domaine.

Le mode réseau local sert à un serveur domestique : le panneau est publié en HTTP avec INSECURE=true. Docker publie ses ports par ses propres règles iptables, donc ufw ne les filtre pas ; gardez ce port fermé sur votre box ou le pare-feu de l'hébergeur.

Guide complet wg-easy : installation, sécurisation et alternatives →

Questions fréquentes

wg-easy v15 utilise-t-il encore WG_HOST et PASSWORD_HASH ?
Non. La v15 est une réécriture et ces variables ne sont plus lues. L'hôte, le port, les DNS et le compte administrateur se règlent dans l'assistant au premier démarrage, ou sans aucune interaction avec les variables INIT_* (INIT_ENABLED, INIT_USERNAME, INIT_PASSWORD, INIT_HOST, INIT_PORT). Ensuite, ils se modifient dans le panneau.
Les variables INIT_ s'appliquent-elles à chaque redémarrage ?
Non. Elles ne servent qu'au tout premier démarrage, puis l'installation est désactivée. La documentation de wg-easy conseille de les retirer du fichier une fois l'installation faite, pour que le mot de passe ne reste pas en clair sur le serveur.
Pourquoi faut-il renseigner INIT_IPV4_CIDR et INIT_IPV6_CIDR ensemble ?
L'installation automatique fonctionne par groupes : si vous renseignez une variable d'un groupe, vous devez les renseigner toutes. Les deux plages d'adresses forment un groupe, c'est pourquoi le générateur ajoute toujours la plage IPv6 (celle par défaut de wg-easy) quand vous changez la plage IPv4.
Quel mot de passe wg-easy accepte-t-il ?
Le code actuel exige au moins 2 caractères pour l'identifiant et 12 pour le mot de passe. Le générateur crée un mot de passe aléatoire de 24 caractères dans votre navigateur, sans le caractère $, que Docker Compose tenterait sinon d'interpréter.
Quel serveur faut-il pour wg-easy ?
Un hôte Linux avec Docker, une adresse IPv4 publique et un processeur x86_64 ou arm64. WireGuard est léger : un petit VPS suffit pour un foyer. Notre hôte d'exemple est Contabo, dont le VPS d'entrée inclut une IPv4 publique et un trafic illimité.