
Se poate combina mai multe canale de internet într-unul singur? În jurul acestui subiect sunt multe neînțelegeri și mituri, chiar și inginerii de rețea cu experiență nu știu adesea că este posibil. În majoritatea cazurilor, ceea ce se numește combinarea canalelor este, de fapt, echilibrarea la nivel NAT sau failover. Dar suma reală permite transmiterea unei singure conexiuni TCP simultan pe toate canalele de internet, de exemplu, stream-uri video astfel încât, în cazul întreruperii oricărui canal de internet, transmisia să nu fie oprită.
Există soluții comerciale scumpe pentru streaming video, dar aceste dispozitive costă multe mii de dolari. Articolul descrie configurarea pachetului gratuit și deschis OpenMPTCPRouter și demontează miturile populare despre combinarea canalelor.
Mituri despre combinarea canalelor
Există multe routere de uz casnic care suportă funcția Multi-WAN. Uneori, producătorii numesc asta combinarea canalelor, ceea ce nu este deloc corect. Mulți profesioniști din rețea cred că, în afară de și combinarea la nivel L2, nu există alte metode de combinare a canalelor. Am auzit adesea de la oameni care lucrează în telecomunicații că acest lucru este de fapt imposibil. Așadar, haideți să ne clarificăm miturile populare.
Echilibrarea la nivel IP
Acesta este cel mai accesibil și popular mod de a utiliza simultan mai multe canale de internet. Pentru simplificare, să presupunem că aveți trei furnizori de internet, fiecare oferindu-vă o adresă IP reală din rețeaua lor. Toți acești furnizori sunt conectați la un router care suportă funcția Multi-WAN. Acesta poate fi OpenWRT cu pachetul mwan3, mikrotik, ubiquiti sau orice alt router de uz casnic, având în vedere că acum o astfel de opțiune nu mai este o raritate.
Pentru a modela situația, să presupunem că furnizorii ne-au dat următoarele adrese:
WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN3 — 33.33.33.33
Asta înseamnă că, conectându-ne la un server dedicat example.com prin fiecare dintre furnizori, serverul remote va vedea trei IP-uri source independente ale clientului. Balansarea permite împărțirea încărcăturii pe canale și utilizarea tuturor celor trei simultan. Pentru simplificare, să presupunem că împărțim încărcătura între toate canalele în mod egal. Astfel, atunci când clientul deschide un site, care are, să zicem, trei imagini, descarcă fiecare imagine printr-un furnizor separat. Pe partea site-ului, aceasta arată ca conexiuni din trei IP-uri diferite.

În cazul balansării la nivel de conexiuni, fiecare conexiune TCP trece printr-un furnizor separat.
Acest mod de balansare creează adesea probleme pentru utilizatori. De exemplu, multe site-uri leagă strict cookie-urile și token-urile de adresa IP a clientului, iar dacă aceasta se schimbă brusc, cererea este respinsă sau clientul este deconectat de pe site. Aceasta se reproduce frecvent în sistemele de banking online și pe alte site-uri cu reguli stricte pentru sesiunile utilizatorilor. Iată un exemplu simplu: fișierele muzicale din VK.com sunt disponibile doar cu o sesiune validă, care este legată de IP, iar clienții care utilizează o astfel de balansare au adesea probleme cu redarea audio, deoarece cererea nu a fost trimisă prin furnizorul cu care este legată sesiunea.

Când se descarcă torrente, balansarea la nivel de conexiuni cumulează capacitatea totală a tuturor canalelor.
Această balansare permite obținerea unei sinteze a vitezei canalului de internet, utilizând multe conexiuni. De exemplu, dacă fiecare dintre cei trei furnizori are o viteză de 100 Megabiți, atunci la descărcarea de torrente vom obține 300 Megabiți. Acest lucru se datorează faptului că torrentul deschide multe conexiuni, care sunt distribuite între toți furnizorii și, în final, utilizează toată lățimea de bandă.
Este important de înțeles că o singură conexiune TCP va trece întotdeauna doar printr-un singur furnizor. Asta înseamnă că, dacă descărcăm un singur fișier mare prin HTTP, acea conexiune va fi realizată prin unul dintre furnizori, iar dacă legătura cu acest furnizor se întrerupe, descărcarea se va opri și ea.

O conexiune va utiliza întotdeauna doar un singur canal de internet.
Acesta este valabil și pentru transmisii video. Dacă transmiteți video pe o platformă precum Twitch, atunci echilibrarea la nivel de conexiuni IP nu va aduce beneficiile dorite, deoarece fluxul video va fi transmis printr-o singură conexiune IP. În acest caz, dacă furnizorul WAN are probleme de conectivitate, cum ar fi pierderi de pachete sau scăderea vitezei, nu veți putea comuta imediat la un alt furnizor. Va trebui să opriți transmisia și să reconectați din nou.
Sistematizarea canalelor
Sistematizarea reală a canalelor permite direcționarea unei singure conexiuni către Twitch prin toți furnizorii, astfel încât, dacă oricare dintre furnizori întâmpină probleme, conexiunea să nu fie întreruptă. Aceasta este o provocare surprinzător de complexă, care încă nu are o soluție optimă. Mulți nu știu chiar că este posibil!
După cum ne amintim din ilustrațiile anterioare, serverul Twitch poate accepta de la noi un flux video doar de la o singură adresă IP sursă, ceea ce înseamnă că trebuie să rămână constant, indiferent de furnizorii care au picat sau care funcționează. Pentru a realiza acest lucru, va fi nevoie de un server de sistematizare, care va termina toate conexiunile noastre și le va combina într-una singură.

Serverul de sistematizare agregă toate canalele într-un singur tunel. Toate conexiunile se fac de la adresa serverului de sistematizare.
În acest sistem, toți furnizorii sunt utilizați, iar deconectarea oricăruia dintre ei nu va provoca o întrerupere a legăturii cu serverul Twitch. Practic, este un VPN special, sub capotă având mai multe canale de internet. Principala sarcină a acestui sistem este de a obține un canal de comunicare de cea mai bună calitate. Dacă unul dintre furnizori întâmpină probleme, pierderi de pachete, creșterea de întârziere, acest lucru nu ar trebui să afecteze calitatea comunicării, deoarece încărcătura va fi distribuită automat pe celelalte canale de calitate superioară disponibile.
Soluții comerciale
Această problemă a tulburat de mult timp pe cei care efectuează transmisiuni live ale evenimentelor și nu au acces la un internet de calitate. Pentru astfel de sarcini există câteva soluții comerciale, cum ar fi compania Teradek, care produce routere imense în care se pot introduce pachete de modemuri USB:

Router pentru transmisii video cu funcția de agregare a canalelor
În aceste dispozitive, de obicei, este încorporată posibilitatea de captare a semnalului video prin HDMI sau SDI. Împreună cu routerul se vinde un abonament la serviciul de agregare a canalelor, precum și procesarea fluxului video, transcodificarea acestuia și retransmiterea. Prețul acestor dispozitive începe de la 2.000 USD cu un pachet de modemuri, plus un abonament separat pentru serviciu.
Uneori, acest lucru arată destul de înfricoșător:

Configurăm OpenMPTCPRouter
Protocolul (MultiPath TCP) a fost conceput pentru a permite conectarea simultană prin mai multe canale. De exemplu, acesta și poate conecta simultan la un server de la distanță prin WiFi și prin rețeaua mobilă. Este important de înțeles că nu sunt două conexiuni TCP separate, ci o singură conexiune stabilită prin două canale. Pentru ca acest lucru să funcționeze, serverul de la distanță trebuie să suporte MPTCP și el.
este un proiect deschis de router software care permite adevărata agregare a canalelor. Autorii afirmă că proiectul se află în stare de alpha, dar poate fi folosit deja. Este compus din două părți - un server de agregare care este găzduit pe internet și un router la care se conectează mai mulți furnizori de internet și dispozitivele client, cum ar fi computerele, telefoanele. Ca router de utilizator poate fi utilizat Raspberry Pi, unele routere WiFi sau un computer obișnuit. Există versiuni precompilate pentru diferite platforme, ceea ce este foarte convenabil.

Principiul de funcționare al OpenMPTCPRouter
Configurarea serverului de agregare
Serverul de agregare este situat pe internet și termină conexiunile de la toate canalele routerului client într-o singură conexiune. Adresa IP a acestui server va fi adresa externă la ieșirea pe internet prin OpenMPTCPRouter.
Pentru această sarcină, vom folosi un server VPS cu Debian 10.
Cerințele pentru serverul de agregare:
- MPTCP nu funcționează pe virtualizarea OpenVZ
- Trebuie să existe posibilitatea de a instala propriul kernel Linux
Serverul se instalează prin executarea unei comenzi. Scriptul va instala kernel-ul cu suport pentru mptcp și toate pachetele necesare. Scripturile de instalare sunt disponibile pentru Ubuntu și Debian.
wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh
Rezultatul instalării reușite a serverului.

Salvăm parolele, acestea ne vor fi necesare pentru configurarea routerului client și ne repornim. Este important de reținut că, după instalare, SSH va fi disponibil pe portul 65222. După repornire, trebuie să ne asigurăm că am pornit cu noul nucleu.
uname -a
Linux test-server.local 4.19.67-mptcp
Observăm lângă numărul versiunii inscripția mptcp, ceea ce înseamnă că nucleul s-a instalat corect.
Configurarea routerului client
Pe sunt disponibile build-uri gata pentru unele platforme, cum ar fi Raspberry Pi, Banana Pi, routere Lynksys și mașini virtuale.
Această parte din openmptcprouter este bazată pe OpenWRT, utilizând interfața LuCI, cunoscută tuturor celor care s-au confruntat vreodată cu OpenWRT. Distribuția cântărește aproximativ 50MB!

Ca banc de teste, voi folosi Raspberry Pi și câteva modemuri USB cu operatori diferiți: MTS și MegaFon. Cum să scrii imaginea pe cardul SD, cred că nu trebuie să explic.
Inițial, portul Ethernet de pe Raspberry Pi este configurat ca lan cu o adresă IP statică. 192.168.100.1. Pentru a nu te încurca cu cablurile pe birou, am conectat Raspberry Pi la un punct de acces WiFi și am setat pe adaptorul WiFi al computerului o adresă statică. 192.168.100.2. Serverul DHCP din mod implicit nu este activat, așa că trebuie folosite adresele statice.
Acum putem accesa interfața web.
La prima intrare, sistemul va solicita să stabiliți parola root, cu aceeași parolă va fi disponibil SSH.

În setările LAN, puteți stabili subrețeaua dorită și activa serverul DHCP.
Folosesc modemuri care sunt identificate ca interfețe USB Ethernet cu un server DHCP separat, astfel că acest lucru a necesitat instalarea . Procedura este identică cu configurarea modemurilor în OpenWRT obișnuit, așa că nu o voi trata aici.
Următorul pas este configurarea interfețelor WAN. Inițial, în sistem sunt create două interfețe virtuale WAN1 și WAN2. Trebuie asignate un dispozitiv fizic, în cazul meu, acestea sunt numele interfețelor modemurilor USB.
Pentru a nu te încurca în numele interfețelor, recomand să verifici mesajele dmesg, conectându-te prin SSH.
Deoarece modemurile mele acționează ca routere și au server DHCP propriu, a trebuit să schimb setările lor interne de rețea și să dezactivez serverul DHCP, deoarece inițial ambele modemuri emit adrese din aceeași rețea, ceea ce cauzează un conflict.
OpenMPTCPRouter necesită ca adresele interfețelor WAN să fie statice, așa că vom atribui subteluri modemurilor și le vom configura în meniul system → openmptcprouter → interface settings. Aici trebuie să indicăm adresa IP și cheia serverului obținută în etapa de instalare a serverului de agregare.

În cazul unei configurări reușite, pe pagina de stare ar trebui să apară o imagine asemănătoare. Se observă că routerul a reușit să se conecteze la serverul de agregare și ambele canale funcționează corespunzător.

Modul implicit utilizat este shadowsocks + mptcp. Aceasta este o variantă de proxy care înglobează toate conexiunile. Inițial este configurat să proceseze doar TCP, dar se poate activa și UDP.

Dacă pe pagina de stare nu există erori, atunci configurația poate fi considerată finalizată.
Cu unii furnizori pot apărea situații în care semnalul mptcp pe parcursul traseului de trafic este eliminat, generând astfel o eroare:

În acest caz, se poate utiliza un alt mod de operare, fără utilizarea MPTCP; mai multe detalii despre aceasta .
Concluzie
Proiectul OpenMPTCPRouter este foarte interesant și important, deoarece este probabil singura soluție deschisă și complexă pentru problema agregării canalelor. Tot restul este fie complet închis și proprietar, fie doar module separate, cu care o persoană obișnuită nu se poate descurca. La acest stadiu al dezvoltării, proiectul este încă destul de brut, cu documentație extrem de sărăcăcioasă, multe lucruri pur și simplu nefiind descrise. Dar în ciuda acestui fapt, funcționează. Sper că va continua să se dezvolte și vom avea routere de uz casnic capabile să agregheze canale corect din cutie.
Urmăriți dezvoltatorul nostru pe Instagram
Sursa: habr.com
