156 lines
7.4 KiB
Markdown
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
|