WireGuard-Installation auf dem USG

  • Was wollen wir?

    Sicheren Zugriff auf das (private) Netz hinter einem USG-Pro-4 (UGW4) oder USG-3P (UGW3).


    Warum wollen wir das?

    Wie die Vergangenheit deutlich gezeigt hat haben wenigstens einige private Geräte wie z.B. NAS oder Controller zur Heimautomatisierung oder ähnliches immer wieder Sicherheitslücken, welche auch schon erfolgreich ausgenutzt wurden. So etwas passiert häufig, wenn diese Geräte für alle und jeden über eine simple Portfreigabe im Internet erreichbar und nur mit den "internen Sicherheitsmechanismen" geschützt sind, welche oft nicht ausreichen. Vielleicht möchte man auch einen Dienst aus dem (heimischen) LAN verwenden, welchen man nicht veröffentlichen möchte oder sollte, wie z.B. ein pi-hole.

    Daher sollten solche Services nicht direkt von außen erreicht werden können oder man möchte das einfach nicht.

    Leider werden wohl weder das USG-Pro-4 noch das USG-3P das dafür nötige Update von Ubiquiti erhalten, was ich sehr schade finde. :frowning_face:


    Aber auch dafür gibt es eine Lösung, welche ich schon länger im Einsatz habe. :smiling_face: Und jetzt übersteht sie sogar einen Reboot und auch ein Provisioning - und vielleicht auch ein Update. Das konnte ich aber nicht testen, da ich dafür nicht genug Hardware habe. :winking_face:


    Und wie geht das genau?

    Hinweis: Ich gehe davon aus, dass

    1. rudimentäre Linux-Kenntnisse vorhanden sind, um sich auf dem USG "fortzubewegen" (cd, ls u.ä.).
    2. das USG selbst Zugriff auf das Internet hat.
    3. klar / bekannt ist, wie man eine ssh-Verbindung zum USG aufbauen kann.
    4. der Editor vi benutzt werden kann.
    5. klar / bekannt ist, wie man per (Win)scp Dateien auf das USG übertragen kann (Alternative zu 3. & 4.).
    6. es keine Überschneidungen bei den (V)LANs aller beteiligten Parteien gibt.
    7. nur Site-2-Site-Verbindungen hergestellt werden sollen (Road-Worrior-Szenario folgt).
    8. alle Netze mit allen Netzen kommunizieren können sollen.

    Folgende Netzwerk-Konfigurationen nehme ich für meine Konfiguration an:

    • Alice
      • Netze
        • 10.10.101.0/24
        • 10.10.105.0/24
      • WireGuard Gateway-IPs
        • 192.168.179.5/32 (Alice <-> Bob)
        • 192.168.179.9/32 (Alice <-> Charlie)
      • private key: alice_private_key (Datei: /config/auth/wireguard/wg_private.key)
      • public key: alice_public_key (Datei: /config/auth/wireguard/wg_public.key)
      • DNS: alice.ubiquiti-networks-forum.de
    • Bob
      • Netz
        • 192.168.2.0/24
      • WireGuard Gateway-IPs
        • 192.168.179.6/32 (Bob <-> Alice)
        • 192.168.179.13/32 (Bob <-> Charlie)
      • private key: bob_private_key (Datei: /config/auth/wireguard/wg_private.key)
      • public key: bob_public_key (Datei: /config/auth/wireguard/wg_public.key)
      • DNS: bob.ubiquiti-networks-forum.de
    • Charlie
      • Netze
        • 10.10.191.0/24
        • 10.10.192.0/24
      • WireGuard Gateway-IPs
        • 192.168.179.10/32 (Charlie <-> Alice)
        • 192.168.179.14/32 (Charlie <-> Bob)
      • private key: charlie_private_key (Datei: /config/auth/wireguard/wg_private.key)
      • public key: charlie_public_key (Datei: /config/auth/wireguard/wg_public.key)
      • DNS: charlie.ubiquiti-networks-forum.de
    • Transfer-Netze
      • Alice <-> Bob: 192.168.179.4/30
      • Alice <-> Charlie: 192.168.179.8/30
      • Bob <-> Charlie: 192.168.179.12/30

    Ich werde hier nicht auf die Konfiguration der Firewall eingehen, um z.B. VLANs gegeneinander abzusichern o.ä.


    Freundlicherweise hat WireGuard selbst auf GitHub schon mehr oder weniger alles bereitgestellt, um das umzusetzen.

    Bevor wir aber "ins Eingemachte" gehen sollten wir uns im GitHub-Repository umsehen, unter welchem Link das aktuelle WireGuard-Debian-Paket zu bekommen ist. Dabei hilft ein Blick auf DIESE Seite. Hier sind alle Releases für die unterstützten Geräte gelistet. Das aktuelle Release ist vom 02. Juli 2022 - ja: auch schon 'was älter. Hier die aktuellen Links:


    Und los geht's auf den Reitern oben:

    1. Server vorbereiten
    2. Server konfigurieren



    Disclaimer:

    Alle Anleitungen/Tutorials sind nach bestem Wissen und Gewissen verfasst, gehen immer von den definierten Software/Firmware-Versionen aus und sind auf das englische GUI ausgelegt.

    Es gibt keine Garantie auf Erfolg. Im Falle eines Misserfolges hilft aber die Community hier sicherlich weiter.

    Keiner der Autoren oder der Betreiber des Forums ist für die aus der Nutzung resultierenden Probleme/Herausforderungen verantwortlich.

    Jegliche hier beschriebenen Schritte erfolgen ausnahmslos in eigener Verantwortung des Durchführenden.

    Eltern haften für ihre Kinder.

Zunächst bereiten wir die WireGuard-Server vor, um sie dann zu konfigurieren.

Hier werden wir

  1. WireGuard herunterladen und installieren und
  2. das Schlüssel-Paar aus privatem und öffentlichem Schlüssel generieren.


Nachdem man sich via ssh am USG angemeldet hat und zum Benutzer root geworden (sudo su -) ist kann es auch schon losgehen.

Um sich den Download zu "sparen" könnte man mit einem der folgenden Befehle prüfen, ob WireGuard schon / noch auf dem USG installiert ist:

Code
root@USG:~# which wg
root@USG:~# wg show

Das kann man sich natürlich sparen, wenn man weiß, dass WireGuard (noch) nicht installiert ist. :winking_face:


Ich habe das notwendige Paket mit dem folgenden Befehl für mein UniFi-Gateway-4 nach /tmp/wg.deb heruntergeladen und im Anschluss daran installiert:

Code
curl -sL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20220627-1/ugw4-v1-v1.0.20220627-v1.0.20210914.deb -o /tmp/wg.deb && dpkg -i /tmp/wg.deb

Nun sollten die oben genannten Befehle eine andere Ausgabe bringen:

Damit ist nun klar, dass WireGuard installiert ist und auch verwendet werden kann.


Als nächstes muss wenigstens ein Schlüsselpaar - bestehend aus private key (gaaaaaanz wichtig und sicher aufbewahren) und dem zugehörigen public key - für jedes am VPN beteiligte Gateway erzeugt werden. Das kann gleich auf dem USG gemacht werden:

Code
cd /config/auth
umask 077
mkdir wireguard
cd wireguard
wg genkey > wg_private.key
wg pubkey < wg_private.key > wg_public.key

Die Dateinamen für den private key (hier: wg_private.key) und den public key (hier: wg_public.key) sind frei wählbar, sollten aber der Einfachheit halber nur aus den Buchstaben a-z und den Ziffern 0-9 und _ oder - bestehen und am besten keine Leerzeichen (sog. white spaces) beinhalten.


Das Schlüsselpaar sollte unbedingt unter /config/auth gespeichert werden, da dieser Pfad einen Reboot übersteht. Um auch nach einem Update oder Schlimmeren alles zusammen zu haben sollte man wenigstens den private key auch nochmal sicher an einem anderen Ort außerhalb des USGs aufbewahren - der public key läßt sich immer wieder aus dem private key ableiten. Es handelt sich hierbei um symmetrische Schlüssel. Die erzeugten Schlüssel-Dateien kann man sich einfach mit cat /config/auth/wireguard/wg_private.key und cat /config/auth/wireguard/wg_public.key anzeigen lassen und wegsichern.



Disclaimer:

Alle Anleitungen/Tutorials sind nach bestem Wissen und Gewissen verfasst, gehen immer von den definierten Software/Firmware-Versionen aus und sind auf das englische GUI ausgelegt.

Es gibt keine Garantie auf Erfolg. Im Falle eines Misserfolges hilft aber die Community hier sicherlich weiter.

Keiner der Autoren oder der Betreiber des Forums ist für die aus der Nutzung resultierenden Probleme/Herausforderungen verantwortlich.

Jegliche hier beschriebenen Schritte erfolgen ausnahmslos in eigener Verantwortung des Durchführenden.

Eltern haften für ihre Kinder.

Nachdem nun

  1. WireGuard auf den Servern (USGs) installiert ist und
  2. ein Schlüssel-Paar auf jedem Server generiert wurde

können wir uns um die Konfiguration des Servers selbst kümmern.


Diese Konfiguration muss sich natürlich bei den Beteiligten (hier: Alice, Bob & Charlie) an einigen Stellen unterscheiden:

  • es können nicht beide Server im Transfer-Netz dieselbe IP-Adresse haben - das geht schlicht nicht,
  • Alice wird bei Bob keine IPs von Charlie erreichen können - auch nicht via Bob, quasi als Fall-Back-Lösung und
  • jede Site-2-Site-Verbindung läuft auf einem anderen Port.


Als erstes bilde ich hier die Beispiel-Konfiguration aus dem WireGuard-GitHub-Repo ab, danach folgen die Konfigurationen (config.gateway.json) für die Server bei Alice, Bob und Charlie:

Verbindung zwischen Alice und Bob:

Code: config.gateway.json von Alice zu Bob
Folgt...
Code: config.gateway.json von Bob zu Alice
Folgt...

Verbindung zwischen Alice & Bob, Alice & Charlie, Bob & Charlie (Full-Mesh):

Kommentare 9

  • Gibt es da inzwischen schon Erfahrungswerte ob die Konfiguration/Installation ein Firmware-UG übersteht?

  • Hallo Razor.

    Vielen Dank für diese Info.

    Wie könnte man es umsetzen um per Wireguard VPN Client von einem Android Handy aus auf das Netz einer Unifi USG 4 Pro zu kommen?


    Könntest Du hier evtl. helfen?


    Vielen Dank.

    Grüße

    Alain

    • Hallo Alho und willkommen an Board.


      DAS steht auch bei mir noch aus zu adaptieren. Ich habe jetzt für mich noch das Problem gelöst, dass nach dem Provisionieren immer alles weg war, da ich das noch nicht in meine config.gateway.json überführt hatte.


      Das hat aber nun hervorragend geklappt und übersteht auch Reboots und nun freue ich mich schon auf diese neue Aufgabe.


      Du kannst ja gern schon einen Blick auf meinen UniFi-Stuff werfen: https://github.com/razorworks/unifi-stuff/ :clinking_glasses:

    • Klasse. Würde mich freuen, wenn Du hier eine Lösung finden könntest.

      Schönes Wochenende


      Alain :smiling_face::thumbs_up:

    • Hi razor.

      Gibt’s schon Ideen oder Neuigkeiten?

      Grüße Alain

      Gefällt mir 1
    • Moin Alho,


      jo, habe ich mittleriwele auch gelöst - als Split-Tunnel und mit "all-traffic" endlich auch.


      Das ist aktuell aber leider weder update- noch reboot-fest. Ich bin noch dran.

    • Hi Razor.

      Hast Du schon Möglichkeiten gefunden, es reboot-fest zu machen?

      Schöne Grüße

  • Vielen Dank für die wirklich gute und ausführliche Beschreibung.


    mir fehlt nur noch: wo wird die config.gateway.json gespeichert, auf der USG oder im CloudKey und in welchem Verzeichnis?


    Vielen Dank für eine Rückmeldung


    Uwe

    • Hallo,


      Ubiquiti hat das HIER zusammengefasst.


      Kurz: die Datei liegt auf dem Controller und wird beim Provisionieren auf das Gateway übertragen, sodass dieses damit umgehen kann.

      Am einfachsten lädst Du ein beliebiges Bild als Gebäudeplan (im Controller auf MAP wechseln und dort von Topology auf floor plan umstellen) über den Controller hoch. Damit werden dann die nötigen Verzeichnisse erstellt. Wenn Du nur eine Site im Controller verwaltest, dann müsste die config.gateway.json unter /srv/unifi/data/sites/default/ liegen.