
Ar galima sujungti kelis interneto kanalus į vieną? Šia tema sklando daugybė klaidingų nuomonių ir mitų; net patyrę tinklo inžinieriai dažnai nežino, kad tai įmanoma. Daugeliu atvejų nuorodų agregavimas klaidingai vadinamas balansavimu NAT lygiu arba perjungimu. Tačiau tikras sumavimas leidžia vienu metu paleisti vieną TCP ryšį visais interneto kanalais, pavyzdžiui, vaizdo transliacija, kad, nutrūkus kuriam nors iš interneto kanalų, transliacija nenutrūktų.
Yra brangių komercinių vaizdo transliacijų sprendimų, tačiau tokie įrenginiai kainuoja daug kilobuckų. Straipsnyje aprašoma, kaip sukonfigūruoti nemokamą atvirojo kodo OpenMPTCPRuter paketą, ir aptariami populiarūs mitai apie kanalų sumavimą.
Mitai apie kanalų sumavimą
Yra daug namų maršrutizatorių, kurie palaiko „Multi-WAN“ funkciją. Kartais gamintojai šį kanalą vadina sumavimu, o tai nėra visiškai tiesa. Daugelis tinklų kūrėjų mano, kad be ir sumavimas L2 lygiu, jokio kito kanalo agregavimo nėra. Dažnai girdėjau, kad tai neįmanoma iš žmonių, kurie dirba telekomunikacijų srityje. Todėl pabandykime suprasti populiarius mitus.
Balansavimas IP ryšio lygiu
Tai pats prieinamiausias ir populiariausias būdas vienu metu naudotis keliais interneto kanalais. Paprastumo dėlei įsivaizduokime, kad turite tris interneto tiekėjus, kurių kiekvienas suteikia tikrą IP adresą iš savo tinklo. Visi šie teikėjai yra prijungti prie maršrutizatoriaus, kuris palaiko „Multi-WAN“ funkciją. Tai gali būti OpenWRT su mwan3 paketu, mikrotik, ubiquiti ar bet koks kitas buitinis maršrutizatorius, nes tokia parinktis nebėra neįprasta.
Norėdami imituoti situaciją, įsivaizduokime, kad tiekėjai mums nurodė šiuos adresus:
WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN2 — 33.33.33.33
Tai yra, prisijungimas prie nuotolinio serverio example.com Per kiekvieną tiekėją nuotolinis serveris matys tris nepriklausomus šaltinio IP klientus. Balansavimas leidžia paskirstyti apkrovą kanalams ir naudoti visus tris vienu metu. Paprastumo dėlei įsivaizduokime, kad apkrovą visiems kanalams paskirstome vienodai. Todėl, kai klientas atidaro svetainę su trimis vaizdais, jis atsisiunčia kiekvieną vaizdą per atskirą teikėją. Svetainės pusėje atrodo, kad jungtys iš trijų skirtingų IP.

Balansuojant ryšio lygiu, kiekvienas TCP ryšys eina per atskirą teikėją.
Šis balansavimo režimas dažnai sukelia problemų vartotojams. Pavyzdžiui, daugelis svetainių griežtai susieja slapukus ir žetonus su kliento IP adresu, o jei jis staiga pasikeičia, užklausa atmetama arba klientas atjungiamas nuo svetainės. Tai dažnai atkuriama klientų ir banko sistemose ir kitose svetainėse, kuriose taikomos griežtos vartotojo seanso taisyklės. Štai paprastas iliustruojantis pavyzdys: muzikos failai VK.com pasiekiami tik naudojant galiojantį seanso raktą, susietą su IP, o klientai, naudojantys tokį balansavimą, dažnai neatkuria garso, nes užklausa nebuvo perduota teikėjui, kuriam sesija yra lygi.

Atsisiunčiant torrentus, ryšio lygio balansavimas apibendrina visų kanalų pralaidumą
Šis balansavimas leidžia susumuoti interneto kanalo greitį naudojant kelis ryšius. Pavyzdžiui, jei kiekvienas iš trijų tiekėjų turi 100 megabitų greitį, tada atsisiųsdami torrentus gausime 300 megabitų. Kadangi torrent atveria daugybę jungčių, kurios paskirstomos visiems tiekėjams ir galiausiai panaudoja visą kanalą.
Svarbu suprasti, kad vienas TCP ryšys visada vyks tik per vieną teikėją. Tai yra, jei atsisiunčiame vieną didelį failą per HTTP, tada šis ryšys bus užmegztas per vieną iš tiekėjų, o jei ryšys su šiuo teikėju nutrūks, atsisiuntimas taip pat nutrūks.

Vienas ryšys visada naudos tik vieną interneto kanalą
Tai pasakytina ir apie vaizdo transliacijas. Jei transliuojate vaizdo transliaciją į tam tikrą sąlyginį „Twitch“, balansavimas IP jungčių lygyje neduos jokios ypatingos naudos, nes vaizdo srautas bus transliuojamas per vieną IP ryšį. Tokiu atveju, jei WAN 3 teikėjas pradeda turėti ryšio problemų, pvz., Paketų praradimas arba sumažėjęs greitis, negalėsite iš karto pereiti prie kito teikėjo. Transliacija turės būti sustabdyta ir vėl prijungta.
Tikras kanalų apibendrinimas
Realus kanalų sumavimas leidžia paleisti vieną ryšį su sąlyginiu Twitch per visus tiekėjus vienu metu taip, kad sugedus kuriam nors iš tiekėjų ryšys nenutrūktų. Tai stebėtinai sudėtinga problema, kuri vis dar neturi optimalaus sprendimo. Daugelis žmonių net nežino, kad tai įmanoma!
Iš ankstesnių iliustracijų prisimename, kad sąlyginis „Twitch“ serveris gali gauti vaizdo srautą iš mūsų tik iš vieno šaltinio IP adreso, o tai reiškia, kad jis mums visada turi būti pastovus, nepaisant to, kurie tiekėjai nukrito ir kurie veikia. Norėdami tai pasiekti, mums reikia sumavimo serverio, kuris nutrauks visus mūsų ryšius ir sujungs juos į vieną.

Sumavimo serveris sujungia visus kanalus į vieną tunelį. Visi ryšiai atsiranda iš sumavimo serverio adreso
Šioje schemoje naudojami visi tiekėjai, o bet kurio iš jų išjungimas nepraras ryšio su „Twitch“ serveriu. Iš esmės tai yra specialus VPN tunelis, po kurio gaubtu vienu metu yra keli interneto kanalai. Pagrindinė tokios schemos užduotis yra gauti aukščiausios kokybės ryšio kanalą. Jei vienam iš tiekėjų pradeda kilti problemų, dingsta paketai, didėja vėlavimai, tai neturėtų turėti įtakos ryšio kokybei, nes apkrova bus automatiškai paskirstyta kitais, geresniais kanalais.
Komerciniai sprendimai
Ši problema jau seniai vargina tuos, kurie tiesiogiai transliuoja įvykius ir neturi prieigos prie kokybiško interneto. Tokioms užduotims atlikti yra keli komerciniai sprendimai, pavyzdžiui, bendrovė „Teradek“ gamina tokius siaubingus maršrutizatorius, į kuriuos įdedami USB modemų paketai:

Vaizdo transliacijų maršrutizatorius su kanalų sumavimo funkcija
Tokiuose įrenginiuose dažniausiai yra integruota galimybė užfiksuoti vaizdo signalus per HDMI arba SDI. Kartu su maršrutizatoriumi parduodama kanalų sumavimo paslaugos prenumerata, taip pat apdorojamas vaizdo srautas, perkoduojamas ir perduodamas toliau. Tokių įrenginių kaina prasideda nuo 2 tūkst. USD su modemų rinkiniu ir atskira paslaugos prenumerata.
Kartais tai atrodo gana baisu:

„OpenMPTCPRuter“ nustatymas
Protokolas (MultiPath TCP) buvo išrastas, kad būtų galima vienu metu prisijungti keliais kanalais. Pavyzdžiui, jo ir vienu metu gali prisijungti prie nuotolinio serverio per WiFi ir per korinį tinklą. Svarbu suprasti, kad tai ne du atskiri TCP ryšiai, o vienas ryšys, užmegztas dviem kanalais vienu metu. Kad tai veiktų, nuotolinis serveris taip pat turi palaikyti MPTCP.
yra atvirojo kodo programinės įrangos maršrutizatoriaus projektas, leidžiantis atlikti tikrą kanalų apibendrinimą. Autoriai teigia, kad projektas yra alfa versijos būsenoje, tačiau juo jau galima naudotis. Jis susideda iš dviejų dalių – sumavimo serverio, kuris yra internete ir maršrutizatoriaus, prie kurio prijungti keli interneto tiekėjai bei patys kliento įrenginiai: kompiuteriai, telefonai. Pasirinktinis maršrutizatorius gali būti Raspberry Pi, kai kurie WiFi maršrutizatoriai arba įprastas kompiuteris. Yra paruoštų įvairių platformų mazgų, o tai labai patogu.

Kaip veikia OpenMPTCPRuter
Suvestinio serverio nustatymas
Sumavimo serveris yra internete ir nutraukia ryšius iš visų kliento maršrutizatoriaus kanalų į vieną. Šio serverio IP adresas bus išorinis adresas, kai prisijungiate prie interneto per OpenMPTCPRuter.
Šiai užduočiai atlikti naudosime VPS serverį Debian 10.
Reikalavimai sumavimo serveriui:
- MPTCP neveikia naudojant OpenVZ virtualizaciją
- Turėtų būti įmanoma įdiegti savo branduolį Linux
Serveris diegiamas paleidus vieną komandą. Skriptas įdiegs branduolį su mptcp palaikymu ir visais reikalingais paketais. Diegimo scenarijai yra prieinami Ubuntu и Debian.
wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh
Sėkmingo serverio diegimo rezultatas.

Išsaugome slaptažodžius, jų prireiks kliento maršrutizatoriui konfigūruoti ir paleisti iš naujo. Svarbu nepamiršti, kad po įdiegimo SSH bus pasiekiamas prie 65222 prievado. Perkrovę turime įsitikinti, kad paleidome naują branduolį
uname -a
Linux test-server.local 4.19.67-mptcp
Šalia versijos numerio matome užrašą mptcp, o tai reiškia, kad branduolys buvo įdiegtas teisingai.
Kliento maršrutizatoriaus nustatymas
Apie Kai kurioms platformoms, pvz., Raspberry Pi, Banana Pi, Lynksys maršrutizatoriams ir virtualiosioms mašinoms, yra paruoštų versijų.
Ši openmptcprouter dalis yra pagrįsta OpenWRT, naudojant LuCI kaip sąsają, žinomą visiems, kurie kada nors susidūrė su OpenWRT. Platinimas sveria apie 50 MB!

Kaip bandymų stendą naudosiu Raspberry Pi ir kelis USB modemus su skirtingais operatoriais: MTS ir Megafon. Nemanau, kad reikia jums pasakyti, kaip įrašyti vaizdą į SD kortelę.
Iš pradžių Raspberry Pi Ethernet prievadas sukonfigūruotas kaip LAN su statiniu IP adresu 192.168.100.1. Kad nereikėtų krapštytis su laidais ant stalo, „Raspberry Pi“ prijungiau prie „WiFi“ prieigos taško ir kompiuterio „WiFi“ adapterį nustatiau į statinį adresą. 192.168.100.2. DHCP serveris neįjungtas pagal numatytuosius nustatymus, todėl turite naudoti statinius adresus.
Dabar galite prisijungti prie žiniatinklio sąsajos
Kai prisijungiate pirmą kartą, sistema paprašys jūsų nustatyti root slaptažodį; SSH bus pasiekiamas su tuo pačiu slaptažodžiu.

LAN nustatymuose galite nustatyti norimą potinklį ir įjungti DHCP serverį.
Aš naudoju modemus, kurie yra apibrėžti kaip USB Ethernet sąsajos su atskiru DHCP serveriu, todėl reikėjo įdiegti . Procedūra yra identiška modemų nustatymui įprastuose OpenWRT, todėl čia to neaprašysiu.
Tada turite sukonfigūruoti WAN sąsajas. Iš pradžių sistema sukūrė dvi virtualias sąsajas WAN1 ir WAN2. Jiems reikia priskirti fizinį įrenginį, mano atveju tai yra USB modemo sąsajų pavadinimai.
Kad nesusipainiotumėte su sąsajų pavadinimais, rekomenduoju peržiūrėti dmesg pranešimus jungiantis per SSH.
Kadangi mano modemai patys veikia kaip maršrutizatoriai, o patys turi DHCP serverį, teko keisti jų vidinių tinklų diapazonų nustatymus ir išjungti DHCP serverį, nes iš pradžių abu modemai išduoda adresus iš to paties tinklo ir tai sukelia konfliktą.
OpenMPTCPRuter reikalauja, kad WAN sąsajos adresai būtų statiniai, todėl sugalvojame modemų potinklius ir juos konfigūruojame sistemos → openmptcprouter → sąsajos nustatymų meniu. Čia reikia nurodyti IP adresą ir serverio raktą, gautą diegiant sumavimo serverį.

Jei sąranka sėkminga, būsenos puslapyje turėtų pasirodyti panašus paveikslėlis. Matosi, kad maršrutizatorius sugebėjo pasiekti sumavimo serverį ir abu kanalai veikia normaliai.

Numatytasis režimas yra shadowsocks + mptcp. Tai tarpinis serveris, apimantis visus ryšius savyje. Iš pradžių jis sukonfigūruotas apdoroti tik TCP, tačiau galima įjungti ir UDP.

Jei būsenos puslapyje nėra klaidų, sąranka gali būti laikoma baigta.
Kai kuriuose paslaugų teikėjuose gali susidaryti situacija, kai eismo kelyje nupjaunama mptcp vėliava, tada pasirodys ši klaida:

Šiuo atveju galite naudoti kitą darbo režimą, nenaudodami MPTCP, daugiau apie tai .
išvada
OpenMPTCPRuter projektas yra labai įdomus ir svarbus, nes tai bene vienintelis atviras kompleksinis kanalų sumavimo problemos sprendimas. Visa kita yra arba sandariai uždaryta ir patentuota, arba tiesiog atskiri moduliai, kurių paprastas žmogus nesupranta. Dabartiniame kūrimo etape projektas dar gana grubus, dokumentacija itin prasta, daug kas tiesiog neaprašyta. Bet tuo pat metu jis vis dar veikia. Tikiuosi, kad jis ir toliau vystysis, ir mes sulauksime buitinių maršrutizatorių, kurie galės tinkamai sujungti kanalus.
Stebėkite mūsų kūrėją Instagram
Šaltinis: www.habr.com
