Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router

Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router

Sommigen van ons gebruiken het internet om de een of andere reden niet zonder VPN: iemand heeft een speciaal IP-adres nodig, en het is gemakkelijker en goedkoper om een ​​VPS met twee IP's te kopen dan een adres bij een provider te kopen, iemand wil toegang tot alle websites , en niet alleen degenen die zijn toegestaan ​​op het grondgebied van de Russische Federatie, anderen hebben IPv6 nodig, maar de provider biedt dit niet...
Meestal wordt er een VPN-verbinding tot stand gebracht op het apparaat zelf dat op een bepaald moment wordt gebruikt, wat logisch is als je maar één computer en één telefoon hebt en deze zelden tegelijkertijd gebruikt. Als er veel apparaten in uw thuisnetwerk zijn, of er zijn er bijvoorbeeld enkele waarop VPN niet kan worden geconfigureerd, is het handiger om rechtstreeks op de thuisrouter een tunnel te creëren, zodat u niet hoeft na te denken over het afzonderlijk instellen van elk apparaat .

Als je ooit OpenVPN op je router hebt geïnstalleerd, ben je waarschijnlijk onaangenaam verrast door de snelheid ervan. De SoC's van zelfs goedkope routers passeren zonder problemen ongeveer een gigabitverkeer, dankzij de overdracht van routing- en NAT-functies naar een aparte chip die exclusief voor deze taak is ontworpen, en de hoofdprocessors van dergelijke routers zijn vrij zwak, omdat Er zit vrijwel geen belasting op. Met dit compromis kunt u een hoge snelheid van de router bereiken en de prijs van het voltooide apparaat aanzienlijk verlagen - routers met krachtige processors kosten meerdere malen meer en zijn niet alleen gepositioneerd als een box voor het distribueren van internet, maar ook als een NAS, torrent downloader en multimediasysteem voor thuis.

Mijn router, TP-Link TL-WDR4300, kan niet nieuw worden genoemd - het model verscheen medio 2012 en heeft een 560 MHz MIPS32 74Kc-architectuurprocessor, waarvan de kracht slechts voldoende is voor 20-23 Mb/s gecodeerd verkeer via OpenVPN, wat standaard is. De snelheid van het moderne internet thuis is vrij laag.
Hoe kunnen we de snelheid van een gecodeerde tunnel verhogen? Mijn router is behoorlijk functioneel, ondersteunt 3x3 MIMO en werkt over het algemeen goed, ik zou hem niet willen veranderen.
Omdat het nu gebruikelijk is om internetpagina's van 10 megabyte te maken, desktopapplicaties in node.js te schrijven en deze in een bestand van 100 megabyte te verpakken, de rekenkracht te vergroten in plaats van te optimaliseren, zullen we iets verschrikkelijks doen: we zullen de VPN-verbinding overbrengen naar een productieve single-board “computer” Orange Pi One, die we in de routerbehuizing zullen installeren zonder bestaande netwerk- en USB-poorten in beslag te nemen, voor slechts $ 9.99*!
* + bezorging, + belastingen, + voor bier, + MicroSD.

OpenVPN

De processor van de router kan niet volledig zwak worden genoemd: hij is in staat gegevens te versleutelen en te hashen met behulp van het AES-128-CBC-SHA1-algoritme met een snelheid van 50 Mb/s, wat merkbaar sneller is dan hoe OpenVPN werkt, en de moderne CHACHA20-stream cijfer met een POLY1305-hash bereikt zelfs 130 megabits per seconde! Waarom is de snelheid van de VPN-tunnel zo laag? Het draait allemaal om contextwisseling tussen gebruikersruimte en kernelruimte: OpenVPN codeert verkeer en communiceert met de buitenwereld in de gebruikerscontext, en de routering zelf vindt plaats in de kernelcontext. Het besturingssysteem moet voortdurend heen en weer schakelen voor elk ontvangen of verzonden pakket, en deze bewerking is traag. Dit probleem is inherent aan alle VPN-applicaties die via een TUN/TAP-stuurprogramma draaien, en er kan niet worden gezegd dat het probleem van lage snelheid wordt veroorzaakt door slechte OpenVPN-optimalisatie (hoewel er natuurlijk plaatsen zijn die herwerkt moeten worden). Geen enkele VPN-client in de gebruikersruimte biedt zelfs maar een gigabit terwijl de encryptie op mijn laptop is uitgeschakeld, laat staan ​​systemen met een zwakke processor.

Oranje Pi One

De single-board Orange Pi One van Xunlong is momenteel het beste aanbod qua prestatie-prijsverhouding. Voor $ 9.99* krijg je een solide quad-core ARM Cortex-A7-processor die (stabiel) draait op 1008 MHz, en duidelijk beter presteert dan zijn prijsklasse-buren, de Raspberry Pi Zero en Next Thing CHIP. Dit is waar de voordelen eindigen. Het bedrijf Xunlong besteedt helemaal geen aandacht aan de software van zijn borden, en op het moment dat de One te koop werd aangeboden, leverde het niet eens een bordconfiguratiebestand, om nog maar te zwijgen van kant-en-klare afbeeldingen. Allwinner, een SoC-fabrikant, is ook niet bijzonder gevoelig voor het ondersteunen van zijn product. Ze zijn alleen geïnteresseerd in minimale prestaties in het Android 4.4.4 OS, wat betekent dat we gedwongen zijn om de 3.4-kernel met Android-patches te gebruiken. Gelukkig zijn er enthousiastelingen die distributies samenstellen, de kernel bewerken, code schrijven om boards in de hoofdkernel te ondersteunen, d.w.z. zij doen feitelijk het werk voor de fabrikant, waardoor deze onzin acceptabel werkt. Voor mijn doeleinden heb ik gekozen voor de Armbian-distributie; deze wordt regelmatig en gemakkelijk bijgewerkt (nieuwe kernels worden rechtstreeks via de pakketbeheerder geïnstalleerd, en niet door bestanden naar een speciale partitie te kopiëren, zoals gewoonlijk het geval is met Allwinner), en het ondersteunt de meeste randapparatuur, in tegenstelling tot de anderen.

Router

Om de zwakke processor van de router niet te belasten met encryptie en onze VPN-verbinding te versnellen, kunnen we deze taak op de schouders van een krachtigere Orange Pi-processor verschuiven door deze op een of andere manier met de router te verbinden. Ik denk aan verbinding maken via Ethernet of USB - beide standaarden worden door beide apparaten ondersteund, maar ik wilde de bestaande poorten niet in beslag nemen. Gelukkig is er een uitweg.

De GL850G USB-hubchip, die in de router wordt gebruikt, ondersteunt 4 USB-poorten, waarvan er twee niet bedraad zijn. Het is onduidelijk waarom de fabrikant ze niet heeft losgemaakt, neem ik aan, om te voorkomen dat gebruikers 4 apparaten met een hoog stroomverbruik (bijvoorbeeld harde schijven) tegelijk aansluiten. De standaardvoeding van de router is niet ontworpen voor een dergelijke belasting. Dit is in ieder geval in ons voordeel.
Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router
Om nog een USB-poort te krijgen, hoeft u alleen maar twee draden aan pin 8(D-) en 9(D+) of 11(D-) en 12(D+) te solderen.

Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router

Het is echter niet voldoende om simpelweg twee USB-apparaten aan te sluiten en te hopen dat alles vanzelf zal werken, zoals bij Ethernet. Ten eerste moeten we ervoor zorgen dat een van deze in de USB Client-modus werkt, en niet in de USB Host, en ten tweede moeten we beslissen hoe de apparaten elkaar zullen detecteren. Er zijn veel stuurprogramma's voor de zogenaamde USB-gadgets (genoemd naar het Linux-kernelsubsysteem), waarmee je verschillende soorten USB-apparaten kunt emuleren: netwerkadapter, geluidskaart, toetsenbord en muis, flashdrive, camera, console via een seriële haven. Omdat ons apparaat met het netwerk zal werken, is het emuleren van een Ethernet-adapter het beste voor ons.

Er zijn drie Ethernet-over-USB-standaarden:

  • Externe NDIS (RNDIS). Een verouderde standaard van Microsoft, voornamelijk gebruikt tijdens Windows XP.
  • Ethernet-besturingsmodel (ECM). Een eenvoudige standaard die Ethernet-frames in USB-pakketten inkapselt. Ideaal voor bedrade modems met een USB-aansluiting, waarbij het handig is om frames over te dragen zonder verwerking, maar vanwege de eenvoud en beperkingen van de USB-bus niet erg snel.
  • Ethernet-emulatiemodel (EEM). Een slimmer protocol dat rekening houdt met USB-beperkingen en meerdere frames optimaal samenvoegt tot één, waardoor de doorvoer toeneemt.
  • Netwerkcontrolemodel (NCM). Het nieuwste protocol. Heeft de voordelen van EEM en optimaliseert de buservaring verder.

Om een ​​van deze protocollen op ons bord te laten werken, zullen we, zoals altijd, een aantal problemen tegenkomen. Vanwege het feit dat Allwinner alleen geïnteresseerd is in de Android-delen van de kernel, werkt alleen Android Gadget normaal: de code die de communicatie met adb implementeert, het apparaat exporteert via het MTP-protocol en een flashdrive emuleert op Android-apparaten. Android Gadget zelf ondersteunt ook het RNDIS-protocol, maar dit wordt verbroken in de Allwinner-kernel. Als u de kernel probeert te compileren met een andere USB-gadget, zal het apparaat eenvoudigweg niet op het systeem verschijnen, wat u ook doet.
Om het probleem op een minnelijke manier op te lossen, moet je de plaats vinden waar de USB-controller is geïnitialiseerd in de code van het Android-gadget android.c, aangepast door de ontwikkelaars, maar er is ook een oplossing om op zijn minst Ethernet-emulatie uit te voeren USB-werk:

--- sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:40.427088792 +0300
+++ sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:45.339088792 +0300
@@ -57,7 +57,7 @@
 static sunxi_udc_io_t g_sunxi_udc_io;
 static u32 usb_connect = 0;
 static u32 is_controller_alive = 0;
-static u8 is_udc_enable = 0;   /* is udc enable by gadget? */
+static u8 is_udc_enable = 1;   /* is udc enable by gadget? */
 
 #ifdef CONFIG_USB_SUNXI_USB0_OTG
 static struct platform_device *g_udc_pdev = NULL;

Deze patch dwingt de USB-clientmodus af, waardoor je gewone USB-gadgets van Linux kunt gebruiken.
Nu zou je de kernel opnieuw moeten opbouwen met deze patch en de benodigde gadget. Ik heb voor EEM gekozen omdat... Volgens testresultaten bleek het productiever te zijn dan NCM.
Het Armbian-team zorgt voor zeer eenvoudig en handig montagesysteem voor alle ondersteunde borden in de distributie. Download het gewoon en plaats onze patch userpatches/kernel/sun8i-default/otg.patch, een beetje bewerken compile.sh en selecteer het gewenste gadget:

Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router

De kernel zal worden gecompileerd in een deb-pakket, dat niet moeilijk zal zijn om via het bord te installeren dpkg.
Het enige dat overblijft is om het bord via USB aan te sluiten en onze nieuwe netwerkadapter te configureren om een ​​adres via DHCP te ontvangen. Om dit te doen, moet je zoiets als het volgende toevoegen /etc/network/interfaces:

auto usb0
        iface usb0 inet dhcp
        hwaddress ether c2:46:98:49:3e:9d
        pre-up /bin/sh -c 'echo 2 > /sys/bus/platform/devices/sunxi_usb_udc/otg_role'

Het is beter om het MAC-adres handmatig in te stellen, omdat... het zal willekeurig zijn elke keer dat het apparaat opnieuw wordt opgestart, wat lastig en lastig is.
We sluiten de MicroUSB-kabel aan op de OTG-connector, verbinden de stroom van de router (deze kan worden geleverd aan pinnen 2 en 3 van de kam, en niet alleen aan de stroomconnector).

Het enige dat overblijft is het configureren van de router. Het is voldoende om het pakket met het EEM-stuurprogramma te installeren en ons nieuwe USB-netwerkapparaat toe te voegen aan de brug van de lokale firewallzone:

opkg install kmod-usb-net-cdc-eem

Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router
Om al het verkeer naar de VPN-tunnel te routeren, moet u een SNAT-regel toevoegen aan het IP-adres van het bord aan de routerzijde, of het adres van het bord distribueren als een gateway-adres via dnsmasq. Dit laatste doe je door de volgende regel toe te voegen /etc/dnsmasq.conf:

dhcp-option = tag:lan, option:router, 192.168.1.100

waar 192.168.1.100 — IP-adres van uw bord. Vergeet niet het routeradres in te voeren in de netwerkinstellingen op het bord zelf!

Er werd een melaminespons gebruikt om de bordcontacten te isoleren van de routercontacten. Het bleek ongeveer zo:
Versnel OpenVPN voor $ 9.99* of integreer Orange Pi One in uw router

Conclusie

Het netwerk via USB werkt verrassend snel: 100-120 Mb/s, ik had minder verwacht. OpenVPN verwerkt ongeveer 70 Mb/s aan gecodeerd verkeer, wat ook niet veel is, maar genoeg voor mijn behoeften. Het deksel van de router sluit niet goed, waardoor er een kleine opening overblijft. Estheten kunnen de Ethernet- en USB Host-connectoren van het bord verwijderen, waardoor het deksel volledig kan sluiten en er nog wat ruimte over is.
Het is beter om je niet met dergelijke pornografie bezig te houden en te kopen Turris Omnia.

Bron: www.habr.com

Voeg een reactie