Je možné spojit několik internetových kanálů do jednoho? Kolem tohoto tématu koluje spousta mylných představ a mýtů, ani zkušení síťoví inženýři často nevědí, že je to možné. Ve většině případů je agregace odkazů chybně označována jako NAT balancing nebo failover. Ale skutečné shrnutí umožňuje spustit jediné TCP spojení současně přes všechny internetové kanály, například video vysílání, takže v případě přerušení některého z internetových kanálů nebude vysílání přerušeno.
Existují drahá komerční řešení pro vysílání videa, ale taková zařízení stojí hodně kilobacků. Článek popisuje konfiguraci bezplatného otevřeného balíčku OpenMPTCPRouter a zabývá se populárními mýty o sčítání kanálů.
Mýty o sčítání kanálů
Existuje mnoho domácích routerů, které podporují funkci Multi-WAN. Někdy tomu výrobci říkají sčítání kanálů, což není tak úplně pravda. Mnoho síťařů se domnívá, že kromě
Balancování na úrovni IP spojení
Jedná se o nejdostupnější a nejoblíbenější způsob, jak využívat několik internetových kanálů současně. Pro zjednodušení si představme, že máte tři ISP, z nichž každý vám poskytne skutečnou IP adresu ze své sítě. Všichni tito poskytovatelé jsou připojeni k routeru s podporou funkce Multi-WAN. Může to být OpenWRT s balíčkem mwan3, mikrotik, ubiquiti nebo jakýkoli jiný domácí router, protože tato možnost již není neobvyklá.
Pro simulaci situace si představte, že nám poskytovatelé poskytli následující adresy:
WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN2 — 33.33.33.33
Tedy připojení ke vzdálenému serveru example.com prostřednictvím každého z poskytovatelů uvidí vzdálený server tři nezávislé zdrojové adresy IP klienta. Vyvažování umožňuje rozdělit zátěž mezi kanály a používat je všechny tři současně. Pro zjednodušení si představme, že zátěž rozdělíme mezi všechny kanály rovnoměrně. Výsledkem je, že když klient otevře web se třemi obrázky podmíněně, stáhne každý obrázek prostřednictvím samostatného poskytovatele. Na straně webu to vypadá jako připojení ze tří různých IP adres.
Při balancování na úrovni připojení prochází každé TCP spojení přes samostatného poskytovatele.
Tento režim vyvážení často způsobuje uživatelům problémy. Mnoho webů například napevno připojuje soubory cookie a tokeny na adresu IP klienta, a pokud se náhle změní, požadavek je vyřazen nebo se klient z webu odhlásí. To se často reprodukuje v systémech klient-banka a dalších webech s přísnými pravidly uživatelských relací. Zde je jednoduchý názorný příklad: hudební soubory na VK.com jsou dostupné pouze s platným klíčem relace, který je vázán na IP, a klienti využívající takové balancování často nepřehrají zvuk, protože požadavek neprošel přes poskytovatele, ke kterému relace je vázána.
Při stahování torrentů balancování na úrovni připojení sčítá šířku pásma všech kanálů
Takové vyvažování vám umožňuje získat součet rychlosti internetového kanálu při použití více připojení. Pokud má například každý ze tří poskytovatelů rychlost 100 megabitů, pak při stahování torrentů získáme 300 megabitů. Protože torrent otevírá spoustu spojení, která jsou distribuována mezi všechny poskytovatele a nakonec využívají celý kanál.
Je důležité si uvědomit, že jedno jediné TCP spojení půjde vždy pouze přes jednoho poskytovatele. Tzn., že pokud stáhneme jeden velký soubor přes HTTP, tak toto spojení proběhne přes jednoho z poskytovatelů a pokud se spojení s tímto poskytovatelem přeruší, tak se přeruší i stahování.
Jedno připojení bude vždy využívat pouze jeden internetový kanál
To platí i pro videovysílání. Pokud vysíláte streamované video na nějakém podmíněném Twitchi, pak vyvážení na úrovni IP připojení nepřinese žádnou zvláštní výhodu, protože video stream bude vysílán v rámci jednoho IP připojení. V tomto případě, pokud poskytovatel WAN 3 začne mít problémy s komunikací, jako je ztráta paketů nebo zpomalení, nebudete moci okamžitě přejít k jinému poskytovateli. Vysílání bude muset být zastaveno a znovu připojeno.
Skutečné sčítání kanálů
Reálný součet kanálů umožňuje spustit jedno připojení k podmíněnému Twitchi přes všechny poskytovatele najednou tak, že pokud některý z poskytovatelů přeruší, připojení nebude přerušeno. Jde o překvapivě obtížný problém, který stále nemá optimální řešení. Mnozí ani nevědí, že je to možné!
Z předchozích ilustrací si pamatujeme, že podmíněný Twitch server od nás může přijímat video stream pouze z jedné zdrojové IP adresy, což znamená, že musí být s námi vždy konstantní, bez ohledu na to, kteří poskytovatelé odpadli a kteří fungují. Abychom toho dosáhli, potřebujeme sumační server, který ukončí všechna naše spojení a sloučí je do jednoho.
Sumační server agreguje všechny kanály do jednoho tunelu. Všechna spojení pocházejí z adresy sumačního serveru
Toto schéma využívá všechny poskytovatele a deaktivace kteréhokoli z nich nezpůsobí ztrátu komunikace se serverem Twitch. Ve skutečnosti se jedná o speciální VPN tunel, pod jehož kapotou je několik internetových kanálů najednou. Hlavním úkolem takového schématu je získat nejkvalitnější komunikační kanál. Pokud problémy začnou u jednoho z poskytovatelů, ztráta paketů, zvýšení zpoždění, nemělo by to žádným způsobem ovlivnit kvalitu komunikace, protože zátěž bude automaticky distribuována přes jiné, lepší kanály, které jsou k dispozici.
Komerční řešení
Tento problém již dlouho trápí ty, kteří vysílají události živě a nemají přístup k vysoce kvalitnímu internetu. Pro takové úkoly existuje několik komerčních řešení, například Teradek vyrábí takové monstrózní routery, do kterých se vkládají balíčky USB modemů:
Vysílací video router s funkcí sčítání kanálů
Taková zařízení mají obvykle schopnost zachytit video přes HDMI nebo SDI. Společně s routerem se prodává předplatné služby sčítání kanálů a také zpracování video streamu, jeho překódování a další přenos. Cena takových zařízení začíná od 2 XNUMX $ se sadou modemů plus samostatné předplatné služby.
Někdy to vypadá dost děsivě:
Nastavení OpenMPTCPRouter
Protokol
Jak funguje OpenMPTCPRouter
Nastavení sumarizačního serveru
Sumační server je umístěn na internetu a ukončuje spojení ze všech kanálů klientského routeru do jednoho. IP adresa tohoto serveru bude externí adresou při přístupu k internetu přes OpenMPTCPRouter.
Pro tento úkol použijeme server VPS na Debianu 10.
Požadavky na sumační server:
- MPTCP nefunguje na virtualizaci OpenVZ
- Mělo by být možné nainstalovat si vlastní linuxové jádro
Server je nasazen provedením jednoho příkazu. Skript nainstaluje jádro s povoleným mptcp a všechny požadované balíčky. Instalační skripty jsou dostupné pro Ubuntu a Debian.
wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh
Výsledek úspěšné instalace serveru.
Uložíme si hesla, budeme je potřebovat ke konfiguraci klientského routeru a restartu. Je důležité mít na paměti, že po instalaci bude SSH dostupné na portu 65222. Po restartu se musíme ujistit, že nabootujeme s novým jádrem
uname -a
Linux test-server.local 4.19.67-mptcp
Vedle čísla verze vidíme nápis mptcp, což znamená, že jádro bylo nainstalováno správně.
Nastavení klientského routeru
Na
Tato část openmptcprouteru je založena na OpenWRT a používá LuCI jako rozhraní, známé každému, kdo se někdy setkal s OpenWRT. Distribuční sada váží asi 50 Mb!
Jako testovací stolici použiji Raspberry Pi a několik USB modemů s různými operátory: MTS a Megafon. Jak zapsat obrázek na SD kartu, asi netřeba říkat.
Zpočátku je ethernetový port v Raspberry Pi nakonfigurován jako LAN se statickou IP adresou. 192.168.100.1. Abych si nepletl s dráty na stole, připojil jsem Raspberry Pi k přístupovému bodu WiFi a na WiFi adaptéru počítače nastavil statickou adresu 192.168.100.2. Server DHCP není ve výchozím nastavení povolen, takže je nutné použít statické adresy.
Nyní můžete přejít do webového rozhraní
Při prvním přihlášení vás systém požádá o nastavení hesla root, SSH bude dostupné se stejným heslem.
V nastavení LAN můžete nastavit požadovanou podsíť a povolit DHCP server.
Používám modemy, které jsou definovány jako USB ethernetová rozhraní se samostatným DHCP serverem, takže to vyžadovalo instalaci
Dále je třeba nakonfigurovat rozhraní WAN. Zpočátku byla v systému vytvořena dvě virtuální rozhraní WAN1 a WAN2. Potřebují přiřadit fyzické zařízení, v mém případě jsou to názvy rozhraní USB modemu.
Abyste se nepletli v názvech rozhraní, doporučuji vám sledovat zprávy dmesg při připojení přes SSH.
Protože moje modemy samy fungují jako routery a samy mají DHCP server, musel jsem změnit nastavení jejich vnitřních síťových rozsahů a vypnout DHCP server, protože zpočátku oba modemy zadávají adresy ze stejné sítě a to způsobuje konflikt.
OpenMPTCPRouter vyžaduje, aby adresy rozhraní WAN byly statické, proto vymyslíme podsítě pro modemy a nakonfigurujeme je v nabídce systém → openmptcprouter → nastavení rozhraní. Zde je také nutné zadat IP adresu a klíč serveru získané během instalace sumačního serveru.
V případě úspěšného nastavení by se na stavové stránce měl objevit podobný obrázek. Je vidět, že se routeru podařilo dosáhnout sumačního serveru a oba kanály fungují správně.
Výchozí režim je shadowsocks + mptcp. To je taková proxy, která do sebe zabalí všechna spojení. Zpočátku je nakonfigurován tak, aby zpracovával pouze TCP, ale můžete povolit i UDP.
Pokud na stavové stránce nejsou žádné chyby, lze nastavení považovat za dokončené.
U některých poskytovatelů může nastat situace, kdy je příznak mptcp zkrácen podél dopravní cesty, pak dojde k takové chybě:
V tomto případě můžete použít jiný režim provozu, bez použití MPTCP, více o tom
Závěr
Projekt OpenMPTCPRouter je velmi zajímavý a důležitý, protože je možná jediným otevřeným komplexním řešením problému sčítání kanálů. Všechno ostatní je buď pevně uzavřené a proprietární, nebo jen samostatné moduly, se kterými si běžný člověk neporadí. V současné fázi vývoje je projekt ještě dost syrový, extrémně špatná dokumentace, spousta věcí prostě není popsána. Ale zároveň to pořád funguje. Doufám, že se to bude dál vyvíjet a dostaneme routery pro domácnost, které budou umět normálně kombinovat kanály hned z krabice.
Sledujte našeho vývojáře na Instagramu
Zdroj: www.habr.com