Is het mogelijk om meerdere internetkanalen in één te combineren? Er bestaan veel misvattingen en mythen rond dit onderwerp; zelfs ervaren netwerkingenieurs weten vaak niet dat dit mogelijk is. In de meeste gevallen wordt linkaggregatie ten onrechte balancering op NAT-niveau of failover genoemd. Maar echte sommatie maakt het mogelijk start één enkele TCP-verbinding tegelijkertijd via alle internetkanalenbijvoorbeeld video-uitzendingen, zodat als een van de internetkanalen wordt onderbroken, de uitzending niet wordt onderbroken.
Er zijn dure commerciële oplossingen voor video-uitzendingen, maar dergelijke apparaten kosten vele kilo's. Het artikel beschrijft hoe je het gratis, open-source OpenMPTCPRouter-pakket configureert en gaat in op populaire mythen over het optellen van kanalen.
Mythes over het optellen van kanalen
Er zijn veel thuisrouters die de Multi-WAN-functie ondersteunen. Soms noemen fabrikanten dit kanaaloptelling, wat niet helemaal waar is. Veel netwerkers geloven dat bovendien
Balanceren op IP-verbindingsniveau
Dit is de meest betaalbare en populaire manier om meerdere internetkanalen tegelijkertijd te gebruiken. Laten we ons voor de eenvoud voorstellen dat u drie internetproviders heeft, die u elk een echt IP-adres van hun netwerk geven. Al deze providers zijn aangesloten op een router die de Multi-WAN-functie ondersteunt. Dit kan OpenWRT zijn met het mwan3-pakket, mikrotik, ubiquiti of een andere huishoudelijke router, aangezien een dergelijke optie niet langer ongebruikelijk is.
Laten we ons, om de situatie te simuleren, voorstellen dat de providers ons de volgende adressen hebben gegeven:
WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN2 — 33.33.33.33
Dat wil zeggen, verbinding maken met een externe server example.com Via elk van de providers ziet de externe server drie onafhankelijke bron-IP-clients. Met balanceren kunt u de belasting over kanalen verdelen en ze alle drie tegelijkertijd gebruiken. Laten we ons voor de eenvoud voorstellen dat we de belasting gelijkelijk verdelen over alle kanalen. Als gevolg hiervan downloadt een klant, wanneer hij een site met drie afbeeldingen opent, elke afbeelding via een afzonderlijke provider. Aan de sitekant lijkt het op verbindingen van drie verschillende IP's.
Bij het balanceren op verbindingsniveau loopt elke TCP-verbinding via een aparte provider.
Deze balanceringsmodus veroorzaakt vaak problemen voor gebruikers. Veel sites binden bijvoorbeeld cookies en tokens strikt aan het IP-adres van de klant, en als dit plotseling verandert, wordt het verzoek afgewezen of wordt de klant afgemeld bij de site. Dit wordt vaak gereproduceerd in klant-banksystemen en andere sites met strikte regels voor gebruikerssessies. Hier is een eenvoudig illustratief voorbeeld: muziekbestanden op VK.com zijn alleen beschikbaar met een geldige sessiesleutel, die is gekoppeld aan een IP, en klanten die een dergelijke verdeling gebruiken, spelen vaak geen audio af omdat het verzoek niet via de provider is gegaan waarheen de sessie is gebonden.
Bij het downloaden van torrents telt de balancering van het verbindingsniveau de bandbreedte van alle kanalen op
Met deze balans kunt u de som krijgen van de snelheid van het internetkanaal wanneer u meerdere verbindingen gebruikt. Als elk van de drie providers bijvoorbeeld een snelheid van 100 Megabit heeft, krijgen we bij het downloaden van torrents 300 Megabit. Omdat een torrent veel verbindingen opent, die over alle providers worden verdeeld en uiteindelijk het hele kanaal benutten.
Het is belangrijk om te begrijpen dat één enkele TCP-verbinding altijd via slechts één provider loopt. Dat wil zeggen: als we één groot bestand downloaden via HTTP, dan komt deze verbinding tot stand via een van de providers, en als de verbinding met deze provider verbroken wordt, wordt de download ook verbroken.
Eén verbinding maakt altijd gebruik van slechts één internetkanaal
Dit geldt ook voor video-uitzendingen. Als je streaming video uitzendt naar een soort voorwaardelijke Twitch, zal het balanceren op het niveau van IP-verbindingen geen bijzonder voordeel opleveren, aangezien de videostream binnen één IP-verbinding wordt uitgezonden. Als de WAN 3-provider in dit geval problemen krijgt met de communicatie, zoals pakketverlies of verminderde snelheid, kunt u niet onmiddellijk naar een andere provider overstappen. De uitzending moet worden gestopt en opnieuw worden verbonden.
Echte kanaaloptelling
Real channel summing maakt het mogelijk om één verbinding met een voorwaardelijke Twitch in één keer via alle providers te laten verlopen, zodanig dat als een van de providers uitvalt, de verbinding niet wordt onderbroken. Dit is een verrassend moeilijk probleem waarvoor nog steeds geen optimale oplossing bestaat. Veel mensen weten niet eens dat dit mogelijk is!
Uit de voorgaande illustraties herinneren we ons dat de voorwaardelijke Twitch-server een videostream van ons kan ontvangen vanaf slechts één bron-IP-adres, wat betekent dat dit voor ons altijd constant moet zijn, ongeacht welke providers zijn uitgevallen en welke nog werken. Om dit te bereiken hebben we een sommatieserver nodig die al onze verbindingen verbreekt en combineert tot één.
De optelserver voegt alle kanalen samen in één tunnel. Alle verbindingen zijn afkomstig van het optelserveradres
In dit schema worden alle providers gebruikt en het uitschakelen van een van deze zal geen verlies van communicatie met de Twitch-server veroorzaken. In wezen is dit een speciale VPN-tunnel, onder de motorkap waarvan er meerdere internetkanalen tegelijk zijn. De belangrijkste taak van een dergelijk schema is het verkrijgen van een communicatiekanaal van de hoogste kwaliteit. Als een van de providers problemen krijgt, pakketverlies, grotere vertragingen, mag dit op geen enkele manier de kwaliteit van de communicatie beïnvloeden, aangezien de belasting automatisch wordt verdeeld over andere, betere kanalen die beschikbaar zijn.
Commerciële oplossingen
Dit probleem is al lange tijd een probleem voor degenen die live-evenementen uitzenden en geen toegang hebben tot internet van hoge kwaliteit. Voor dergelijke taken zijn er verschillende commerciële oplossingen, het bedrijf Teradek maakt bijvoorbeeld zulke monsterlijke routers waarin pakketten USB-modems worden geplaatst:
Router voor video-uitzendingen met kanaalsomfunctie
Dergelijke apparaten hebben meestal een ingebouwde mogelijkheid om videosignalen vast te leggen via HDMI of SDI. Samen met de router wordt een abonnement op de dienst voor het optellen van kanalen verkocht, evenals het verwerken van de videostream, het transcoderen en verder doorgeven. De prijs van dergelijke apparaten begint vanaf $ 2 met een set modems, plus een apart abonnement op de dienst.
Soms ziet het er best eng uit:
OpenMPTCPRouter instellen
protocol
Hoe OpenMPTCPRouter werkt
Een samenvattende server opzetten
De sommatieserver bevindt zich op internet en beëindigt verbindingen van alle kanalen van de clientrouter naar één. Het IP-adres van deze server is het externe adres bij toegang tot internet via OpenMPTCPRouter.
Voor deze taak zullen we een VPS-server op Debian 10 gebruiken.
Vereisten voor de optelserver:
- MPTCP werkt niet op OpenVZ-virtualisatie
- Het zou mogelijk moeten zijn om je eigen Linux-kernel te installeren
De server wordt ingezet door één opdracht uit te voeren. Het script installeert een kernel met mptcp-ondersteuning en alle benodigde pakketten. Er zijn installatiescripts beschikbaar voor Ubuntu en Debian.
wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh
Het resultaat van een succesvolle serverinstallatie.
We slaan de wachtwoorden op, we hebben ze nodig om de clientrouter te configureren en opnieuw op te starten. Het is belangrijk om in gedachten te houden dat SSH na de installatie beschikbaar zal zijn op poort 65222. Na het opnieuw opstarten moeten we ervoor zorgen dat we met de nieuwe kernel opstarten
uname -a
Linux test-server.local 4.19.67-mptcp
We zien de inscriptie mptcp naast het versienummer, wat betekent dat de kernel correct is geïnstalleerd.
Een clientrouter instellen
Op
Dit deel van openmptcprouter is gebaseerd op OpenWRT en gebruikt LuCI als interface, bekend voor iedereen die ooit OpenWRT is tegengekomen. De distributie weegt ongeveer 50 MB!
Als testbank gebruik ik een Raspberry Pi en verschillende USB-modems met verschillende operators: MTS en Megafon. Ik denk niet dat ik je hoef te vertellen hoe je een afbeelding naar een SD-kaart schrijft.
Aanvankelijk is de Ethernet-poort in de Raspberry Pi geconfigureerd als LAN met een statisch IP-adres 192.168.100.1. Om geknoeid met draden op het bureau te voorkomen, heb ik de Raspberry Pi op een WiFi-toegangspunt aangesloten en de WiFi-adapter van de computer op een statisch adres ingesteld 192.168.100.2. De DHCP-server is standaard niet ingeschakeld, dus u moet statische adressen gebruiken.
Nu kunt u inloggen op de webinterface
Wanneer u voor de eerste keer inlogt, zal het systeem u vragen een root-wachtwoord in te stellen; SSH zal beschikbaar zijn met hetzelfde wachtwoord.
In de LAN-instellingen kunt u het gewenste subnet instellen en de DHCP-server inschakelen.
Ik gebruik modems die zijn gedefinieerd als USB Ethernet-interfaces met een aparte DHCP-server, dus hiervoor was installatie vereist
Vervolgens moet u de WAN-interfaces configureren. Aanvankelijk creëerde het systeem twee virtuele interfaces WAN1 en WAN2. Ze moeten een fysiek apparaat toegewezen krijgen, in mijn geval zijn dit de namen van de USB-modeminterfaces.
Om verwarring met interfacenamen te voorkomen, raad ik aan om dmesg-berichten te bekijken terwijl je verbinding maakt via SSH.
Omdat mijn modems zelf als routers fungeren en zelf een DHCP-server hebben, moest ik de instellingen van hun interne netwerkbereiken wijzigen en de DHCP-server uitschakelen, omdat beide modems aanvankelijk adressen uit hetzelfde netwerk afgeven, en dit veroorzaakt een conflict.
OpenMPTCPRouter vereist dat de WAN-interfaceadressen statisch zijn, dus bedenken we subnetten voor de modems en configureren deze in het systeem → openmptcprouter → interface-instellingenmenu. Hier moet u het IP-adres en de serversleutel opgeven die zijn verkregen tijdens de installatie van de optelserver.
Als de installatie succesvol is, zou een soortgelijke afbeelding op de statuspagina moeten verschijnen. Het is duidelijk dat de router de sommatieserver heeft kunnen bereiken en dat beide kanalen normaal werken.
De standaardmodus is shadowsocks + mptcp. Dit is een proxy die alle verbindingen in zichzelf omhult. Het is aanvankelijk geconfigureerd om alleen TCP te verwerken, maar UDP kan ook worden ingeschakeld.
Als er geen fouten op de statuspagina staan, kan de installatie als voltooid worden beschouwd.
Bij sommige providers kan er een situatie ontstaan waarbij de mptcp-vlag langs het verkeerspad wordt afgesneden, waarna de volgende foutmelding verschijnt:
In dit geval kunt u een andere bedieningsmodus gebruiken, zonder gebruik te maken van MPTCP, hierover meer
Conclusie
Het OpenMPTCPRouter-project is erg interessant en belangrijk, omdat het misschien wel de enige open alomvattende oplossing is voor het probleem van het optellen van kanalen. Al het andere is ofwel strak gesloten en bedrijfseigen, ofwel eenvoudigweg afzonderlijke modules die een gewoon mens niet kan begrijpen. In de huidige ontwikkelingsfase is het project nog steeds vrij grof, de documentatie is extreem slecht, veel dingen zijn simpelweg niet beschreven. Maar tegelijkertijd werkt het nog steeds. Ik hoop dat dit zich zal blijven ontwikkelen, en dat we huishoudelijke routers zullen krijgen die out-of-the-box kanalen goed kunnen combineren.
Volg onze ontwikkelaar op Instagram
Bron: www.habr.com