Files
2026-06-09 18:40:21 +02:00

156 lines
7.4 KiB
Markdown

---
title: WGDashboard
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, vpn, wireguard, dashboard, python, flask, auto-hebergement]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=VPN, https://github.com/WGDashboard/WGDashboard]
---
# 🔐 WGDashboard
> **Le tableau de bord Python pour administrer plusieurs instances WireGuard** depuis une seule interface web. Configuration, peers, QR codes, statistiques et logs centralisés.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | (GitHub) |
| **GitHub** | [WGDashboard/WGDashboard](https://github.com/WGDashboard/WGDashboard) |
| **License** | MIT |
| **Langage** | Python (Flask + WebSockets) |
| **Étoiles GitHub** | 3,6k ⭐ |
| **Dernière MAJ** | 2026-05 |
| **Catégorie** | [[cat-vpn|VPN]] |
## 📝 Description
**WGDashboard** est une interface web self-hosted écrite en Python (Flask) qui permet de gérer **plusieurs instances WireGuard simultanément** depuis un point unique. Là où `wg` et `wg-quick` se pilotent en ligne de commande, WGDashboard apporte une UI claire, des graphes de trafic et des outils d'administration pensés pour les homelabs et les petites équipes.
L'application lit les fichiers de configuration WireGuard standard (situés dans `/etc/wireguard`) et expose toutes les opérations via une API REST et un dashboard temps réel. Les **mises à jour de configuration** (ajout de peer, rotation de clés, redémarrage d'interface) se font en un clic et sont reflétées immédiatement dans le tunnel.
**Public cible** : admins et power users qui gèrent un serveur WireGuard de production et veulent éviter de toucher au terminal à chaque ajout de peer. Moins adapté qu'un simple [[app-wireguard|wireguard]] exposé en CLI pour un seul peer.
-**Multi-instances** : gère N interfaces WireGuard sur le même hôte
-**Peers en quelques clics** : génération clé, QR code, configuration client
-**Statistiques temps réel** : trafic par peer, handshakes, dernières connexions
-**One-time links** pour partager une conf sans QR code
-**Blacklist / whitelist** d'IPs par peer
-**Auth utilisateurs** intégrée (multi-comptes)
-**API REST** documentée
-**Docker** ready + bare-metal (systemd)
-**Logs d'audit** des actions admin
-**Stack légère** : Flask + Socket.IO, pas de base de données externe
## 🚀 Installation
### Option 1 : Docker Compose (recommandé)
```yaml
# docker-compose.yml
version: '3.8'
services:
wgdashboard:
image: ghcr.io/wgdashboard/wgdashboard:latest
container_name: wgdashboard
restart: unless-stopped
network_mode: host # Requis pour piloter les interfaces WireGuard
cap_add:
- NET_ADMIN
- SYS_MODULE
volumes:
- /etc/wireguard:/etc/wireguard
- wgdashboard-data:/app/data
environment:
- WGDASHBOARD_VERSION=latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.wgdashboard.rule=Host(`wg.example.com`)"
- "traefik.http.routers.wgdashboard.entrypoints=websecure"
- "traefik.http.routers.wgdashboard.tls.certresolver=letsencrypt"
- "traefik.http.services.wgdashboard.loadbalancer.server.port=10086"
volumes:
wgdashboard-data:
```
> **Note** : `network_mode: host` est généralement requis pour que le conteneur puisse créer / piloter les interfaces `wg0`, `wg1`, etc. Côté Traefik, on expose le port `10086` du dashboard. Les ports WireGuard eux-mêmes (51820/UDP typiquement) doivent être publiés en UDP sur l'hôte.
### Option 2 : Bare-metal (systemd)
```bash
git clone https://github.com/WGDashboard/WGDashboard.git
cd WGDashboard/src
pip3 install -r requirements.txt
python3 wgdashboard.py
# puis accéder à http://IP:10086
```
## ⚙️ Configuration Initiale
1. **Créer le compte admin** au premier lancement (mot de passe fort recommandé)
2. **Ajouter une instance WireGuard** : Settings > Configuration > pointer vers `/etc/wireguard/wg0.conf`
3. **Activer l'interface** via l'UI (équivalent `wg-quick up wg0`)
4. **Ajouter un peer** : Peers > New > générer clé, saisir AllowedIPs, récupérer le QR code ou la conf
5. **Configurer les utilisateurs** : User Management > inviter un co-admin avec droits limités
6. **Activer le HTTPS** : placer WGDashboard derrière [[app-traefik|Traefik]] avec Let's Encrypt
## 🔄 Alternatives
### Open Source
- [[app-wireguard]] — Le noyau lui-même, en CLI (`wg`, `wg-quick`)
- [[app-tailscale]] — Mesh VPN clé-en-main, sans gestion de serveur
- [[app-headscale]] — Controller Tailscale self-hosted
- **wg-easy** — Wrapper Docker minimaliste pour WireGuard (mono-instance, plus simple)
- **Pangolin** — Reverse proxy + WireGuard + SSO, plus complet que WGDashboard
### Comparaison WGDashboard vs alternatives WireGuard
| Critère | WGDashboard | wg-easy | Pangolin | CLI wg / wg-quick |
| :--- | :--- | :--- | :--- | :--- |
| Self-hosted | ✅ | ✅ | ✅ | ✅ |
| Multi-instances | ✅ | ❌ | ✅ | ✅ |
| QR code / config client | ✅ | ✅ | ✅ | ❌ (manuel) |
| Statistiques trafic | ✅ | Basique | ✅ | ❌ (wg show) |
| Reverse proxy intégré | ❌ | ❌ | ✅ | ❌ |
| SSO / auth avancé | Basique | Basique | ✅ (OAuth, Authentik) | ❌ |
| Licence | MIT | MIT | AGPL-3.0 | GPL-2.0 |
**Verdict** : WGDashboard est l'option **intermédiaire idéale** entre `wg-quick` brut et un Pangolin. Si vous avez 2-3 serveurs WireGuard ou un homelab avec beaucoup de peers, c'est le bon compromis.
### Propriétaires (ce que WGDashboard remplace)
- **ZeroTier Central** (controller SaaS)
- **Tailscale Dashboard** (version cloud de Tailscale)
- **Netbird Self-Hosted Management** (version payante)
- **Pritunl** (édition commerciale)
## 🔐 Sécurité
- **Cryptographie** : délègue intégralement à **WireGuard** — ChaCha20-Poly1305 pour le chiffrement, Curve25519 pour l'échange de clés, BLAKE2s pour le MAC. WGDashboard n'implémente aucun crypto lui-même.
- **Clés privées** : restent stockées sur l'hôte (`/etc/wireguard`), WGDashboard ne les fait jamais transiter hors du serveur. Les **clés privées des peers** peuvent être générées côté serveur puis importées, ou importées depuis le client.
- **Auth** : utilisateurs stockés dans un fichier SQLite local, mots de passe hashés (bcrypt/argon2 selon version). Activer la 2FA si disponible.
- **HTTPS obligatoire** : toujours exposer derrière [[app-traefik|Traefik]] avec certificat valide, **jamais en HTTP clair** car le dashboard permet de gérer des clés privées.
- **Audit log** : toutes les actions (création peer, modification, suppression) sont journalisées avec timestamp et utilisateur.
- **Isolation réseau** : envisager un réseau dédié (VLAN) pour le port WireGuard UDP.
- **Permissions Linux** : le binaire WireGuard a besoin de `CAP_NET_ADMIN` et `CAP_SYS_MODULE` pour charger le module kernel — limiter ces capabilities au conteneur.
## 📚 Ressources
- [GitHub WGDashboard/WGDashboard](https://github.com/WGDashboard/WGDashboard)
- [Wiki officielle](https://github.com/WGDashboard/WGDashboard/wiki)
- [WireGuard — site officiel](https://www.wireguard.com/)
- [Docker Hub — wgdashboard](https://hub.docker.com/r/wgdashboard/wgdashboard)
## Pages Liées
- [[cat-vpn]] — Catégorie VPN
- [[app-wireguard]] — Le moteur sous-jacent
- [[app-tailscale]] — Alternative mesh VPN
- [[app-headscale]] — Controller Tailscale self-hosted
- [[app-traefik]] — Pour exposer en HTTPS
- [[securisation-home-lab]] — Bonnes pratiques sécurité homelab