Bündelung von mehreren (mobilen) Leitungen

  • Hallo,


    was hier steht ist keine Anleitung und vielleicht stümperhaft umgesetzt !!!


    Ich nutze:
    1 x server im Rechenzentrum mit vollem Zugriff
    1 x OpenWRT router TP-link WDR-3600
    1 x Debian Rechner
    1 x Huawei Mobilrouter Telefonica LTE
    1 x Huawei Mobilrouter Vodafone LTE
    1 x Android Mobilgerät Telekom LTE
    1 x DOCSIS Kabelrouter Unitymedia


    Der server (95.XXX.XXX.1) muss das Kernelmodul "bonding" nutzen können, bei vielen virtuellen servern ist das nicht möglich. Die Pakete uml-utilities (tunctl) und ifenslave müssen installiert sein, ssh root login muss aktiviert sein. Es laufen vier SSH Instanzen (port 39504, 39505, 39506, 39507)


    Auf dem OpenWRT router (192.168.50.1) sind das Paket mwan3 sowie alle nötigen Treiber zum Betrieb der angeschlossenen Geräte installiert.
    Anschlüsse sind: LAN - Kabelrouter, 5Ghz client - Huawei Mobilrouter, USB - Huawei Mobilrouter, USB - Android USB tethering
    Alle Leitungen werden im mwan3 Menü eingerichtet, zusätzlich werden dort policies angelegt die jedes Gerät über einen der vier SSH ports routen.


    Auf dem Debian Rechner (192.168.50.XXX) ist wie beim server uml-utilities und ifenslave sowie autossh installiert, er ist über LAN mit dem OpenWRT router verbunden. Es wurde ein Zertifikat erstellt und übertragen für die automatische SSH Einwahl zum server.



    #router /etc/network/interfaces
    iface bond0 inet static
    address 172.26.0.2
    netmask 255.255.255.248
    bond-slaves tap5
    bond_mode balance-rr


    iface bond1 inet static
    address 172.26.1.2
    netmask 255.255.255.248
    bond-slaves tap6 tap7 tap8 tap9 tap10 tap11 tap12
    bond_mode balance-rr



    #router bond.sh
    ifdown bond0
    ifdown bond1
    ip link delete tap5
    ip link delete tap6
    ip link delete tap7
    ip link delete tap8
    ip link delete tap9
    ip link delete tap10
    ip link delete tap11
    ip link delete tap12
    killall -u root autossh
    sleep 2
    tunctl -t tap5
    tunctl -t tap6
    tunctl -t tap7
    tunctl -t tap8
    tunctl -t tap9
    tunctl -t tap10
    tunctl -t tap11
    tunctl -t tap12
    ifconfig tap5 10.8.0.2 netmask 255.255.255.0
    ifconfig tap6 10.8.1.2 netmask 255.255.255.0
    ifconfig tap7 10.8.2.2 netmask 255.255.255.0
    ifconfig tap8 10.8.3.2 netmask 255.255.255.0
    ifconfig tap9 10.8.4.2 netmask 255.255.255.0
    ifconfig tap10 10.8.5.2 netmask 255.255.255.0
    ifconfig tap11 10.8.6.2 netmask 255.255.255.0
    ifconfig tap12 10.8.7.2 netmask 255.255.255.0
    autossh -f -o Tunnel=ethernet -w 5:5 root@95.XXX.XXX.1 -p 39504 true
    autossh -f -o Tunnel=ethernet -w 6:6 root@95.XXX.XXX.1 -p 39504 true
    autossh -f -o Tunnel=ethernet -w 7:7 root@95.XXX.XXX.1 -p 39504 true
    autossh -f -o Tunnel=ethernet -w 8:8 root@95.XXX.XXX.1 -p 39505 true
    autossh -f -o Tunnel=ethernet -w 9:9 root@95.XXX.XXX.1 -p 39506 true
    autossh -f -o Tunnel=ethernet -w 10:10 root@95.XXX.XXX.1 -p 39506 true
    autossh -f -o Tunnel=ethernet -w 11:11 root@95.XXX.XXX.1 -p 39507 true
    autossh -f -o Tunnel=ethernet -w 12:12 root@95.XXX.XXX.1 -p 39507 true
    sleep 2
    ip route add 95.XXX.XXX.1 via 192.168.50.1 dev eth1
    ifup bond0
    ifup bond1
    sleep 2
    sysctl net.ipv4.ip_forward=1
    iptables -A FORWARD -o bond0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
    iptables -A FORWARD -o bond1 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
    iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o bond1 -j MASQUERADE



    #router route.sh
    ip route del 172.26.0.0/29 dev bond0
    ip route del 172.26.0.0/29 dev bond0
    ip route del 172.26.1.0/29 dev bond1
    ip route del 172.26.1.0/29 dev bond1
    ip route add 172.26.0.0/29 dev bond1
    ip route add 172.26.1.0/29 dev bond1



    --------------------------------------------------------------------------------------------------------------------



    #server /etc/network/interfaces
    iface bond0 inet static
    address 172.26.0.1
    netmask 255.255.255.248
    bond-slaves tap5
    bond_mode balance-rr


    iface bond1 inet static
    address 172.26.1.1
    netmask 255.255.255.248
    bond-slaves tap6 tap7 tap10 tap12 tap13 tap15 tap16
    bond_mode balance-rr



    #server bond.sh
    ifdown bond0
    ifdown bond1
    ip link delete tap5
    ip link delete tap6
    ip link delete tap7
    ip link delete tap8
    ip link delete tap9
    ip link delete tap10
    ip link delete tap11
    ip link delete tap12
    sleep 3
    tunctl -t tap5
    tunctl -t tap6
    tunctl -t tap7
    tunctl -t tap8
    tunctl -t tap9
    tunctl -t tap10
    tunctl -t tap11
    tunctl -t tap12
    ifconfig tap5 10.8.0.1 netmask 255.255.255.0
    ifconfig tap6 10.8.1.1 netmask 255.255.255.0
    ifconfig tap7 10.8.2.1 netmask 255.255.255.0
    ifconfig tap8 10.8.3.1 netmask 255.255.255.0
    ifconfig tap9 10.8.4.1 netmask 255.255.255.0
    ifconfig tap10 10.8.5.1 netmask 255.255.255.0
    ifconfig tap11 10.8.6.1 netmask 255.255.255.0
    ifconfig tap12 10.8.7.1 netmask 255.255.255.0
    ifup bond0
    ifup bond1
    sysctl net.ipv4.ip_forward=1
    iptables -A FORWARD -o eth0 -i bond0 -s 10.0.0.0/8 -m conntrack --ctstate NEW -j ACCEPT
    iptables -A FORWARD -o eth0 -i bond1 -s 10.0.0.0/8 -m conntrack --ctstate NEW -j ACCEPT
    iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE



    #server route.sh
    ip route del 172.26.0.0/29 dev bond0
    ip route del 172.26.0.0/29 dev bond0
    ip route del 172.26.1.0/29 dev bond1
    ip route del 172.26.1.0/29 dev bond1
    ip route add 172.26.0.0/29 dev bond0
    ip route add 172.26.1.0/29 dev bond0



    ------------------------------------------------------------------------------------------------------------



    Man kann also die bonding Adapter in die /etc/network/interfaces einfügen und die Skripte entsprechend anpassen, ich nutze in dem Beispiel einen Tunnel (tap5 über 39504 - UM) für den download und sieben Tunnel (tap6/tap7 über 39504 - UM, tap8 über 39505 - T, tap9/tap10 über 39506 - VF und tap11/tap12 über 39507 - TEF) für den upload.


    Für die Internetnutzung kann man das default gateway auf dem Debian Rechner ersetzen durch bond1 172.26.0.1, andere Geräte im Netzwerk können auch diese Verbindung nutzen.


    Wie gesagt dies ist keine Anleitung !!! Ich habe mir das nur so zusammengebastelt.


    Ich freue mich über Verbesserungsvorschläge oder Erfahrungsberichte zu anderen Möglichkeiten.


    MfG Antennenmann

  • Ich habe noch das hier gefunden:
    http://vrayo.com/how-to-set-up…-vpn-connection-in-linux/
    und sogar zum laufen bekommen :cool: :cool: :cool:


    Ein Debian Rechner mit Anbindungen über LAN (UM DOCSIS), WLAN (TEF LTE) und USB (VF LTE) ist die Seite vor Ort, ich hatte aber noch nicht viel Zeit weiter zu testen und meine Gegenstelle ist Abends auch nicht so verlässlich was die Geschwindigkeit angeht, im Prinzip funktioniert vtrunkd aber.

  • Hallo,


    durch die Einstellung


    Zitat

    bond_mode balance-rr


    legst du doch fest, dass du maximal die Geschwindigkeit einer einzelnen Internetverbindung hast, oder nicht?


    Zitat

    0 balance-rr
    Lastverteilung & Ausfallsicherheit
    Die genutzte Netzwerkschnittstelle wird im Round-Robin-Verfahren festgelegt, das heißt die verfügbaren Schnittstellen werden in Senderichtung wechselweise genutzt. In Empfangsrichtung kann max. die Geschwindigkeit einer einzelnen Schnittstelle erreicht werden - je mehr Teilnehmer, umso mehr Upload-Gesamtbandbreite, denn diese werden auf die übrigen freien Schnittstellen aufgeteilt.


    Quelle: https://wiki.ubuntuusers.de/Netzwerkkarten_b%C3%BCndeln/



    Zitat

    ich nutze in dem Beispiel einen Tunnel (tap5 über 39504 - UM) für den download und sieben Tunnel (tap6/tap7 über 39504 - UM, tap8 über 39505 - T, tap9/tap10 über 39506 - VF und tap11/tap12 über 39507 - TEF) für den upload.


    Oder meinst du hiermit, dass du dann die 7fache Uploadgeschwindigkeit hast?

  • Zitat

    Original geschrieben von peterschneider85
    Oder meinst du hiermit, dass du dann die 7fache Uploadgeschwindigkeit hast?


    Durch die Scheduler Wahl ist mehr oder weniger festgelegt, dass jeder Tunnel gleich schnell oder langsam ist. Da einfach der Reihe nach durchgelaufen wird, um das auszugleichen öffnet er dann mehrere Tunnel für schnellere Verbindungen.

  • Re: Bündelung von mehreren (mobilen) Leitungen


    Ich habe auch einen Server zugänglich, aber habe mir mal eine Lösung ohne Server gebaut, dann kein Bonding, sondern multipath-routing.


    Abstrakt:
    * Für jeden physischen uplink einen Linux network namespace genommen, darin die Verbindung aufgebaut. Innerhalb des jeweiligen Namespaces gibt es also nur diese eine Verbindung.


    * Aus jedem network namespace eine Verbindung über ein virtual ethernet device in den globalen namespace.


    * Dort dann routingtabellen gebaut, die über beide Verbindungen als default-gateway routen.



    Habe es bisher nur händisch als "proof of concept" gemacht, hat funktioniert. Ein praktisches Skript zu schreiben steht noch aus, dann kann ich es auch verständlicher erklären, weil es bisher noch etwas Chaos ist.


    Eine neue Verbindung geht dann immer nur über eine physische Verbindung (hat also nur deren Bandbreite), aber sobald man mehrere Verbindungen hat kann man den Bandbreitenvorteil ausnutzen. Oder, wenn man Verbindungen mit unterschiedlichen eigenschaften hat (eine mit höherem Durchsatz, eine mit kürzerer Latenz) kann man größere Datentransfers über die mit höherem Durchsatz laufen lassen und die kleinen Anfragen für interaktives Web-Surfen über die andere.

  • Wenn ich es richtig verstanden habe nimmst du einen Linux Rechner der über zwei Netzwerke mit dem Internet verbunden ist, statt nur ein default gateway zu nutzen erstellst du Regeln (nexthop usw) für eine Verteilung. Sowas hab ich auch schon getestet, für downloads über mehrere Verbindungen, über downloadmanager oder mehrere Dateien gleichzeitig, bringt das teilweise schon einen grossen Vorteil.


    Ich habe vtrunkd ein paar mal in verschiedenen Situationen ausprobiert, hatte aber bisher leider nicht genug Zeit um mich genug damit zu beschäftigen. Zum Beispiel ein mobiler Test steht noch aus. Bisher kann ich sagen, bei z.B. zwei DSL Anschlüssen oder anderen festen Leitungen funktioniert es super, verschiedene Bandbreiten werden berücksichtigt, stationäres LTE usw ist auch kein Problem.
    Leider ist vtrunkd nicht so gut dokumentiert und in der Beispielconfig kann man nicht wirklich viel einstellen.

  • Zitat

    Original geschrieben von antennenmann
    Ich habe vtrunkd ein paar mal in verschiedenen Situationen ausprobiert,


    Danke, das werde ich mir mal anschauen. List sich danach dass es sowas wie bonding macht, und einen Server braucht (wäre vorhanden, ist aber eben eine Komplexitätsebene mehr).


    Auf jeden Fall eine Beschau wert!

  • Re: Bündelung von mehreren (mobilen) Leitungen


    Zitat

    Original geschrieben von antennenmann
    Der server (95.XXX.XXX.1) muss das Kernelmodul "bonding" nutzen können, bei vielen virtuellen servern ist das nicht möglich.


    Hattest du einen virtuellen Server verwendet? Wenn ja, bei welchen Anbieter?


    Bin meine bestehenden Accounts bei Serverhostern schon durchgegangen aber kein VPS-Server unterstützt dort das bonding-Modul im Kernel.


    P.S. antennenmann: Dein Postfach ist voll ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!