IPv6-Tunnelrouting von Strongswan

1444
Krakonos

Ich versuche ein seltsames Problem beim Routing zu lösen. Ich habe meinen Router eingerichtet (Turris, mit benutzerdefiniertem OpenWRT), mit Strongswan-Tunneling-IPv6-Verbindung. Dies funktioniert gut für den Router selbst, da die IPv6-Konnektivität einwandfrei funktioniert (über den Tunnel bietet mein Provider keine native IPv6 an).

TL; DR: Routen werden nicht wie erwartet ausgewählt, da die allgemeinste Route :: / 0 immer bevorzugt wird, obwohl eine / 64-Übereinstimmung verfügbar ist.

Als ich jedoch versuchte, dies auf mein Heimnetzwerk auszudehnen, bin ich auf ein Problem gestoßen und kann keine Ursache finden.

Obwohl die IPSec funktioniert, bekomme ich eine IPSec0-Schnittstelle und diese Routen:

Kernel IPv6 routing table Destination Next Hop Flags Metric Ref Use Iface ::/0 :: U 1024 0 2 ipsec0  2a01:490:19:42::/64 :: U 1024 0 0 br-lan  

Hier ist 2a01: 490: 19: 42 :: / 64 ein Rang, den ich für mein lokales Netzwerk reserviert habe, 2a01: 490: 19: 42 :: 1 ist die IP-Adresse des Routers in diesem Netzwerk.

Hier einige Beobachtungen:

1) Wenn ich von einem Computer in meinem lokalen Netzwerk aus ping 2a01: 490: 19: 42 :: 1 anrufe, antwortet der Router, sendet jedoch die Antwort an die ipsec0-Schnittstelle. Ich habe keine Idee warum. Sollte nicht das spezifischere Präfix 2a01: 490: 19: 42 :: / 64 auf br-lan bevorzugt werden? Es scheint, die Quell-IP-Adresse 2a01: 490: 19: 42 :: 1 richtig zu wählen.

2) Das Gleiche passiert, wenn ich versuche, ein Paket von meinem lokalen Netzwerk an einen anderen Standort zu senden, z. B. ping6 stackexchange.com. Die Pakete gelangen auf den Router, werden weitergeleitet, der Server sendet eine Antwort, der Router holt sie ab ... und sendet sie an die ipsec0-Schnittstelle zurück.

3) Es gibt keine xfrm-Richtlinien. ip xfrm polgibt nichts zurück Aber Strongswan läuft und ich hatte den Eindruck, dass Strongswan immer einige Richtlinien aufstellt. In meinem vorherigen Setup musste ich einige hinzufügen, damit Pakete in den Tunnel geleitet werden können, aber ich bin etwas verwirrt, weil die Richtlinienliste leer ist.

Okay, was ist los? Warum wird die allgemeinste Route :: / 0 für meine IPv6-Pakete bevorzugt?

Vielen Dank!

0

1 Antwort auf die Frage

0
Krakonos

Das Problem war, dass ipsec seine Regeln in eine andere Routing-Tabelle (Tabelle 220) eingefügt und eine Richtlinie erstellt hat, um den Datenverkehr dorthin zu leiten:

root@turris:/etc/config# ip rule list 0: from all lookup local  220: from all lookup 220  32766: from all lookup main  32767: from all lookup default  

Die Tabelle 220enthielt jedoch nur eine Standardroute in den IPSec-Tunnel und nicht das lokale Netzwerk:

root@turris:/etc/config# ip -6 r show table 220 default dev ipsec0 proto static src 2a01:490:19:42::1 metric 1024  

Dies führte unweigerlich dazu, dass alle Pakete in den Tunnel weitergeleitet wurden.

Das Netzwerk für den Router selbst funktionierte nur, weil sie angenommen und nicht weitergeleitet wurden.

I fixed dies durch strongswan anweist Routing - Regeln in die Haupttabelle, indem stattdessen einzufügen charon.routing_table = 254(die ID des Hauptes, wie zu sehen in /etc/iproute2/rt_tables). Mein strongswan.confjetzt sieht so aus:

charon { # load_modular = yes plugins { include strongswan.d/charon/*.conf } routing_table = 254 # main }