241 lines
5.3 KiB
Markdown
241 lines
5.3 KiB
Markdown
# Wg Gen Web
|
|
|
|
<h1><img src="./web-ui.png" ></h1>
|
|
|
|
Générateur de configuration simple basé sur le Web pour [WireGuard](https://wireguard.com).
|
|
|
|
## Why another one ?
|
|
|
|
Toutes les implémentations de WireGuard UI essaient de gérer le service en appliquant des configurations et en créant des règles de réseau.
|
|
|
|
Cette implémentation ne fait que générer de la configuration et c'est à vous de créer des règles réseau et d'appliquer la configuration à WireGuard.
|
|
|
|
Par exemple en surveillant le répertoire généré avec [inotifywait](https://github.com/inotify-tools/inotify-tools/wiki) ou avec systemd.path.
|
|
|
|
Le but est d'exécuter Wg-Gen-Web dans un espace et WireGuard sur le système hôte.
|
|
|
|
### Caractéristiques
|
|
|
|
* Libre-service et basé sur le web
|
|
* QR-Code pour une configuration pratique du client mobile
|
|
* Support optionnel multi-utilisateurs derrière un proxy d'authentification
|
|
* Prise en charge de l'authentification simple
|
|
* Zéro dépendance externe - juste un binaire unique utilisant le module noyau wireguard
|
|
* Déploiement de binaires et de conteneurs
|
|
|
|
Vous devez avoir WireGuard installé sur la machine qui exécute `wg-ui`.
|
|
|
|
## Wg ui
|
|
|
|
### Installation de Go (Debian)
|
|
|
|
Installer la dernière version de Go à partir de (<https://golang.org/dl/>)
|
|
|
|
```
|
|
cd ~
|
|
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
|
|
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
|
|
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
|
|
source ~/.bashrc
|
|
```
|
|
|
|
Installer la version LTS de nodejs pour le frontend
|
|
|
|
```
|
|
# debian
|
|
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash -
|
|
sudo apt update
|
|
sudo apt install nodejs
|
|
```
|
|
|
|
### Cloner wg-webui-fr
|
|
|
|
```
|
|
git clone https://gitea.rnmkcy.eu/yann/wg-webui-fr
|
|
```
|
|
|
|
### Construire wg-webui-fr
|
|
|
|
Exécuter les commandes suivantes
|
|
|
|
```
|
|
cd ~/wg-webui-fr/
|
|
go mod tidy
|
|
go build -o wg-ui main.go
|
|
cd ui
|
|
export NODE_OPTIONS=--openssl-legacy-provider
|
|
export VUE_APP_API_BASE_URL=http://localhost:8080/api/v1.0
|
|
npm install
|
|
npm run build
|
|
sudo mkdir -p /opt/appwg/ui
|
|
sudo cp ../wg-ui /opt/appwg
|
|
sudo cp -r dist /opt/appwg/ui/
|
|
```
|
|
|
|
### Environnement
|
|
|
|
Créer un fichier environnement `/opt/appwg/.env`
|
|
|
|
```
|
|
SERVER=127.0.0.1
|
|
PORT=8090
|
|
GIN_MODE=debug
|
|
|
|
WG_CONF_DIR=/opt/appwg/wireguard
|
|
WG_INTERFACE_NAME=wg0.conf
|
|
|
|
SMTP_HOST="mx.exemple.com"
|
|
SMTP_PORT=587
|
|
SMTP_USERNAME="Utilisateur@exemple.com"
|
|
SMTP_PASSWORD="Mot de passe"
|
|
SMTP_FROM="Utilisateur@exemple.com"
|
|
```
|
|
|
|
ATTENTION!!! il faut au minimun un fichier `wg0.conf` dans `/opt/appwg/wireguard`
|
|
Avec une installation de l'application wireguard, `WG_CONF_DIR=/etc/wireguard`
|
|
|
|
### Utilisation systemd
|
|
|
|
Créer le service `/etc/systemd/system/wgweb.service`
|
|
|
|
```
|
|
[Unit]
|
|
Description=Wireguard web
|
|
After=network.target
|
|
|
|
[Service]
|
|
|
|
Type=simple
|
|
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
|
|
WorkingDirectory=/opt/appwg
|
|
ExecStart=/opt/appwg/wg-ui
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Recharger
|
|
|
|
```
|
|
sudo systemctl daemon-reload
|
|
```
|
|
|
|
### Activer et lancer le service
|
|
|
|
```
|
|
sudo systemctl enable wgweb.service --now
|
|
```
|
|
|
|
Wireguard ui est accessible sur localhost:8090
|
|
|
|
Pour un accès via ssh
|
|
|
|
```
|
|
ssh -L 9500:localhost:8090 utilisateur@adresse_serveur
|
|
```
|
|
|
|
### Accès navigateur
|
|
|
|
Ensuite ouvrir un navigateur localement sur localhost:9500
|
|
|
|
![](web-ui-a.png)
|
|
|
|
Activer le service
|
|
|
|
sudo systemctl enable wgweb.service
|
|
|
|
### Mise è jour wg-webui-fr
|
|
|
|
Exécuter les commandes suivantes
|
|
|
|
```bash
|
|
echo "Arrêt wgweb.service"
|
|
sudo systemctl stop wgweb.service
|
|
echo "Sauvegarde"
|
|
sudo cp /opt/appwg/.env _.env
|
|
echo "Supprimer appwg"
|
|
sudo rm -r /opt/appwg
|
|
echo "Construire wg-ui main.go"
|
|
cd $HOME/wg-webui-fr/
|
|
go mod tidy
|
|
go build -o wg-ui main.go
|
|
cd ui
|
|
export NODE_OPTIONS=--openssl-legacy-provider
|
|
export VUE_APP_API_BASE_URL=http://localhost:8080/api/v1.0
|
|
npm install
|
|
npm run build
|
|
sudo mkdir -p /opt/appwg/ui
|
|
sudo cp ../wg-ui /opt/appwg
|
|
sudo cp -r dist /opt/appwg/ui/
|
|
echo "Restaurer environnement"
|
|
sudo cp $HOME/_.env /opt/appwg/.env
|
|
echo "Démarrer le service"
|
|
sudo systemctl start wgweb.service
|
|
echo "FIN reconstruction"
|
|
```
|
|
|
|
Wireguard ui est accessible sur localhost:8090
|
|
|
|
|
|
### Appliquer automatiquement les changements à WireGuard
|
|
|
|
#### Utilisation de systemd (DEFAUT)
|
|
|
|
Utilisation de `systemd.path` pour surveiller les changements de répertoire voir [systemd doc](https://www.freedesktop.org/software/systemd/man/systemd.path.html)
|
|
|
|
```
|
|
# /etc/systemd/system/wg-gen-web.path
|
|
[Unit]
|
|
Description=Watch /etc/wireguard for changes
|
|
|
|
[Path]
|
|
PathModified=/etc/wireguard
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Ce `.path` activera le fichier unit avec le même nom
|
|
|
|
```
|
|
# /etc/systemd/system/wg-gen-web.service
|
|
[Unit]
|
|
Description=Restart WireGuard
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Ce qui va redémarrer le service WireGuard
|
|
|
|
Activer et lancer
|
|
|
|
```
|
|
sudo systemctl enable wg-gen-web.path --now
|
|
```
|
|
|
|
### Utiliser inotifywait
|
|
|
|
Pour tout autre système d'initialisation, créez un daemon exécutant ce script
|
|
|
|
```
|
|
#!/bin/sh
|
|
while inotifywait -e modify -e create /etc/wireguard; do
|
|
wg-quick down wg0
|
|
wg-quick up wg0
|
|
done
|
|
```
|
|
|
|
### Comment utiliser avec une configuration WireGuard existante
|
|
|
|
Après le premier lancement, Wg Gen Web créera le fichier `server.json` dans le répertoire défini le paramètre `WG_INTERFACE_NAME` du fichier environnement.
|
|
|
|
Modifier le fichier existant **server.json** pour être identique au paramétrage de wireguard **wg0.conf** |