TCP Anycast Multipath Routing: Der Router bevorzugt immer ein anderes

350
Benny93

Ich versuche, TCP Anycast ohne zusätzliche Protokolle zu verwenden, um einen Client mit einem von mehreren Hosts mit derselben Anycast-IP zu verbinden.
Meine Topologie sieht wie folgt aus:

Link zum Bild der Topologie

Der Server in der Mitte ist ein Ubuntu-Computer, der zwei Routen für die Anycast-Adresse bereitstellt.
Meine Multipath-Routing-Konfiguration (am Router) lautet:

`10.11.12.13 proto static nexthop via 192.168.2.1 dev enp0s9 weight 1 nexthop via 192.168.3.1 dev enp0s10 weight 1`  

Die Anycast-Adresse ist 10.11.12.13und wird dem lokalen Loopback der beiden Router auf der rechten Seite zugeordnet. Auf der linken Seite befindet sich ein Client mit dem Router in der Mitte als Standardgateway.

Szenario 1: Der Router in der Mitte startet eine TCP-Sitzung mit der Anycast-Adresse als Ziel.

Szenario 2: Der Client auf der linken Seite startet eine TCP-Sitzung mit der Anycast-Adresse als Ziel.

Überwachung:

Wenn Sie eine TCP-Sitzung vom Router (Ubuntu Linux) aus starten, funktioniert alles wie gewünscht. Das SYN-Paket wird mit gleicher Wahrscheinlichkeit über einen der beiden Hops weitergeleitet. Wenn eine Sitzung eingerichtet ist, durchlaufen alle Pakete dieser Sitzung denselben Hop und halten die Verbindung am Leben (erfolgreiches flussbasiertes Multipath-Routing).

Das Problem tritt in Szenario 2 auf, wenn ich versuche, eine TCP-Sitzung vom Client an 192.168.1.1/24 einzurichten. Der Router leitet die Pakete immer an nur einen der Hosts weiter (den mit dem IP-Suffix 3.1). Wenn ich die Verbindung eth2 zu diesem Host herunternehme, leitet der Router die Pakete an den zweiten Host weiter. Beim Wiederherstellen von eth2 wechselt die Verbindung bei 3.1 wieder zum Host, was zu einer Trennung zwischen Client und Host bei Suffix 2.1 führt.

Ich kann nur einen Videolink posten. Hier ist ein Video, das zeigt, wie es aus der Perspektive des Clients aussieht: https://youtu.be/kthYK9uEwvM
Beachten Sie, wie das TCP-SYN vom Client immer mit dem Suffix 3.1 an den Host weitergeleitet wird ( rechte untere Ecke).

Terminals:
Router: oben links, Client: unten links, Host 2.1: oben rechts, Host 3.1: unten rechts.

Meine Kernelversion ist der 4.4 Linux Kernel. Die TCP-Sitzung wird mit netcat (Server) und Telnet (Client) eingerichtet.

Die Änderung des Gewichtes der Nexthops wirkt sich auch nur auf das Routing vom Router aus (192.168.1.254> 10.11.12.13).

Warum leitet der Router das SYN-Paket anders weiter, wenn das Paket vom Client gesendet wird, als wenn es vom Router selbst gesendet wird?

Danke für Ihre Hilfe!

0
Link zu einem Video mit Szenario 1: [https://youtu.be/JYoxcsVEbsc] (https://youtu.be/JYoxcsVEbsc) Benny93 vor 6 Jahren 0

1 Antwort auf die Frage

0
Benny93

Es scheint, dass dies ein Problem von ipv4 ist.
Die Verwendung von ipv6 und eines Linux-Kernels 4.4 ubuntu mit fast derselben Konfiguration funktionierte wie erwartet. Link zum Bild der Topologie
Obwohl ICPM-Ping-Nachrichten immer durch das erste Nexthop routet werden, werden TCP-Nachrichten gleichermaßen auf die Nexthops verteilt. Bestehende TCP-Sitzungen scheinen stabil zu sein (der Kern erkennt also Flüsse korrekt).