Implementierung des Lastenausgleichs auf jeder Linux-Distribution

Implementierung des Lastenausgleichs auf jeder Linux-Distribution

Ich denke über die Implementierung einer Lastausgleichslösung für den persönlichen Gebrauch nach.

Ich möchte den Datendurchsatz über mobile Internetverbindungen maximieren. Lassen Sie mich das klarstellen:

Ich habe einen Datentarif für mein Mobiltelefon und meine Familie hat auch ihre jeweiligen Datentarife für ihre Telefone. Wenn ich bis zu 4 Telefone an einen (Desktop-)PC anschließen kann (vorzugsweise über USB), erreiche ich (theoretisch) eine schnellere Internetverbindung als jedes der 4 Telefone (wenn ich sie an einen PC anschließe).

Dieser Desktop-Computer fungiert dann als Router für ein Intranet.

Wenn das oben Gesagte eine gute Grundlage hat (ich könnte mich irren, ich kenne die entsprechenden Technologien nicht im Detail), brauche ich eine Anleitung zur Umsetzung.

Ich habe gesehen, dass das richtige Werkzeug für diese Aufgabe vorhanden ist ipvs(richtig?), weiß aber nicht, wie das geht.

Was die Distribution betrifft, kann die Arbeit in jeder Distribution erledigt werden, aber ich weiß, dass die Verbindung eines Android-Telefons mit Ubuntu Plug-and-Play funktioniert. Wenn ich es also in Ubuntu machen kann, wird es wahrscheinlich schneller sein, als alles von Strach zu kompilieren.

Gibt es eine entsprechende Anleitung? Gibt es vielleicht eine Distribution, die Lastenausgleich durchführt und USB-Internetverbindungen im laufenden Betrieb erkennt?

Antwort1

Um ausgehende Verbindungen auszugleichen, benötigen Sie lediglich Standard- iptablesund Richtlinienrouting. Bei 4 Verbindungen wird dies etwas komplizierter, da Sie die Links neu konfigurieren und ausgleichen müssen, wenn Verbindungen kommen und gehen.

Das Roh iptables-Setup ist

  • Erstellen Sie für jede Verbindung eine Routingtabelle

    ip rule add fwmark 10 table PHONE0 prio 33000
    ip rule add fwmark 11 table PHONE1 prio 33000
    ip rule add fwmark 12 table PHONE2 prio 33000
    ip rule add fwmark 13 table PHONE3 prio 33000
    
  • Fügen Sie für jede Verbindung zu jeder Tabelle das Standard-Gateway hinzu (die Gateway-IP variiert je nach Anbieter/Konfiguration des jeweiligen Telefons).

    ip route add default via 192.168.1.2 table PHONE0 
    ip route add default via 192.168.9.1 table PHONE1 
    ip route add default via 192.168.13.2 table PHONE2 
    ip route add default via 192.168.7.9 table PHONE3 
    
  • Markieren Sie nach dem Zufallsprinzip alle nicht markierten Flows, wodurch der Flow über eine bestimmte Verbindung geleitet wird. OUTPUTwird für lokale Prozesse verwendet. Verwenden Sie dies PREROUTING, wenn Sie Datenverkehr für andere Clients weiterleiten)

    iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
    iptables -t mangle -A OUTPUT -m mark ! --mark 0 -j ACCEPT
    iptables -t mangle -A OUTPUT -j MARK --set-mark 10
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 11
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 12
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 13
    iptables -t mangle -A OUTPUT -j CONNMARK --save-mark
    
  • NAT für jede der Verbindungen (die Schnittstelle muss diejenige sein, die Ihre Telefonverbindung dem System anzeigt)

    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp2 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp3 -j MASQUERADE
    

Beachten Sie, dass eine einzelne TCP- oder UDP-Verbindung keine Geschwindigkeitssteigerung erfährt, da sie immer noch über eine einzelne Verbindung läuft. Sie müssen mehrere gleichzeitige Verbindungen (mindestens 4) verwenden, um die zusätzliche Bandbreite zu nutzen. Die meisten Browser tun dies im Hintergrund, wenn mehrere Objekte angefordert werden. Einige Download-Manager ermöglichen die Verwendung mehrerer Verbindungen für eine einzelne Datei.

Wie garethTheRed vorschlägt, ispunityfügt man etwas von dem „Klebstoff“ zu diesem iptablesSetup hinzu, um eine Liste von Verbindungen zu durchlaufen, zu prüfen, ob das Gateway antwortet, neu auszugleichen, wenn etwas nicht stimmt usw. Das „Sticky Session“-Management scheint ein zusätzliches Setup pro Port zu sein, zusätzlich zu seinem grundlegenden „Round Robin“-Load-Balancing der Verbindungen. Eine andere Lösung istNetto-ISP-Guthaben, ein Perl-Skript und eine Bibliothek, die die Konfiguration von iptables und Routing-Tabellen automatisiert, den ISP-Status überwacht, Sie auf Probleme aufmerksam macht und das Routing neu konfiguriert, falls ein oder mehrere ISPs nicht mehr erreichbar sind.

Beachten Sie auch, dass Anfragen von mehreren IPs einige Dienste, die auf konsistenten IP-Lookups basieren, beschädigen können. Möglicherweise müssen Sie für diese Dienste zusätzliche Regeln hinzufügen, um sie an eine Verbindung zu binden. Bei Einzelverbindungen werden Sie keine Beschleunigung feststellen, nur wenn Sie 4 Dinge gleichzeitig tun, was die meisten Browser ohnehin versuchen.

ipvsdient eher zum Erstellen virtueller Dienstadressen für von Ihnen gehostete Dinge, sodass ein Failover des Dienstes zwischen mehreren Hosts möglich ist.

Antwort2

Das könnte möglich sein – ispunityes handelt sich um ein Projekt, das die Last Ihrer Internetverbindung ausgleicht. Es ist in Ruby geschrieben. Sie haben es auf einem Raspberry Pi laufen, also sollte es auf jeder vernünftigen Distribution laufen.

Der einzige Unterschied zwischen ihrem und Ihrem Szenario besteht darin, dass sie Ethernet verwendet haben, während Sie 3G verwenden möchten. Ich nehme an, Ihr Erfolg (oder Misserfolg) hängt weitgehend davon ab, wie Ihre 4 Mobiltelefone ihr Internet über USB präsentieren.

Da auf Raspberry Pi normalerweise eine Debian-Variante läuft, beginnen Sie vielleicht damit oder mit Ubuntu.

Antwort3

Dispatch-Proxy
Mit Dispatch-Proxy können Sie viele Wi-Fi-Netzwerke/Ethernet/3G/4G-Verbindungen kombinieren und auf sie als eine große, bandbreitenstarke, lastausgeglichene Verbindung zugreifen. Beachten Sie, dass der Benutzer zur Nutzung einer höheren Verbindungsgeschwindigkeit einen Thread-Download-Manager verwenden muss, der mehrere Verbindungen zum Dispatch-Proxy öffnet und diese effektiv über mehrere Schnittstellen abruft, was zu kombinierten, schnelleren Downloadgeschwindigkeiten führt.
Anleitung zur Installationfür Mac, funktioniert auch für Linux.

ISP-Einheit
ISPUnity ist ein Open-Source-, Rubygem-/Software-basierter Multiple-Internet-Load-Balancer und Failover.

Für mobiles Internet empfehle ich, dispatch-proxyda Sie keine Einstellungen wie bei ISP Unity konfigurieren müssen. DasLinkkommentar zu einem gepatchten Linux-Kernel für integriertes Lastenausgleich, Sie können ja mal nachsehen.

verwandte Informationen