sysops d585d53fa7 Write server config before starting WireGuard interface
wg-quick refused to start when /etc/wireguard/<iface>.conf didn't
exist yet - the case for any newly created or imported server before
someone manually hits "Apply Config". ServerServiceStart now
regenerates the config from current DB state first, reusing the same
logic ApplyServerConfig already had (extracted into
writeServerConfigToDisk).
2026-07-25 11:58:12 +02:00

wireguard-ui-multi

Native Multi-Server-Verwaltungsoberfläche für WireGuard. Läuft ohne Docker direkt als systemd-Service und verwaltet mehrere unabhängige WireGuard- Server-Interfaces (eigener Name, Port, Private Key, Subnetz, Peers, Einstellungen) über eine einzige Weboberfläche.

Schnellinstallation (Einzeiler)

Auf einem frischen Debian/Ubuntu-Host (als root):

curl -fsSL https://gitea.perlbach24.de/scripte/wireguard-ui-multi/raw/branch/main/bootstrap.sh | bash

Installiert Abhängigkeiten (Go, Node/yarn, wireguard-tools, nftables), baut Frontend-Assets + Binary, installiert nach /usr/local/bin/wireguard-ui und richtet den systemd-Service wireguard-ui-multi.service ein (nicht automatisch gestartet). Danach:

sudo systemctl enable --now wireguard-ui-multi.service

UI-Port: standardmäßig http://<host>:5000 (siehe BIND_ADDRESS in /etc/systemd/system/wireguard-ui-multi.service, um Port/Bind-Adresse zu ändern). Default-Login admin/admin — sofort ändern.

Hardware-Anforderungen

  • Betrieb: 1 vCPU, 128-256 MB RAM reichen (reines Go-Binary, JSON-Dateidatenbank)
  • Build aus Quellcode: Go-Toolchain + Node/yarn (Frontend-Assets), kein cgo/SQLite nötig

Update

cd /opt/wireguard-ui-multi-src
sudo ./update.sh

Holt neuesten Code, baut Frontend-Assets neu (falls package.json sich geändert hat) und Binary, installiert neu, startet den Dienst neu.

Proxmox LXC

sudo ./scripts/proxmox-install.sh --vmid 200 --hostname wireguard-ui-multi

Legt privilegierten LXC an (CAP_NET_ADMIN + /dev/net/tun Passthrough nötig für WireGuard), installiert alles hinein.

Funktionen

  • Mehrere WireGuard-Server-Interfaces parallel verwalten, je mit eigenem Namen, Interface, Port, Keypair, Subnetz und Peer-Liste
  • Zugriffskontrolle pro Server: nicht-Admin-User sehen/verwalten nur die ihnen zugewiesenen Server
  • Peer-Verwaltung inkl. QR-Code, Config-Download, E-Mail/Telegram-Versand
  • Web-UI mit Login/Session-Schutz, JSON-Datei-Datenbank (kein separater Datenbankserver nötig)

Umgebungsvariablen

Variable Beschreibung Default
BASE_PATH Subpfad, falls die App hinter einem Reverse Proxy unter einem Unterpfad läuft (z.B. /wireguard) N/A
BIND_ADDRESS Adresse:Port des Webinterfaces, oder unix:///pfad/zur/datei.socket für einen Unix-Socket 0.0.0.0:5000 (siehe systemd-Unit)
SESSION_SECRET Geheimer Schlüssel zur Verschlüsselung der Session-Cookies. Zufälligen Wert setzen N/A
SESSION_SECRET_FILE Optionaler Dateipfad für SESSION_SECRET N/A
SESSION_MAX_DURATION Max. Tage, die eine gemerkte Session erneuert wird 90
SUBNET_RANGES Unterteilung von Adressbereichen: Name:10.0.1.0/24; Name2:10.0.2.0/24 N/A
WGUI_USERNAME Login-Benutzername (nur zur DB-Initialisierung) admin
WGUI_PASSWORD Login-Passwort, wird automatisch gehasht (nur zur DB-Initialisierung) admin
WGUI_PASSWORD_FILE Optionaler Dateipfad für das Login-Passwort N/A
WGUI_PASSWORD_HASH Passwort-Hash statt Klartext-Passwort N/A
WGUI_PASSWORD_HASH_FILE Optionaler Dateipfad für den Passwort-Hash N/A
WGUI_ENDPOINT_ADDRESS Standard-Endpoint-Adresse für Clients (kann Port enthalten, z.B. bei NAT/Port-Forwarding) automatisch ermittelte öffentliche IP
WGUI_FAVICON_FILE_PATH Eigenes Favicon eingebettetes WireGuard-Logo
WGUI_DNS Standard-DNS-Server (kommagetrennt) 1.1.1.1
WGUI_MTU Standard-MTU 1450
WGUI_PERSISTENT_KEEPALIVE Standard Persistent Keepalive 15
WGUI_FIREWALL_MARK Standard-Firewall-Mark 0xca6c (51820)
WGUI_TABLE Standard-Table-Wert auto
WGUI_CONFIG_FILE_PATH Standard-Pfad der WireGuard-Config-Datei /etc/wireguard/wg0.conf
WGUI_LOG_LEVEL Log-Level: DEBUG, INFO, WARN, ERROR, OFF INFO
WG_CONF_TEMPLATE Eigenes wg.conf-Template (Datei), siehe templates/wg.conf in diesem Repo N/A
EMAIL_FROM_ADDRESS Absender-E-Mail-Adresse N/A
EMAIL_FROM_NAME Absendername WireGuard UI
SENDGRID_API_KEY SendGrid API-Key N/A
SENDGRID_API_KEY_FILE Optionaler Dateipfad für den SendGrid API-Key N/A
SMTP_HOSTNAME SMTP-Host 127.0.0.1
SMTP_PORT SMTP-Port 25
SMTP_USERNAME SMTP-Benutzername N/A
SMTP_PASSWORD SMTP-Passwort N/A
SMTP_PASSWORD_FILE Optionaler Dateipfad für das SMTP-Passwort N/A
SMTP_AUTH_TYPE PLAIN, LOGIN, NONE NONE
SMTP_ENCRYPTION NONE, SSL, SSLTLS, TLS, STARTTLS STARTTLS
SMTP_HELO Hostname für die HELO-Meldung localhost
TELEGRAM_TOKEN Telegram-Bot-Token zum Config-Versand N/A
TELEGRAM_ALLOW_CONF_REQUEST Erlaubt Clients, Configs per Bot-Nachricht anzufordern false
TELEGRAM_FLOOD_WAIT Minuten bis zur nächsten Config-Anfrage 60

Defaults für die Server-Konfiguration

Variable Beschreibung Default
WGUI_SERVER_INTERFACE_ADDRESSES Standard-Interface-Adressen (kommagetrennt) 10.252.1.0/24
WGUI_SERVER_LISTEN_PORT Standard-Listen-Port 51820
WGUI_SERVER_POST_UP_SCRIPT Standard PostUp-Skript N/A
WGUI_SERVER_POST_DOWN_SCRIPT Standard PostDown-Skript N/A

Defaults für neue Clients

Variable Beschreibung Default
WGUI_DEFAULT_CLIENT_ALLOWED_IPS CIDRs für Allowed IPs (kommagetrennt) 0.0.0.0/0
WGUI_DEFAULT_CLIENT_EXTRA_ALLOWED_IPS CIDRs für Extra Allowed IPs (kommagetrennt) N/A
WGUI_DEFAULT_CLIENT_USE_SERVER_DNS Bool (0/1/true/false/...) true
WGUI_DEFAULT_CLIENT_ENABLE_AFTER_CREATION Bool (0/1/true/false/...) true

Automatischer Neustart der WireGuard-Interfaces

wireguard-ui-multi schreibt nur die Config-Dateien; das Neustarten der WireGuard-Interfaces übernimmt systemd. Beispiel für ein Interface wg0:

Datei /etc/systemd/system/wgui.service:

[Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install]
RequiredBy=wgui.path

Datei /etc/systemd/system/wgui.path:

[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target

Aktivieren:

systemctl enable --now wgui.path wgui.service

Für weitere Server-Interfaces (z.B. wg-home, wg-rz) das gleiche Muster mit angepasstem Interface-Namen wiederholen.

Build aus Quellcode

./prepare_assets.sh   # Frontend-Assets bauen (benötigt yarn)
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o wireguard-ui .

Lizenz

MIT, siehe LICENSE.

S
Description
No description provided
Readme MIT
361 KiB
Languages
HTML 47.1%
Go 47%
JavaScript 3.1%
Shell 2.8%