Der Linux-Kernel vor Version 3.6 verwendete Routing-Caching für IPv4-Multipath-Routing, was bedeutete, dass das Routing zwischen zwei separaten Leitungen / ISPs recht einfach war. Ab 3.6 wurde der Algorithmus in "Paketweise" geändert, was bedeutete, dass einige Tricks zur Routentabelle / Regel / iptables-Markierung erforderlich waren, um die beiden Leitungen / ISPs zu erreichen.
Wenn Sie jedoch zwei Leitungen mit demselben ISP hatten, die eine einzelne IP auf Paketbasis pro Paket in ausgeglichener / Failover-Weise weiterleiten konnten, konnten Sie ab 3.6 aufgrund von IP6 problemlos eine Leitungsbindung (auf IP-Ebene) erreichen das Routing pro Paket in beide Richtungen.
Ab 4.4 wechselte der Kernel erneut zu einem flussbasierten Lastausgleich basierend auf einem Hash über die Quell- und Zieladressen.
Ich verwende derzeit Kernel 4.4.36 und verwende Multipath-Routing über PPPoE-Verbindungen. Mein Downstream-Verkehr vom ISP wird pro Paket über die beiden separaten Leitungen geleitet (eine IP wird über beide Leitungen weitergeleitet). Dies gibt mir eine Download-Geschwindigkeit, die schneller ist als die Geschwindigkeit einer einzelnen Zeile. Fast die Geschwindigkeit beider Linien addiert. Es funktioniert wirklich gut, Skype-Video, VoIP (UDP), YouTube usw. funktionieren alle hervorragend.
Aufgrund dieser guten Downstream-Erfahrung möchte ich es Upstream ausprobieren, aber mein Upstream-Verkehr wird gemäß dem neueren flussbasierten Algorithmus über beide ppp-Geräte (die dieselbe IP-Adresse haben) geleitet. Dies bedeutet, dass ich keine Upload-Geschwindigkeit erreichen kann, die schneller ist als die Geschwindigkeit einer einzelnen Zeile.
Gibt es eine Möglichkeit, den aktuellen Kernel für die Verwendung des Paketalgorithmus zu konfigurieren? Oder eine andere Methode, um ein Multipath-Routing pro Paket zu erreichen? Muss ich zu einem älteren Kernel zurückkehren (was ich aus verschiedenen anderen Gründen nicht tun möchte)?
Mein ISP unterstützt keine Multi-Link-PPP.
Falls es relevant ist, verwende ich derzeit Arch Linux ARMv7 auf einem Raspberry Pi 3.
quelle
Antworten:
Ok, nachdem ich mehr Zeit hatte, dies zu untersuchen, fand ich einen Weg, dies mit Linux TEQL (True Link Equalizer) zu tun. Hier ist ein Link, dem ich lose gefolgt bin, aber mit einigen Verbesserungen.
http://lartc.org/howto/lartc.loadshare.html
So habe ich es auf Arch Linux ARMv7 (Raspberry Pi 3) zum Laufen gebracht.
Beim Booten:
Der folgende Befehl sollte beim Booten ausgeführt werden, um das entsprechende Kernelmodul zu laden.
Die folgenden Befehle werden auch beim Booten ausgeführt, vorausgesetzt, Sie möchten NAT von einem lokalen Netzwerk auf eth0 ausführen.
Der FORWARD-Rückverkehr ist auf ppp + und die POSTROUTING-MASKERADE auf teql +, da der ausgehende Verkehr auf teql ausgeht und der Rückverkehr auf ppp zurückkommt.
Wenn ppp-Links auftauchen:
Angenommen, die zu ladenden Links sind ppp. Die folgenden Befehle müssen in einem Skript in einem
/etc/ppp/ip-up.d/
Skript ausgeführt werden.Wo
1.1.1.1
befindet sich Ihre öffentliche IP-Adresse für ISPs? Zusätzliche öffentliche IPs können dem teql0-Gerät zugewiesen werden, müssen jedoch nicht den ppp-Geräten zugewiesen werden. In meinem Setup haben die beiden ppp-Links dieselbe IP-Adresse (von pppoe usw. ausgehandelt). Der von ihm manuell zugewiesene teql-Link wie oben gezeigt. Der ISP muss den Datenverkehr für die IP gleichmäßig über beide Verbindungen senden.Der umgekehrte Pfad (
rp_filter
) wird2
im obigen Skript auf (lose) gesetzt, damit die Rückgabepakete nicht verworfen werden, weil sie auf den ppp-Schnittstellen und nicht auf teql0 zurückkommen.Ich habe es so eingerichtet und es funktioniert perfekt. Sehr leicht! Wenn die Links fehlschlagen, erfolgt ein nahtloses Failover. Wenn sie auftauchen, fangen sie einfach wieder an zu arbeiten. Es scheint, als gäbe es keinen Paketverlust oder keine Verzögerung, wenn ein Failover durchgeführt wird, und keine, wenn es wieder hochfährt.
Außerdem schlug einer der Kommentatoren den folgenden Link vor, der Richtlinienrouting verwendet, mit iptables, um jedes andere Paket usw. zu markieren. Ich werde jedoch in einigen Tagen versuchen, festzustellen, ob es besser als das oben genannte funktioniert, und hier entsprechend Feedback geben.
http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing
quelle
sysctl -w net.ipv4.ip_forward
aber sollte sagen,sysctl -w net.ipv4.ip_forward=1
dass ich oben korrigiert habe. Dies würde sicherlich verhindern, dass der Datenverkehr aus dem LAN über die Bonded-Verbindung abläuft.