wireguard-ui ist ein weiters Webinterface, um die Einrichtung von WireGuard und Verwaltung der Clients zu vereinfachen. Wird auch aktiv gepflegt, mein Favorit!
Für das Webinterface einfach die entsprechende binary herunterladen und auf dem Host ausführen.
Installiert wird auf einem Raspberry Pi 3 mit frisch aufgesetztem Raspberry Pi OS Lite. (64-bit, Kernel 6.1, Bookworm)
Installation
Benötigte Pakete installieren.
apt install -y wget iptables wireguard-tools
wireguard-ui installieren (bei mir nach /opt/wireguard-ui)
mkdir /opt/wireguard-ui wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-arm64.tar.gz tar xvfz wireguard-ui-v0.6.2-linux-arm64.tar.gz -C /opt/wireguard-ui/ rm wireguard-ui-v0.6.2-linux-arm64.tar.gz
systemd scripts erstellen
Diese beiden Services überwachen Veränderungen an der wg0.conf und starten den WireGuard Service neu.
/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
/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
Leere wg0.conf erstellen. Sonst startet der wgui.service mit einer Fehlermeldung, da noch keine wg0.conf existiert.
touch /etc/wireguard/wg0.conf
Services aktivieren und starten.
systemctl enable wgui.{path,service} systemctl start wgui.{path,service}
Status der Services.
systemctl status wgui.{path,service} ● wgui.path - Watch /etc/wireguard/wg0.conf for changes Loaded: loaded (/etc/systemd/system/wgui.path; enabled; preset: enabled) Active: active (waiting) since Sun 2024-02-25 12:25:05 CET; 16min ago Triggers: ● wgui.service Feb 25 12:25:05 pi systemd[1]: Started wgui.path - Watch /etc/wireguard/wg0.conf for changes. ○ wgui.service - Restart WireGuard Loaded: loaded (/etc/systemd/system/wgui.service; enabled; preset: enabled) Active: inactive (dead) since Sun 2024-02-25 12:27:19 CET; 14min ago TriggeredBy: ● wgui.path Process: 596 ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service (code=exited, status=0/SUCCESS) Main PID: 596 (code=exited, status=0/SUCCESS) CPU: 48ms Feb 25 12:25:07 pi systemd[1]: Starting wgui.service - Restart WireGuard... Feb 25 12:27:19 pi systemd[1]: wgui.service: Deactivated successfully. Feb 25 12:27:19 pi systemd[1]: Finished wgui.service - Restart WireGuard.
wireguard-ui starten und konfigurieren
cd /opt/wireguard-ui ./wireguard-ui Wireguard UI App Version : v0.6.2 Git Commit : 99104e429557a4cd6bda4b0c2550a656cdfe9bb7 Git Ref : refs/tags/v0.6.2 Build Time : 02-25-2024 11:42:42 Git Repo : https://github.com/ngoduykhanh/wireguard-ui Authentication : true Bind address : 0.0.0.0:5000 Email from : Email from name : WireGuard UI Custom wg.conf : Base path : / Subnet ranges : Valid subnet ranges: ⇨ http server started on [::]:5000
Das Webinterface kann jetzt im Browser aufgerufen werden. (http://ip-adresse:5000, Benutzer: admin, Passwort: admin)
Sollte ein login nicht möglich sein, wireguard-ui beenden nun nochmal neu starten.
Server konfigurieren.
Die beiden Up- und Down Scripte. Ggf. den Namen des Interfaces anpassen. Bei mir ist es eth0.
# Post Up Script iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # Post Down Script iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Clients erstellen.
Damit das Webinterface automatisch beim Start geladen wird, erstelle ich mir noch eine /etc/systemd/system/wgui-webui.service
[Unit] After=syslog.target network-online.target [Service] WorkingDirectory=/opt/wireguard-ui/ ExecStart=/opt/wireguard-ui/wireguard-ui ;if you want to run wireguard-ui on port 80 ;ExecStart=/opt/wireguard-ui/wireguard-ui --bind-address="0.0.0.0:80" PrivateTmp=yes Restart=always [Install] WantedBy=multi-user.target
Service aktivieren.
systemctl enable wgui-webui.service
System neustarten und kontrollieren ob wireguard-ui läuft.
systemctl status wgui-webui.service ● wgui-webui.service Loaded: loaded (/etc/systemd/system/wgui-webui.service; enabled; preset: enabled) Active: active (running) since Sun 2024-02-25 15:19:27 CET; 3h 33min ago Main PID: 457 (wireguard-ui) Tasks: 5 (limit: 19014) Memory: 6.3M CPU: 7.435s CGroup: /system.slice/wgui-webui.service └─457 /opt/wireguard-ui/wireguard-ui --bind-address=0.0.0.0:80 Feb 25 15:19:27 wireguard wireguard-ui[457]: Authentication : true Feb 25 15:19:27 wireguard wireguard-ui[457]: Bind address : 0.0.0.0:5000 --- SNIP ---
Datenverzeichnis
Nach dem ersten Start der wireguard-ui binary, wird das Verzeichnis /opt/wireguard-ui/db erstellt. Dort wird die Konfiguration gespeichert.
/opt/wireguard-ui# tree db/ db/ ├── clients │ ├── cndi115on21cff1p47fg.json │ ├── cndi135on21cff1p47g0.json │ └── cndi175on21cff1p47gg.json ├── server │ ├── global_settings.json │ ├── hashes.json │ ├── interfaces.json │ └── keypair.json ├── users │ └── admin.json └── wake_on_lan_hosts
IPv4 forwarding aktivieren
Auf dem WireGuard Server muss in der /etc/sysctl.conf IPv4 forwarding aktiviert werden.
sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Firewall Konfiguration
Der UDP Port 51820 muss an den internen VPN Server weitergeleitet werden. (hier für meinen MikroTik Router)
/ip firewall filter add action=accept chain=forward dst-port=51820 protocol=udp /ip firewall nat add action=dst-nat chain=dstnat dst-port=51820 in-interface=wan protocol=udp to-addresses=192.168.150.200 to-ports=51820
Client
Auf dem Smartphone kann der Tunnel jetzt über den QR-Code importiert werden und sollte sich mit unserem Server verbinden.
Hallo Michael,
vielen Dank für die verständliche Anleitung. Ich konnte die Installation nachvollziehen und zum laufen bringen. Gibt es hierzu eine Logdatei, die für weitere Statusmeldungen, z. B. über die Verbindungszeit und ein Versand per Mail heranziehen kann ?
Theo
Eine Logdatei gibt es nicht.
Da wird man sich selbst was erstellen müssen. Google mal nach “wireguard logging”.
Moin,
Hätte da mal ne Frage..
Läuft an sich super.. nur kann ich, wenn ich mit dem VPN verbunden bin, nicht auf mein Heimnetz (192.168.0.1) zugreifen..
Wenn ich im Webinterface noch 192.168.0.0/24 eintrage, habe ich mit VPN Verbunden – nur zugriff auf den VPN host, aber nicht den Rest der Maschienen..
Gibts da ne Möglichkeit das zu ändern?
Post Up Script und Post Down Script nicht eingetragen?
Hallo Michael,
vielen Dank für die Anleitung. Bei mir funktioniert leider die QR Code Generierung nicht. qrencode ist installiert.
Hast eine Idee was das sein könnte ?
Leider nein, funktioniert bei meiner Installation. (0.6.2)
qrencode ist bei mir _nicht_ installiert.
sorry, habs gefunden. Public und Preshared Key vorgegeben. Dann macht er keinen QR Code