Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Czy można połączyć kilka kanałów internetowych w jeden? Wokół tego tematu narosło wiele nieporozumień i mitów, nawet doświadczeni inżynierowie sieci często nie wiedzą, że jest to możliwe. W większości przypadków agregacja łączy jest błędnie nazywana równoważeniem NAT lub przełączaniem awaryjnym. Ale prawdziwe sumowanie pozwala uruchamiać jedno połączenie TCP jednocześnie we wszystkich kanałach internetowych, na przykład transmisja wideo, dzięki czemu w przypadku przerwania któregokolwiek z kanałów internetowych transmisja nie zostanie przerwana.

Istnieją drogie komercyjne rozwiązania do transmisji wideo, ale takie urządzenia kosztują dużo kilodolarów. Artykuł opisuje konfigurację darmowego, otwartego pakietu OpenMPTCPRouter oraz omawia popularne mity na temat sumowania kanałów.

Mity o sumowaniu kanałów

Istnieje wiele routerów domowych obsługujących funkcję Multi-WAN. Czasami producenci nazywają to sumowaniem kanałów, co nie jest do końca prawdą. Wielu networkerów uważa, że ​​oprócz LACP i sumowanie w warstwie L2, nie istnieje żadna inna agregacja kanałów. Często słyszałem, że jest to generalnie niemożliwe od osób pracujących w telekomunikacji. Dlatego spróbujmy zrozumieć popularne mity.

Równoważenie na poziomie połączeń IP

Jest to najtańszy i najbardziej popularny sposób na jednoczesne korzystanie z kilku kanałów internetowych. Dla uproszczenia wyobraźmy sobie, że masz trzech dostawców usług internetowych, z których każdy daje ci prawdziwy adres IP ze swojej sieci. Wszyscy ci dostawcy są podłączeni do routera obsługującego funkcję Multi-WAN. Może to być OpenWRT z pakietem mwan3, mikrotik, ubiquiti lub dowolny inny router domowy, ponieważ teraz ta opcja nie jest już rzadkością.

Aby zasymulować sytuację, wyobraź sobie, że dostawcy przekazali nam następujące adresy:

WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN2 — 33.33.33.33

To znaczy łączenie się ze zdalnym serwerem example.com za pośrednictwem każdego z dostawców zdalny serwer zobaczy trzy niezależne źródłowe adresy IP klienta. Równoważenie pozwala podzielić obciążenie na kanały i wykorzystać je wszystkie trzy jednocześnie. Dla uproszczenia wyobraźmy sobie, że równo dzielimy obciążenie między wszystkie kanały. W rezultacie, gdy klient warunkowo otwiera witrynę z trzema obrazami, pobiera każdy obraz za pośrednictwem oddzielnego dostawcy. Po stronie serwisu wygląda to na połączenia z trzech różnych adresów IP.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
Podczas równoważenia na poziomie połączenia każde połączenie TCP przechodzi przez oddzielnego dostawcę.

Ten tryb równoważenia często powoduje problemy dla użytkowników. Na przykład wiele witryn zapisuje pliki cookie i tokeny na stałe do adresu IP klienta, a jeśli nagle się zmieni, żądanie zostanie odrzucone lub klient wyloguje się z witryny. Jest to często powielane w systemach klient-bank i innych witrynach z surowymi regułami sesji użytkownika. Oto prosty obrazowy przykład: pliki muzyczne w VK.com są dostępne tylko z ważnym kluczem sesyjnym, który jest powiązany z IP, a klienci stosujący takie równoważenie często nie odtwarzają dźwięku, ponieważ żądanie nie przeszło przez dostawcę, do którego sesja jest związana.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
Podczas pobierania torrentów równoważenie na poziomie połączenia sumuje przepustowość wszystkich kanałów

Takie równoważenie pozwala uzyskać sumę prędkości kanału internetowego podczas korzystania z wielu połączeń. Na przykład, jeśli każdy z trzech dostawców ma prędkość 100 megabitów, to podczas pobierania torrentów otrzymamy 300 megabitów. Ponieważ torrent otwiera wiele połączeń, które są rozdzielane między wszystkich dostawców i ostatecznie wykorzystują cały kanał.

Ważne jest, aby zrozumieć, że jedno połączenie TCP zawsze przechodzi przez tylko jednego dostawcę. Oznacza to, że jeśli pobierzemy jeden duży plik przez HTTP, to połączenie to zostanie nawiązane za pośrednictwem jednego z dostawców, a jeśli połączenie z tym dostawcą zostanie zerwane, pobieranie również zostanie przerwane.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
Jedno połączenie będzie zawsze wykorzystywać tylko jeden kanał internetowy

Dotyczy to również transmisji wideo. Jeśli transmitujesz strumieniowe wideo na jakimś warunkowym Twitchu, to równoważenie na poziomie połączeń IP nie przyniesie żadnych szczególnych korzyści, ponieważ strumień wideo będzie transmitowany w ramach jednego połączenia IP. W takim przypadku, jeśli dostawca WAN 3 zacznie mieć problemy z komunikacją, takie jak utrata pakietów lub spowolnienie, nie będziesz mógł od razu przełączyć się na innego dostawcę. Transmisja będzie musiała zostać zatrzymana i ponownie podłączona.

Prawdziwe sumowanie kanałów

Prawdziwe sumowanie kanałów umożliwia nawiązanie jednego połączenia do warunkowego Twitcha przez wszystkich dostawców jednocześnie w taki sposób, że w przypadku zerwania któregoś z dostawców połączenie nie zostanie przerwane. To zaskakująco trudny problem, który wciąż nie ma optymalnego rozwiązania. Wielu nawet nie wie, że jest to możliwe!

Z poprzednich ilustracji pamiętamy, że warunkowy serwer Twitch może odbierać od nas strumień wideo tylko z jednego źródłowego adresu IP, co oznacza, że ​​zawsze musi być u nas stały, niezależnie od tego, którzy dostawcy odpadli, a którzy działają. Aby to osiągnąć, potrzebujemy serwera sumującego, który zakończy wszystkie nasze połączenia i połączy je w jedno.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
Serwer sumujący agreguje wszystkie kanały w jeden tunel. Wszystkie połączenia pochodzą z adresu serwera sumującego

Ten schemat wykorzystuje wszystkich dostawców, a wyłączenie któregokolwiek z nich nie spowoduje utraty komunikacji z serwerem Twitcha. W rzeczywistości jest to specjalny tunel VPN, pod maską którego znajduje się jednocześnie kilka kanałów internetowych. Głównym zadaniem takiego schematu jest uzyskanie najwyższej jakości kanału komunikacji. Jeśli problemy zaczną się u jednego z dostawców, utrata pakietów, wzrost opóźnień, nie powinno to w żaden sposób wpłynąć na jakość komunikacji, ponieważ obciążenie zostanie automatycznie rozłożone na inne, lepsze kanały, które są dostępne.

Rozwiązania komercyjne

Problem ten od dawna niepokoi tych, którzy transmitują wydarzenia na żywo i nie mają dostępu do wysokiej jakości Internetu. Do takich zadań jest kilka komercyjnych rozwiązań, na przykład Teradek robi takie monstrualne routery, do których wkładane są paczki modemów USB:

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
Broadcast video router z funkcją sumowania kanałów

Takie urządzenia zwykle mają możliwość przechwytywania wideo przez HDMI lub SDI. Wraz z routerem sprzedawany jest abonament na usługę sumowania kanałów, a także przetwarzanie strumienia wideo, transkodowanie go i retransmitowanie dalej. Cena takich urządzeń zaczyna się od 2 tys. dolarów z kompletem modemów plus osobny abonament na usługę.

Czasami wygląda to dość groźnie:

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Konfigurowanie OpenMPTCPRoutera

Protokół MP-TCP (MultiPath TCP) został wynaleziony z myślą o możliwości łączenia się na kilku kanałach jednocześnie. Na przykład jego obsługuje iOS i może jednocześnie łączyć się ze zdalnym serwerem przez Wi-Fi i sieć komórkową. Ważne jest, aby zrozumieć, że nie są to dwa osobne połączenia TCP, ale jedno połączenie nawiązane na dwóch kanałach jednocześnie. Aby to zadziałało, zdalny serwer musi również obsługiwać MPTCP.

Otwórz MPTCPRoutera to projekt routera oprogramowania typu open source, który umożliwia prawdziwe sumowanie kanałów. Autorzy deklarują, że projekt jest w wersji alpha, ale można już z niego korzystać. Składa się z dwóch części - serwera sumującego, który znajduje się w Internecie oraz routera, do którego podłączonych jest kilku dostawców Internetu oraz same urządzenia klienckie: komputery, telefony. Niestandardowym routerem może być Raspberry Pi, niektóre routery Wi-Fi lub zwykły komputer. Istnieją gotowe zestawy dla różnych platform, co jest bardzo wygodne.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
Jak działa OpenMPTCPRouter

Konfiguracja serwera podsumowania

Serwer sumujący znajduje się w Internecie i łączy wszystkie kanały routera klienta w jeden. Adres IP tego serwera będzie adresem zewnętrznym podczas uzyskiwania dostępu do Internetu przez OpenMPTCPRouter.

Do tego zadania użyjemy serwera VPS na Debianie 10.

Wymagania serwera sumującego:

  • MPTCP nie działa na wirtualizacji OpenVZ
  • Powinno być możliwe zainstalowanie własnego jądra Linuksa

Serwer jest wdrażany przez wykonanie jednego polecenia. Skrypt zainstaluje jądro obsługujące mptcp i wszystkie wymagane pakiety. Skrypty instalacyjne są dostępne dla Ubuntu i Debiana.

wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh

Wynik pomyślnej instalacji serwera.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Zapisujemy hasła, będziemy ich potrzebować do skonfigurowania routera klienta i ponownego uruchomienia. Należy pamiętać, że po instalacji SSH będzie dostępne na porcie 65222. Po ponownym uruchomieniu musimy upewnić się, że uruchamiamy z nowym jądrem

uname -a 
Linux test-server.local 4.19.67-mptcp

Obok numeru wersji widzimy napis mptcp, co oznacza, że ​​jądro zostało poprawnie zainstalowane.

Konfigurowanie routera klienta

Na strona projektu Dostępne są gotowe kompilacje dla niektórych platform, takich jak Raspberry Pi, Banana Pi, routery Lynksys i maszyny wirtualne.
Ta część openmptcprouter jest oparta na OpenWRT, używając LuCI jako interfejsu, znanego każdemu, kto kiedykolwiek spotkał się z OpenWRT. Zestaw dystrybucyjny waży około 50 MB!

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Jako stanowisko testowe użyję Raspberry Pi i kilku modemów USB u różnych operatorów: MTS i Megafon. Jak napisać obraz na kartę SD, chyba nie trzeba mówić.

Początkowo port Ethernet w Raspberry Pi jest skonfigurowany jako lan ze statycznym adresem IP. 192.168.100.1. Aby nie zadzierać z przewodami na stole, podłączyłem Raspberry Pi do punktu dostępowego WiFi i ustawiłem adres statyczny na adapterze WiFi komputera 192.168.100.2. Serwer DHCP nie jest domyślnie włączony, dlatego należy używać adresów statycznych.

Teraz możesz przejść do interfejsu internetowego 192.168.100.1

Przy pierwszym logowaniu system poprosi o ustawienie hasła roota, SSH będzie dostępne z tym samym hasłem.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter
W ustawieniach LAN możesz ustawić żądaną podsieć i włączyć serwer DHCP.

Używam modemów, które są zdefiniowane jako interfejsy USB Ethernet z oddzielnym serwerem DHCP, więc wymagało to instalacji dodatkowe pakiety. Procedura jest identyczna z konfiguracją modemów w zwykłym OpenWRT, więc nie będę jej tutaj omawiał.

Następnie musisz skonfigurować interfejsy WAN. Początkowo w systemie zostały utworzone dwa interfejsy wirtualne WAN1 i WAN2. Muszą przypisać fizyczne urządzenie, w moim przypadku są to nazwy interfejsów modemu USB.

Aby nie pogubić się w nazwach interfejsów, radzę oglądać komunikaty dmesg podczas połączenia przez SSH.

Ponieważ moje modemy same działają jak routery i same mają serwer DHCP, musiałem zmienić ustawienia ich wewnętrznych zakresów sieci i wyłączyć serwer DHCP, ponieważ początkowo oba modemy wydają adresy z tej samej sieci, a to powoduje konflikt.

OpenMPTCPRouter wymaga, aby adresy interfejsu WAN były statyczne, więc wymyślamy podsieci dla modemów i konfigurujemy je w systemie → openmptcprouter → menu ustawień interfejsu. W tym miejscu należy również podać adres IP oraz klucz serwera uzyskany podczas instalacji serwera sumującego.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

W przypadku udanej konfiguracji podobny obraz powinien pojawić się na stronie stanu. Widać, że routerowi udało się połączyć z serwerem sumującym i oba kanały działają prawidłowo.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Tryb domyślny to shadowsocks + mptcp. To jest takie proxy, które opakowuje w siebie wszystkie połączenia. Początkowo jest skonfigurowany do obsługi tylko protokołu TCP, ale można również włączyć protokół UDP.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Jeśli na stronie stanu nie ma żadnych błędów, konfigurację można uznać za zakończoną.
W przypadku niektórych dostawców może wystąpić sytuacja, gdy flaga mptcp zostanie obcięta wzdłuż ścieżki ruchu, wtedy wystąpi taki błąd:

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

W takim przypadku możesz użyć innego trybu pracy, bez korzystania z MPTCP, więcej na ten temat tutaj.

wniosek

Projekt OpenMPTCPRouter jest bardzo interesujący i ważny, ponieważ jest prawdopodobnie jedynym otwartym kompleksowym rozwiązaniem problemu sumowania kanałów. Wszystko inne jest albo ściśle zamknięte i zastrzeżone, albo po prostu osobne moduły, z którymi zwykły człowiek nie może sobie poradzić. Na obecnym etapie rozwoju projekt jest jeszcze dość surowy, skrajnie uboga dokumentacja, wiele rzeczy po prostu nie jest opisanych. Ale jednocześnie nadal działa. Mam nadzieję, że będzie się dalej rozwijał i doczekamy się domowych routerów, które będą mogły łączyć kanały normalnie po wyjęciu z pudełka.

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Śledź naszego programistę na Instagramie

Rzeczywiste zestawienie kanałów internetowych - OpenMPTCPRouter

Źródło: www.habr.com

Dodaj komentarz