Wer zu einer OPNsense-Firewall mit einem Client eine VPN-Verbindung aufbauen möchte, hat mehrere Varianten zur Auswahl.
Es gibt IPsec, OpenVPN und WireGuard. In unserem Beispiel erstellen wir eine VPN-Verbindung mit OpenVPN.
Damit über OpenvPN der OpenVPN-Server erstellt werden kann, benötigt es auf der Firewall ein Zertifikat und Benutzer mit entsprechender Berechtigung.
Im ersten Bild sehen Sie die angenommene Situation.

Wir nehmen an, Ihr Netzwerk hat den IP-Range 192.168.222.0 und Ihre Public IP ist 19.19.19.19 (es geht auch dynamisch) und eventuell haben Sie dazu einen passenden Domain-Namen, wir nehmen vpn.beispiel.ch
Bei der Adresse des WireGuard-Servers müssen Sie eine IP-Adresse nehmen, die nichts mit Ihrem Netzwerk oder schon vorhandenen VPNs zu tun hat. In unserem Beispiel verwenden wir die Adresse 172.16.20.0/24. Die Maske /24 verwenden wir, damit wir mehrere Clients in derselben WireGuard-Server-Umgebung konfigurieren können.
Zertifikat erstellen
- Öffnen Sie in OPNsense den Menüpunkt System, Trust und Authorities
- klicken Sie auf das "+" um ein leeres Bild für die Authority-Infos zu erhalten

- Bei Method wählen Sie Create an internal Certificate Authority, bei Description wählen Sie einen selbstsprechenden Namen, den Sie auch gleich bei Common Name einsetzen. In unserem Beispiel Beispiel-OpenVPN-CA
- Bei Lifetime (days) geben wir als Beispiel 3650 ein, damit wir nicht sofort ein abgelaufenes Zertifikat haben.
- Ergänzen Sie die restlichen Felder nach belieben.
- Klicken Sie zum Schluss auf Save.
- Wechseln Sie nun zum Menüpunkt System, Trust und Certificates
- klicken Sie auf das "+" um ein leeres Bild für Die Zertifikats-Infos zu erhalten.

- Bei Method wählen Sie Create an internal Certificate, Bei Description geben Sie einen selbstsprechenden Namen ein. Diesen setzen Sie auch gleich bei Common Name ein. In unserem Beispiel Beispiel-OpenVPN.
- Bei Type wählen Sie Server Certificate aus und bei Issuer wählen Sie die zuvor erstellte Certificate Authority aus.
- Bei Lifetime (days) geben wir dieselben Anzahl Tage ein, wie bei Certificate Authority . In unserem Beispiel 3650.
- Ergänzen Sie die restlichen Felder nach belieben.
- Klicken Sie zum Schluss auf Save.
User erfassen/erstellen
- Öffnen Sie in OPNsense den Menüpunkt System, Access und Users
- klicken Sie auf das "+" um ein leeres Bild für die User-Infos zu erhalten

- Vergeben Sie dem Benutzer einen Username und ein Password. Leerschläge sind in diesen beiden Feldern nicht zulässig.
- Sollten Sie bereits eine spezielle VPN-Anmeldegruppe haben, können Sie diese bei Group Membership auswählen.
- Speichern Sie den Benutzer mit einem Klick auf Save
User-Gruppe für lokale User erstellen
- Sollten Sie noch keine spezielle VPN-User-Gruppe zur Verfügung haben, öffnen Sie in OPNsense den Menüpunkt System, Access und Groups
- klicken Sie auf das "+" um ein leeres Bild für die Gruppen-Infos zu erhalten

- Geben Sie einen selbstsprechenden Group name ein und wählen Sie bei Members die zuvor erstellten User aus
- Speichern Sie die Gruppe mit einem Klick auf Save
User-Gruppe für LDAP-User erstellen
- Sie können auch eine Gruppe/Serververbindung erstellen, für Benutzer, welche auf einem LDAP-Server hinterlegt sind. Zum Beispiel einen Durchgriff auf einen Domaincontroller mit Benutzergruppe.
Öffnen Sie in OPNsense den Menüpunkt System, Access und Servers - klicken Sie auf das "+" um ein leeres Bild für die Server-Infos zu erhalten

- In diesem Bild geben Sie die Angaben zu Ihrem Server ein. Wir haben als Beispiel die interne Domain beispiel.ch, sowie die Serveradresse 192.168.222.2 verwendet. Unser Beispiel bezieht sich auf einen Windows Domaincontroller.
- Bei Hostname kommt die IP-Adresse des Server rein. bei Bind credentials geben Sie den Benutzernamen und das Passwort eines AD-Leseberechtigten Benutzers ein
- Bei Search scope wählen Sie Entire Subtree und bei Base DN geben Sie die Domain-Angaben ein
- Bei Authentication Container können Sie auf Select klicken und wenn alle bisherigen Angaben stimmen, wird Ihnen die Auswahl Ihres ActiveDirectories angezeigt. Wählen Sie den für Sie gültigen Container aus
- Da wir in unserem Beispiel auch auf dem ActiveDirectory eine Sicherheitsgruppe für die berechtigten Benutzer erstellt haben, müssen wir uns auf diese Gruppe beziehen. In unserem Beispiel heisst die Gruppe OpenVPN. Also habe ich bei Extended Query diese Zeichenfolge eingegeben
&(memberOf=CN=OpenVPN-User,CN=Users,DC=BEISPIEL,DC=CH) - Als Letztes geben Sie bei User naming attribute noch sAMAccountName ein (wenn nicht automatisch vorgegeben)
- Speichern Sie den Server mit einem Klick auf Save
User-Anmeldeangaben testen
- Öffnen Sie in OPNsense den Menüpunkt System, Access und Tester

- Bei Authentication Server wählen Sie aus, ob es sich um lokale Benutzer (Local Database) oder um Server-User (LDAP / ActiveDirectory) handelt
OpenVPN Instanz erstellen
- Öffnen Sie in OPNsense den Menüpunkt VPN, OpenVPN und Instances
- klicken Sie auf das "+" um ein leeres Bild für die Instance-Infos zu erhalten

- Gehen Sie am oberen Ende zuerst auf advanced mode
- Bei Role wählen Sie Server und bei Description geben Sie einen selbstsprechenden Namen ein
- Protocol und Port number sind UDP und 1198. Der Standardport ist 1190, kann aber verändert werden und ist wichtig für weitere Eingaben.
- Bei Server (IPv4) kommt die im Beispiel verwendete IP-Adresse 172.16.20.0/24 rein. Die Firewall nimmt sich für diesen Server automatisch die x.x.x.1.
- Bei Certificate wählen Sie das zuvor erstellte Zertifikat aus. In unserem Beispiel war dies Beispiel-OpenVPN.
- Bei Authentication können Sie nun auswählen, ob Sie die Local Database oder die Server-User testen möchten. Wenn Sie die Local Database verwenden, können Sie bei Enforce local group noch die Eingangs erstellte VPN-User-Group auswählen. Dann haben nur die ausgewählten Benutzer VPN-Zugang.
- Bei Username as CN setzen Sie ein Häkchen.
- Bei Renegotiation time stellen Sie ein, nach wie vielen Sekunden die Verbindung zwingend getrennt wird. Wenn Sie dort 86400 eingeben, wird nach 8 Stunden die Verbindung geschlossen und muss von Client-Seite neu aufgebaut werden.
- Bei Local Network kommt noch die IP-Adresse des lokalen Netzes hinzu, bei uns als Beispiel 192.168.222.0/24
- Im Auswahlfeld Options aktivieren Sie persist-remote-ip.
- Speichern Sie den Eintrag mit einem Klick auf save und vergessen Sie danach nicht, auf der Übersicht den Knopf Apply zu drücken.
Interface einbinden
- Öffnen Sie in OPNsense den Menüpunkt Interfaces und Assignments

- Wählen Sie im unteren Bereich bei Device die soeben erstellte Server Instance, passen Sie die Description gegebenenfalls an und klicken Sie auf Add
- Sie finden jetzt bei der Übersicht der Interfaces Ihre neu hinzugefügte Verbindung. Klicken Sie auf den orangen Teil des neuen Interfaces.
- Setzen Sie bei Enable ein Häkchen, lassen Sie den Rest wie er vorgeschlagen wird und speichern Sie es mit einem Klick auf Save und auf der Übersicht auf Apply ab.
Richtlinien erstellen (Rules)
Damit der Netzwerkverkehr von den Clients durch die erstellte Server-Instanz auf das Netzwerk durchgreifen kann, sind Richtlinien notwendig, die den Verkehr entsprechend weiterleiten.
- Öffnen Sie in OPNsense den Menüpunkt Firewall und Rules
- Sie finden neben diversen Anderen Zeilen auch Ihre neu erstellte Instanz, sowie eine weitere Zeile mit OpenVPN. Klicken Sie zuerst auf WAN
- Klicken Sie auf das "+" um eine neue Richtlinie zu erstellen

- Bei Interface wählen Sie WAN, beim Protocol nehmen Sie UDP und bei Destination nehmen Sie die WAN address.
- Bei Destination port range müssen wir jetzt auf (other) wechseln und den Port 1198 verwenden, den wir bei der Server Instanz eingetragen haben.
- Speichern Sie diese Regel mit einem Klick auf Save und danach in der Übersicht auf Apply

- Öffnen Sie in OPNsense den Menüpunkt Firewall, Rules und OpenVPN
- Klicken Sie auf das "+" um einen neuen Eintrag zu erstellen

- Bei Source geben Sie die Netzwerkadresse der OpenVPN-Server-Instanz ein. In unserem Beispiel ist dies 172.16.20.0/24
- Speichern Sie diese Regel mit einem Klick auf Save und danach in der Übersicht auf Apply

- Öffnen Sie in OPNsense den Menüpunkt Firewall, Rules und unsere neu erstellte Server-Instanz. In unserem Beispiel ist dies BeispieleOpenVPN
- Klicken Sie auf das "+" um einen neuen Eintrag zu erstellen

- Bei Source wählen Sie jetzt den gleichnamigen Eintrag aus, der mit net endet. Dies ist wichtig, da ansonsten die eingehenden VPN-Verbindungen nicht weitergeleitet werden.
- Speichern Sie den Eintrag mit einem Klick auf Save ab und klicken Sie danach auf der Übersicht auf Apply
Exportieren der Konfiguration
Damit ein Client über diese VPN-Einrichtung zugreifen kann, benötigt er die Konfiguration
- Öffnen Sie in OPNsense den Menüpunkt VPN, OpenVPN und Client Export

- Wählen Sie bei Remote Access Server die erstellte Server-Instanz aus
- Bei Export type nehmen Sie File Only
- Unter Hostname geben Sie Ihre externe IP-Adresse ein oder den Domain Name. Wir haben hier als Beispiel vpn.beispiel.ch
- Bei Disable password save haben wir ein Häkchen gesetzt
- Dann klicken Sie auf das Downloadsymbol neben dem Zertifikat

- Speichern Sie die Konfigurationsdatei auf Ihrem PC ab. Sie benötigen diese beim Einrichten des Clients.
Wie Sie die Konfigurationsdatei auf Ihrem externen PC einsetzen können, wird in einer weiteren Anleitung beschrieben.