Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Czy można połączyć kilka kanałów internetowych w jeden? Wokół tego tematu krąży wiele nieporozumień i mitów, nawet doświadczeni inżynierowie sieciowi często nie wiedzą, że jest to możliwe. W większości przypadków połączenie kanałów błędnie nazywa się równoważeniem ruchu na poziomie NAT lub failover. Prawdziwe sumowanie pozwala przesłać jedno pojedyncze połączenie TCP jednocześnie przez wszystkie kanały internetowe, na przykład transmisję wideo, tak aby przy przerwaniu któregokolwiek z kanałów internetowych nadawanie nie zostało przerwane.

Istnieją drogie komercyjne rozwiązania do transmisji wideo, ale takie urządzenia kosztują wiele tysięcy dolarów. W artykule opisano konfigurację darmowego, otwartego pakietu OpenMPTCPRouter oraz obalane są popularne mity o sumowaniu kanałów.

Mity o sumowaniu kanałów

Jest wiele domowych routerów, które wspierają funkcję Multi-WAN. Czasami producenci nazywają to sumowaniem kanałów, co nie jest do końca poprawne. Wiele osób zajmujących się sieciami wierzy, że poza LACP i sumowaniem na poziomie L2, nie ma żadnych innych sposobów łączenia kanałów. Często słyszałem, że jest to całkowicie niemożliwe od osób pracujących w telekomunikacji. Dlatego spróbujemy rozwikłać popularne mity.

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

To najłatwiejszy i najpopularniejszy sposób wykorzystania kilku kanałów internetowych jednocześnie. Dla uproszczenia załóżmy, że macie trzech dostawców internetowych, każdy przydziela wam prawdziwy adres IP ze swojej sieci. Wszyscy ci dostawcy są podłączeni do routera z funkcją Multi-WAN. Może to być OpenWRT z pakietem mwan3, mikrotik, ubiquiti lub jakikolwiek inny domowy router, biorąc pod uwagę, że teraz taka opcja nie jest już rzadkością.

Aby zobrazować sytuację, załóżmy, że dostawcy przydzielili nam takie adresy:

WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN2 — 33.33.33.33

To znaczy, podłączając się do zdalnego serwera example.com Przez każdego z dostawców, zdalny serwer zobaczy trzy niezależne source IP klienta. Load balancing pozwala na podział obciążenia między kanały i wykorzystanie ich wszystkich jednocześnie. Dla uproszczenia załóżmy, że dzielimy obciążenie równo pomiędzy wszystkimi kanałami. W rezultacie, gdy klient otwiera stronę, na której są przykładowo trzy obrazy, ładuje każdy obraz przez oddzielnego dostawcę. Po stronie strony wygląda to jak połączenia z trzech różnych IP.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
Przy balansowaniu na poziomie połączeń, każde połączenie TCP przebiega przez oddzielnego dostawcę.

Taki tryb balansowania często niesie za sobą problemy dla użytkowników. Na przykład wiele stron ostro wiąże cookies i tokeny z adresem IP klienta, a jeśli nagle się zmieni, zapytanie jest odrzucane lub klient zostaje wylogowany na stronie. To często zdarza się w systemach bankowości internetowej i na innych stronach z surowymi zasadami sesji użytkowników. Oto prosty, obrazowy przykład: pliki muzyczne na VK.com są dostępne tylko przy ważnym kluczu sesji, który jest powiązany z IP, a klienci używający takiego balansowania często nie mogą odtwarzać audio, ponieważ zapytanie poszło nie przez tego dostawcę, do którego przypisana jest sesja.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
Podczas pobierania torrentów, load balancing na poziomie połączeń sumuje przepustowość wszystkich kanałów.

Taki sposób balansowania pozwala uzyskać sumowanie prędkości łącza internetowego przy użyciu 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 uzyskamy 300 Megabitów. Ponieważ torrent otwiera wiele połączeń, które są rozdzielane między wszystkich dostawców i w rezultacie wykorzystują cały kanał.

Ważne jest zrozumienie, że jedno jedyne połączenie TCP zawsze przechodzi tylko przez jednego dostawcę. To znaczy, że jeśli ściągamy jeden duży plik przez HTTP, to to połączenie będzie realizowane przez jednego z dostawców, a jeśli połączenie z tym dostawcą zostanie przerwane, to pobieranie również się zatrzyma.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
Jedno połączenie zawsze będzie używać tylko jednego kanału internetowego.

To samo dotyczy transmisji wideo. Jeśli nadajesz strumieniowo na przykład na Twitchu, balansowanie na poziomie połączeń IP nie przyniesie żadnych szczególnych korzyści, ponieważ strumień wideo będzie przesyłany w obrębie jednego połączenia IP. W takim przypadku, jeśli u dostawcy WAN wystąpią problemy z łączem, takie jak utrata pakietów lub spadek prędkości, nie będziesz w stanie w mgnieniu oka przełączyć się na innego dostawcę. Transmisja będzie musiała zostać wstrzymana, a następnie połączona na nowo.

Sumowanie kanałów

Sumowanie kanałów w praktyce pozwala na przesłanie jednego połączenia do Twitcha przez wszystkich dostawców w taki sposób, że jeśli którakolwiek z firm dostarczających łącze przestanie działać, połączenie nie zostanie zerwane. To zadanie jest zaskakująco skomplikowane i nadal nie ma na nie optymalnego rozwiązania. Wielu ludzi nawet nie wie, że jest to możliwe!

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

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
Serwer sumujący agreguje wszystkie kanały w jeden tunel. Wszystkie połączenia odbywają się z adresu serwera sumującego.

W tej strukturze wykorzystywani są wszyscy dostawcy, a wyłączenie któregoś z nich nie spowoduje zerwania połączenia z serwerem Twitch. W istocie jest to specjalny tunel VPN, pod którym działa kilka połączeń internetowych. Głównym celem tego rozwiązania jest uzyskanie jak najwyższej jakości kanału komunikacyjnego. Jeśli jeden z dostawców zacznie mieć problemy, utratę pakietów lub zwiększenie opóźnień, nie powinno to w żaden sposób wpłynąć na jakość komunikacji, ponieważ obciążenie automatycznie rozdzieli się na inne, lepszej jakości kanały, którymi dysponujemy.

Rozwiązania komercyjne

Problem ten od dawna niepokoi osoby prowadzące transmisje na żywo eventów i nie mające dostępu do jakościowego internetu. Dla takich sytuacji istnieje kilka rozwiązań komercyjnych, na przykład firma Teradek produkuje takie monstrualne routery, do których wkłada się całe paczki modemów USB:

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
Router do strumieniowego przesyłania wideo z funkcją sumowania kanałów

W takich urządzeniach zwykle wbudowana jest możliwość przechwytywania sygnału wideo przez HDMI lub SDI. Wraz z routerem sprzedawana jest subskrypcja na usługę sumowania kanałów, a także przetwarzania strumienia wideo, jego transkodowania i retransmisji dalej. Cena takich urządzeń zaczyna się od 2k$ z zestawem modemów, plus oddzielna subskrypcja na usługę.

Czasami wygląda to dość przerażająco:

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Konfiguracja OpenMPTCPRouter

Protokół MP-TCP (MultiPath TCP) został wymyślony, aby umożliwić podłączenie kilku kanałów jednocześnie. Na przykład, jego obsługuje iOS i może jednocześnie łączyć się z zdalnym serwerem przez WiFi i sieć komórkową. Ważne jest, aby zrozumieć, że to nie są dwa oddzielne połączenia TCP, ale jedno połączenie na dwóch kanałach. Aby to działało, zdalny serwer musi również obsługiwać MPTCP.

OpenMPTCPRouter to otwarty projekt programowego routera, który naprawdę pozwala na sumowanie kanałów. Autorzy twierdzą, że projekt jest w fazie alfa, ale już można go używać. Składa się z dwóch części — serwera sumującego, który jest umieszczony w internecie, oraz routera, do którego podłączają się różni dostawcy internetu i same urządzenia klienckie: komputery, telefony. Jako router użytkownika może działać Raspberry Pi, niektóre routery WiFi lub zwykły komputer. Istnieją gotowe wersje pod różne platformy, co jest bardzo wygodne.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
Zasada działania OpenMPTCPRouter

Konfiguracja serwera sumującego

Serwer sumujący znajduje się w internecie i termininuje połączenia ze wszystkich kanałów klienta routera w jedno. Adres IP tego serwera będzie zewnętrznym adresem przy wyjściu do internetu przez OpenMPTCPRouter.

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

Wymagania dla serwera sumującego:

  • MPTCP nie działa na wirtualizacji OpenVZ
  • Powinna istnieć możliwość instalacji własnego jądra Linux

Serwer jest uruchamiany za pomocą jednego polecenia. Skrypt zainstaluje jądro z obsługą mptcp oraz wszystkie niezbędne pakiety. Dostępne są skrypty instalacyjne dla Ubuntu i Debiana.

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

Wynik udanej instalacji serwera.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Zapisujemy hasła, będą nam potrzebne do konfiguracji routera klienta, a następnie uruchamiamy go ponownie. Ważne jest, aby pamiętać, że po instalacji SSH będzie dostępny na porcie 65222. Po ponownym uruchomieniu należy upewnić się, że załadowaliśmy nowe jądro.

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

Widoczna obok numeru wersji adnotacja mptcp oznacza, że jądro zostało poprawnie zainstalowane.

Konfiguracja routera klienta

Na stronie projektu są dostępne gotowe obrazy dla niektórych platform, np. Raspberry Pi, Banana Pi, routery Lynksys oraz maszyny wirtualne.
Ta część openmptcprouter opiera się na OpenWRT, jako interfejs wykorzystuje LuCI, znany każdemu, kto miał do czynienia z OpenWRT. Dystrybucja ma około 50 MB!

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Jako stanowisko testowe będę używać Raspberry Pi oraz kilku modemów USB od różnych operatorów: MTS i MegaFon. Jak zapisać obraz na karcie SD, wątpię, bym musiał tłumaczyć.

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

Teraz można przejść do interfejsu internetowego. 192.168.100.1

Przy pierwszym logowaniu system poprosi o ustawienie hasła root, to samo hasło będzie używane do dostępu do SSH.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter
W ustawieniach LAN można ustawić odpowiednią podsieć i włączyć serwer DHCP.

Używam modemów, które są rozpoznawane jako interfejsy USB Ethernet z oddzielnym serwerem DHCP, więc wymagało to zainstalowania dodatkowych pakietów.. Procedura jest identyczna do konfiguracji modemów w standardowym OpenWRT, dlatego nie będę jej tutaj omawiać.

Następnie trzeba skonfigurować interfejsy WAN. Na początku w systemie tworzone są dwa wirtualne interfejsy WAN1 i WAN2. Należy im przypisać fizyczne urządzenie, w moim przypadku są to nazwy interfejsów modemów USB.

Aby nie pogubić się w nazwach interfejsów, sugeruję sprawdzić komunikaty dmesg, łącząc się przez SSH.

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

OpenMPTCPRouter wymaga, aby adresy interfejsów WAN były statyczne, dlatego wymyślamy podsieci dla modemów i konfigurujemy w menu system → openmptcprouter → ustawienia interfejsu. Tutaj również należy podać adres IP i klucz serwera uzyskany na etapie instalacji serwera sumującego.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

W przypadku pomyślnej konfiguracji, na stronie statusu powinna pojawić się podobna wizualizacja. Widać, że router zdołał połączyć się z serwerem sumującym i oba kanały działają prawidłowo.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Domyślnie używany jest tryb shadowsocks + mptcp. To taki proxy, który opakowuje wszystkie połączenia. Początkowo jest skonfigurowany do obsługi tylko TCP, ale można także włączyć UDP.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Jeśli na stronie statusu nie ma błędów, konfigurację można uznać za zakończoną.
W przypadku niektórych dostawców może wystąpić sytuacja, w której flaga mptcp na trasie ruchu jest obcinana, w takim przypadku wystąpi taki błąd:

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

W takim przypadku można skorzystać z innego trybu pracy, bez użycia MPTCP, więcej informacji na ten temat tutaj.

Podsumowanie

Projekt OpenMPTCPRouter jest bardzo interesujący i istotny, ponieważ to prawdopodobnie jedyne otwarte i kompleksowe rozwiązanie problemu sumowania kanałów. Wszystko inne jest albo zamknięte i proprietary, albo to po prostu pojedyncze moduły, z którymi przeciętna osoba nie jest w stanie sobie poradzić. Na obecnym etapie rozwoju projekt jest jeszcze dość surowy, dokumentacja jest bardzo uboga, wiele rzeczy nie jest po prostu opisanych. Ale mimo to działa. Mam nadzieję, że będzie się dalej rozwijać, i otrzymamy routery domowe, które będą potrafiły prawidłowo łączyć kanały od razu po wyjęciu z pudełka.

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Śledź naszego dewelopera na Instagramie

Prawdziwe sumowanie kanałów internetowych — OpenMPTCPRouter

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster