Versnel OpenVPN voor €9,99* of integreer Orange Pi One in de router

Versnel OpenVPN voor €9,99* of integreer Orange Pi One in de router

Sommigen van ons gebruiken geen internet zonder VPN om verschillende redenen: sommigen hebben een vast IP-adres nodig, en het is eenvoudiger en goedkoper om een VPS met twee IP's te kopen dan een adres bij de provider. Anderen willen toegang tot alle websites en niet alleen die welke zijn toegestaan in Rusland, en weer anderen hebben IPv6 nodig, terwijl de provider dit niet biedt...
Meestal wordt de VPN-verbinding ingesteld op het apparaat dat op dat moment wordt gebruikt, wat heel logisch is als je maar ƩƩn computer en ƩƩn telefoon hebt en ze zelden tegelijk gebruikt. Maar als je thuis meerdere apparaten hebt, of bijvoorbeeld apparaten waarop VPN niet kan worden ingesteld, zou het handiger zijn om de tunnel direct op de thuisrouter op te zetten, zodat je je geen zorgen hoeft te maken over de configuratie van elk apparaat afzonderlijk.

Als je ooit OpenVPN op je router hebt geĆÆnstalleerd, ben je waarschijnlijk onaangenaam verrast geweest door de snelheid ervan. De SoC's van zelfs goedkope routers kunnen probleemloos verkeer tot bijna een gigabit verwerken, doordat de routerings- en NAT-functies zijn overgedragen aan een aparte chip die uitsluitend voor deze taak is ontworpen, terwijl de hoofdprocessoren van dergelijke routers vrij zwak zijn, aangezien er vrijwel geen belasting op hen is. Deze compromis stelt je in staat om een hoge snelheid van de router te bereiken en de prijs van het eindproduct aanzienlijk te verlagen — routers met krachtige processors zijn vaak vele malen duurder en worden niet alleen gepositioneerd als een kast voor het delen van internet, maar ook als NAS, torrent-downloaders en thuis-multimedia-systemen.

Mijn router, TP-Link TL-WDR4300, kan niet nieuw genoemd worden — het model is in het midden van 2012 geĆÆntroduceerd en heeft een 560 MHz-processor van het MIPS32 74Kc-architectuur, waarvan de kracht slechts genoeg is voor 20-23 Mb/s versleuteld verkeer via OpenVPN, wat in vergelijking met de snelheid van modern thuisinternet vrij weinig is.
Hoe kunnen we de snelheid van de versleutelde tunnel verhogen? Mijn router is vrij functioneel, ondersteunt 3Ɨ3 MIMO, en werkt over het algemeen goed; ik zou hem niet graag willen vervangen.
Omdat het tegenwoordig gebruikelijk is om internetpagina's van 10 megabyte te maken, desktopapplicaties te schrijven op node.js en deze in een bestand van 100 megabyte te verpakken, en om rekencapaciteit op te schalen in plaats van te optimaliseren, gaan we iets vreselijks doen — we zullen de VPN-verbinding overbrengen naar de krachtige single-board "computer" Orange Pi One, die we in de behuizing van de router installeren, zonder de bestaande netwerkaansluitingen en USB-poorten te gebruiken, voor slechts $9.99*!
* + verzendkosten, + belastingen, + voor bier, + MicroSD.

OpenVPN

Je kunt de processor van de router niet helemaal zwak noemen — hij kan gegevens versleutelen en hashen met het AES-128-CBC-SHA1-algoritme met een snelheid van 50 Mb/s, wat merkbaar sneller is dan hoe OpenVPN werkt, en de moderne stroomversleuteling CHACHA20 met de hash POLY1305 haalt zelfs 130 megabit per seconde! Waarom is de snelheid van de VPN-tunnel dan zo laag? Het probleem ligt in de contextwisseling tussen de gebruikersruimte en de kernelruimte: OpenVPN versleutelt het verkeer en communiceert met de buitenwereld in de gebruikersruimte, terwijl de routering zelf in de kernelruimte plaatsvindt. Het besturingssysteem moet constant heen en weer schakelen voor elk ontvangen of verzonden pakket, en deze operatie is niet snel. Dit probleem is inherent aan alle VPN-toepassingen die via de TUN/TAP-driver werken, en je kunt niet zeggen dat de lage snelheid het gevolg is van een slechte optimalisatie van OpenVPN (hoewel er natuurlijk plekken zijn die verbeterd kunnen worden). Geen enkele userspace VPN-client haalt zelfs een gigabit zonder versleuteling op mijn laptop, laat staan systemen met een zwakke processor.

Orange Pi One

De Orange Pi One single-board computer van Xunlong is momenteel het beste aanbod qua prijs/prestatie. Voor $9.99* krijg je een solide quad-core ARM Cortex-A7 processor, die stabiel draait op een frequentie van 1008 MHz, en duidelijk krachtiger is dan zijn buren, de Raspberry Pi Zero en Next Thing C.H.I.P., in dezelfde prijscategorie. Maar daar eindigen de voordelen. Het bedrijf Xunlong besteedt totaal geen aandacht aan de software van zijn borden, en op het moment van de lancering van One in de verkoop bood het zelfs geen configuratiebestand aan, om nog maar te zwijgen over kant-en-klare image bestanden. Allwinner, de fabrikant van de SoC, heeft ook niet veel zorg voor de ondersteuning van zijn product. Hun enige interesse is de minimale werking onder Android 4.4.4, wat betekent dat we gedwongen zijn om de kernel van versie 3.4 met Android-patches te gebruiken. Gelukkig zijn er enthousiastelingen die distributies samenstellen, de kernel aanpassen, code schrijven voor ondersteuning van de borden in de mainline-kernel, oftewel, feitelijk het werk van de fabrikant doen om dit spul acceptabel te laten werken. Voor mijn doeleinden heb ik de distributie Armbian gekozen, die vaak en gemakkelijk te updaten is (nieuwe kernels worden rechtstreeks via de pakketbeheerder geïnstalleerd in plaats van door bestanden naar een speciale partitie te kopiëren, zoals vaak het geval is bij Allwinner), en die ook de meeste randapparatuur ondersteunt, 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 de krachtigere processor van de Orange Pi leggen door deze op de een of andere manier op de router aan te sluiten. Ik denk aan een verbinding via Ethernet of USB - beide standaarden worden door beide apparaten ondersteund, maar ik wilde de al bestaande poorten niet bezet houden. Gelukkig is er een oplossing.

De USB-hub chip GL850G, die in de router wordt gebruikt, ondersteunt 4 USB-poorten, waarvan er twee niet zijn gesoldeerd. Het is onduidelijk waarom de fabrikant deze niet heeft gesoldeerd; ik neem aan om gebruikers niet de mogelijkheid te geven om meteen 4 apparaten met een hoog stroomverbruik (bijvoorbeeld harde schijven) aan te sluiten, omdat de standaard voeding van de router niet is ontworpen voor een dergelijke belasting. Hoe dan ook, dit komt ons goed van pas.
Versnel OpenVPN voor €9,99* of integreer Orange Pi One in de router
Om een extra USB-poort te verkrijgen, hoeft u slechts 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 de router

Het is echter niet voldoende om gewoon twee USB-apparaten aan te sluiten en te hopen dat alles vanzelf werkt, zoals het geval zou zijn bij Ethernet. Ten eerste moeten we ervoor zorgen dat een van hen in de USB Client-modus werkt in plaats van USB Host, en ten tweede moeten we bepalen hoe de apparaten elkaar gaan herkennen. Er zijn veel stuurprogramma's voor de zogenaamde USB Gadgets (vernoemd naar de Linux-kernelsubsystemen) die verschillende soorten USB-apparaten kunnen emuleren: een netwerkadapter, een geluidskaart, een toetsenbord en muis, een USB-stick, een camera, en een console via een seriƫle poort. Omdat ons apparaat met een netwerk zal werken, is de emulatie van een Ethernet-adapter het meest geschikt.

Er zijn drie standaarden voor Ethernet-over-USB:

  • Remote NDIS (RNDIS). Een verouderde standaard van Microsoft, die voornamelijk werd gebruikt in de tijd van Windows XP.
  • Ethernet Control Model (ECM). Een eenvoudige standaard die Ethernet-frames in USB-pakketten verpakt. Geschikt voor bekabelde modems met USB-aansluiting, waar het handig is om frames zonder verwerking over te dragen, maar door zijn eenvoud en beperkingen van de USB-bus niet erg snel werkt.
  • Ethernet Emulation Model (EEM). Een slimmer protocol dat rekening houdt met de beperkingen van USB en meerdere frames in ƩƩn aggregeert, waardoor de bandbreedte toeneemt.
  • Network Control Model (NCM). Het nieuwste protocol. Het heeft de voordelen van EEM en optimaliseert de werking met de bus nog verder.

Om een van deze protocollen op onze board te laten werken, moeten we zoals altijd enkele moeilijkheden overwinnen. Omdat Allwinner alleen geĆÆnteresseerd is in de Android-onderdelen van de kernel, werkt alleen de Android Gadget goed - de code die de communicatie met adb implementeert, het exporteren van het apparaat via het MTP-protocol en de emulatie van een USB-stick op Android-apparaten. De Android Gadget ondersteunt ook het RNDIS-protocol, maar in de Allwinner-kernel is het defect. Als je probeert de kernel te compileren met een andere USB Gadget, verschijnt het apparaat gewoon niet in het systeem, wat je ook probeert.
Om het probleem op te lossen, zou je in principe de initialisatie van de USB-controller in de door ontwikkelaars gemodificeerde code van de Android-gadget android.c moeten vinden, maar er is ook een omweg om op zijn minst de emulatie van Ethernet via USB aan de praat te krijgen:

--- 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;   
+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, wat het mogelijk maakt om gewone USB-gadgets vanuit Linux te gebruiken.
Nu moet de kernel met deze patch en de benodigde gadget opnieuw worden opgebouwd. Ik heb voor EEM gekozen, omdat het bij tests sneller bleek te zijn dan NCM.
Het Armbian-team biedt een zeer eenvoudig en gebruiksvriendelijk build-systeem voor alle ondersteunde boards in de distributie. Je hoeft het alleen maar te downloaden, onze patch in userpatches/kernel/sun8i-default/otg.patch, een beetje te bewerken compile.sh en de benodigde gadget te kiezen:

Versnel OpenVPN voor €9,99* of integreer Orange Pi One in de router

De kernel wordt samengevoegd in een deb-pakket, dat eenvoudig op het board kan worden geĆÆnstalleerd via dpkg.
Je hoeft alleen maar het board via USB aan te sluiten en onze nieuwe netwerkadapter in te stellen om een IP-adres via DHCP te krijgen. Voeg hiervoor ongeveer het volgende toe aan /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 dit willekeurig zal zijn bij elke herstart van het apparaat, wat ongemakkelijk en lastig is.
Sluit de MicroUSB-kabel aan op de OTG-poort en verbind de voeding met de router (je kunt deze op pin 2 en 3 van de header aansluiten, niet alleen op de voedingsaansluiting).

Nu moet de router worden ingesteld. Het is voldoende om het pakket met de EEM-driver te installeren en ons nieuwe USB-netwerkapparaat aan de brug van de lokale firewall-zone toe te voegen:

opkg install kmod-usb-net-cdc-eem

Versnel OpenVPN voor €9,99* of integreer Orange Pi One in de router
Om al het verkeer via de VPN-tunnel te routeren, moet je of een SNAT-regel toevoegen voor het IP-adres van het board aan de routerkant, of het adres van het board als gateway-adres via dnsmasq uitdelen. Dit laatste wordt gedaan door de volgende regel aan toe te voegen in /etc/dnsmasq.conf:

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

waar 192.168.1.100 — het IP-adres van je board. Vergeet niet het routeradres in de netwerkinstellingen van het board zelf in te vullen!

Om de contacten van het board van de contacten van de router te isoleren, werd een melamine-spons gebruikt. Het ziet er ongeveer zo uit:
Versnel OpenVPN voor €9,99* of integreer Orange Pi One in de router

Conclusie

Het netwerk werkt via USB verrassend snel: 100-120 Mb/s, ik had minder verwacht. OpenVPN kan ongeveer 70 Mb/s aan versleuteld verkeer verwerken, wat ook niet veel is, maar het is voldoende voor mijn behoeften. De deksel van de router sluit niet goed, waardoor er een kleine opening blijft. Esthetici kunnen de Ethernet- en USB-hostpoorten van de printplaat verwijderen, zodat de deksel volledig kan sluiten, en er blijft zelfs nog ruimte over.
Of het is beter om zo'n onzin niet te doen en te kopen. Turris Omnia.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster