Wg Gen Web
Simple Web based configuration generator for WireGuard.
Why another one ?
All WireGuard UI implementations are trying to manage the service by applying configurations and creating network rules. This implementation only generates configuration and its up to you to create network rules and apply configuration to WireGuard. For example by monitoring generated directory with inotifywait.
The goal is to run Wg Gen Web in a container and WireGuard on host system.
- Self-hosted and web based
- Automatically select IP from the netowrk pool assigned to client
- QR-Code for convenient mobile client configuration
- Sent email to client with QR-code and client config
- Enable / Disable client
- Generation of
wg0.confafter any modification
- Pretty cool look
The easiest way to run Wg Gen Web is using the container image
docker run --rm -it -v /tmp/wireguard:/data -p 8080:8080 -e "WG_CONF_DIR=/data" vx3r/wg-gen-web:latest
Docker compose snippet
version: '3.6' services: wg-gen-web: image: vx3r/wg-gen-web:latest container_name: wg-gen-web restart: unless-stopped expose: - "8080/tcp" environment: - WG_CONF_DIR=/data - WG_INTERFACE_NAME=wg0.conf - SMTP_HOST=smtp.gmail.com - SMTP_PORT=587 - SMTP_USERNAMEfirstname.lastname@example.org - SMTP_PASSWORD="*************" - SMTP_FROM="Wg Gen Web <email@example.com>" volumes: - /etc/wireguard:/data
Please note that mapping
/data inside the docker, will erase your host's current configuration. If needed, please make sure to backup your files from
A workaround would be to change the
WG_INTERFACE_NAME to something different, as it will create a new interface (
wg-auto.conf for example), note that if you do so, you will have to adapt your daemon accordingly.
Directly without docker
Fill free to download latest artefacts from my GitLab server:
Put everything in one directory, create
.env file with all configurations and run the backend.
Automatically apply changes to WireGuard
systemd.path monitor for directory changes see systemd doc
# /etc/systemd/system/wg-gen-web.path [Unit] Description=Watch /etc/wireguard for changes [Path] PathModified=/etc/wireguard [Install] WantedBy=multi-user.target
.path will activate unit file with the same name
# /etc/systemd/system/wg-gen-web.service [Unit] Description=Restart WireGuard After=network.target [Service] Type=oneshot ExecStart=/usr/bin/systemctl restart firstname.lastname@example.org [Install] WantedBy=multi-user.target
Which will restart WireGuard service
For any other init system, create a daemon running this script
#!/bin/sh while inotifywait -e modify -e create /etc/wireguard; do wg-quick down wg0 wg-quick up wg0 done
How to use with existing WireGuard configuration
After first run Wg Gen Web will create
server.json in data directory with all server informations.
Feel free to modify this file in order to use your existing keys
What is out of scope
- Generation or application of any
- Application of configuration to WireGuard by Wg Gen Web itself
- Multi-user support behind Authelia (suggestions / thoughts are welcome)
Send configs by email to client