Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern

Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern

Vissa av oss anvÀnder inte internet utan VPN av olika skÀl: nÄgra behöver en dedikerad IP, och det Àr enklare och billigare att köpa en VPS med tvÄ IP-adresser Àn att köpa en adress frÄn leverantören, andra vill fÄ tillgÄng till alla webbplatser och inte bara de som Àr tillÄtna i Sverige, vissa behöver IPv6, som deras leverantör inte tillhandahÄller...
Det vanligaste Àr att VPN-anslutningen stÀlls in pÄ sjÀlva enheten som anvÀnds vid ett givet tillfÀlle, vilket Àr helt rimligt om du bara har en dator och en telefon och knappt anvÀnder dem samtidigt. Om du har mÄnga enheter i ditt hemnÀtverk, eller till och med enheter dÀr VPN inte kan stÀllas in, skulle det vara mer bekvÀmt att göra en tunnel direkt pÄ hemroutern sÄ att du slipper tÀnka pÄ att stÀlla in varje enhet för sig.

Om du nĂ„gon gĂ„ng har installerat OpenVPN pĂ„ din router har du förmodligen blivit obehagligt överraskad över hastigheten. SoC:er i till och med billiga routrar hanterar utan problem nĂ€stan gigabit-trafik genom att avlastade routing och NAT-funktioner till en separat chip som Ă€r specifikt designat för detta Ă€ndamĂ„l, medan de huvudsakliga processorerna i sĂ„dana routrar ofta Ă€r ganska svaga, dĂ„ de knappt har nĂ„gon belastning. Denna kompromiss möjliggör att uppnĂ„ hög hastighet pĂ„ routern och sĂ€nker tydligt kostnaden för enheten — routrar med kraftfulla processorer kostar flera gĂ„nger mer och positioneras inte bara som en lĂ„da för att dela internet, utan Ă€ven som NAS, torrent-nedladdare och hemmamediasystem.

Min router, TP-Link TL-WDR4300, kan inte kalla som ny — modellen kom ut i mitten av 2012 och har en 560 MHz processor av MIPS32 74Kc-arkitektur, vars kraft bara rĂ€cker till 20-23 Mb/s krypterad trafik via OpenVPN, vilket Ă€r ganska lite i jĂ€mförelse med hastigheten pĂ„ dagens hemmanĂ€tverk.
Hur kan vi öka hastigheten pĂ„ den krypterade tunneln? Min router Ă€r ganska funktionell, stödjer 3×3 MIMO, och fungerar överlag bra, jag skulle inte vilja byta ut den.
Eftersom det nu för tiden Ă€r vanligt att skapa sidor pĂ„ 10 megabyte, skriva stationĂ€ra program pĂ„ node.js och paketera dem i en fil pĂ„ 100 megabyte, samt att öka berĂ€kningskraften istĂ€llet för att optimera, kommer vi att göra nĂ„got fruktansvĂ€rt — vi kommer att flytta VPN-anslutningen till den kraftfulla enkortsdatorn Orange Pi One, som vi installerar i routerhöljet utan att anvĂ€nda de befintliga nĂ€tverks- och USB-portarna, allt för $9.99*!
* + frakt, + skatter, + för öl, + MicroSD.

OpenVPN

Man kan inte kalla routerprocessorn helt svag — den kan kryptera och hasha data med AES-128-CBC-SHA1 i en hastighet av 50 Mb/s, vilket Ă€r mĂ€rkbart snabbare Ă€n hur OpenVPN fungerar, och den moderna strömkrypteringen CHACHA20 med hashen POLY1305 nĂ„r till och med upp till 130 megabit per sekund! Varför Ă€r dĂ„ hastigheten pĂ„ VPN-tunneln sĂ„ lĂ„g? Allt handlar om kontextvĂ€xling mellan anvĂ€ndarutrymmet och kĂ€rnutrymmet: OpenVPN krypterar trafiken och kommunicerar med omvĂ€rlden i anvĂ€ndarkontext medan den verkliga rutingen sker i kĂ€rnutrymmet. Operativsystemet mĂ„ste stĂ€ndigt vĂ€xla fram och tillbaka för varje mottagen eller överförd paket, och denna operation Ă€r inte snabb. Detta problem Ă€r gemensamt för alla VPN-appar som arbetar genom TUN/TAP-drivrutiner, och man kan inte sĂ€ga att problemet med lĂ„g hastighet beror pĂ„ dĂ„lig optimering av OpenVPN (Ă€ven om det förstĂ„s finns stĂ€llen som skulle behöva förĂ€ndras). Ingen userspace VPN-klient nĂ„r ens gigabit med krypteringen avstĂ€ngd pĂ„ min bĂ€rbara dator, för att inte tala om system med svagare processorer.

Orange Pi One

Orange Pi One frÄn Xunlong Àr det mest prisvÀrda erbjudandet just nu nÀr det kommer till prestanda/pris. För $9.99* fÄr du en solid fyrkÀrnig ARM Cortex-A7-processor som (stabilt) körs pÄ 1008 MHz, vilket gör den klart mer prestandakraftig Àn dess rivaler Raspberry Pi Zero och Next Thing C.H.I.P. i samma prisklass. HÀr slutar fördelarna. Xunlong lÀgger ingen vikt vid mjukvaran för sina kort, och vid lanseringen av One fanns det inte ens en konfigurationsfil tillgÀnglig, för att inte tala om fÀrdiga bilder. Allwinner, tillverkaren av SoC, bryr sig inte heller sÀrskilt mycket om att stödja sin produkt. De Àr endast intresserade av minimal funktionalitet i Android 4.4.4, vilket gör att vi mÄste anvÀnda kÀrnan version 3.4 med Android-patchar. Lyckligtvis finns det entusiaster som samlar distributioner, modifierar kÀrnan och skriver kod för att stödja korten i mainline-kÀrnan, dvs. de gör i praktiken tillverkarens arbete och fÄr detta skrÀp att fungera acceptabelt. För mina behov valde jag distributionen Armbian, som ofta och smidigt uppdateras (nya kÀrnor installeras direkt via paketförvaltaren, istÀllet för att kopiera filer till en speciell partition, som vanligtvis Àr fallet med Allwinner), och den stöder det mesta av periferin, till skillnad frÄn de andra.

Router

För att undvika att belasta den svaga processorn i routern med kryptering och för att pĂ„skynda vĂ„r VPN-anslutning kan vi överföra denna uppgift till den mer kraftfulla processorn i Orange Pi genom att ansluta den till routern pĂ„ nĂ„got sĂ€tt. Jag tĂ€nker pĂ„ antingen Ethernet eller USB — bĂ„da dessa standarder stöds av bĂ„da enheterna, men jag ville inte anvĂ€nda de portar som redan finns. Lyckligtvis finns det en lösning.

USB-hubchipet GL850G som anvÀnds i routern stöder fyra USB-portar, tvÄ av vilka inte Àr lödda. Det Àr oklart varför tillverkaren inte lödde dem, jag antar att det Àr för att förhindra att anvÀndare kopplar in fyra strömkrÀvande enheter (som hÄrddiskar) samtidigt, eftersom den vanliga strömförsörjningen för routern inte Àr dimensionerad för sÄdan belastning. Hur som helst, det Àr till vÄr fördel.
Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern
För att fÄ ytterligare en USB-port Àr det tillrÀckligt att löda tvÄ kablar till pin 8(D-) och 9(D+) eller 11(D-) och 12(D+).

Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern

Det rÀcker inte med att helt enkelt koppla in tvÄ USB-enheter och hoppas att allt fungerar av sig sjÀlv, som det skulle göra med Ethernet. För det första mÄste vi fÄ en av dem att fungera i USB-klientlÀge istÀllet för USB-vÀrdlÀge, för det andra mÄste vi bestÀmma hur enheterna ska kÀnna igen varandra. Det finns mÄnga drivrutiner för sÄ kallade USB Gadgets (efter namn pÄ Linux-kÀrnans subsystem) som gör det möjligt att emulera olika typer av USB-enheter: nÀtverksadapter, ljudkort, tangentbord och mus, flashminne, kamera, konsol via seriell port. Eftersom vÄr enhet ska arbeta med nÀtverket passar emulering av en Ethernet-adapter bÀst.

Det finns tre standarder för Ethernet-over-USB:

  • Remote NDIS (RNDIS). En förĂ„ldrad standard frĂ„n Microsoft som framför allt anvĂ€ndes under Windows XP.
  • Ethernet Control Model (ECM). En enkel standard som inkapslar Ethernet-ramar i USB-paket. UtmĂ€rkt för trĂ„dbundna modem med USB-anslutning dĂ€r det Ă€r praktiskt att överföra ramar utan bearbetning, men pĂ„ grund av sin enkelhet och begrĂ€nsningar i USB-bussen fungerar den inte sĂ€rskilt snabbt.
  • Ethernet Emulation Model (EEM). En mer intelligent protokoll som tar hĂ€nsyn till USB:s begrĂ€nsningar och optimalt aggregerar flera ramar till en, vilket ökar bandbredden.
  • Network Control Model (NCM). Den senaste protokollet. Har fördelarna med EEM och optimerar Ă€nnu mer arbetet med bussen.

För att fĂ„ nĂ„gon av dessa protokoll att fungera pĂ„ vĂ„r styrenhet som alltid kommer det att vara vissa svĂ„righeter. Eftersom Allwinner endast Ă€r intresserade av Android-delarna av kĂ€rnan fungerar endast Android Gadget normalt — den kod som hanterar kommunikationen med adb, exporten av enheten via MTP-protokollet och emuleringen av flashminnet pĂ„ Android-enheter. SjĂ€lva Android Gadget stöder ocksĂ„ RNDIS-protokollet, men i Allwinner-kĂ€rnan Ă€r det trasigt. Om du försöker kompilera kĂ€rnan med nĂ„gon annan USB Gadget kommer enheten helt enkelt inte att dyka upp i systemet, oavsett vad du gör.
För att lösa problemet behöver man i grunden hitta platsen för initialisering av USB-kontrollern i den modifierade utvecklarens koden för Android-gadget android.c, men det finns ocksÄ en genvÀg för att fÄ Ätminstone emuleringen av Ethernet via USB att fungera:

--- 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;   
 
 #ifdef CONFIG_USB_SUNXI_USB0_OTG
 static struct platform_device *g_udc_pdev = NULL;

Denna patch aktiverar tvingats USB-klientlÀge, vilket gör att vanliga USB Gadgets kan anvÀndas frÄn Linux.
Nu mÄste kÀrnan kompileras om med denna patch och den nödvÀndiga gadgeten. Jag valde EEM, eftersom den i testresultaten visade sig vara mer effektiv Àn NCM.
Armbian-teamet tillhandahÄller ett mycket enkelt och anvÀndarvÀnligt byggsystem för alla stödda kort i distribueringssystemet. Det rÀcker med att ladda ner det, lÀgga vÄr patch i userpatches/kernel/sun8i-default/otg.patch, redigera lite i compile.sh och vÀlja den nödvÀndiga gadgeten:

Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern

KÀrnan kommer att kompileras till ett deb-paket som enkelt kan installeras pÄ kortet via dpkg.
Det ÄterstÄr bara att ansluta kortet via USB och stÀlla in vÄr nya nÀtverksadapter för att fÄ en adress via DHCP. För detta behöver vi lÀgga till ungefÀr följande i /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'

Det Àr bÀttre att stÀlla in MAC-adressen manuellt, eftersom den kommer att vara slumpmÀssig vid varje omstart av enheten, vilket Àr otympligt.
Anslut MicroUSB-kabeln till OTG-porten och koppla in ström frÄn routern (det kan matas pÄ 2 och 3 stift i skenan, inte bara via ströminntaget).

Det ÄterstÄr bara att konfigurera routern. Det rÀcker med att installera paketet med EEM-drivrutinen och lÀgga till vÄr nya nÀtverks USB-enhet i bron av den lokala brandvÀggszonen:

opkg install kmod-usb-net-cdc-eem

Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern
För att vidarebefordra all trafik i VPN-tunneln behöver du antingen lÀgga till en SNAT-regel för IP-adressen pÄ kortet pÄ router-sidan, eller ge kortets adress som gateway-adress via dnsmasq. Det senaste görs genom att lÀgga till följande rad i /etc/dnsmasq.conf:

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

w 192.168.1.100 — IP-adressen för ditt kort. Glöm inte att ange routeradressen i nĂ€tverksinstĂ€llningarna pĂ„ kortet sjĂ€lv!

För att isolera kortets kontakter frÄn routerns kontakter anvÀndes en melamin-svamp. Resultatet blev nÄgot sÄdant:
Vi snabbar upp OpenVPN för 9,99 $* eller integrerar Orange Pi One i routern

Slutsats

NÀtverket fungerar förvÄnansvÀrt snabbt via USB: 100-120 Mb/s, jag hade förvÀntat mig mindre. OpenVPN hanterar cirka 70 Mb/s krypterad trafik, vilket inte Àr mycket, men för mina behov rÀcker det. Locket pÄ routern stÀnger inte helt, vilket lÀmnar en liten öppning. Esteter kan löda av Ethernet- och USB-hostportarna frÄn kortet, vilket gör att locket kan stÀngas helt, och det blir Ànnu mer plats kvar.
Eller sÄ bör man inte syssla med sÄdan porr och istÀllet köpa Turris Omnia.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster