OpenBSD-Multipath-Routing bereitet Probleme


1

Ich versuche, ein Failover-Setup für ein privates NAT-Netzwerk mit zwei nicht sehr stabilen WAN-Verbindungen (LTE / 3G) zu verwalten.

Die Topologie ist recht typisch: Hosts innerhalb des internen Netzwerks verbinden sich mit der internen Schnittstelle [int_if] der OpenBSD-Box, und der Datenverkehr wird mit PF zu einer der beiden externen Schnittstellen [ext_if1 und ext_if2] geleitet .

LAN---->[int_if]--NAT--[ext_if1 or ext_if2]---->WAN1 or WAN2 (depending on kernel decision).

Ich verwende statische IPs auf beiden Ausgangsschnittstellen, jede in einem anderen Subnetz und mit Multipfad-Standardrouten zu den LTE / 3g-Router-Boxen des ISP, wie in OpenBSD Faq für einen kostengünstigen Lastenausgleich beschrieben.

Leider leide ich unter diesem nervigen Verhalten:

  1. Multipath-Routen funktionieren nicht, wenn sie in der Datei hostname.interface festgelegt wurden . In diesem Fall sind beide Standardrouten in der Routing-Tabelle vorhanden, jedoch ohne "P" -Flags. Solange ich die Routen nicht lösche und manuell zurücksetze, wird der gesamte Datenverkehr nur über eines der beiden Gateways weitergeleitet, die ich je nach alphabetischer Reihenfolge der Schnittstellennamen ausgewählt habe. Sieht so aus, als wäre es nur ein "Standard" -Gateway, kein Multipfad belegt ( net.inet.ip.multipathist natürlich auf gesetzt 1).

  2. Während von Hand festgelegte Multipfad-Standardrouten anscheinend gut funktionieren - In der Routingtabelle wird das Flag "P" angezeigt und neststat -r zeigt auf beiden Routen wachsenden Datenverkehr sowie eine Abfolge von Traceroute-Befehlen an.

  3. ping -I one_of_ext_if's_ip some.internet.host funktioniert, würde ich sagen ... zufällig, unabhängig vom tatsächlichen ISP-Verbindungsstatus. Manchmal hilft es, die IP-Adresse anstelle von cname für eine Schnittstelle zu verwenden, während die andere den cnamen bevorzugt. Pings werden nach dem Zufallsprinzip ungültig, während der HTTP-Datenverkehr vom LAN zu gleichen Kosten ohne Verzögerungen ausgeglichen wird. Ich blockiere keinen ausgehenden Datenverkehr mit PF, so dass dies nicht der Punkt ist. Das Deaktivieren von PF ändert überhaupt nichts (außer das LAN von der Welt abzuschneiden). Das Zurücksetzen auf die Standardeinstellungen für einzelne Standardgateways behebt das Problem. Ich kann manuell zwischen beiden Standardrouten wechseln, und Pings sind in Ordnung, wenn der ISP am Leben ist.

Ich habe zwei Nächte mit googeln und testen verbracht, um herauszufinden, was ich falsch mache und habe immer noch keine Ahnung, warum sich diese Konfiguration so verrückt verhält. Und natürlich keine Ahnung, wie ich mit ifstated Verbindungen auf Failover überwachen könnte, wenn Pinging World nicht funktioniert, auch wenn meine ISPs noch am Leben sind. Und wenn sie wirklich für eine Weile abgestorben sind, hat der Lastausgleich LAN-Anfragen gesendet, um die Auswahl einer nicht erkannten toten Verbindung aufzuheben.

Ich möchte ein solches Ereignis erkennen und die Route zum einzelnen Standardgateway bei laufender Verbindung ändern, bis der andere Internetdienstanbieter erneut reagiert. Ohne funktionierende Pings stecke ich mit nutzlosem ifstated im Hintergrund fest.

Ich freue mich über jede Hilfe ...

Antworten:


0

Dies wird jetzt in den OpenBSD-FAQs im Abschnitt "Equal-cost Multipath Routing" behandelt . Der Trick besteht darin, die Routenbefehle in jede hostname.if-Datei einzufügen.

Ersetzen Sie im Beispiel die tatsächlich vorhandenen Netzwerkkarten und die richtigen Gateways für fxp1 und fxp2:

Da die mygate (5) -Datei Multipath-Standardrouten noch nicht unterstützt, sollten die obigen Befehle am Ende der hostname.if (5) -Dateien für die fxp1und fxp2-Schnittstellen hinzugefügt werden. Die /etc/mygateDatei sollte dann gelöscht werden.

$ tail -1 /etc/hostname.fxp1  
!route add -mpath default 10.130.128.1  
$ tail -1 /etc/hostname.fxp2  
!route add -mpath default 10.132.0.1  
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.