Warum werden für einen IPSec-Tunnel nur 3 ip xfrm-Richtlinien benötigt?

8

Ich habe einen IPSec-Tunnel von Standort zu Standort, der zwischen einer strongswan(v5.2.0) Instanz (Standort A) und einem RouterOSRouter (Standort B) ausgeführt wird. Alles funktioniert einwandfrei, die Hosts in den beiden privaten Subnetzen, die für Site A ( 10.10.0.0/16) und B ( 10.50.0.0/16) eingerichtet wurden, können einwandfrei miteinander kommunizieren.

Was ich jedoch nicht verstehe, ist die folgende Ausgabe des ip xfrm policyRouters von Standort A (öffentliche IPs verschleiert). Diese Richtlinien wurden erstellt von strongswan, ich habe sie nicht manuell installiert oder geändert:

ip xfrm policy 
src 10.50.0.0/16 dst 10.10.0.0/16 
    dir fwd priority 2947 ptype main 
    tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A>
        proto esp reqid 1 mode tunnel
src 10.50.0.0/16 dst 10.10.0.0/16 
    dir in priority 2947 ptype main 
    tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A>
        proto esp reqid 1 mode tunnel
src 10.10.0.0/16 dst 10.50.0.0/16 
    dir out priority 2947 ptype main 
    tmpl src <PUBLIC_IP_A> dst <PUBLIC_IP_B>
        proto esp reqid 1 mode tunnel

Es gibt jeweils eine Richtlinie für die Eingabe und Ausgabe, aber nur eine für die Weiterleitung (von Standort B zu Standort A). Aber ich kann immer noch erfolgreich pingen, zum Beispiel 10.50.4.11von 10.10.0.89:

ping -R 10.50.4.11
PING 10.50.4.11 (10.50.4.11): 56 data bytes
64 bytes from 10.50.4.11: icmp_seq=0 ttl=62 time=10.872 ms
RR:     10.10.0.89
    10.50.0.1
    10.50.4.11
    10.50.4.11
    10.50.4.11
    10.10.0.2
    10.10.0.89

Das Interessante an dieser Routenverfolgung ist, dass der Router ( 10.10.0.2) von Standort A nur auf der Route vom Ping-Ziel zurück angezeigt wird, während der Router ( 10.50.0.1) von Standort B nur für die ausgehende Route aufgeführt ist.

Dies scheint zu bestätigen , dass es tatsächlich keine Vorwärtspolitik notwendig vor Ort A des Routers weiterleiten 10.10.0.0/16zu 10.50.0.0/16über den IPSec - Tunnel, aber ich verstehe nicht, warum.

Vielen Dank für jede Erklärung!

dorian
quelle

Antworten:

9

Die fwd- Richtlinien werden nicht automatisch vom Kernel generiert, sondern vom Keying-Daemon (in diesem Fall strongSwan) installiert.

Sie sind erforderlich, damit der Datenverkehr im Tunnelmodus zu und von Hosts hinter dem VPN-Gateway weitergeleitet werden kann.

Für ein eingehendes Paket, das Adressen an eine IP-Adresse enthält, die nicht auf dem Gateway selbst installiert ist , wird nach der Entschlüsselung eine fwd- Richtlinie durchsucht. Für den lokalen Verkehr wird nach einer Übereinstimmung in der Richtlinie gesucht. Wenn keine gefunden wird, wird das Paket verworfen.

Für ausgehenden Datenverkehr, der nicht auf dem VPN-Gateway selbst generiert wurde , wird eine fwd- Richtlinie durchsucht. Wenn das Paket nicht verschlüsselt wurde, ist es kein Fehler, wenn keine übereinstimmende FWD- Richtlinie gefunden wird. Wenn der Datenverkehr zwischen zwei Tunneln weitergeleitet wird , fungiert die mit einem installierte eingehende FWD- Richtlinie als ausgehende FWD- Richtlinie für den anderen und umgekehrt. Anschließend wird eine Out- Richtlinie nachgeschlagen, um zu entscheiden, ob das Paket getunnelt werden soll. Aus diesem Grund ist eine fwd- Richtlinie in ausgehender Richtung häufig nicht erforderlich.

Wenn jedoch einen Rückgang zB / Block fwd Politik mit niedriger Priorität , dass Streichhölzer alles (zB unverschlüsselt Verkehr von Passieren des Gateway zu vermeiden , wenn es keine Tunnel etabliert sind) eine fwd Politik in der abgehenden Richtung explizit als erforderlich Blockpolitik wird Andernfalls löschen Sie den gesamten unverschlüsselten Datenverkehr. Aus diesem Grund hat strongSwan mit 5.5.0 begonnen, fwd- Richtlinien in beide Richtungen zu installieren .


In einer früheren Version dieser Antwort wurde angegeben, dass die einzelne (eingehende) fwd- Richtlinie symmetrisch ist (dh, dass src und dst in beide Richtungen funktionieren). Das ist nicht wahr, aber wie oben in vielen Situationen erklärt, spielt dies keine Rolle.

ecdsa
quelle
Ich sehe sehr interessant. Warum werden Pakete jedoch über die fwd-Richtlinie weitergeleitet, wenn src- und dest-Adressen nicht übereinstimmen? Im obigen Beispiel hat das ausgehende Paket von meinem Ping die Quelle 10.10.0.89, wird jedoch von der fwd-Richtlinie mit 10.50.0.0/16 als src-Selektor verarbeitet ... [e]: Sie haben dies tatsächlich mit src und beantwortet dst arbeiten in beide Richtungen. Aber dann denke ich, dass es nicht ganz analog zu der Funktionsweise der FORWARD-Kette in iptables ist.
Dorian
Nein, nicht in Bezug auf dieses spezielle Detail. Ich habe versucht, diesen Satz zu klären.
Ecdsa
Danke, ich glaube ich verstehe jetzt. Kennen Sie eine Referenz, in der solche Details der Linux IPsec-Implementierung angegeben sind?
Dorian
1
@dorian: Leider ist die einzige Referenz unter Linux IPsec die Quelle des Kernels.
SRobertJames