Site-2-Site-VPN wird nach Zwangstrennung getrennt
Hallo,
ich habe als Noob eine Site2Site-VPN zwischen einer Fritzbox 7590 (7.57) und einem StrongSwan (läuft auf einem Proxmox-Container). Alles lief monatelang reibungslos. Jetzt wurde die FritzBox auf einen DSL-Anbieter mit Zwangstrennung umgestellt. Und exakt zum Zeitpunkt der Zwangstrennung wird der Tunnel nun leider jeweils getrennt.
Bei diesem Beispiel wird die DynDNS der Fritzbox wird nach der Zwangstrennung korrekt von 93.132.121.219 auf 93.131.102.110 aktualisiert (wie ich im Log auf ddnss.de sehen kann). Allerdings erst um 7:55:08. Der Tunnel ist aber bereits um 7:55:05 beendet worden. Mit einem Restart von StrongSwan wird der Tunnel sofort korrekt wieder aufgebaut.
Meine Frage: Was läuft hier schief bzw. was kann ich tun, dass StrongSwan den IP-Wechsel besser verdaut?
Anbei die Conf von meinem StrongSwan.
Danke für Tipps
ich habe als Noob eine Site2Site-VPN zwischen einer Fritzbox 7590 (7.57) und einem StrongSwan (läuft auf einem Proxmox-Container). Alles lief monatelang reibungslos. Jetzt wurde die FritzBox auf einen DSL-Anbieter mit Zwangstrennung umgestellt. Und exakt zum Zeitpunkt der Zwangstrennung wird der Tunnel nun leider jeweils getrennt.
Bei diesem Beispiel wird die DynDNS der Fritzbox wird nach der Zwangstrennung korrekt von 93.132.121.219 auf 93.131.102.110 aktualisiert (wie ich im Log auf ddnss.de sehen kann). Allerdings erst um 7:55:08. Der Tunnel ist aber bereits um 7:55:05 beendet worden. Mit einem Restart von StrongSwan wird der Tunnel sofort korrekt wieder aufgebaut.
Meine Frage: Was läuft hier schief bzw. was kann ich tun, dass StrongSwan den IP-Wechsel besser verdaut?
Anbei die Conf von meinem StrongSwan.
Danke für Tipps
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4241015077
Url: https://administrator.de/contentid/4241015077
Ausgedruckt am: 21.11.2024 um 14:11 Uhr
36 Kommentare
Neuester Kommentar
Ich würde an deiner Stelle 2 IPSec Tunnels machen mit 2 unterschiedlichen WAN IP Adressen dann hast du bessere Redundanz und Hochverfügbarkeit.
Ansonsten wird dir vermutlich nichts anderes übrig bleiben als den Tunnel neuzustarten per Script oder so eventuell mit einem Monitoring dahinter.
DynDNS ist wirklich das letzte was man für Site-toSite VPN Verbindungen verwenden sollte. Geh zum Provider und frag dort um eine statische IPv4 oder IPv6 an.
Ein Jeder "vernünftige" Provider wird dir IPv6 gratis geben bzw. IPv4 gegen aufpreis.
Ansonsten wird dir vermutlich nichts anderes übrig bleiben als den Tunnel neuzustarten per Script oder so eventuell mit einem Monitoring dahinter.
DynDNS ist wirklich das letzte was man für Site-toSite VPN Verbindungen verwenden sollte. Geh zum Provider und frag dort um eine statische IPv4 oder IPv6 an.
Ein Jeder "vernünftige" Provider wird dir IPv6 gratis geben bzw. IPv4 gegen aufpreis.
Es ist sinnvoller Strongswan auf das modernere swanctl (vici) Verfahren umzustellen. Das stellt dann auch eine DPD Konfig bereit so das das o.a. Verhalten nicht mehr passiert.
Guckst du hier:
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
und in der Praxisumsetzung auch hier.
Leider fehlt hier deine Fritzbox Konfig Datei aber auch dort kannst du ein Keepalive auf die Strongswan Loopback IP konfigurieren was dann auch ganz ohne DPD die Verbindung immer sofort wieder nach der Zwangstrennung neu aufbaut.
So oder so ist das problemlos lösbar und natürlich auch mit DynDNS.
Guckst du hier:
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
und in der Praxisumsetzung auch hier.
Leider fehlt hier deine Fritzbox Konfig Datei aber auch dort kannst du ein Keepalive auf die Strongswan Loopback IP konfigurieren was dann auch ganz ohne DPD die Verbindung immer sofort wieder nach der Zwangstrennung neu aufbaut.
So oder so ist das problemlos lösbar und natürlich auch mit DynDNS.
Bitte unbedingt Code Tags benutzen!! Geht immer auch noch nachträglich.
Das erleichtert allen hier das Lesen und die Übersichtlichkeit der Konfigs!
1.)
Ein paar Infos zu den Fritzbox Algorithmen findest du auch hier.
2.)
Fritzbox VPN Tunnel erfordert keine Zertifikate weil die FB das ja auch gar nicht kann.
3.)
Deine Server Konfig hat ein paar Fehler weil du unter local und remote ts in der Regel immer Netze angibst und keine Hosts. Es sei denn...du willst nur einem einzigen Host den Zugriff über das VPN erlauben.
OK, sehe gerade 3a!! Ja, das ist dann korrekt wenn nur eine einzige IP aus dem remoten Netz!
Mit Code Tags dann so
Ansonsten aber alles korrekt!
3c)
Normal ist das die feste WAN IP Adresse eines vServers, also die feste öffentliche IP eines Hosters.
WIE ist den Proxmox bzw. die VM im Netz. Ist das ein Setup hinter einen NAT Router?
Wenn ja, dann musst du ggf. mit FQDNs arbeiten. Das hängt von deinem Proxmox Setup ab.
Die Fritzbox Konfig hat einen Fehler in der Keepalive IP, denn das .2.0er Netz gibt es bei dir in dem Design ja nicht. Ein Keeplaive dahin wäre also ohne Funktion ist aber immens wichtig für die Zwangstrennung!
Das Problem ist allerdings das dann nur der .3.249er Host in den Tunnel geroutet wird.
Die Keepalive Pings die an den .3.19er Server gehen springen damit über die Klinge!
Es wäre deutlich besser du würdest eine etwas intelligentere IP Adressvergabe im 3er Netz machen und die per VPN erreichbaren Adressen in einen CIDR Scope bringen wie z.B.
192.168.3.248 /29 (255.255.255.248) was dann z.B. den Bereich der Adressen von .3.249 bis .3.254 umfasst. oder
192.168.3.240 /29 den Bereich der Adressen von .3.241 bis .3.246.
Du bist damit auch deutlich flexibler wenn nochmal ein paar erreichbare Adressen dazukommen sollten! 😉
Generell kommt bei der Betrachtung deines Setups die Frage hoch wer VPN Initiator und wer Responder ist. Das ist aber für ein Setup sehr wichtig. Das o.a. (Jumphost) Konzept geht immer davon aus das der Strongswan Server der Responder ist und die FritzBox der Initiator.
Bei deinem Konzept könnte es andersrum gemeint sein und dann sieht die Konfig etwas anders aus.
Das erleichtert allen hier das Lesen und die Übersichtlichkeit der Konfigs!
1.)
Ich möchte Main Mode Konfiguriert.
Dann brauchst du immer eine FritzBox Konfig Datei zum Einspielen, denn den Main Mode kannst du nur über die Konfig Datei setzen.Ein paar Infos zu den Fritzbox Algorithmen findest du auch hier.
Ich verwende auf StrongSwan-Seite den IP-Bereich 192.168.3.0/24
WIE ist das gemeint? Ist das die Loopback IP oder hat der Server noch ein lokales LAN bzw. lokalen vSwitch (Proxmox) dort? Ist die Vrtualisierung hinter einem Router? Da bitte etwas genauer um Fehler zu vermeiden!2.)
Server Zertifikat mit StrongSwan PKI erstellt (wäre für reinen Jumphost wohl nicht nötig gewesen). Reboot.
Stimmt! ist für die Fritzbox nicht erforderlich und gilt ausschliesslich nur für die IKEv2 Clients.Fritzbox VPN Tunnel erfordert keine Zertifikate weil die FB das ja auch gar nicht kann.
3.)
Deine Server Konfig hat ein paar Fehler weil du unter local und remote ts in der Regel immer Netze angibst und keine Hosts. Es sei denn...du willst nur einem einzigen Host den Zugriff über das VPN erlauben.
OK, sehe gerade 3a!! Ja, das ist dann korrekt wenn nur eine einzige IP aus dem remoten Netz!
Mit Code Tags dann so
connections {
fritzbox {
local_addrs = <vserver_wan_ip_addresse>
remote_addrs = 0.0.0.0/0
local {
auth = psk
id = <vserver_wan_ip_addresse>
}
remote {
auth = psk
id = keyid:strongswan@fritz.box
}
children {
net {
local_ts = 192.168.3.249/32
remote_ts = 192.168.5.0/24
esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
version = 1
proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
secrets {
ike-1 {
id = keyid:strongswan@fritz.box
secret = "test1234"
}
}
3c)
Normal ist das die feste WAN IP Adresse eines vServers, also die feste öffentliche IP eines Hosters.
WIE ist den Proxmox bzw. die VM im Netz. Ist das ein Setup hinter einen NAT Router?
Wenn ja, dann musst du ggf. mit FQDNs arbeiten. Das hängt von deinem Proxmox Setup ab.
Die Fritzbox Konfig hat einen Fehler in der Keepalive IP, denn das .2.0er Netz gibt es bei dir in dem Design ja nicht. Ein Keeplaive dahin wäre also ohne Funktion ist aber immens wichtig für die Zwangstrennung!
vpncfg {
connections {
enabled = yes;
editable = no;
conn_type = conntype_lan;
name = "StrongSwan";
always_renew = yes;
reject_not_encrypted = no;
dont_filter_netbios = yes;
localip = 0.0.0.0;
local_virtualip = 0.0.0.0;
remoteip = <v_server_wan_ip_addresse>;
remote_virtualip = 0.0.0.0;
keepalive_ip = 192.168.3.19;
localid {
key_id = "strongswan@fritz.box";
}
remoteid {
ipaddr = <v_server_wan_ip_addresse>;
}
mode = phase1_mode_idp;
phase1ss = "LT8h/all/all/all";
keytype = connkeytype_pre_shared;
key = "test1234";
cert_do_server_auth = no;
use_nat_t = yes;
use_xauth = no;
use_cfgmode = no;
phase2localid {
ipnet {
ipaddr = 192.168.5.0;
mask = 255.255.255.0;
}
}
phase2remoteid {
ipnet {
ipaddr = 192.168.3.249;
mask = 255.255.255.255;
}
}
phase2ss = "esp-all-all/ah-none/comp-all/pfs";
accesslist = "permit ip any 192.168.3.249 255.255.255.255";
}
}
Die Keepalive Pings die an den .3.19er Server gehen springen damit über die Klinge!
Es wäre deutlich besser du würdest eine etwas intelligentere IP Adressvergabe im 3er Netz machen und die per VPN erreichbaren Adressen in einen CIDR Scope bringen wie z.B.
192.168.3.248 /29 (255.255.255.248) was dann z.B. den Bereich der Adressen von .3.249 bis .3.254 umfasst. oder
192.168.3.240 /29 den Bereich der Adressen von .3.241 bis .3.246.
Du bist damit auch deutlich flexibler wenn nochmal ein paar erreichbare Adressen dazukommen sollten! 😉
Generell kommt bei der Betrachtung deines Setups die Frage hoch wer VPN Initiator und wer Responder ist. Das ist aber für ein Setup sehr wichtig. Das o.a. (Jumphost) Konzept geht immer davon aus das der Strongswan Server der Responder ist und die FritzBox der Initiator.
Bei deinem Konzept könnte es andersrum gemeint sein und dann sieht die Konfig etwas anders aus.
Der StrongSwan-Server hängt an einem NAT-Router
Das ist OK und die statische Route auch richtig!Kardinalsfrage bleibt aber WER ist in deinem VPN Konzept der Initiator (VPN Client der aktiv den Tunnel aufbaut) und WER der Responder (VPN Ziel, Server)?
Das hast du in deiner Antwort oben leider immer noch nicht wasserdicht beantwortet.
Das von dir zitierte Konzept bzw. das Jumphost Tutorial gehen immer davon aus das der Strongswan Server der Responder (Server) ist und die remote Fritzbox der Initiator!
Das ist auch logisch da das Tutorial hier einen vServer mit einer festen öffentlichen IP annimmt. Bei einem Initiator sieht die Konfig geringfügig anders aus.
Wenn das auch deinem Design entspricht, dann fehlt in deinem derzeitigen NAT Router Setup noch ein Port Forwarding der IPsec Protokolle auf den Strongswan Server. Oder du hast vergessen das zu erwähnen?!
Die remote Fritzbox ist ja in dem Falle dann der Initiator, also baut aktiv die VPN Verbindung auf. Da sie den Server logischerweise nicht direkt hinter dem NAT Router erreichen kann spricht sie die WAN IP Adresse des NAT Routers oder seinen DDNS Hostnamen, der ja dann auf die Router WAN IP zeigt, an.
Der NAT Router forwardet dann diesen VPN Request an den internen Strongswan Server. Simples Port Forwarding am Router also!
Genau so ein Port Forwarding Szenario findest du HIER beschrieben denn es entspricht dem einer Router Kaskade.
Der NAT Router muss im Falle das der Strongswan Responder ist, dann UDP 500, UDP 4500 und das ESP Protokoll auf die lokale 192.168.3.19 IP forwarden damit die VPN Pakete auch am Strongswan ankommen.
Ist der Strongswan allerdings der Initiator, dann ist das NICHT nötig und es reicht die statische Route.
Das solltest also technisch nochmal klarstellen bevor wir hier falsche Konfigs troubleshooten!!
Da du ja schon ein laufendes Setup hattest wäre es noch einmal hilfreich die dazu korrespondierende Fritzbox Konfig zu sehen.
Du kannst die immer aus der laufenden FB sehr einfach extrahieren indem du eine Konfig Sicherung ausführst.
Die gesicherte Datei ist eine simple Textdatei die du mit einem beliebigen Editor editieren kannst wie z.B. Notepad++. Dort sucht du den Abschnitt "vpncfg {..." und cut and pastes den einfach raus.
Man müsste dann nicht groß fummeln und ggf. nur deine Strongswan Konfig etwas anpassen das die Keepalives durchkommen was sehr wahrscheinlich deine Problematik dann sofort löst.
Dazu ist es aber essentiell das du die Rolle Initiator und Responder klärst!
Nur ESP-Forwarding... Wie geht das?
Du solltest auch mal die dir oben dazu geposten Links wirklich lesen! Da sind die relevanten Ports bzw. Protokolle für IPsec doch alle aufgelistet. ESP ist ein eigenständiges IP Protokoll mit der IP Nummer 50. Der ESP Tunnel transportiert bei IPsec die Produktivdaten der SAs.
Zurück zur IPsec Konfig...
OK, Strongswan = Responder und Fritze = Initiator. 👍 Vereinfacht die Sache.... 😉
2 Dinge kannst du an deiner o.a. aktuellen Fritzbox Konfig sehen:
- FB authentisiert sich lokal und remote mit einem FQDN Namen. Das muss auf beiden Seiten übereinstimmen sonst scheitert der Tunnelaufbau.
- FB negotiated als Phase 2 SAs die beiden Netze .3.0 /24 und .5.0 /24. Auch das muss immer mit dem Gegenüber korrespondieren sonst scheitert der Tunnelaufbau ebenso. Nur als Erinnerung weil du den Strongswan abweichend davon mit einem Host bzw. jetzt mit einer CIDR Range .240 /29 konfiguriert hast. Entspricht dort den local_ts und remote_ts Parametern.
Die korrespondierende Strongswan Konfig sähe dann so aus:
connections {
fritzbox {
local_addrs = 192.168.3.19
remote_addrs = 0.0.0.0/0
local {
auth = psk
id = fqdn:strongswan.ddnss.de
}
remote {
auth = psk
id = fqdn:fb.ddnss.de
}
children {
net {
local_ts = 192.168.3.240/29
remote_ts = 192.168.5.0/24
esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
version = 1
proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
secrets {
ike-1 {
id = fqdn:fb.ddnss.de
secret = "test1234"
}
}
Diese o.a. Strongswan Konfig erwartet dann eine Main Mode Connection der Fritzbox. Sprich mode = phase1_mode_idp; in der dortigen Konfig!
Deine o.a. gepostete FritzBox Konfig ist aber, wie du sicher auch selber siehst, eine die den Agressive Mode nutzt, was auch der Default bei der FritzBox ist.
Das kannst du so belassen, musst den Agressive Mode aber dann explizit im Strongswan erlauben, denn der ist im Default dort deaktiviert!!
Dazu editierst du du die /etc/strongswan.d/charon.conf Datei mit dem nano und suchst (<ctrl> w) nach dem Abschnitt:
# Allow IKEv1 Aggressive Mode with pre-shared keys as responder.
i_dont_care_about_security_and_use_aggressive_mode_psk = yes
Dann ein systemctl restart strongswan und schon akzeptiert er auch die Aggressive Mode Connection einer Standard Fritzbox!
Das musst du dem Strongswan dann auch in seiner Tunnelkonfig für die Fritzbox sagen:
connections {
fritzbox {
local_addrs = 192.168.3.19
remote_addrs = 0.0.0.0/0
local {
auth = psk
id = fqdn:strongswan.ddnss.de
}
remote {
auth = psk
id = fqdn:fb.ddnss.de
}
children {
net {
local_ts = 192.168.3.240/29
remote_ts = 192.168.5.0/24
esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
version = 1
aggressive = yes
proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
secrets {
ike-1 {
id = fqdn:fb.ddnss.de
secret = "test1234"
}
}
Wenn du dann noch deine o.a. Fritzbox konfig korrekt auf die dazu korrespondierenden Phase 2 Credentials anpasst
phase2localid {
ipnet {
ipaddr = 192.168.5.0;
mask = 255.255.255.0;
}
}
phase2remoteid {
ipnet {
ipaddr = 192.168.3.240;
mask = 255.255.255.248;
}
}
⚠️ ...und was bei dir leider in der o.a. FB Konfig fehlt:
Einen Keepalive in der FB Konfig setzen oder übers GUI hinzufügen keepalive_ip = 192.168.3.x; so das die FB immer aktiv ein Ziel pingt und damit den Tunnel auch aktiv hält und wieder aufbaut bei einer Trennung. Dann sollte final alles passen. 😉
Beachte das die Keepalive IP mit der o.a. Konfig immer im Address Bereich 192.168.3.240 /29 (255.255.255.248) also zw. den Adressen .3.241 bis .3.246 liegen muss, weil nur dieser Bereich über den VPN Tunnel übertragen wird! (Phase 2 SAs).
Der fehlenden Fritzbox Keepalive ist in deiner alten Konfig sehr wahrscheinlich auch der Auslöser das es nach einer Zwangstrennung zu keinem neuen Tunnelaufbau kommt was dann das fehlende DPD nicht kompensieren kann.
Nur zur Erinnerung...
Willst du mit Main Mode arbeiten musst du 2 Dinge anpassen:
- mode = phase1_mode_idp; in der FB Konfig Datei setzen
- aggressive = yes aus der Strongswan Konfig entfernen
Lasse zudem immer ein swanctl -T mitlaufen auf dem Strongswan wenn die Fritzbox sich einwählt um ggf. Fehler immer mitprotokollieren zu können! (<ctrl> c stoppt den Trace wieder)
Juchu, der Tunnel baut sich auf! Sogar im Main Mode.
Glückwunsch! 👏👍 Hättest du etwas anderes erwartet...? 😉und remoteip ganz weggelassen
Das ist korrekt wenn man ein remotes Ziel mit wechselnder IP hat und nur mit dem (DDNS) Hostnamen arbeitet. Man kann pro Seite immer nur IP oder Hostname verwenden nicht beides.Es wird kein Traffic zum StrongSwan geroutet. Ein Ping zu 192.168.3.1, 192.168.3.19 oder 192.168.3.241 ist erfolglos.
⚠️ Wichtige Frage vorab: IPv4 Forwarding hast du im VPN Server in der /etc/sysctl.conf aktiviert und rebootet??Wenn ja ist zumindestens für die Adressen .3.1 und .3.19 das auch vollkommen korrekt so und von dir mit der CIDR Einschränkung im Tunnel ja auch so gewollt. Siehe Threadkommunikation oben!! 🧐
Im Eifer des (VPN) Gefechts hast du sicher die CIDR Range in den Phase 2 SAs vergessen die du dir selber für das 3er Netz mit
local_ts = 192.168.3.240/29 und auf der FB mit:
phase2remoteid {
ipnet {
ipaddr = 192.168.3.240; mask = 255.255.255.248; }
BEIDSEITIG definiert hast um nicht nur einen einzelnen Host ins VPN zu routen sondern damit einen limitierten IP Addressbereich mit Keepalive IP und dem Applikationsserver.
Zitat: "...gute Idee, so mach ich das."
Mit den P2 SAs bestimmst du immer den relevanten Traffic der in den VPN Tunnel geroutet wird!
Eine 29 Bit Maske des CIDR Netzes 192.168.3.240 inkludiert also nur die IP Adressen von .3.241 bis .3.246!
Mit anderen Worten aus dem .5.0er Netz werden im 3er Netz dann nur die Ziel IPs .3.241 bis .3.246 in den VPN Tunnel geroutet. Alle anderen landen im Nirwana!!
Sprich alle deine remote, über VPN aus dem .5.0er Netz liegenden IPs inkl. der Keepalive IP, VPN Server usw., müssen also in diesem Bereich liegen!
Und...wenn diese Geräte den lokalen Router z.B. .3.1 als Default Gateway haben muss der eine statische Route des .5.0er Netzes auf die VPN Server IP haben.
Folglich muss der VPN Server, wie gesagt, selber mit seiner lokalen IP auch in der Range liegen. VPN Server und auch Applikationsserver bzw. erreichbare 3er IPs müssen in diesem Bereich liegen.
Möchtest du lieber die .3.19er IP behalten und auch den lokalen Router dort pingbar haben musst du natürlich die CIDR Range so umkonfigurieren das es wieder passt. Dann aber auch den Applikationsserver der dann nicht die .3.24x haben kann. Andernfalls musst du alternativ das gesamte 3er Netz in den Phase 2 SAs freigeben.
Beispiel:
local_ts = 192.168.3.0/27 und auf der FB mit:
phase2remoteid {
ipnet {
ipaddr = 192.168.3.0; mask = 255.255.255.224; }
Erreicht alle Ziel IPs .3.1 bis .3.30 was dann den Server mit der .19 inkludiert.
Eine kleinere Maske geht nicht, da /28 nur .3.1 bis .3.14 abdeckt und die .19 wieder außen vor ist.
Einfache IP Subnetzrechnung... 😉
Schrotschusslösung ist mit
local_ts = 192.168.3.0/24 und auf der FB mit:
phase2remoteid {
ipnet {
ipaddr = 192.168.3.0; mask = 255.255.255.0; }
dann beide Netze vollständig per VPN erreichbar zu machen und bei Zugangsbeschränkungen mit der Firewall auf dem VPN Server (nftables) oder lokalen Firewalls auf den Endgeräten zu arbeiten.
Such dir die für dich schönste Variante aus!
Aber mein Ubiquiti-Router läßt nur UDP- und TCP-Forwarding zu.
UBQT Schrott eben... Von sowas lässt man auch die Finger als Netzwerker. ☹️Trotzdem tut sich die Frage auf warum du das Fritzbox VPN dann nicht auf dem UBQT Router terminierst. Der kann doch auch IPsec, oder kann er das etwa auch nicht?
Dann bleibt mir ja nur Deine "Schrotschuß-Lösung" übrig.
Das ist ja auch der übliche Klassiker bei einem VPN. Konfig oben ist korrekt so.aber damit baut sich kein Tunnel mehr auf. swanctl -T ist leer.
Bedeutet das am Server keine IPsec Pakete ankommen. Die FB sendet also schon keinen VPN Traffic. Tippfehler beim DDNS Namen, Port Forwarding Fehler oder sowas?!?Installiere dir mal mit tcpdump einen kleinen onboard Sniffer auf dem Server (apt install tcpdump (sudo)) dann startest du tcpdump port 500 um dir die eingehenden IKE (UDP 500) Pakete ansehen zu können die den Tunnelaufbau triggern. (Stop mit <ctrl> c)
Dann startest du die FB oder ziehst mal deren WAN Port was den VPN Tunnelaufbau neu triggert.
Jetzt solltest du in jedem Falle eingehenden IKE/ISAKMP Traffic (UDP 500) am Server sehen!!
Wenn nicht kommt am Server schon gar kein VPN Traffic von der FB an, dann stimmt irgendwas an der FB oder deinem Port Forwarding nicht.
Solltest du mehrere Interfaces am Server haben kannst du dem tcpdump dies auch mit "-i" dediziert mitgeben ala tcpdump -i eth0 port 500. Wie dein Interface heisst siehst du mit "ip a".
Kann auch mal sein das sich die FB verschluckt hat. Zur Sicherheit filft dann ein Reboot oder wie du es gemacht hast die VPN Datei neu einzuspielen, was den VPN Daemon auf der FB auch neu startet.
Wenn du einen Tippfehler im klassischen Setup mit den /24er Netzwerkmasken in der P2 gemacht hättest würde die FB auch meckern.
Kann es ggf. auch sein das du nach der Änderung der Konfig auf dem Server ein systemctl restart strongswan vergessen hast? Das stellt sicher das die Konfig Änderung mit dem Daemon Neustart wirklich ausgeführt wird. swanctl -q kann in seltenen Fällen auch mal haken.
Tip:
Wenn du ein -n beim tcpdump Kommando einsetzt also tcpdump -n port 500 macht der Sniffer keinen DNS Lookup und du siehst die nackten IPs was manchmal übersichtlicher ist.
Wenn du einen Tippfehler im klassischen Setup mit den /24er Netzwerkmasken in der P2 gemacht hättest würde die FB auch meckern.
und die Zwangstrennung heute morgen hat der Tunnel auch überlebt...
Klingt ja fürs erste positiv! 👍 Aber das Setup muss natürlich auch so mit der P2 Freigabe der ganzen Netze laufen.Kann es ggf. auch sein das du nach der Änderung der Konfig auf dem Server ein systemctl restart strongswan vergessen hast? Das stellt sicher das die Konfig Änderung mit dem Daemon Neustart wirklich ausgeführt wird. swanctl -q kann in seltenen Fällen auch mal haken.
Tip:
Wenn du ein -n beim tcpdump Kommando einsetzt also tcpdump -n port 500 macht der Sniffer keinen DNS Lookup und du siehst die nackten IPs was manchmal übersichtlicher ist.
Die DPD (Dead Peer Detection) Timer sind im Default auf 0 gesetzt. https://docs.strongswan.org/docs/5.9/swanctl/swanctlConf.html
Ggf. macht es Sinn diese auf einen sinnvollen Wert zu setzen.
Noch einfacher wäre es allerdings wenn du schlicht und einfach auf der Fritzbox eine Keepalive IP konfigurierst. Bleibt der Ping Response aus triggert die FB den Peer neu. Das klappt aber nur wenn die Fritzbox VPN Initiator ist, NICHT wenn sie Responder ist.
Wenn du einen standalone vServer mit Strongswan hast machst du das idealerweise über eine 2te Loopback Adresse die das Keepalive Ziel ist.
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
Ggf. macht es Sinn diese auf einen sinnvollen Wert zu setzen.
Noch einfacher wäre es allerdings wenn du schlicht und einfach auf der Fritzbox eine Keepalive IP konfigurierst. Bleibt der Ping Response aus triggert die FB den Peer neu. Das klappt aber nur wenn die Fritzbox VPN Initiator ist, NICHT wenn sie Responder ist.
Wenn du einen standalone vServer mit Strongswan hast machst du das idealerweise über eine 2te Loopback Adresse die das Keepalive Ziel ist.
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
Das ist ja gerade der Schlüssel, denn die Erzeugung des Phase 2 relevanten Traffics triggert sofort den Aufbau des Peers. Ob dabei eine Antwort kommt ist dabei völlig Wumpe da nur der Traffic zählt. Normal bleibt ein VPN passiv solange kein relevanter Traffic kommt der in der Phase 2 SA definiert ist. Einfache Logik...
Sollte das always_renew ggf. auf yes jetzt werden?
Ja, unbedingt wenn deine FB der VPN Initiator ist!!Ok, gerade überprüft, aber die keepalive_ip ist in der FB-Config gesetzt (s.o.).
Gut aber wenn du oben schreibst (Zitat): "aber im entfernten Netzwerk keinem Gerät zugewiesen." dann ist das Setzen dieser IP natürlich sinnfrei. Dort sollte schon ein aktives Gerät (IP) hinterlegt sein. Idealerweise die Loopback IP des Servers, es geht aber natürlich auch jede andere. Warum ist die Einrichtung einer expliziten Loopback-IP eigentlich notwendig
Sie ist nicht "notwendig" im Sinne eines Zwangs. Vorteil ist aber das der Server als VPN Responder immer erreichbar ist bzw. sein sollte!! Bei IPs im lokalen LAN ist das ja ggf. nicht immer der Fall sollte z.B. der Switch mal ausfallen usw. Ein Einrichtezwang in dem Sinne besteht selbstverständlich nicht du kannst natürlich jede beliebige (erreichbare) IP im remoten Netz nehmen.Gibts da eine Erklärung für?
Das wäre sehr ungewöhnlich. In der Regel dokumentiert die Fritzbox in den "Ereignissen" immer wenn es eine Link Loss oder einen Aufbau der Tunnelverbindung gibt. Zumindestens macht es hier eine 7490 mit latest 7.4er Image wenn man einen VPN Link loss manuell initiiert. Strongswan dokumentiert das ebenfalls. (swanctl -l und ip xfrm state)Wie kann das sein??
Gute Frage... Hört sich so an als ob der Provider auf einer Seite Wartungsarbeiten oder sowas gemacht hat oder es eine DoS Attacke gab. Mehrere hiesige Strongswan Server rennen seit 2 Jahren ohne jegliche Ausfälle oder Hänger (Debian 12).Hast du den Server zusätzlich mit einer Firewall gesichert (nftables)? Desweiteren ist natürlich fail2ban Pflicht und... das du in jedem Falle und auch den SSH Zugang auf einen Key umstellst und NICHT mehr Username/Passwort nutzt!
Diese 3 Dinge sind für einen stabilen Betrieb eines solchen Servers Pflicht.
Eine grundlegende /etc/nftables.conf Datei findest du im Tutorial.
Grundlagen zu fail2ban u.a. hier.
OK, dann kannst du das als Fehler natürlich ausschliessen, keine Frage.
Bleibt dann nur noch die wackelige Leitungsqualität des Providers.
https://www.heise.de/select/ct/2024/5/2329915072010250772
Bleibt dann nur noch die wackelige Leitungsqualität des Providers.
https://www.heise.de/select/ct/2024/5/2329915072010250772
Was ggf. noch einen Versuch wert ist, ist der Fakt das PFS laut AVM nicht supportet ist im Fritzbox IPsec VPN:
https://avm.de/service/wissensdatenbank/dok/FRITZ-Box-5490/3331_FRITZ-Bo ...
"Authentication Header (AH) und Perfect Forward Security (PFS) werden nicht unterstützt."
Die Strongswan Doku sagt dazu im Kapitel IPsec SAs:
https://docs.strongswan.org/docs/5.9/config/rekeying.html
"To make PFS optional (i.e. let the peer choose whether PFS is used or not) add proposals with and without DH groups e.g"
Sinnvollerweise sollte man dann die Fritzbox Peer Definition in der Strongswan Konfig darauf anpassen:
So ist PFS optional. Oder, da es eh nicht supportet ist, im Fritzbox Peer gleich ganz weglassen mit "esp_proposals = aes256-sha512,aes256-sha1"
Ein Fehler den das Tutorial leider nicht beachtet hat aber korrigiert wird!
Das SHA512 Hashing in der Phase 2 sollte man bei einem Fritzbox Tunnel ggf. auch besser entfernen sofern eine größere Bandbreite im VPN das Ziel ist. Siehe dazu HIER.
Hattest du das Verhalten in beiden Modi, also Main Mode und Agressive Mode, getestet??
Gab es einen Unterschied in beiden Modi mit dem "always_renew = yes/no;" Kommando ob yes oder no?
Der Strongswan ist ja Responder so das ein Rekeying einzig nur vom Initiator also der Fritzbox ausgehen kann. Es ist vollkommen unverständlich warum diese nach der Zwangstrennung nicht sofort den Tunnel wieder aufbaut. Die Keepalives sorgen ja zusätzlich auch dafür das Tunnel relevanter Traffic gesendet wird.
Wie gesagt, an einer hiesigen 7490 mit aktueller Firmware 7.5.7 lässt sich das so nicht reproduzieren.
https://avm.de/service/wissensdatenbank/dok/FRITZ-Box-5490/3331_FRITZ-Bo ...
"Authentication Header (AH) und Perfect Forward Security (PFS) werden nicht unterstützt."
Die Strongswan Doku sagt dazu im Kapitel IPsec SAs:
https://docs.strongswan.org/docs/5.9/config/rekeying.html
"To make PFS optional (i.e. let the peer choose whether PFS is used or not) add proposals with and without DH groups e.g"
Sinnvollerweise sollte man dann die Fritzbox Peer Definition in der Strongswan Konfig darauf anpassen:
esp_proposals = aes256-sha512,aes256-sha512-modp1024,aes256-sha1,aes256-sha1-modp1024
Ein Fehler den das Tutorial leider nicht beachtet hat aber korrigiert wird!
Das SHA512 Hashing in der Phase 2 sollte man bei einem Fritzbox Tunnel ggf. auch besser entfernen sofern eine größere Bandbreite im VPN das Ziel ist. Siehe dazu HIER.
Hattest du das Verhalten in beiden Modi, also Main Mode und Agressive Mode, getestet??
Gab es einen Unterschied in beiden Modi mit dem "always_renew = yes/no;" Kommando ob yes oder no?
Der Strongswan ist ja Responder so das ein Rekeying einzig nur vom Initiator also der Fritzbox ausgehen kann. Es ist vollkommen unverständlich warum diese nach der Zwangstrennung nicht sofort den Tunnel wieder aufbaut. Die Keepalives sorgen ja zusätzlich auch dafür das Tunnel relevanter Traffic gesendet wird.
Wie gesagt, an einer hiesigen 7490 mit aktueller Firmware 7.5.7 lässt sich das so nicht reproduzieren.