
Kann man mehrere Internetkanäle zu einem einzigen bündeln? Rund um dieses Thema gibt es viele Missverständnisse und Mythen, selbst erfahrene Netzwerktechniker wissen oft nicht, dass dies möglich ist. In den meisten Fällen wird das Bündeln von Kanälen fälschlicherweise mit Lastverteilung auf NAT-Ebene oder Failover gleichgesetzt. Doch echtes Kanalbündeln ermöglicht eine einzige TCP-Verbindung gleichzeitig über alle Internetkanäle laufen zu lassen,, beispielsweise bei Videoübertragungen, sodass bei einem Ausfall eines der Internetkanäle die Übertragung nicht unterbrochen wird.
Es gibt teure kommerzielle Lösungen für Videoübertragungen, aber solche Geräte kosten viele Tausend Euro. In diesem Artikel wird die Konfiguration des kostenlosen, offenen Pakets OpenMPTCPRouter beschrieben und verbreitete Mythen über das Bündeln von Kanälen werden aufgedeckt.
Mythen über das Bündeln von Kanälen
Es gibt viele handelsübliche Router, die die Mult WAN-Funktion unterstützen. Manchmal bezeichnen die Hersteller dies als Kanalbündelung, was nicht ganz korrekt ist. Viele Netzwerkprofis sind der Meinung, dass außer und Bündelung auf L2-Ebene keine anderen Möglichkeiten zum Bündeln von Kanälen existieren. Ich habe oft von Leuten aus der Telekommunikationsbranche gehört, dass dies überhaupt nicht möglich sei. Daher versuchen wir, die populären Mythen zu klären.
Lastverteilung auf IP-Verbindungen
Das ist die zugänglichste und populärste Methode, um mehrere Internetkanäle gleichzeitig zu nutzen. Zur Vereinfachung stellen wir uns vor, dass Sie drei Internetanbieter haben, die Ihnen jeweils eine echte IP-Adresse aus ihrem Netzwerk zuweisen. Alle diese Anbieter sind an einen Router mit Mult WAN-Funktion angeschlossen. Das könnte OpenWRT mit dem mwan3-Paket, Mikrotik, Ubiquiti oder jeden anderen handelsüblichen Router sein, zum Glück ist eine solche Option mittlerweile keine Seltenheit mehr.
Um die Situation zu simulieren, stellen wir uns vor, dass die Anbieter uns folgende Adressen zugewiesen haben:
WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN3 — 33.33.33.33
Das heißt, wenn man sich mit einem entfernten Server verbindet. example.com Durch jeden der Anbieter sieht der entfernte Server die drei unabhängigen Quell-IP-Adressen des Clients. Das Lastenmanagement ermöglicht es, die Last auf die Kanäle zu verteilen und alle drei gleichzeitig zu nutzen. Zur Vereinfachung nehmen wir an, dass wir die Last gleichmäßig auf alle Kanäle verteilen. Wenn der Client eine Website mit beispielsweise drei Bildern öffnet, lädt er jedes Bild über einen separaten Anbieter. Auf der Website sieht das aus wie Verbindungen von drei verschiedenen IPs.

Bei der Lastenverteilung auf Verbindungsebene geht jede TCP-Verbindung über einen separaten Anbieter.
Diese Art der Lastenverteilung bringt oft Probleme für die Nutzer mit sich. Viele Websites binden Cookies und Tokens strikt an die IP-Adresse des Clients, und wenn sie sich plötzlich ändert, wird die Anfrage abgelehnt oder der Client wird von der Website abgemeldet. Das geschieht häufig in Online-Banking-Systemen und auf anderen Websites mit strengen Regeln für Benutzersitzungen. Hier ist ein einfaches Beispiel: Musikdateien auf VK.com sind nur mit einem gültigen Sitzungsschlüssel verfügbar, der an die IP gebunden ist, und bei Clients, die eine solche Lastenverteilung verwenden, werden häufig keine Audiodateien abgespielt, weil die Anfrage nicht über den Anbieter ging, an den die Sitzung gebunden ist.

Bei der Torrentausführung summiert die Lastenverteilung auf Verbindungsebene die Bandbreite aller Kanäle.
Eine solche Lastenverteilung ermöglicht das Summieren der Internetgeschwindigkeit, wenn mehrere Verbindungen genutzt werden. Wenn jeder der drei Anbieter eine Geschwindigkeit von 100 Megabit hat, erhalten wir beim Herunterladen von Torrents insgesamt 300 Megabit. Das liegt daran, dass Torrent viele Verbindungen öffnet, die auf alle Anbieter verteilt werden und damit die gesamte Bandbreite nutzen.
Es ist wichtig zu verstehen, dass eine einzige TCP-Verbindung immer nur über einen Anbieter läuft. Das bedeutet, wenn wir eine große Datei über HTTP herunterladen, wird diese Verbindung über einen der Anbieter hergestellt, und wenn die Verbindung zu diesem Anbieter abbricht, bricht auch der Download ab.

Eine Verbindung wird immer nur einen Internetkanal nutzen.
Das gilt auch für Video-Streams. Wenn Sie einen Stream auf einer Plattform wie Twitch senden, bringt die Lastverteilung auf IP-Verbindungsebene keinen besonderen Vorteil, da der Video-Stream innerhalb einer einzelnen IP-Verbindung übertragen wird. In diesem Fall, wenn der WAN-Anbieter 3 Verbindungsprobleme hat, wie z. B. Paketverlust oder Geschwindigkeitsreduktion, können Sie nicht sofort zu einem anderen Anbieter wechseln. Die Übertragung muss gestoppt und neu verbunden werden.
Echte Kanalaggregation
Echte Kanalaggregation ermöglicht es, eine Verbindung zu einem hypothetischen Twitch über alle Anbieter hinweg zu führen, sodass die Verbindung nicht abreißt, wenn einer der Anbieter ausfällt. Dies ist überraschend kompliziert und hat bisher keine optimale Lösung gefunden. Viele wissen nicht einmal, dass dies möglich ist!
Den vorherigen Illustrationen zufolge erinnern wir uns, dass der hypothetische Twitch-Server nur einen Video-Stream von einer bestimmten Quell-IP-Adresse annehmen kann, was bedeutet, dass diese immer konstant sein muss, unabhängig davon, welche Anbieter ausgefallen sind und welche funktionieren. Um dies zu erreichen, benötigen wir einen Aggregationsserver, der alle unsere Verbindungen terminiert und sie zu einer einzigen zusammenführt.

Der Aggregationsserver bündelt alle Kanäle in einen Tunnel. Alle Verbindungen erfolgen von der Adresse des Aggregationsservers.
In diesem Schema kommen alle Anbieter zum Einsatz, und das Abschalten eines von ihnen führt nicht zu einem Verbindungsabriss zum Twitch-Server. Es handelt sich im Wesentlichen um einen speziellen VPN-Tunnel, der unter der Haube mehrere Internetkanäle nutzt. Die Hauptaufgabe dieses Schemas ist es, einen möglichst qualitativ hochwertigen Kommunikationskanal zu erhalten. Wenn es bei einem der Anbieter zu Problemen kommt, wie z. B. Verlust von Paketen oder Erhöhung der Latenzen, sollte dies die Verbindung nicht beeinträchtigen, da die Last automatisch auf andere, qualitativ bessere verfügbare Kanäle verteilt wird.
Kommerzielle Lösungen
Dieses Problem beschäftigt schon lange diejenigen, die Live-Übertragungen von Veranstaltungen durchführen und keinen Zugang zu qualitativ hochwertigem Internet haben. Für solche Aufgaben gibt es mehrere kommerzielle Lösungen, wie zum Beispiel die Firma Teradek, die solche monströsen Router herstellt, in die mehrere USB-Modems gesteckt werden:

Router für Videoübertragungen mit Funktionen zur Kanalbündelung
Solche Geräte verfügen in der Regel über die Möglichkeit, Videosignale über HDMI oder SDI zu erfassen. Zusammen mit dem Router wird ein Abonnement für den Kanalbündelungsservice sowie für die Verarbeitung des Video-Streams, dessen Rekodierung und die Weiterleitung angeboten. Der Preis solcher Geräte beginnt bei 2.000 $ mit einem Modemset, plus separat das Abonnement für den Dienst.
Manchmal sieht das ziemlich einschüchternd aus:

OpenMPTCPRouter einrichten
Protokoll (MultiPath TCP) wurde entwickelt, um mehrere Verbindungen gleichzeitig zu ermöglichen. Zum Beispiel unterstützt es und kann gleichzeitig über WLAN und mobile Netzwerke mit einem entfernten Server verbunden werden. Es ist wichtig zu verstehen, dass dies nicht zwei separate TCP-Verbindungen sind, sondern eine einzige Verbindung, die über zwei Kanäle hergestellt wird. Damit dies funktioniert, muss der entfernte Server auch MPTCP unterstützen.
ist ein Open-Source-Projekt für einen Software-Router, der es ermöglicht, Kanäle tatsächlich zu bündeln. Die Autoren geben an, dass sich das Projekt im Alpha-Status befindet, aber es kann bereits verwendet werden. Es besteht aus zwei Teilen – einem Bündelungsserver, der im Internet gehostet wird, und einem Router, an den mehrere Internetanbieter und die Endgeräte wie Computer und Telefone angeschlossen sind. Als Benutzerrouter kann ein Raspberry Pi, einige WLAN-Router oder ein gewöhnlicher Computer fungieren. Es sind fertige Builds für verschiedene Plattformen verfügbar, was sehr praktisch ist.

Funktionsweise von OpenMPTCPRouter
Konfiguration des Bündelungsservers
Der Bündelungsserver befindet sich im Internet und terminiert die Verbindungen aller Kanäle des Kundenrouterns zu einer einzigen. Die IP-Adresse dieses Servers wird die externe Adresse sein, wenn Sie über OpenMPTCPRouter ins Internet gehen.
Für diese Aufgabe verwenden wir einen VPS-Server mit Debian 10.
Anforderungen an den Bündelungsserver:
- MPTCP funktioniert nicht unter der Virtualisierung OpenVZ
- Es muss möglich sein, einen eigenen Linux-Kernel zu installieren
Der Server wird durch das Ausführen eines Befehls bereitgestellt. Das Skript installiert einen Kernel mit mptcp-Unterstützung und alle notwendigen Pakete. Installationsskripte für Ubuntu und Debian sind verfügbar.
wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh
Ergebnis der erfolgreichen Serverinstallation.

Wir speichern die Passwörter, die für die Konfiguration des Client-Routers benötigt werden, und starten neu. Es ist wichtig zu beachten, dass SSH nach der Installation am Port 65222 verfügbar ist. Nach dem Neustart sollte überprüft werden, dass wir mit dem neuen Kernel gebootet haben.
uname -a
Linux test-server.local 4.19.67-mptcp
Wir sehen neben der Versionsnummer die Aufschrift mptcp, das bedeutet, der Kernel wurde korrekt installiert.
Konfiguration des Client-Routers
Auf Fertige Builds sind für einige Plattformen verfügbar, zum Beispiel Raspberry Pi, Banana Pi, Lynksys-Router und virtuelle Maschinen.
Dieser Teil von openmptcprouter basiert auf OpenWRT, als Schnittstelle wird LuCI verwendet, die jedem bekannt sein sollte, der schon einmal mit OpenWRT zu tun hatte. Die Distribution wiegt etwa 50 MB!

Als Teststand werde ich einen Raspberry Pi und mehrere USB-Modems mit unterschiedlichen Anbietern: MTS und MegaFon verwenden. Wie man ein Image auf eine SD-Karte schreibt, denke ich, muss nicht weiter erklärt werden.
Ursprünglich ist der Ethernet-Port im Raspberry Pi als LAN mit einer statischen IP-Adresse konfiguriert. 192.168.100.1. Um nicht mit Kabeln auf dem Tisch herumzuhantieren, habe ich den Raspberry Pi mit einem WiFi-Zugangspunkt verbunden und eine statische Adresse auf dem WiFi-Adapter des Computers eingestellt. 192.168.100.2. Der DHCP-Server ist standardmäßig nicht aktiviert, daher müssen statische Adressen verwendet werden.
Jetzt kann auf das Web-Interface zugegriffen werden.
Beim ersten Zugang wird das System aufgefordert, das Root-Passwort festzulegen, mit demselben Passwort wird SSH verfügbar sein.

In den LAN-Einstellungen kann das benötigte Subnetz festgelegt und der DHCP-Server aktiviert werden.
Ich benutze Modems, die als USB-Ethernet-Interfaces mit separatem DHCP-Server erkannt werden, daher war die Installation . Das Verfahren ist identisch mit der Konfiguration von Modems in einem normalen OpenWRT, daher werde ich dies hier nicht näher betrachten.
Als Nächstes müssen die WAN-Schnittstellen konfiguriert werden. Zunächst wurden im System zwei virtuelle Schnittstellen WAN1 und WAN2 erstellt. Ihnen muss ein physisches Gerät zugewiesen werden, in meinem Fall sind dies die Namen der USB-Modem-Schnittstellen.
Um mich nicht bei den Schnittstellennamen zu verwirren, empfehle ich, die dmesg-Meldungen zu beobachten, nachdem ich mich per SSH verbunden habe.
Da meine Modems selbst als Router fungieren und einen eigenen DHCP-Server haben, musste ich die Einstellungen ihrer internen Netzbereiche ändern und den DHCP-Server deaktivieren, weil beide Modems ursprünglich Adressen aus einem Netzwerk vergeben, was zu Konflikten führt.
OpenMPTCPRouter erfordert, dass die Adressen der WAN-Schnittstellen statisch sind. Daher vergeben wir Unternetzwerke für die Modems und konfigurieren sie im Menü system → openmptcprouter → Schnittstellent Einstellungen. Hier muss auch die IP-Adresse und der Schlüssel des Servers, der in der Phase der Installation des zusammenfassenden Servers erhalten wurde, angegeben werden.

Im Falle einer erfolgreichen Konfiguration sollte auf der Statusseite ein ähnliches Bild erscheinen. Man sieht, dass der Router erfolgreich Kontakt zum zusammenfassenden Server aufnehmen konnte und beide Kanäle normal funktionieren.

Standardmäßig wird der Modus shadowsocks + mptcp verwendet. Dies ist ein Proxy, der alle Verbindungen bündelt. Zunächst ist er so konfiguriert, dass er nur TCP verarbeitet, aber man kann auch UDP aktivieren.

Wenn auf der Statusseite keine Fehler angezeigt werden, kann die Konfiguration als abgeschlossen betrachtet werden.
Bei einigen Anbietern kann es vorkommen, dass das mptcp-Flag auf dem Weg des Datenverkehrs abgeschnitten wird. Dann tritt folgender Fehler auf:

In diesem Fall kann ein anderer Betriebsmodus ohne Verwendung von MPTCP verwendet werden. Nähere Informationen dazu .
Fazit
Das Projekt OpenMPTCPRouter ist sehr interessant und wichtig, da es wahrscheinlich die einzige offene Gesamtlösung für das Problem der Kanalbündelung ist. Alles andere ist entweder vollständig geschlossen und proprietär oder einfach separate Module, mit denen es einem durchschnittlichen Benutzer schwerfällt, zurechtzukommen. In der aktuellen Entwicklungsphase ist das Projekt noch ziemlich unausgereift, die Dokumentation ist extrem spärlich, viele Dinge sind einfach nicht beschrieben. Aber es funktioniert trotzdem. Ich hoffe, dass es weiterhin entwickelt wird und wir Verbraucherrouter erhalten, die in der Lage sind, die Kanäle direkt ab Werk vernünftig zusammenzuführen.
Folgen Sie unserem Entwickler auf Instagram
Quelle: habr.com
