Raspberry Pi mit WireGuard und WGDashboard Webinterface

WGDashboard ist ein weiters Webinterface, um die Einrichtung von WireGuard und Verwaltung der Clients zu vereinfachen.
Gute Alternative für das, leider nicht mehr weiterentwickelte, wg-dashboard. (mein Artikel dazu)

17.07.2022 - wgdashboard-install.sh (automatisches installer script)
16.07.2022 - Anleitung aktualisiert (WGDashboard 3.0.6)

Installiert wird auf einem Raspberry Pi 4 Model B mit einem frischen Raspberry Pi OS Lite. (Image: 04.04.2022, 64-bit, Kernel 5.15, Debian 11 bullseye)

WGDashboard installieren (installer script)

Wer es nicht manuell installieren möchte, kann gerne meinen neuen Installer nutzen und mal ausprobieren. ;)

wget https://bachmann-lan.de/projects/wgdashboard/wgdashboard-install.sh
chmod +x wgdashboard-install.sh
sudo ./wgdashboard-install.sh

Erfolgreich unter Raspberry Pi OS Lite und in einem Debian LXC Container getestet.

WGDashboard installieren (manuell)

Benötigten Pakete installieren.

apt install --no-install-recommends -y git iptables python3-pip libopenjp2-7 wireguard-tools

WGDashboard installieren.

cd /opt
git clone -b v3.0.6 https://github.com/donaldzou/WGDashboard.git wgdashboard
cd wgdashboard/src
chmod +x wgd.sh
./wgd.sh install
------------------------------------------------------------
| Starting to install WGDashboard                          |
| Upgrading pip                                            |
| Installing latest Python dependencies                    |
| WGDashboard installed successfully!                      |
| Enter ./wgd.sh start to start the dashboard              |
------------------------------------------------------------

Systemd Startskript /etc/systemd/system/wgdashboard.service erstellen.

[Unit]
After=syslog.target network-online.target
ConditionPathIsDirectory=/etc/wireguard

[Service]
WorkingDirectory=/opt/wgdashboard/src
ExecStart=/usr/bin/python3 /opt/wgdashboard/src/dashboard.py
PrivateTmp=yes
Restart=always

[Install]
WantedBy=multi-user.target

Dienste beim booten aktivieren.

systemctl enable wg-quick@wg0.service
systemctl enable wgdashboard.service

IP forwarding aktivieren.

sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

WireGuard /etc/wireguard/wg0.conf erstellen.

# privatekey erstellen und in die wg0.conf einfügen
wg genkey
6Fh5foC38RcvH9HB+6bzVdl3LXva0OEntSOsYuUO5mE=

# wg0.conf
[Interface]
Address = 10.10.10.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = 6Fh5foC38RcvH9HB+6bzVdl3LXva0OEntSOsYuUO5mE=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Dienste starten.

systemctl start wg-quick@wg0.service
systemctl start wgdashboard.service

Dienste überprüfen.

### WireGuard
systemctl status wg-quick@wg0.service
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2022-02-12 20:57:50 CET; 5s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 2873 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 2873 (code=exited, status=0/SUCCESS)
        CPU: 194ms

Feb 12 20:57:49 rpi systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Feb 12 20:57:49 rpi wg-quick[2873]: [#] ip link add wg0 type wireguard
Feb 12 20:57:49 rpi wg-quick[2873]: [#] wg setconf wg0 /dev/fd/63
Feb 12 20:57:49 rpi wg-quick[2873]: [#] ip -4 address add 10.10.10.1/24 dev wg0
Feb 12 20:57:49 rpi wg-quick[2873]: [#] ip link set mtu 1420 up dev wg0
Feb 12 20:57:49 rpi wg-quick[2873]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Feb 12 20:57:50 rpi systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

### WGDashboard
systemctl status wgdashboard.service
● wgdashboard.service
     Loaded: loaded (/etc/systemd/system/wgdashboard.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-02-12 20:58:08 CET; 7s ago
   Main PID: 2929 (python3)
      Tasks: 1 (limit: 1597)
        CPU: 1.537s
     CGroup: /system.slice/wgdashboard.service
             └─2929 /usr/bin/python3 /opt/wgdashboard/src/dashboard.py

Feb 12 20:58:08 rpi systemd[1]: Started wgdashboard.service.
Feb 12 20:58:10 rpi python3[2929]:  * Serving Flask app 'WGDashboard' (lazy loading)
Feb 12 20:58:10 rpi python3[2929]:  * Environment: production
Feb 12 20:58:10 rpi python3[2929]:    WARNING: This is a development server. Do not use it in a production deployment.
Feb 12 20:58:10 rpi python3[2929]:    Use a production WSGI server instead.
Feb 12 20:58:10 rpi python3[2929]:  * Debug mode: off
Feb 12 20:58:10 rpi python3[2929]:  * Running on all addresses.
Feb 12 20:58:10 rpi python3[2929]:    WARNING: This is a development server. Do not use it in a production deployment.
Feb 12 20:58:10 rpi python3[2929]:  * Running on http://192.168.50.176:10086/ (Press CTRL+C to quit)

Sollte der WGDashboard Service nicht starten, einfach mal wgd.sh start ausführen. Dann sieht man eher wo es klemmt.

cd /opt/wgdashboard/src
./wgd.sh start
------------------------------------------------------------
| Starting WGDashboard with Gunicorn in the background.    |
Failed to read config file: /opt/wgdashboard/src/gunicorn.conf.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/gunicorn/app/base.py", line 111, in get_config_from_filename

WGDashboard

Das Webinterface sollte jetzt unter http://raspi-ip:10086 erreichbar sein. (username admin, password admin)
In den Settings die globalen Einstellungen anpassen, da diese beim anlegen der Peers übernommen werden.

Der Rest sollte selbsterklärend sein. Peers anlegen, etc.

WGDashboard updaten

Ein update von der 3.0.5 auf die 3.0.6 hat problemlos funktioniert.

systemctl stop wgdashboard.service

cd /opt/wgdashboard/src
./wgd.sh update
------------------------------------------------------------
| Are you sure you want to update to the v3.0.6? (Y/N): Y  |
| Shutting down WGDashboard...                             |
| Downloading v3.0.6 from GitHub...                        |
| Upgrading pip                                            |
| Installing latest Python dependencies                    |
| Update Successfully!                                     |
------------------------------------------------------------

systemctl start wgdashboard.service

WGDashboard mods

Mich stört der sich bewegende Text beim Mouseover im linken Menü. Lässt sich natürlich ändern.

# /opt/wgdashboard/src/static/css/dashboard.css (Zeile 55)
.nav-link:hover {
    /* padding-left: 30px; */
    background-color: #dfdfdf;
}

6 Gedanken zu „Raspberry Pi mit WireGuard und WGDashboard Webinterface“

  1. Hallo,

    super Info und tolles Skript.

    Kann es sein, dass im Skript an zwei Stellen sed -i_ORG steht? Das sieht nicht ganz korrekt aus…
    sed -i_ORG ‘s/’${ipaddr}’/VPN.YOUR-SERVER.DE/’ wg-dashboard.ini
    sed -i_ORG ‘s/padding-left: 30px;/\/* padding-left: 0px *\//’ /opt/wgdashboard/src/static/css/dashboard.css

    Ist das so gewollt? Bei mir klappt das nicht.

    Danke und viele Grüße,
    Michael

    Antworten
    • Mit sed -i_ORG wird vor dem ändern eine Sicherungskopie der Datei mit Endung _ORG erstellt. Ist korrekt.
      Hier waren zwei Hochkomme zuviel /’${ipaddr}’/

      Skript wurde aktualisiert.

      Danke und Gruß, Michael…

      Antworten
  2. Hey, ich habe eben WireGuard mit dem Script installiert.
    Da ich ein vSphere nutze, musste ich den Netzwerkadapter auf ens192 umstellen.

    Nach Portfreigabe per UDP im Router, Konfiguration des DSN und remote endtpoint ( dyndns Adresse) funktioniert der Handshake wunderbar.

    Doch leider komme ich nur auf meinen Router und an keine andere Adresse im Netzwerk.
    Woran kann das liegen?

    Antworten
    • Schwer zu sagen.

      Ist in der /etc/sysctl.conf IP forwarding aktiviert?
      Sind in der /etc/wireguard/wg0.conf die beiden iptables Einträge korrekt?
      AllowedIPs in der client.conf richtig gesetzt?

      Antworten
  3. Hi erstmal,

    keine Ahnung, ob hier noch jemand liest aber was mache ich bei folgender Fehlermeldung:

    root@LAIRE:/home/pi/wgdashboard/src# ./wgd.sh start
    ————————————————————
    | Starting WGDashboard with Gunicorn in the background. |
    Failed to read config file: /home/pi/wgdashboard/src/gunicorn.conf.py
    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/gunicorn/app/base.py”, line 111, in get_config_from_filename
    spec.loader.exec_module(mod)
    File “”, line 940, in exec_module
    File “”, line 241, in _call_with_frames_removed
    File “/home/pi/wgdashboard/src/gunicorn.conf.py”, line 2, in
    import dashboard
    File “/home/pi/wgdashboard/src/dashboard.py”, line 23, in
    import ifcfg
    ModuleNotFoundError: No module named ‘ifcfg’
    | Log files is under log/ |
    ————————————————————

    Gruß Chris

    Antworten
    • Unter dem aktuellen PI OS (oder python 3.11), scheint das ./wgd.sh install nicht alle requirements zu installieren.

      probier mal:
      /home/pi/wgdashboard/src# python3 -m pip install -U -r requirements.txt --break-system-packages

      Antworten

Schreibe einen Kommentar