OPNsense OpenVPN
- Standardmodul der OPNsense, VPN auf Basis von Pre-shared keys, Zertifikaten und/oder Username/Password, bei Bedarf mit TOTP-MFA
- OpenVPN läuft u.a. auch auf Router-OS OpenWRT und allen gängigen Desktop-OS
- guter Client für Windows und Android, Linux siehe ganz unten
- OpenVPN arbeitet auch bei Site-to-(Multi)Site Verbindung immer mit Client + Server
* nur der Server benötigt eine feste IP
* jeder Client bei Multisite bekommt einen eigenen Port - Hinweis: Windows erlaubt per Default kein PING aus entfernten Subnetzen
- Best Practice: VPN gehört auf das Gateway (Firewall/Router)
- Hinweis: für TOTP ist eine genaue Zeit wichtig (Zeitserver!)
- ab FW 23.7 neues Konzept "Instanz" (oben), "Legacy Server" (unten) ist depretched
OpenVPN Clientverbindung mit Username - Passwort - Zertifikat - Key - TOTP erstellen
Instanz-Konzept (FW 25.1.4)
1. Zertifizierungsstelle einrichten
- OPNsense: System -> Trust -> Authorities
- Vorgehen: Erstelle interne CA
- Beschreibung: OpenVPN-CA
- Herausgeber: selbstsigniert
- Lebenszeit: lange
- Allgemeine Angaben ausfüllen
- Common-Name nicht vergessen
(keine dt. Umlaute verwenden!)
2. Serverzertifikat erstellen
- OPNsense: System -> Trust -> Zertifikate
- Vorgehen: Erstelle internes Zertifikat
- Beschreibung: OpenVPN-Server
- Typ: Serverzertifikat
- CA/Herausgeber: OpenVPN-CA (von oben)
- Lifetime: lange
- Common-Name nicht vergessen
(keine dt. Umlaute verwenden!)
3. TOTP-Server einrichten (nur wenn OTP gewünscht)
- OPNsense: System -> Access -> Server
- Beschreibung: TOTP-Server
- Typ: Lokal (oder LDAP) + Zeitbasiertes Einmalpasswort
- Umgekehrte Tokensortierung: nicht mehr anhaken
- bei 3-zeiliger OTP-Angabe passen die Felder
- beim Testmenue: Kennwortfeld= TOTP+Passwort (TOTP zuerst!)
4. User einrichten
- OPNsense: System -> Zugang -> Benutzer
- Benutzername + Passwort festlegen
- Ankreuzen: Benutzerzertifikat erstellen
- nur bei OTP: Ankreuzen: OTP Seed erstellen
• OTP QR-Code nach Erstellen auf 2FA-Gerät übertragen - Speichern -> es öffnet sich der Assistent für ein neues Zertifikat
falls nicht: "Search Zertifikat by User" anklicken -> add Zertifikat - Vorgehen: Erstelle ein neues internes Zertifikat
- Beschreibung: Username
- Typ= Client Zertifikat
- CA/Herausgebeber: OpenVPN-CA (von oben)
- Common-Name nicht vergessen
(keine dt. Umlaute verwenden!)
5. VPN Static Key erstellen
- OPNsense: VPN -> OpenVPN -> Instances -> Static Keys
- Beschreibung: OpenVPN_key
- Modus: auth
- Generate new
6. VPN Server erstellen (mehrere Server mit eigenen Ports oder lokalen Zielbereichen möglich)
- OPNsense: VPN -> OpenVPN -> Instances
- Rolle: Server
- Name= OpenVPN-Server
- Protocol: UDP
- Port (Default=1194) ggf. ändern
- Typ: TUN
- Server (IPv4): 10.10.0.0/24 (Bsp) - VPN Transfernetz
Die OPNsense bekommt die erste Adresse (hier: 10.10.0.1). - Netzstruktur: Subnet
- Zertifikat: OpenVPN-Server
- Client-Zertifikate prüfen: erforderlich (sonst wird der Client als UNDEF angezeigt)
- Zertifikatstiefe= EINS (Client+Server)
- TLS static key: OpenVPN_key (von oben)
- Authenifizierung: Local Database (oder bei TOTP: TOTP-Database)
- Zeit bis Neubestimmung (Renegotiate time): - (bei TOTP= 0) sonst Default= 3600 (1 Std) lassen - Zeit, nach der der Handshake aufgefrischt wird
- Auth Token Lifetime: - (bei TOTP= leer) - Zeitwert, bei dem der TOTP-Token neu abgefragt wird
- Lokales Netzwerk: - (192.168.10.0/16 - kommagetrennte Liste der lokal ereichbaren Netze oder Netzbereiche)
- Entferntes Netzwerk: - (nur bei LAN-LAN)
- Options: client-to-client
- Redirect Gateway: local
- ggf. DNS-Server
7. Schnittstelle anlegen
- OPNsense: Interfaces -> Assignments
- Assign new interface: OpenVPN-Server
- Schnittstelle aktivieren
8. Firewallregeln
- OPNsense: Firewall -> Regeln -> WAN
• Neue Regel: IN / Allow / Schnittstelle: WAN / TCP: IPv4 / Protokoll=TCP/UDP / Ziel = WAN address / Ziel Port= 1194 (OpenVPN)
(Erlaube: WAN -> Firewall) - OPNsense: Firewall -> Regeln -> LAN
• Neue Regel: IN / Allow / Schnittstelle: LAN / TCP: IPv4 / Quelle= any / Ziel = any
(Erlaube: Firewall -> LAN) - OPNsense: Firewall -> Regeln -> OpenVPNServer
• Neue Regel: IN / Allow / Schnittstelle: OpenVPNServer / TCP: IPv4 / Protokoll= any / Quelle: OpenVPN net / Ziel = any
(Erlaube: OpenVPN) - Liveansicht hilft
9. Client exportieren
- OPNsense: VPN -> OpenVPN -> Clientexport
- Verwendete Konfiguration= gewünschter OpenVPN-Server
- Export: FileOnly
- Hostname= DSL-Gateway (IP oder DNS-Name)
- Server-Subject überprüfen: anhaken
- Custom Config (kann auch manuell in ovpn-File editiert werden)
- inactive 3600 - trenne nach 1 Std statt 24 Std.
- static-challenge "Time-based one-time password:" 1 - Client-GUI zeigt 3 Zeilen für User, Passwort, OTP - Download:
-> Username.ovpn (enthält VPN-Konfiguration, Key und alle Zertifikate)
-> OpenVPN-Server.ovpn (VPN-Konfiguration ohne Userzertifikat, Verbindung kann für unterschiedliche User genutzt werden)
10. Client für das gewünschte Betriebssystem einrichten
- OpenVPN-Client laden und installieren
https://openvpn.net/client/ - Download (Export) als Profil importieren
- Verbindung sinnvoll umbenennen
- Verbindung herstellen mit Username und Passwort +ggf. TOTP
Tips und Hinweise
- Wenn man die Client-Zertifikate nicht überprüft, kann man ein Verbindungsprofil für mehrere unterschiedliche User nutzen.
- OpenVPN Instance: Verify Client Certificate = "none", Certificate Depht = "One"
- Client-Export: OpenVPN-Server (also nicht User)
- der User wird am VPN-Server als UNDEF angezeigt - bei Verbindungsabbrüchen: Instance oben li: "advanced Mode" aktivieren
- Keep alive interval: 10
- Keep alive timeout: 60
Tip:
• .OVPN (Windows) oder .CONF (Linux) -Datei kann manuell nachkonfiguriert werden.
(oder Client-Export: Custom Config)
Parameter: https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/
- VPN "Timeout bei Inaktivität" steht per Default auf 0 (deaktiviert)
Client-Verbindungen werden per Default alle 24 Stunden getrennt.
inactive 3600 - kann in Sekunden konfiguriert werden - static-challenge "Time-based one-time password:" 1
Windows-GUI zeigt mit diesem Wert dritte Zeile für den TOTP.
Damit ist es möglich, das Passwort zu speichern.
(Wenn der User das Passwort gar nicht kennt, kann er den Client nicht auf andere Geräte überspielen) - remote <router_wan_ip> 1194 -> Remote OpenVPN Servername oder IP Addresse
• redundante Dual WAN Verbindung:
Der Client nimmt bei Ausfall des ersten Eintrages dann sukzessive die folgenden Server Einträge.
getestet:
...
remote <router_wan_ip_1> 1194 udp
remote <router_wan_ip_2> 1194 udp
remote <router_wan_ip_3> 1194 udp
...
remote-random - Reihenfoge zufällig
resolv-retry 60 - Timeout bis zum Wechsel zur nächsten Verbindung
nicht getestet:
...
proto udp4
<connection>
remote <router_wan_ip_1> 1194
</connection>
<connection>
remote <router_wan_ip_2> 1194
</connection>
ca CA.crt
...
VPN-Server:
- Split-Tunneling oder Gateway
push "route 192.168.188.0 255.255.255.0" -> überträgt nur den Traffic des lokalen LAN
oder
push "redirect-gateway def1 bypass-dhcp" -> überträgt allen Traffic über VPN - client-to-client - erlaubt Kommunikation zwischen VPN-Clients (Default: nicht erlaubt)
OpenVPN unter Linux (Debian Cinnamon):
- sudo apt-get install network-manager - Network Manager nachinstallieren (ist eigentlich da)
- sudo apt install network-manager-openvpn-gnome - OpenVPN Plugin im NetworkManager installieren
- Linksklick auf Netzwer Manager:
Netzwerkeinstellungen – von Cinnamon bereitgestellt (daher ist es nur in dieser Desktop-Umgebung vorhanden)
Netzwerkverbindungen – von NetworkManager bereitgestellt (daher ist es in jeder Distribution mit NetworkManager vorhanden) - Netzwerkverbindungen: OVPN Profil importieren
- Verbindung herstellen in Netzwerkeinstellungen oder im Systray
- 2FA + Kennwort muß in ein Feld!
Quellen und Links:
- UK: OPNsense Firewall
- UK: OPNsense Hardware
- OpenVPN Instanz Anleitung
- OpenVPN Anleitung (Windows/Linux) Administrator.de
- OpenVPN Forum
- https://windgate.net/openvpn-site-to-site-using-ssl-tls-certificate-based-authentication-between-multiple-sites-with-opnsense/
https://sysadmin102.com/2024/03/opnsense-openvpn-instance-remote-access-ssl-tls-user-auth/
von Uwe Backend-Admin

Kommentare
Einen Kommentar schreiben