Raspberry Pi mit WireGuard und Webinterface

24.05.2021 - install_script aktualisiert
07.04.2021 - install_script aktualisiert
21.02.2021 - install_script aktualisiert
02.08.2020 - angepasstes install_script, damit funktioniert es wieder
31.07.2020 - WireGuard Snapshot lässt sich nicht mehr kompilieren

wg-dashboard ist ein schickes Webinterface, um die Einrichtung von WireGuard und Verwaltung der Clients zu vereinfachen.
Anstatt das Terminal verwenden zu müssen, kann hier (fast) alles über das UI erledigt werden.

Ohne großen Aufwand erhält man einen WireGuard VPN Server mit grafischer Oberfläche.
Installiert wird auf einem Raspberry Pi 3 mit frisch aufgesetztem Raspberry Pi OS Lite.

wg-dashboard installieren (angepasstes script)

Änderungen:

  • WireGuard wird jetzt direkt aus den Sourcen kompiliert. (Ab Kernel >= 5.6 nicht mehr nötig!)
  • Debian und Ubuntu OS Unterstützung entfernt, nur noch Raspbian.
  • Port 3000 für den direkten Zugriff aktiviert.

Erfolgreich mit dem Raspberry Pi OS Lite Image getestet. (Image vom 04.03.2021, Kernel 5.10)

Bevor das script ausgeführt wird den Pi updaten und neu starten! (Kernel muss >= 5.6 sein.)

pi@wireguard:~ $ sudo apt-get update
pi@wireguard:~ $ sudo apt-get upgrade -y
pi@wireguard:~ $ sudo reboot

pi@wireguard:~ $ wget https://bachmann-lan.de/projects/wg-dashboard/install_wg-dashboard_rpi.sh
pi@wireguard:~ $ chmod +x install_wg-dashboard_rpi.sh
pi@wireguard:~ $ sudo ./install_wg-dashboard_rpi.sh

wg-dashboard installieren (original script, funktioniert nicht mehr)

Auf dem Pi einfach das install script ausführen. (Schaut man sich vorher mal das install_script.sh an, sieht man was installiert wird.)

pi@wireguard:~ $ curl https://raw.githubusercontent.com/wg-dashboard/wg-dashboard/master/install_script.sh | sudo bash

Nach ein paar Minuten ist alles erledigt.

====================================================================================

> Done! WireGuard and wg-dashboard have been successfully installed
> You can now connect to the dashboard via ssh tunnel by visiting:

                http://localhost:3000

> You can open an ssh tunnel from your local machine with this command:

                ssh -L 3000:localhost:3000 <your_vps_user>@<your_vps_ip>

> Please save this command for later, as you will need it to access the dashboard

====================================================================================

Das Webinterface ist nach der Installation nur durch einen SSH Tunnel erreichbar.

ssh -L 3000:localhost:3000 pi@raspi-ip     # auf dem Client den Tunnel öffnen
http://localhost:3000                      # auf dem Client das Webinterface aufrufen

Um auch einen direkten Zugriff zu erhalten muss die Firewall angepasst werden.

pi@wireguard:~ $ sudo ufw allow 3000
Rule added
Rule added (v6)

wg-dashboard

Neuen Admin Benutzer mit Passwort anlegen.

Server Settings

Peer Settings

Verzeichnisse und config Dateien.

/etc/wireguard/wg0.conf                  # WireGuard Konfiguration
/opt/wg-dashboard                        # wg-dashboard Verzeichnis
/opt/wg-dashboard/server_config.json     # wg-dashboard Server Settings und Peers

Tolles Projekt, aber leider seit dem 17.09.2019 unmaintained. Hoffentlich übernimmt das jemand!

Ich hab’s mir bisher aber nur mal zum ausprobieren installiert, hatte das System noch nicht produktiv im Einsatz.

26 Gedanken zu „Raspberry Pi mit WireGuard und Webinterface“

  1. Vielen vielen Dank Michael für diese Anleitung.
    Ich habe lange nach einer grafischen Oberfläche für WireGuard auf dem Raspi gesucht. Leider funktioniert dies trotz genauem Befolgen der Anleitung bei mit nicht. Und da ich klein in Linux ein Laie bin, kann ich den Fehler auch nicht entdecken. Ich habe auf dem Raspi 3 ganz frisch die aktuelle „Raspberry Pi OS (32-bit) with desktop and recommended software“ installiert und alle Updates einspielen lassen. Zum Schluss nur noch xrdp installiert. Danach habe ich sofort per RDP Deinen Befehl:
    pi@wireguard:~ $ curl https://raw.githubusercontent.com/wg-dashboard/wg-dashboard/master/install_script.sh | sudo bash
    im Terminal abgesetzt.

    Der Rasp werkelt dann auch ganz schön rum um dann leider mit folgender Meldung zu enden:
    In file included from /opt/WireGuard/src/main.c:9:
    /opt/WireGuard/src/queueing.h: In function ‘wg_reset_packet’:
    /opt/WireGuard/src/queueing.h:100:2: error: implicit declaration of function ‘skb_reset_tc’; did you mean ‘skb_reserve’? [-Werror=implicit-function-declaration]
    skb_reset_tc(skb);
    ^~~~~~~~~~~~
    skb_reserve
    cc1: some warnings being treated as errors
    make[2]: *** [scripts/Makefile.build:266: /opt/WireGuard/src/main.o] Fehler 1
    make[1]: *** [Makefile:1709: /opt/WireGuard/src] Fehler 2
    make: *** [Makefile:37: module] Fehler 2

    Was habe ich falsch gemacht? Wie kann das gelöst werden? Kannst Du mir helfen?

    Ich bin Laie im Linux-Bereich.

    Lieben Dank
    Frank L.

    Antworten
    • Hallo Frank.

      Habs gerade mal ausprobiert und erhalte den gleichen Fehler! :(
      Raspberry Pi OS (2020-05-27)
      Linux raspberrypi 5.4.51-v7+ #1327

      Du hast also nix falsch gemacht!
      Ich kann dir momentan aber nicht sagen was sich da geändert hat.

      Antworten
      • Vielen Dank für die Antwort. Da bin ich erleichtert dass es nicht an mir lag obwohl ich nicht wirklich durchblicke. Habe ich es recht verstanden dass Wireguard voher nicht installiert werden muss, sondern es mit dem installieren des Dashboards mit installiert wird?

        Zwischenzeitlich habe ich auf einem erneut frisch aufgesetztem RaspiOS Wireguard manuell installiert
        (https://www.bachmann-lan.de/raspberry-pi-mit-wireguard-als-vpn-server-mit-wireguard/).

        Danach habe ich versucht wg-dashboard zu installieren, leider ohne erfolg.
        Das Script endete nach einigen Minuten mit der Meldung:
        raspberrypi-kernel-headers ist schon die neueste Version (1.20200723-1).
        libelf-dev ist schon die neueste Version (0.180-1).
        libmnl-dev ist schon die neueste Version (1.0.4-3).
        ufw ist schon die neueste Version (0.36-6).
        Einige Pakete konnten nicht installiert werden. Das kann bedeuten, dass
        Sie eine unmögliche Situation angefordert haben oder, wenn Sie die
        Unstable-Distribution verwenden, dass einige erforderliche Pakete noch
        nicht erstellt wurden oder Incoming noch nicht verlassen haben.
        Die folgenden Informationen helfen Ihnen vielleicht, die Situation zu lösen:

        Die folgenden Pakete haben unerfüllte Abhängigkeiten:
        libc6-dev : Beschädigt: libgcc-8-dev (< 8.4.0-2~) aber 8.3.0-6+rpi1 soll installiert werden
        E: Fehler: Unterbrechungen durch pkgProblemResolver::Resolve hervorgerufen; dies könnte durch zurückgehaltene Pakete verursacht worden sein.

        OK, und da steige ich aus. Soviel Wissen habe ich dann nicht.
        Also ein Raspi von WG und einer halbwegs brauchbare grafische Oberfläche wäre für mich genau das Richtige.
        Nur hier bin ich fündig geworden.

        Antworten
        • Für das wg-dashboard install script darf vorher nichts installiert sein, wird alles automatisch erledigt.
          Das wg-dashboard kann auch nicht ohne weiteres über ein bestehends WireGuard System installiert werden.

          Lässt sich natürlich auch beides kombinieren, muss dann aber manuell konfiguriert und installiert werden.
          Lassen sich die WireGuard Module nicht kompilieren, liegt es immer an der installierten Kernel Version und den WireGuard Snapshots.

          Hab eine Lösung gefunden, Anleitung wurde erweitert.

          Antworten
  2. Vielen Dank dafür dass du dich da reingekniet hast. Ich habe jetzt ebenfalls das aktuelle Lite Image genutzt, das Script in / kopiert,
    laufen lassen und nach ein paar Minuten ist es mit einem Fehler abgebrochen.
    Hier die letzten Zeilen der Ausgabe:

    pi@raspberrypi:/ $ sudo bash install_script_wg-dashboard-rpi.sh
    …..
    Klone nach ‚wireguard-tools‘ …
    remote: Enumerating objects: 401, done.
    remote: Counting objects: 100% (401/401), done.
    remote: Compressing objects: 100% (381/381), done.
    remote: Total 2757 (delta 204), reused 9 (delta 9), pack-reused 2356
    Empfange Objekte: 100% (2757/2757), 600.48 KiB | 1021.00 KiB/s, Fertig.
    Löse Unterschiede auf: 100% (1827/1827), Fertig.
    make: Verzeichnis „/opt/wireguard-linux-compat/src“ wird betreten
    make[1]: Verzeichnis „/opt/wireguard-linux-compat/src“ wird betreten
    make[1]: *** /lib/modules/4.19.118-v7+/build: Datei oder Verzeichnis nicht gefunden. Schluss.
    make[1]: Verzeichnis „/opt/wireguard-linux-compat/src“ wird verlassen
    make: *** [Makefile:26: module] Fehler 2
    make: Verzeichnis „/opt/wireguard-linux-compat/src“ wird verlassen
    pi@raspberrypi:/ $

    Antworten
    • Da fehlte der reboot nach den updates.
      Lösch die beiden WireGuard Verzeichnisse unter /opt und führ das script nochmal aus.

      Antworten
      • Vielen Dank, das war es. Es funktioniert. das VPN steht :-)
        Alleine hätte ich dies nicht hinbekommen. Das ist mir alles zu hoch als Mausschubser.

        Antworten
  3. Wirklich gute Arbeit. Funktioniert perfekt.

    Zwei Anregungen zur Ergänzung des Artikels hätte ich noch:
    1. Hinweis zur Änderung der peer-config, falls der wireguard-server über dyndns erreichbar sein soll:
    Endpoint manuell auf „Endpoint = IP-desdynDNS:58210“ umschreiben.

    2. den Befehl zum automatischen starten/laden des servers auf dem raspi angeben:
    sudo systemctl enable wg-quick@wg0

    Antworten
  4. Hallo Herr Bachmann.

    ich hatte auf meinem pi4b bereits OMV (http:-Port 1224) und Pi-hole (Port 80) installiert .
    nach der Installation von wg-dashboard (Port 3000) war beides nicht mehr erreichbar.
    können diese 3 Applikationen nicht miteinander auf einem System agieren?
    falls doch, wie ist die korrekte Installtions-Reihenfolge und was muss man beachten?
    ich möchte meinen 4b gerne auslasten und benötige diese 3 Applikationen .
    Danke und Grüße

    Antworten
    • Neben WireGuard sollten natürlich auch noch andere Anwendungen möglich sein.
      Da ich so ein Setup nicht im Einsatz habe, kann ich dazu keine Angaben machen.

      Ich tippe eher mal das die nachinstallierte UFW Firewall dicht macht.
      Ggf. müssen die benötigten Ports explizit wieder freigegeben werden.
      sudo ufw allow PORT

      Antworten
  5. Hallo. Ich hatte dann lokal mittels „ip a“ nach den Netzwerkeinstellungen geschaut und gesehen das eth0 verschwunden war.
    Von extern war über ssh auch keine Verbindung mehr möglich.
    Haben sie eine Idee dazu ?
    Können sie das vllt mal bei sich nachstellen?
    Ich würde das Projekt gerne zu Ende bringen und wg mit website nutzen.

    Vielen dank!

    Antworten
      • Nachdem wg-Dashboard installiert wurde nach dem Neustart.
        Ich hatte es 2x probiert , also ist es reproduzierbar.
        Wie gesagt zuerst omv, dann pi-hole und dann wg-Dashboard. Alles mit einem aktuellen Raspian-OS auf einem 4b mit 4gb-RAM.

        Antworten
  6. Ist Euch nicht aufgefallen, dass das wg0 Interface nach dem Neustart verschwunden ist?

    Das hilft:
    sudo systemctl enable wg-quick@wg0.service
    sudo systemctl start wg-quick@wg0.service

    Danke für das Angepasste Script. Pack das doch bitte oben hin. Ich hatte erst das „(funktioniert nicht mehr)“ gemacht weil ich es überlesen habe.

    Beste Grüße, Chris

    Antworten
    • Hallo Chris,

      hab’s jetzt nach oben gepackt.

      Danke für dein Info, wg0 war nach einem reboot wirklich verschwunden!
      Werde mein script mal aktualisieren, wireguard-linux-compat wird mit dem aktuellen Kernel auch nicht mehr benötigt.

      Gruß, Michael…

      Antworten
  7. Ich habe mich gefreut das skript hier zu finden
    zumal ich virtuelle RaspberryOS in Proxmox laufen habe (da ich keine 2-3-4-5 Raspy´s laufen haben wollte
    leider bekomme ich jetzt eine Fehlermeldung
    Trotz RaspbianOS :-(

    Sorry, your operating system is not supported !
    The install script is only for the Raspberry Pi.

    Antworten
    • Was kommt denn bei dir raus, wenn du „lsb_release -is“ eingibst? Das script erwartet nämlich „Raspbian“ als Ausgabe.
      Im script könntest du das abändern, ob’s dann läuft ist dann die andere Frage. ;)

      Mir ist bisher auch noch nicht bekannt, das sich ein Raspberry Pi OS (ARM) unter Proxmox virtualisieren lässt???
      Was genau hast du denn da gemacht?

      Antworten
  8. Ich habe mich gefreut das skript hier zu finden. Klasse Arbeit. Läuft …… bis auf
    could not restart wireguard: COULD_NOT_SAVE_WIREGUARD_CONFIG
    wenn man auf „Save and restart“ klickt.
    Nach „sudo systemctl start wg-quick@wg0.service“ in der console gehts wieder.

    Antworten
    • Im script hatte ich zwar den wg0.service beim starten aktiviert, aber nicht explizit gestartet.
      Nach einem reboot hätte es dann spätestens funktionieren müssen.

      Werde ich anpassen, danke für die Info!

      Antworten
  9. nach dem reboot gehts ja, nur beim klick auf save und restart, nicht.
    habs jetzt nochmal neu aufgesetzt und plötzlich gehts, versteh ich zwar auch nicht,
    aber echt super Arbeit die du dir machst, toole Anleitung. Daumen hoch (alle)

    Antworten
  10. Stand heute, Raspi Os lite Image vom 04.03.2021, Kernel 5.10, voll upgegradet, hängt die Install mit einem „missing wg0.conf“:

    pi@raspberrypi:~ $ sudo ./install_wg-dashboard_rpi.sh
    — SNIP —
    Job for wg-quick@wg0.service failed because the control process exited with error code.
    See „systemctl status wg-quick@wg0.service“ and „journalctl -xe“ for details.

    pi@raspberrypi:~ $ 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: failed (Result: exit-code) since Mon 2021-05-24 10:44:59 WEST; 12s ago
    Process: 2052 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=1/FAILURE)
    Main PID: 2052 (code=exited, status=1/FAILURE)

    May 24 10:44:59 raspberrypi systemd[1]: Starting WireGuard via wg-quick(8) for wg0…
    May 24 10:44:59 raspberrypi wg-quick[2052]: wg-quick: `/etc/wireguard/wg0.conf‘ does not exist
    May 24 10:44:59 raspberrypi systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=1
    May 24 10:44:59 raspberrypi systemd[1]: wg-quick@wg0.service: Failed with result ‚exit-code‘.
    May 24 10:44:59 raspberrypi systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.
    lines 1-17/17 (END)

    Antworten
    • Mein Fehler! :(

      Der wg-quick@wg0.service darf nur aktiviert aber noch nicht gestartet werden, da noch keine wg0.conf existiert.
      Diese wird erst nach der Konfiguration der Server Settings im wg-dashboard erstellt. (Save and restart)

      Danke, hab ich aus dem script rausgenommen.

      Antworten
  11. Ihr habt Recht, eigentlich muss sogar das raus:
    systemctl enable wg-quick@wg0.service

    Zuerst muss nämlich im wg-dashboard die „Public Host / IP“ eingetragen werden und dann auf Save and restart gedrückt werden. Erst dann kommt der wg0 hoch.
    Und auch erst dann kann man den wg0.service aktivieren.

    Also vielleicht lieber am Ende des Scripts einen Hinweis dazu anzeigen:
    echo „Open wg-dashboard. Enter Public Host / IP. Click Save and restart.
    echo „Afterwards run here: sudo systemctl enable wg-quick@wg0.service

    Antworten
    • Gute Idee, könnte man mit in das script übernehmen und als zusätzliche Info ausgeben lassen.

      Ich glaube aber das der service vorher schon auf aktiviert gesetzt werden kann.
      Man darf ihn nur nicht starten, da die wg0.conf erst nach dem speichern erstellt wird.

      Werd ich bei Gelegenheit nochmal ausprobieren.

      Antworten

Schreibe einen Kommentar