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
- Hinweis: Windows erlaubt per Default kein PING aus entfernten Subnetzen
- Hinweis: für TOTP ist eine genaue Zeit wichtig (Zeitserver!)
- ab FW 23.7 neues Konzept "Instanz" (oben), "Legacy Server" (unten) ist depretched
Instanz-Konzept (FW 25.1.4)
OpenVPN Clientverbindung mit Username - Passwort - Zertifikat - Key - TOTP erstellen
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: anhaken (ich finde TOTP nach Passwort sinnvoller)
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
- 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
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
- 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)
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
OpenVPN Site-to-Site (new: Instances)
* OpenVPN arbeitet immer mit einem Server und einem (oder mehreren) Client
* nur der Server benötigt eine feste IP
* jeder Client bei Multisite bekommt einen eigenen Port
---------------
LAN Server: 192.168.64.0/24
LAN Client: 10.12.2.0/24
OpenVPN Transfernetz: 10.13.1.0/24 (Transfer-Netz, der Server bekommt die erste Adresse)
Server Site:
1. Add Static Key
- Name: OPENVPN-site-to-site-TLS-key
- Mode: Crypt
- generate new
2. Trust / Authority:
- CA erstellen
- Descriptive name: OPENVPN-site-to-site-CA
- Method: Create an internal Certificate Authority (self signed)
Key type: RSA (defined by user)
Key length: 4096 (defined by user)
Digest Algorithm: SHA512 (defined by user)
Lifetime (days): 7304 days (lang!! certificate validation date can be defined ex. 20 years)
- Country code, State, City, Organization, E-mail address ausfüllen
- Common Name: opnsense.uwe-kernchen.de (as example, this should be the FQDN hostname of OPNSENSE server)
- Download CA-Zertifikat
3. Trust / Certificates: Create internal Certificate (Lifetime!)
Descriptive name: OPENVPN-site-to-site-SERVER
Method: Create an internal Certificate
Certificate Authority: <von oben> (OPENVPN-site-to-site-CA)
Type: Server Certificate
Key type: RSA (defined by user)
Key length: 4096 (defined by user)
Digest Algorithm: SHA512 (defined by user)
Lifetime (days): 7304 days (certificate validation date can be defined ex. 20 years)
Country, State, City, Organization, E-mail address ausfüllen (bringt die CA mit)
Common Name: opensense.uwe-kernchen.de (opnsense.domain.com as example, this should be the FQDN hostname of OPNSENSE server)
The hostname can be found in right-top corner of screen OPNSENSE dashboard.
- Download Zertifikat
4a. New Instance (ähnlich Punkt 6 Clientinst.)
- Server, "OpenVPN-Site-to-Site-EEG"
- UDP, Port: 1195 or any free
- Server: 10.13.1.0/24 (neues Tunnel-Netz, der Server bekommt die erste Adresse, jede Site bekommt ein eigenes Tunnel-Netz)
- Certificate: <OPENVPN-site-to-site-SERVER>
- Verify client certificate: required
- TLS static key: OPENVPN-site-to-site-TLS-key
- Authentication: Local DB
- Local Network: 192.168.64.0/24,192.168.178.0/24,10.13.1.0/24 (alle SITE A networks + tunnel for Site B & C)
- Remote Network: 10.12.2.0/24,192.168.20.0/24 (SITE B networks)
- Topology: subnet
- Authentication: nothing
- Options: client-to-client
- Redirect Gateway: default
4b. ggf. Instance für Standort C bei Multisite
- Server, "OpenVPN-Site-to-Site-Standort-C"
- UDP, Port: 1196 (neuer Port)
- Server: 10.13.2.0/24 (neues Netz)
- gleiches Zertifikat + TLS-key
- Local Network: (alle SITE A networks + tunnel for Site B & C)
- Remote Network: (SITE C networks)
5. Assign Instance
- Interface - Assign + Name
- Enable Interface
- bei Multisite für alle Instanzen ausführen
6. Firewall
- WAN: Allow UDP 1195-1196
- OpenVPNSiteToSiteEEG: Allow Source: OpenVPNSiteToSiteEEG net
7. Gateway
- Interface: OpenVPNSiteToSiteEEG
- Address: ?
--------
Navigate to OPNSENSE > VPN > OpenVPN > Client specifics override > Add entry
Servers: OVPN-site-to-site-A-B
Common name: siteb (needs to be same as defined in certificate under Site B & Site C)
IpV4 Tunnel network: 10.90.1.0/24 (OVPN server for Site B tunnel)
Remote network: 192.168.20.0/24,10.10.40.0/24,10.10.50.0/24,10.10.60.0/24 (SITE B networks – same as defined in OVPN server config for Site B)
----------
Client Site (B):
1. Add Static Key (auf allen Client-Sides)
- Name: OVPN-SiteToSite-UK-TLS-key
- Key vom Server kopieren
2. Trust / Authority (auf allen Clients):
- Add ... Import an existing Certificate Authority
- Name: OVPN-SiteToSite-CA-UK
- Certificate data: -----BEGIN CERTIFICATE----- Inhalt von Server-CA rein kopieren
3. Trust / Certificates: Create internal Certificate (auf allen Clients)
- Name: OVPN-SiteToSite-EEG-UK
- Certificate Authority/Issuer: <imported> (OVPN-SiteToSite-CA-UK)
- Type: Client Certificate
- RSA, 4096, SHA512
- Lifetime (days): 7304 days (lang! certificate validation date can be defined ex. 20 years)
- Adresse (kommt mit der CA)
- Common Name: Site-EEG (this name will be later used in server’s configuration)
4. Navigate to OPNSENSE > VPN > OPENVPN > INSTANCES > Add (+)
- Role: Client
- Description: OVPN-SiteToSite-EEG-UK
- UDP (IPv4)
- Remote: <server.domain.com>:1195 (WAN-IP:Port)
- Certificate: <OVPN-SiteToSite-EEG-UK>
- TLS static Key: <OVPN-SiteToSite-UK-TLS-key>
- Remote network: 192.168.64.0/24,10.10.10.0/24,10.10.20.0/24,10.13.1.0/24 (SITEA+SITEC networks + tunnel to site C)
- Local Network: 10.12.2.0/24,192.168.20.0/24 (SITE B networks)
4. New Instance
- Role: Client
- Name: EEG - Netdesign
- Remote: WAN-IP der ServerSite:1194
- TLS static key: wie oben
- ggf. Username und Passwort vom Server
- Local Network: 10.12.2.0/24
- Remote Network: 192.168.64.0/24
- Options: client-to-client
5. Interface Assign + Enable
6. Firewall
- WAN: Allow UDP 1195-1196
- OpenVPNSiteToSiteEEG: Allow Source: OpenVPNSiteToSiteEEG net
Quelle:
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/
Tip:
• OVPN-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)
• 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!
Links: