VPN mittels OPNSense

Na, wer sagts denn :slight_smile:
Natürlich geht es
https://docs.opnsense.org/development/api/plugins/wireguard.html

Ich bau das mal testweise in meiner Landingspage ein, aber es sollte auch in der WebUI problemlos möglich sein.

Hallo Michael,

nein, ich hatte ja nie eine 7er, weil seit 2018 aus bekanntem Grund keine LMN mehr.

so war das in der LMN 5 und 6.

Viele Grüße
Steffen

ok – aber das WebUI hättest du ja trotzdem irgendwo her kennen können … aber wie auch immer.

Das ist doch ein sehr guter Ansatzpunkt :+1: Wenn das mit Deiner Landingpage funktioniert, wäre es mir natürlich auch recht :slight_smile:

Viele Grüße,
Michael

Mein Plan wäre jetzt folgender:

  1. User meldet sich an der Landingpage an
  2. User drückt auf „VPN Key generieren“, dadurch wird ein Keypaar generiert und der Publickey wird in der opnsense eingetragen.
  3. Der User bekommt einen Qr-Code (oder download) angezeigt um den Key und die Einstellungen zu importieren

Ich denke, das sollte klappen.
(Das Generieren des Private Keys auf dem Server ist zwar nicht die Feine Art, aber an der Stelle meiner Meinung nach unbedenklich)

EDIT: Man könnte die Keys auch im Browser generieren, aber das ist out of scope für das Proof of concept in der landingpage:
https://git.zx2c4.com/wireguard-tools/tree/contrib/keygen-html/wireguard.js

VG, Dorian

@Arnaud Wäre das auf lange Sicht auch was, das in die WebUI könnte?

Hallo,

Das muss ich in Details anschauen, z.B. „in opnsense eintragen“, aber es ist vielleicht machbar, habe ich schon teilweise für Ajenti bearbeitet.
Das diskutieren wir zusammen in Entwicklerrunde :wink:
Was für mich ein bisschen schwierig ist, ist 36h pro Tag zu arbeiten, aber ich tue mein bestens :slight_smile:

Gruß

Arnaud

Das dürfte sich auf eine Post-request beschränken :slight_smile:

Das verstehe ich vollkommen, deshalb mach ich es erstmal in der Landingpage, dann kann ich dir genau sagen, wie es funktioniert :wink:

VG, Dorian

Der Plan klingt super! Ich habe damals meinen Wireguard-Zugang auf meinem Linux-Client zu Hause einfach importiert und auf dem Smartphone den QR-Code scannen lassen. Die App heißt übrigens --Überraschung!-- WireGuard.
Ich will damit nur sagen: Es werden tatsächlich beide Möglichkeiten benutzt und es funktionierten bei mir auch beide Wege ootb!

Für den Gebrauch auf dem Smartphone wollte ich nochmal die Möglichkeit ansprechen, den gesamten Traffic (IPv4 und IPv6) durch den VPN-Tunnel zu routen … damit ist man mit dem eigenen Gerät in fremden WLANs nach meinem Verständnis relativ sicher.

Wenn die Wireguard-Zugänge irgendwann mal im WebUI „verwaltet“ werden können sollen, müsste man da sowas haben wie damals im IPFire: aktivert – deaktiviert für einzelne User?!

Viele Grüße und danke für Eure ganze Arbeit!
Michael

Hi Michael,

Ich habe WireGuard heute mal ausprobiert und das Ergebnis ist eher so lala:

  1. Ich find es ist deutlich komplexer, es einzurichten, man muss erst ein eigenes Zertifikat generieren, um sich überhaupt verbinden zu können, bei OpenVPN lädt man nur das Serverzertifikat runter und kann sich sofort mit dem eigenen Account anmelden, das ist IMO deutlich nutzerfreundlicher.
  2. Ich finde die Bedienung deutlich weniger intuitiv als bei OpenVPN. Was mich am meisten stört, ist folgendes: Man bekommt keine(!!) Fehlermeldung, wenn die Verbindung fehlschlägt. Das finde ich aus Endnutzersicht schlecht, da nicht klar ersichtlich ist, ob man jetzt verbunden ist, oder nicht.
  3. Ich konnte keine Verbesserung in der Geschwindigkeit gegenüber OpenVPN feststellen.
    Mit OpenVPN bekomme ich, wenn ich eine Datei kopiere, 1,3 Mbyte/s und bei WireGuard bekomme ich 1,2. Das ist zugegebenermaßen generell ziemlich niedrig, aber unser Server hängt im Moment auch nur an einer 50mbit Leitung.
    Deshalb würde ich nochmal jemand anderen bitten, das zu testen. (Mit aktuellen Versionen von OpenVPN und WireGuard, vielleicht hat sich da auch einfach in den letzten Jahren ein bisschen was geändert).

VG, Dorian

Hi Dorian,
:thinking: ich sehe es genau umgekehrt und finde Wireguard deutlich einfacher in der Handhabung. Zu Hause habe ich den VPN-Tunnel einmal aktiviert (da verwende ich KDE/Plasma, was das mittlerweile im Netzwerkmanager integriert hat: Ein Klick!). Und der Tunnel bleibt auch an – egal, ob ich den Laptop schlafen lege und dann wieder aufwecke. @mdt erklärt hier, warum das so ist!

Übrigens gab es schon 2018 Lob von Torvalds himself: Linus Torvalds lobt WireGuard

Der Durchsatz überzeugt mich hier ebenfalls… von daher: Kann ich so nicht bestätigen.
Viele Grüße,
Michael

Hi Michael,

In Kombination mit einer hübschen Weboberfläche ist es vermutlich genauso einfach wie OpenVPN, aber das Hauptproblem ist meiner Meinung nach eben, dass man keine offensichtliche Statusanzeige des Tunnels hat. Wenn ich nun in einem öffentlichen WLAN bin und mich in Sicherheit wiege, weil ich glaube, der Tunnel sei aktiviert, obwohl er das nicht ist, ist das irgendwie suboptimal.

Das ist super, wenn ich einen externen Server ins Netz einbinden will, zum Beispiel für LDAP oder ähnliches, dafür finde ich WireGuard auch TOP! Vor allem da man ja super leicht einstellen kann, welcher Netzbereich durch den Tunnel läuft und welcher nicht.

Für Schüler und Lehrer (bzw. in meinem Fall Vereinsmitglieder) ist mir das alles aber einfach bisschen zu undurchsichtig. Wenn ich bei OpenVPN den Schalter umlege und er grün wird dann weiß ich, dass die Verbindung steht und dass alles da durch fließt. Bei WireGuard muss ich mir erst noch überlegen, welchen Verkehr ich da durch schicken will. Das ist natürlich eigentlich ziemlich cool, aber wie erkläre ich das jemandem, der da kein Plan von hat? Außerdem sieht man nicht einfach durch eine Statusanzeige, ob die Verbindung tatsächlich steht (zumindest bei Android und Ubuntu), das bekommt man nur raus, wenn man einen Host im getunnelten Netz pingt, oder sich den Durchsatz anschaut (oder hab ich da was übersehen?)

Bitte verstehe mich nicht falsch, WireGuard ist ein super cooles Tool und auch echt mächtig, aber ich finde einfach, dass es für den normalen Endnutzer, der keine Ahnung von Netzen usw. hat, nicht transparent genug ist.

VG, Dorian

Hi Dorian.
Was den Status der Verbindung angeht: Ja, das stimmt!
Es gibt (zumindest im Windows Client!) aber noch den sog. Kill-Switch:
snipimage
Das könnte uU in öffentlichen Netzen helfen!

Ich habe OpenVPN hier auch jahrelang verwendet … bin aber jetzt echt froh, dass ich es nicht mehr muss, denn der Durchsatz über unseren IPFire ware immer extrem stockend … das muss alles nichts heißen und muss auch gar nicht an OpenVPN gelegen haben aber eine richtige Ursache konnte ich da nie finden…

Viele Grüße,
Michael

Hi Michael,

Das ist cool! Bei Android sehe ich den aber leider nicht.
Bei Linux geht das sicherlich auch irgendwie, aber eine einfache Checkbox gibt es natürlich nicht.

Würdest du OpenVPN denn nochmal eine Chance geben? Ich hatte bisher keine Probleme und der Client OpenVPN connect ist super intuitiv und funktioniert überall…

VG, Dorian

Für mich persönlich wäre das schnell eingerichtet – aber die 12 anderen Zugänge für div. Kollegen müssten dann alle nochmal neu eingestellt werden. Dazu habe ich gerade eher wenig Lust, da es im Moment so gut läuft :slight_smile:

Hi Michael,

Das Verstehe ich. Aber genau hier kommt der Vorteil von OpenVPN: Du musst gar nicht für jeden einen Zugang einrichten. Es muss nur jeder das Serverzertifikat runterladen, da ist dann auch die ganze Konfiguration enthalten. Das wird dann in die OpenVPN Connect importiert. Dann muss der Nutzer nur noch seine LDAP Anmeldedaten eingeben und schon läuft es. Du musst also nur einmal eine Anleitung mit Link zum Zertifikat (als Download) schreiben und dann kann es jeder selbst einrichten :slight_smile:

Soll ich dafür mal eine Anleitung schreiben?

VG, Dorian

Hallo Dorian,

wenn es deine Zeit nicht übermäßig beansprucht: gerne.

Viele Grüße

Wilfried

Alles klar, hier die Anleitung:

    1. Die LDAP Anbindung für Schüler und Lehrer einrichten:
    • 1.1: Unter System > Zugang > Server einen Server hinzufügen (oben rechts)
    • 1.2: Folgende Einträge sind zu treffen:
      • Beschreibender Name: Linuxmuster VPN Zugang
      • Typ: LDAP
      • Hostname oder IP-Adresse: server.linuxmuster.lan
      • Port-Wert: 636
      • Transport: SSL - Verschlüsselt
      • Protokollversion: 3
      • Bind-Zugangsdaten:
        • Benutzer DN: CN=global-binduser,OU=Management,OU=GLOBAL,DC=linuxmuster,DC=lan
      • Suchbereich: Kompletter Unterbaum
      • Basis-DN: DC=linuxmuster,DC=lan
      • Authentifizierungscontainer: DC=linuxmuster,DC=lan
      • Erweiterte Abfrage:
        • Schüler und Lehrer: |(memberof=CN=role-student,OU=Groups,OU=GLOBAL,DC=linuxmuster,DC=lan)(memberof=CN=role-teacher,OU=Groups,OU=GLOBAL,DC=linuxmuster,DC=lan)
        • Nur Lehrer: (memberof=CN=role-teacher,OU=Groups,OU=GLOBAL,DC=linuxmuster,DC=lan)
      • Benutzerbennenungsattribut: sAMAccountName
    • 1.3: Im Prüfer (System > Zugang > Prüfer) Authentifizierungsserver den angelegten Linuxmuster VPN Zugang auswählen und den Login mit beliebigen Nutzern testen.
    1. Zertifikate erstellen
      Der OpenVPN Server brauch eine CA um das Serverzertifikat zu erstellen.
      Man kann entweder eine neue generieren (so ist das Vorgehen in der Anleitung) oder die vom linuxmuster-setup erzeugte verwenden.
    • 2.1 Unter System > Zugang > Sicherheit > Aussteller einen Aussteller hinzufügen (oben rechts)
    • 2.2 Folgende EIngaben sind zu treffen:
      • Beschreibender Name: Linuxmuster VPN CA
      • Vorgehen: Erstelle eine interne Zertifizierungsstelle
      • Key Type: RSA
      • Schlüssellänge: 4096
      • Hash-Algorithmus: SHA512
      • Lebenszeit (Tage): frei wählbar!
      • Bedeutender Name: Das bekommt ihr selbst hin :wink:
    • 2.3 Unter System > Zugang > Sicherheit > Zertifikate ein Zertifikat hinzufügen (oben rechts)
    • 2.4 Folgende Eingaben sind zu treffen:
      • Vorgehen: Erstelle ein neues internes Zertifikat
      • Beschreibender Name: Linuxmuster VPN Server
      • Zertifizierungsstelle: Linuxmuster VPN CA
      • Type: Serverzertifikate
      • Key Type: RSA
      • Schlüssellänge: 4096
      • Hash-Algorithmus: SHA512
      • Lebenszeit (Tage): frei wählbar!
      • Private Key Location: Save on this firewall
      • Bedeutender Name: Das bekommt ihr selbst hin :wink:
    1. OpenVPN Server erstellen :smiley:
    • 3.1 Unter VPN > OpenVPN > Server einen OpenVPN Server erstellen (oben rechts)
    • 3.2 Folgende Eingaben sind zu treffen:
      • Beschreibender Name: Linuxmuster VPN
      • Servermodus: Remotezugriff (Benutzerauthentifizierung)
      • Backend Authentifizierung: Linuxmuster VPN Zugang
      • Lokale Gruppe erzwingen (keiner)
      • Protokoll: UDP
      • Gerätemodus: tun
      • Schnittstelle: WAN
      • Lokaler Port: (frei wählbar) 25008
      • TLS Authentifikation: Beides angehakt lassen
      • Peer-Zertifizierungsstelle: Linuxmuster VPN CA
      • Peerzertifikatsrückrufliste: Keine
      • Serverzertifikate: Linuxmuster VPN Server
      • DH Parameterlänge: 4096
      • Verschlüsselungsalgorithmus: AES-256-CBC (256-bit key, 128-bit block)
      • Authentifizierungs-Digestalgorithmus: SHA512 (512-bit)
      • Hardwarekryptografie: No Hardware Crypto Acceleration
      • Zertifikatstiefe: Eins (Client+Server)
      • IPv4 Tunnelnetzwerk: Ein Netzbereich in dem die VPN Clients ihre IP bekommen, ich nehme dafür 10.1.0.0/24
      • IPv6 Tunnelnetzwerk:
      • Weiterleitungs Gateway:
      • Lokales IPv4-Netzwerk: 10.0.0.0/16 (Das Linuxmuster Netz)
      • Lokales IPv6-Netzwerk:
      • Fernes IPv4-Netzwerk:
      • Fernes IPv6-Netzwerk:
      • Konkurrierende Verbindungen:
      • Komprimierung: Aktiviert mit adaptiver Kompression
      • Typ des Dienstes:
      • Inter-Client-Kommunikation:
      • Doppelte Verbindungen:
      • IPv6 deaktivieren:
      • Für den Rest: Standardwerte!
    1. Firewall Regeln:
    • 4.1 Unter Firewall > Regeln >WAN eine neue Regel anlegen (oben rechts)
    • 4.2 Folgende Eingaben sind zu treffen:
      • Protokoll: UDP
      • Ziel: Diese Firewall
      • Zielportbereich: von: 25008 bis: 25008 (ggf. anpassen an eigene Portwahl)
      • Für den Rest: Standardwerte!
    • 4.3: Unter Firewall > Regeln > OpenVPN eine neue Regel anlegen (oben rechts)
    • 4.4 Folgende Eingaben sind zu machen:
      • Quelle: 10.1.0.0/24
      • Für den Rest: Standardwerte!
    • 4.5 Änderungen übernehmen (rechts im blauen Kasten)
    1. Konfiguration exportieren:
    • 5.1 Gehe zu VPN > OpenVPN > Clientexport
    • 5.2 Folgende Eingaben sind zu treffen:
      • Ferner Zugriffsserver: Linuxmuster VPN UDP:25008
      • Export type: Nur Datei
      • Hostname: Hostname unter dem die Firewall erreichbar ist, z.B: vpn.meineschule.de
      • Port: 25008 (ggf. anpassen an eigene Portwahl)
      • Für den Rest: Standardwerte!
    • 5.3 Ganz unten unter Accounts / certificates bei Linuxmuster VPN Server ganz rechts auf das Downloadsymbol drücken
    1. Mit dem VPN Verbinden (AB HIER FÜR LuL und SuS)
      Die in 5.3 heruntergeladene Datei muss nun auf das Endgerät heruntergeladen und dort in die App OpenVPN Connect (für alle Plattformen) importiert werden.
      Nach dem Import kann durch Eingabe von Benutzername und Passwort eine VPN-Verbindung hergestellt werden.

So, das war es dann auch (schon) :wink: Aber dieses Setup muss ja nur einmal gemacht werden, danach ist es ein „Selbstläufer“

Ich denke, das kann so in die Dokumentation übernommen werden, sobald es ein paar Leute erfolgreich getestet haben.

VG, Dorian

4 „Gefällt mir“

… und das nennst weniger kompliziert als Wireguard??? :slight_smile:

Sind deine Pläne für Wireguard damit gestorben oder verfolgst du das auch weiter?

Hallo Dorian,

erst einmal zum wiederholten Mal: Danke!

Github-Issue ist erstellt: VPN on OPNSense #539

Beste Grüße

Thorsten

Es ging mir dabei nicht ums Einrichten auf Serverseite, sondern auf Clientseite und das ist ja nur (6.) :wink:
Die Ersteinrichtung von WireGuard inklusive der Anbindung an meine Landinpage wäre mindestens genauso lang.

Neija, die Sache ist halt die: OpenVPN funktioniert aus meiner Sicht gut genug und aufgrund der schon angesprochenen Usability werde ich für unsere Mitglieder auch bei OpenVPN bleiben. Dazu kommt noch, dass es sicherlich nochmal um die zwanzig Stunden dauern würde, die WireGuard Anbindung ans LDAP in der Landingpage sauber zu machen (von einer perfekten Lösung in der WebUI ganz zu schweigen). Das ist Zeit, die ich aufgrund der nicht soo großen Vorteile von WireGuard eigentlich nicht investieren will, da stecke ich sie lieber in Linbo…
Aber wenn der Bedarf in der Community groß ist, denke ich nochmal drüber nach:

Welche VPN Lösung präferiert iht?
  • OpenVPN mit LDAP (wie in der Anleitung beschrieben)
  • WireGuard mit LDAP (wie konzeptionell beschrieben)
0 Teilnehmer

VG, Dorian