1
1
Fork 0
mirror of https://github.com/vx3r/wg-gen-web.git synced 2024-06-02 02:56:04 +02:00
Simple Web based configuration generator for WireGuard
Go to file
vx3r 6cafb97e31 issue #8, find available IP on the fly, not from complete list 2020-02-17 13:12:22 +09:00
.github/workflows Github workflow to build multi arch docker image, thx to zmingxie 2020-02-07 15:15:39 +09:00
api organise backend code / frontend combobox / edit allowed ips 2020-02-05 10:53:53 +09:00
core specify ip address / proper error validation in backend / refactor 2020-02-06 13:30:36 +09:00
model specify ip address / proper error validation in backend / refactor 2020-02-06 13:30:36 +09:00
storage organise backend code / frontend combobox / edit allowed ips 2020-02-05 10:53:53 +09:00
template PreUp, PostUp, PreDown, PostDown added 2020-02-05 11:57:43 +09:00
ui issue #8, find available IP on the fly, not from complete list 2020-02-17 13:12:22 +09:00
util issue #8, find available IP on the fly, not from complete list 2020-02-17 13:12:22 +09:00
.env logo, send email 2020-02-03 16:19:24 +09:00
.gitignore Initial commit 2020-01-30 15:45:49 +09:00
.gitlab-ci.yml Github workflow to build multi arch docker image, thx to zmingxie 2020-02-07 15:15:39 +09:00
Dockerfile Github workflow to build multi arch docker image, thx to zmingxie 2020-02-07 15:15:39 +09:00
LICENSE-WTFPL Initial commit 2020-01-30 15:45:49 +09:00
README.md Github workflow to build multi arch docker image, thx to zmingxie 2020-02-07 15:15:39 +09:00
go.mod DockerFile best practices 2020-02-06 15:07:15 +09:00
main.go DockerFile best practices 2020-02-06 15:07:15 +09:00
wg-gen-web_cover.png logo, send email 2020-02-03 16:19:24 +09:00
wg-gen-web_screenshot.png organise backend code / frontend combobox / edit allowed ips 2020-02-05 10:53:53 +09:00

Wg Gen Web

Simple Web based configuration generator for WireGuard

Simple Web based configuration generator for WireGuard.

pipeline status Go Report Card Gitlab pipeline status (self-hosted) License: WTFPL Build multi-arch Docker Images via buildx GitHub last commit Docker Pulls GitHub go.mod Go version GitHub code size in bytes

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.

Features

  • Self-hosted and web based
  • Automatically select IP from the netowrk pool assigned to client
  • QR-Code for convenient mobile client configuration
  • Enable / Disable client
  • Generation of wg0.conf after any modification
  • Dockerized
  • Pretty cool look

Screenshot

Running

Docker

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_USERNAME=account@gmail.com
      - SMTP_PASSWORD="*************"
      - SMTP_FROM="Wg Gen Web <account@gmail.com>"
    volumes:
      - /etc/wireguard:/data

Please note that mapping /etc/wireguard to /data inside the docker, will erase your host's current configuration. If needed, please make sure to backup your files from /etc/wireguard.

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

Using systemd

Using 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

This .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 wg-quick@wg0.service

[Install]
WantedBy=multi-user.target

Which will restart WireGuard service

Using inotifywait

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 iptables or nftables rules
  • Application of configuration to WireGuard by Wg Gen Web itself

TODO

  • Multi-user support behind Authelia (suggestions / thoughts are welcome)
  • Send configs by email to client

License