OpenWrt Client hinter FritzBox für IPsec IKEv2 aufbau in Hauptzentrale (Site-to-Site)
Hallo liebe Community,
aktuell bin ich etwas am verzweifeln. Ich versuche seit Tagen erfolglos einen IPSec Tunnel zum Hauptstandort aufzubauen.
Netzwerkumgebung:
Sophos XG (Hauptstandort mit fester IP) dient als VPN Gateway im Modus nur Antworten, IKEv2 und für den Anfang PSK(pre-shared key)
FritzBox(dynamische IP und privates Heimnetz) --> OpenWrt Router mit einer IP aus dem LAN Netzwerk der FritzBox, der OpenWrt soll mittels strongswan einen IPsec Tunnel zur Sophos aufbauen und dahinter ein eigenes Netz bereitstellen, welches nacher zwischen Sophos und Openwrt geroutet wird.
Hat jemand von euch schon mal mit solch einer config zu tun gehabt und kann eventuell seine config Dateien zur Verfügung stellen. Ich bin auf dem OpenWrt gebiet auch absoluter Neuling und würde euch gerne um Hilfe bitten.
VG
FlashLightz
aktuell bin ich etwas am verzweifeln. Ich versuche seit Tagen erfolglos einen IPSec Tunnel zum Hauptstandort aufzubauen.
Netzwerkumgebung:
Sophos XG (Hauptstandort mit fester IP) dient als VPN Gateway im Modus nur Antworten, IKEv2 und für den Anfang PSK(pre-shared key)
FritzBox(dynamische IP und privates Heimnetz) --> OpenWrt Router mit einer IP aus dem LAN Netzwerk der FritzBox, der OpenWrt soll mittels strongswan einen IPsec Tunnel zur Sophos aufbauen und dahinter ein eigenes Netz bereitstellen, welches nacher zwischen Sophos und Openwrt geroutet wird.
Hat jemand von euch schon mal mit solch einer config zu tun gehabt und kann eventuell seine config Dateien zur Verfügung stellen. Ich bin auf dem OpenWrt gebiet auch absoluter Neuling und würde euch gerne um Hilfe bitten.
VG
FlashLightz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 557576
Url: https://administrator.de/contentid/557576
Ausgedruckt am: 02.11.2024 um 22:11 Uhr
18 Kommentare
Neuester Kommentar
Hat jemand von euch schon mal mit solch einer config zu tun gehabt
In Zeiten von VPNs und Homeoffice wohl mittlerweile jeder !Das Szenario funktioniert auch fehlerlos !
Ein kritischer Punkt ist wie immer die FritzBox !
Diese ist ja selber ein aktiver VPN Router auf IPsec Basis. Es dürfen keinerlei VPN Konfigs oder User usw. auf der FritzBox definiert sein. Ansonsten "denkt" logischerweise die FB immer sie ist der VPN Endpoint und antwortet aktiv auf die eingehenden IPsec Pakete was sie ja nicht soll !
Das muss man also absolut sicherstellen das diese die VPN Pakete an den kaskadierten OpenWRT durchreicht. Auch indem man dort natürlich die zum Protokoll korrespondierenden Ports forwardet. Zwingend ist das:
- UDP 500
- UDP 4500
- ESP Protokoll (IP Nummer 50, Achtung: kein UDP oder TCP 50 !)
IPsec IKEv2 VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
Das es fehlerfrei klappt kanst du an einer simplen IKEv1 Konfig mit StrongSwan sehen. IKEv2 ist identisch.
IPsec IKEv2 VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
Funktioniert hier in einem laufenden Design auch ohne irgendwelche Probleme.
Tip:
Um sicherzustellen das die FB wirklich IPsec Pakete sauber ans Ziel forwardet schliesst du einfach mal einen Wireshark Sniffer PC mit der gleichen IP ans Netz die der WAN Port deines kaskadierten OpenVPN Routers entspricht.
Versuchst du dann von außen einen IPsec Tunnel aufzubauen solltest du dort eingehenden UDP 500, 4500 und ESP Pakete sehen. Damit ist dann sichergestellt das die FB wirklich alle IPsec Protokollkomponenten forwardet und sie kann dann als möglicher Fehler sicher ausgeschlossen werden.
Mit OpenWRT kannst du natürlich auch tcpdump (ggf. Package nachinstallieren) verwenden statt Wireshark. Ist sogar noch besser, denn dann kannst du das im Live Szenario mitsniffern !
Test funktioniert wie erwartet problemlos. Ich musste allerdings die Proposals in der StrongSwan Konfig etwas anpassen und diese statisch hinzufügen. Im Gegensatz zu Ubuntu/Debian Linux wollte die OpenWRT Variante keine Proposals negotiaten ohne dedizierte Angabe in der Konfig und konnte so keine SAs etablieren. Mit der statischen Angabe gings dann problemlos.
OpenWRT Router ist ein GL.int AR300M
1.) pfSense Konfig P1 und P2:
Connect Status:
Die Firewall Konfig entspricht genau diesem Tutorial:
IPsec IKEv2 VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
2.) StrongSwan Package installiert:
3.) StrongSwan Konfig Files und Status:
ipsec.conf
ipsec.secrets
Nach ipsec up pfsense hier der StrangSwan Status:
Works as designed...
Das ist allerdings ein Client Dialin. Für einen Site to Site Tunnel muss ich noch eine neue P1 erstellen...kommt aber noch.
Grundsätzlich zeigt es aber das es klappt.
Deinen Fehler vermute ich bei rightid=dnsnamefritzbox
Das kann eigentlich nicht sein, es sei denn du hast in der Sophos diesen Namen als Identifier (Destinguished Name) definiert was sehr ungewöhnlich wäre und vermutlich auch nicht der Fall ist.
Du musst dich generell entscheiden ob du den Identifier über die IP Adresse machst oder über einen Namen. IP Adresse geht bei dir nicht, da du in einer Kaskade mit doppeltem NAT logischerweise keine feste öffentliche IP hast sondern eine RFC1918 hinter NAT, deshalb scheidet IP aus.
Als Identifier nimmt man dann aber in der Regel den Hostnamen der Firewall hier im Test pfsense.
Das hast du vermutlich falsch gemacht, denn wenn die Sophos auf Hostname steht als Identifier und dort ihr Name definiert ist, ist das (geraten) sicher nicht der DNS Domain Name des FritzBox DDNS.
Damit hast du dann aber einen Mismatch im Identifier was dann sofort den Tunnelaufbau abbricht !
Das solltest du checken !
OpenWRT Router ist ein GL.int AR300M
1.) pfSense Konfig P1 und P2:
Connect Status:
Die Firewall Konfig entspricht genau diesem Tutorial:
IPsec IKEv2 VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
2.) StrongSwan Package installiert:
3.) StrongSwan Konfig Files und Status:
ipsec.conf
root@GL-AR300M:/etc# cat ipsec.conf
# Add connections here.
conn pfsense
keyexchange=ikev2
ike=aes256-sha256-modp2048
esp=aes256-sha256-modp2048
right=10.99.1.99
rightsubnet=192.168.1.0/24
rightid=pfsense
rightauth=pubkey
leftsourceip=%config4
leftcert=pfSenseCA.crt
leftauth=eap-mschapv2
eap_identity=testuser
dpdaction=restart
auto=add
root@GL-AR300M:/etc# cat ipsec.secrets
# /etc/ipsec.secrets - strongSwan IPsec secrets file
testuser : EAP test123
Nach ipsec up pfsense hier der StrangSwan Status:
root@GL-AR300M:/etc# ipsec statusall
Status of IKE charon daemon (strongSwan 5.6.3, Linux 4.9.120, mips):
uptime: 7 minutes, since Mar 14 19:48:58 2020
worker threads: 10 of 16 idle, 6/0/0/0 working, job queue: 0/0/0/0, scheduled: 3
loaded plugins: charon test-vectors ldap pkcs11 aes des blowfish rc2 sha2 sha1 md4 md5 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl gcrypt af-alg fips-prf gmp curve25519 agent xcbc cmac hmac ctr ccm gcm curl mysql sqlite attr kernel-netlink resolve socket-default connmark forecast farp stroke vici smp updown eap-identity eap-md5 eap-mschapv2 eap-radius eap-tls xauth-generic xauth-eap dhcp whitelist led duplicheck addrblock unity
Listening IP addresses:
192.x.y.z
192.168.8.1
fd25:3b81:cd46:10::1
Connections:
pfsense: %any...10.99.1.99 IKEv2, dpddelay=30s
pfsense: local: [CN=vpnca, C=DE, ST=XY, L=XY, O=Private, OU=Lab] uses EAP_MSCHAPV2 authentication with EAP identity 'testuser'
pfsense: cert: "CN=vpnca, C=DE, ST=XY, L=XY, O=Private, OU=Lab"
pfsense: remote: [pfsense] uses public key authentication
pfsense: child: dynamic === 192.168.1.0/24 TUNNEL, dpdaction=restart
Security Associations (1 up, 0 connecting):
pfsense[1]: ESTABLISHED 6 minutes ago, 192.168.7.173[CN=vpnca, C=DE, ST=XY, L=XY, O=Private, OU=Lab]...10.99.1.99[pfsense]
pfsense[1]: IKEv2 SPIs: e24434982197428f_i* 632f91c8cf91345a_r, EAP reauthentication in 2 hours
pfsense[1]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
pfsense{1}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: c8f3befb_i ca73f766_o
pfsense{1}: AES_CBC_256/HMAC_SHA2_256_128, 0 bytes_i, 0 bytes_o, rekeying in 37 minutes
pfsense{1}: 10.98.98.1/32 === 192.168.1.0/24
root@GL-AR300M:/etc#
Works as designed...
Das ist allerdings ein Client Dialin. Für einen Site to Site Tunnel muss ich noch eine neue P1 erstellen...kommt aber noch.
Grundsätzlich zeigt es aber das es klappt.
Deinen Fehler vermute ich bei rightid=dnsnamefritzbox
Das kann eigentlich nicht sein, es sei denn du hast in der Sophos diesen Namen als Identifier (Destinguished Name) definiert was sehr ungewöhnlich wäre und vermutlich auch nicht der Fall ist.
Du musst dich generell entscheiden ob du den Identifier über die IP Adresse machst oder über einen Namen. IP Adresse geht bei dir nicht, da du in einer Kaskade mit doppeltem NAT logischerweise keine feste öffentliche IP hast sondern eine RFC1918 hinter NAT, deshalb scheidet IP aus.
Als Identifier nimmt man dann aber in der Regel den Hostnamen der Firewall hier im Test pfsense.
Das hast du vermutlich falsch gemacht, denn wenn die Sophos auf Hostname steht als Identifier und dort ihr Name definiert ist, ist das (geraten) sicher nicht der DNS Domain Name des FritzBox DDNS.
Damit hast du dann aber einen Mismatch im Identifier was dann sofort den Tunnelaufbau abbricht !
Das solltest du checken !
Ich habe u.a. folgendes geändert:
Mal ne doofe Frage:Was bedeutet das "!" am Ende der Proposals "ike=aes256-sha256-modp2048!" und "esp=aes256-sha256-modp2048!"
Muss ich dem OpenWRT noch sagen,
Nein, vermutlich nicht. Der Buhmann wird die Firewall im OpenWRT sein. Ein Raspberry Pi mit exakt identischer StrongSwan Konfiguration kann sofort pingen und das VPN nutzen. Zeigt das es rein nur die OpenWRT Firewall sein kann.Vermutlich behandelt die OpenWRT Firewall den WAN Port global mit den FW Regeln und blockt damit auch VPN Verkehr von außen. Ich vermute das man hier die Firewall entsprechend customizen muss !
Googelt man nach (OpenWRT StrongSwan) gibt es da Tips eine Zone "vpn" anzulegen die das dann entsprechend regelt. Da muss ich aber auch noch etwas forschen wie sich das mit OpenWRT und dessen Firewall verhält
Erklärung zum "!" gefunden in der StrongSwan Doku:
"If you use ipsec.conf, you have to add an exclamation mark (!) to the end , otherwise the default proposals are appended, which might contain algorithms you do not want to use.
In order to restrict a responder to only accept specific cipher suites, the strict flag (!, exclamation mark)"
Man erzwingt damit also diese Crypto Credentials. Zwingend sind sie aber dann nicht wenn man es am Responder vorgibt. Oben hatte ich den auf "Auto" und nun mal "AES 256" vorgegeben im Responder und dann muss man sie auch nicht setzen im Strongswan.
Bei dir taucht ja wenigstens eine Zone "vpn" in Luci auf. Die habe ich hier auf dem GL.inet nicht einmal.
Ich vermute aber das das eine Eigenart des GL.inet ist ?!
Habe jetzt auch eine reine IKEv2 Tunnel Connection am laufen mit:
Die ipsec.secret sieht so aus:
Status:
root@GL-AR300M:~# ipsec status
Security Associations (1 up, 0 connecting):
pfsense[2]: ESTABLISHED 9 minutes ago, 192.x.y.173[strongswan]...10.99.1.99[pfsense]
pfsense{2}: INSTALLED, TUNNEL, reqid 2, ESP SPIs: c73cb57e_i c4af2742_o
pfsense{2}: 192.168.8.0/24 === 192.168.1.0/24
root@GL-AR300M:~#
Tunnel steht also...!
Das klappt vom Tunnelaufbau fehlerlos. Aber...
Durch den Tunnel kommt nix !
Wenn du testhalber mal einen RasPi mit Strongswan und exakt der gleichen Konfig in exakt dem gleichen Design nimmst gehen Pings und Daten problemlos durch den Tunnel !! Strongswan ist es also de facto nicht !
Was zeigt das nur die OpenWRT Firewall der böse Buhmann ist.
Nur... wie bringt man der nun bei das sie VPN Tunneltraffic am WAN Port passieren lassen soll ?? Grrr...
Der muss man irgendwie sagen das SRC:192.168.1.0/4 -> DST: 192.168.8.0/24 passieren darf, nur ich finde keine Option dort zur Eingabe von IP Adressen. Muss wohl nochmal Dr. Google ran...?!
"If you use ipsec.conf, you have to add an exclamation mark (!) to the end , otherwise the default proposals are appended, which might contain algorithms you do not want to use.
In order to restrict a responder to only accept specific cipher suites, the strict flag (!, exclamation mark)"
Man erzwingt damit also diese Crypto Credentials. Zwingend sind sie aber dann nicht wenn man es am Responder vorgibt. Oben hatte ich den auf "Auto" und nun mal "AES 256" vorgegeben im Responder und dann muss man sie auch nicht setzen im Strongswan.
Bei dir taucht ja wenigstens eine Zone "vpn" in Luci auf. Die habe ich hier auf dem GL.inet nicht einmal.
Ich vermute aber das das eine Eigenart des GL.inet ist ?!
Habe jetzt auch eine reine IKEv2 Tunnel Connection am laufen mit:
conn pfsense
keyexchange=ikev2
authby=psk
right=10.99.1.99
rightsubnet=192.168.1.0/24
rightid=pfsense
rightauth=psk
left=%any
leftsubnet=192.168.8.0/24
leftid=strongswan
leftauth=psk
dpdaction=restart
mobike=no
auto=add
# /etc/ipsec.secrets - strongSwan IPsec secrets file
: PSK "test123"
root@GL-AR300M:~# ipsec status
Security Associations (1 up, 0 connecting):
pfsense[2]: ESTABLISHED 9 minutes ago, 192.x.y.173[strongswan]...10.99.1.99[pfsense]
pfsense{2}: INSTALLED, TUNNEL, reqid 2, ESP SPIs: c73cb57e_i c4af2742_o
pfsense{2}: 192.168.8.0/24 === 192.168.1.0/24
root@GL-AR300M:~#
Tunnel steht also...!
Das klappt vom Tunnelaufbau fehlerlos. Aber...
Durch den Tunnel kommt nix !
Wenn du testhalber mal einen RasPi mit Strongswan und exakt der gleichen Konfig in exakt dem gleichen Design nimmst gehen Pings und Daten problemlos durch den Tunnel !! Strongswan ist es also de facto nicht !
Was zeigt das nur die OpenWRT Firewall der böse Buhmann ist.
Nur... wie bringt man der nun bei das sie VPN Tunneltraffic am WAN Port passieren lassen soll ?? Grrr...
Der muss man irgendwie sagen das SRC:192.168.1.0/4 -> DST: 192.168.8.0/24 passieren darf, nur ich finde keine Option dort zur Eingabe von IP Adressen. Muss wohl nochmal Dr. Google ran...?!
So, Teilerfolg !
Schaltet man das Masquerading und Rejecting ab am OpenWRT WAN Port klappt es erwartungsgemäß sofort !
Gut, in einer Kaskade mit einem NAT Router davor wie deiner FritzBox kann man damit problemlos leben. Dort ne statische Route auf das IP Netz hinter dem OpenWRT und transparent routen. Fertig ist der Lack !
Damit wäre das Problem dann erstmal gelöst in so einen Kaskaden Umfeld wenn man auf NAT und FW am kaskadierten System verzichten kann.
So sieht das jetzt funktionierende Design aus:
Aber irgendwie muss man das doch auch der OpenWRT Firewall beibringen können das die auch mit NAT den Traffic passieren lässt...??
https://openwrt.org/docs/guide-user/services/vpn/ipsec/strongswan/firewa ...
Schaltet man das Masquerading und Rejecting ab am OpenWRT WAN Port klappt es erwartungsgemäß sofort !
Gut, in einer Kaskade mit einem NAT Router davor wie deiner FritzBox kann man damit problemlos leben. Dort ne statische Route auf das IP Netz hinter dem OpenWRT und transparent routen. Fertig ist der Lack !
Damit wäre das Problem dann erstmal gelöst in so einen Kaskaden Umfeld wenn man auf NAT und FW am kaskadierten System verzichten kann.
So sieht das jetzt funktionierende Design aus:
Aber irgendwie muss man das doch auch der OpenWRT Firewall beibringen können das die auch mit NAT den Traffic passieren lässt...??
https://openwrt.org/docs/guide-user/services/vpn/ipsec/strongswan/firewa ...
Hast du den OpenWRT mal rebootet ??
Wenn die Firewall und NAT so aus ist kannst du denn dann transparent routen zwischen beiden IP Netzen ?!
Das würde ja erstmal verifizieren das das Routing dann sauber klappt und NAT deaktiviert ist.
Habs hier auf einem 2ten GL.inet diesmal ein MT300N v2 wiederholt und auch da klappte es sofort auf Anhieb mit diesen FW Settings !!
Vielleicht mal den OpenWRT wieder auf Werksreset, StrongSwan-full Package neu installieren und nochmal ganz neu aufsetzen ?!
Sonst nimmst du einen RasPi 4
Wenn die Firewall und NAT so aus ist kannst du denn dann transparent routen zwischen beiden IP Netzen ?!
Das würde ja erstmal verifizieren das das Routing dann sauber klappt und NAT deaktiviert ist.
Habs hier auf einem 2ten GL.inet diesmal ein MT300N v2 wiederholt und auch da klappte es sofort auf Anhieb mit diesen FW Settings !!
Vielleicht mal den OpenWRT wieder auf Werksreset, StrongSwan-full Package neu installieren und nochmal ganz neu aufsetzen ?!
Sonst nimmst du einen RasPi 4
läuft der Tunnel jetzt.
👍das ich vom OpenWrt nicht Pingen kann, aber von meinen Clients!
Das liegt vermutlich daran das der OpenVPN eine andere Source IP nutzt. Hast du mehrere LAN Segmente am OpenWRT oder nur LAN und WAN.Mein GL.inet hat nur die 2 Interfaces und da klappt es auch vom Router selber fehlerlos.
wenn ich an der FritzBox keine Einstellungen ändern müsste
Was genau meinst du damit ??Du betreibst das ganze ja in einer kaskaden Struktur. Ein Port Forwarding der IPsec Ports sind daher immer zwingend, das ist dir vermutlich auch klar.
Anders könnte die FB ja die IPsec Frames niemals an den dahinter kaskadierten Router weiterleiten weil eingehende Pakete sonst nie deren Firewall überwinden könnten.
Das wird also in einem Kaskaden Design immer bleiben müssen. Sofern du das denn meinst und nicht irgendwas anderes ?!?
Es sei denn du terminierst das IPsec direkt auf der FritzBox, was ja auch gehen würde da die FB ja selber aktiv IPsec kann. Allerdings ist deren VPN Performance sehr gruselig. Klar, denn sie ist ja ein billiger Plaste Consumer Router und für den Massenmarkt gemacht und eben kein Business Router. So fair muss man ja sein.
Und hast du bedenken im Thema Sicherheit ?
Nöö. Die Firewall der FB ist ja voll aktiv und schützt letztlich alles was dahinter ist.
Was dann aber wieder für ein Firewall Problem spricht.
Wenn du Pingen kannst, dann ist das ja immer ein beidseitiger Test. Du schickst ein ICMP Echo Request und das Ziel antwortet mit einem ICMP Echo Reply. Es wird also Hin- und Rückroute getestet. Wenn der Ping durchkommt klappen also immer auch beide Richtungen.
Das riecht also irgendwo nach einer FW Regel in der Sophos oder sowas...?!
Hier im testaufbau mit der pfSense klappt das bei beiden OpenWRT Router bidirektional. Ich kann also auch über das Diagnostic Menü der FW den OpenWRT pingen.
Endgeräte in den jeweiligen LANs klappt auch fehlerlos.
Wenn du Pingen kannst, dann ist das ja immer ein beidseitiger Test. Du schickst ein ICMP Echo Request und das Ziel antwortet mit einem ICMP Echo Reply. Es wird also Hin- und Rückroute getestet. Wenn der Ping durchkommt klappen also immer auch beide Richtungen.
Das riecht also irgendwo nach einer FW Regel in der Sophos oder sowas...?!
Hier im testaufbau mit der pfSense klappt das bei beiden OpenWRT Router bidirektional. Ich kann also auch über das Diagnostic Menü der FW den OpenWRT pingen.
Endgeräte in den jeweiligen LANs klappt auch fehlerlos.