Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router

Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router

Vissa av oss använder inte internet utan ett VPN av en eller annan anledning: någon behöver en dedikerad IP, och det är lättare och billigare att köpa en VPS med två IP:er än att köpa en adress från en leverantör, någon vill komma åt alla webbplatser , och inte bara de som är tillåtna på Ryska federationens territorium, andra behöver IPv6, men leverantören tillhandahåller det inte...
Oftast upprättas en VPN-anslutning på själva enheten som används vid ett visst tillfälle, vilket är vettigt om du bara har en dator och en telefon och sällan använder dem samtidigt. Om det finns många enheter i ditt hemnätverk, eller om det till exempel finns några där VPN inte kan konfigureras, skulle det vara bekvämare att skapa en tunnel direkt på hemroutern för att inte tänka på att ställa in varje enhet separat .

Om du någonsin har installerat OpenVPN på din router har du förmodligen blivit obehagligt överraskad över hur snabbt det fungerar. SoC:erna för till och med billiga routrar passerar ungefär en gigabit-trafik utan problem, på grund av överföringen av routing- och NAT-funktioner till ett separat chip designat exklusivt för denna uppgift, och huvudprocessorerna för sådana routrar är ganska svaga, eftersom Det är praktiskt taget ingen belastning på dem. Denna kompromiss gör att du kan uppnå hög hastighet på routern och avsevärt sänka priset på den färdiga enheten - routrar med kraftfulla processorer kostar flera gånger mer och är placerade inte bara som en låda för att distribuera Internet, utan också som en NAS, torrent nedladdare och multimediasystem för hemmet.

Min router, TP-Link TL-WDR4300, kan inte kallas ny - modellen dök upp i mitten av 2012 och har en 560 MHz MIPS32 74Kc arkitekturprocessor, vars kraft bara räcker för 20-23 Mb/s krypterad trafik via OpenVPN, vilket är enligt standard Hastigheten på modernt heminternet är ganska låg.
Hur kan vi öka hastigheten på en krypterad tunnel? Min router är ganska funktionell, stöder 3x3 MIMO och fungerar generellt bra, jag skulle inte vilja ändra den.
Eftersom det nu är vanligt att göra 10 megabyte internetsidor, skriva skrivbordsapplikationer i node.js och packa dem i en 100 megabyte fil, öka datorkraften istället för optimering, kommer vi att göra något hemskt - vi kommer att överföra VPN-anslutningen till en produktiv enkorts "dator" Orange Pi One, som vi kommer att installera i routerfodralet utan att ta upp befintliga nätverk och USB-portar, för endast $9.99*!
* + leverans, + skatter, + för öl, + MicroSD.

OpenVPN

Routerns processor kan inte kallas helt svag - den kan kryptera och hasha data med AES-128-CBC-SHA1-algoritmen med en hastighet på 50 Mb/s, vilket är märkbart snabbare än hur OpenVPN fungerar, och den moderna CHACHA20-strömmen chiffer med en POLY1305-hash når till och med 130 megabit per sekund! Varför är hastigheten på VPN-tunneln så låg? Allt handlar om kontextväxling mellan användarutrymme och kärnutrymme: OpenVPN krypterar trafik och kommunicerar med omvärlden i användarsammanhang, och själva routingen sker i kärnkontexten. Operativsystemet måste ständigt växla fram och tillbaka för varje paket som tas emot eller sänds, och denna operation är långsam. Detta problem är inneboende i alla VPN-applikationer som körs genom en TUN/TAP-drivrutin, och det kan inte sägas att problemet med låg hastighet orsakas av dålig OpenVPN-optimering (även om det naturligtvis finns platser som behöver omarbetas). Inte en enda VPN-klient för användarutrymme ger ens en gigabit med kryptering inaktiverad på min bärbara dator, än mindre system med en svag processor.

Orange PiOne

Singleboard Orange Pi One från Xunlong är det bästa erbjudandet när det gäller prestanda/prisförhållande för tillfället. För $9.99* får du en solid fyrkärnig ARM Cortex-A7-processor som kör (stabil) på 1008 MHz, och överträffar klart sina prisvärda grannar Raspberry Pi Zero och Next Thing CHIP. Det är där fördelarna slutar. Xunlong-företaget ägnar exakt noll uppmärksamhet åt mjukvaran på sina brädor, och när One lanserades för försäljning, tillhandahöll det inte ens en styrelsekonfigurationsfil, för att inte tala om färdiga bilder. Allwinner, en SoC-tillverkare, är inte heller särskilt känslig för att stödja sin produkt. De är bara intresserade av minimal prestanda i Android 4.4.4 OS, vilket innebär att vi tvingas använda 3.4-kärnan med Android-patchar. Lyckligtvis finns det entusiaster som monterar distributioner, redigerar kärnan, skriver kod till stödkort i mainline-kärnan, d.v.s. de gör faktiskt jobbet åt tillverkaren, vilket gör att denna skit fungerar acceptabelt. För mina ändamål valde jag Armbian-distributionen; den uppdateras ofta och bekvämt (nya kärnor installeras direkt via pakethanteraren, och inte genom att kopiera filer till en speciell partition, som vanligtvis är fallet med Allwinner), och den stöder de flesta kringutrustning, till skillnad från de andra.

Router

För att inte ladda den svaga processorn på routern med kryptering och påskynda vår VPN-anslutning, kan vi flytta denna uppgift till axlarna av en kraftfullare Orange Pi-processor genom att ansluta den till routern på något sätt. Att ansluta antingen via Ethernet eller USB kommer att tänka på - båda dessa standarder stöds av båda enheterna, men jag ville inte ta upp befintliga portar. Lyckligtvis finns det en väg ut.

GL850G USB-hub-chippet, som används i routern, stöder 4 USB-portar, varav två inte är trådbundna. Det är oklart varför tillverkaren inte avlödde dem, antar jag, för att hindra användare från att ansluta 4 enheter med hög strömförbrukning (till exempel hårddiskar) samtidigt. Routerns standardströmförsörjning är inte konstruerad för en sådan belastning. Detta är i alla fall till vår fördel.
Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router
För att få ytterligare en USB-port behöver du bara löda två ledningar till stift 8(D-) och 9(D+) eller 11(D-) och 12(D+).

Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router

Det räcker dock inte att bara koppla in två USB-enheter och hoppas att allt ska fungera av sig självt, 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, och inte USB-värd, och för det andra måste vi bestämma hur enheterna ska upptäcka varandra. Det finns många drivrutiner för de så kallade USB-prylarna (uppkallade efter Linux-kärnundersystemet), som låter dig emulera olika typer av USB-enheter: nätverksadapter, ljudkort, tangentbord och mus, flash-enhet, kamera, konsol via en seriell hamn. Eftersom vår enhet kommer att fungera med nätverket är emulering av en Ethernet-adapter bäst för oss.

Det finns tre Ethernet-over-USB-standarder:

  • Fjärrstyrd NDIS (RNDIS). En föråldrad standard från Microsoft, som främst används under Windows XP.
  • Ethernet Control Model (ECM). En enkel standard som kapslar in Ethernet-ramar i USB-paket. Perfekt för trådbundna modem med USB-anslutning, där det är bekvämt att överföra ramar utan bearbetning, men på grund av dess enkelhet och begränsningar av USB-bussen är det inte särskilt snabbt.
  • Ethernet-emuleringsmodell (EEM). Ett smartare protokoll som tar hänsyn till USB-begränsningar och optimalt aggregerar flera ramar till en, vilket ökar genomströmningen.
  • Nätverkskontrollmodell (NCM). Det senaste protokollet. Har fördelarna med EEM och optimerar bussupplevelsen ytterligare.

För att få något av dessa protokoll att fungera i vår styrelse, som alltid, kommer vi att behöva stöta på vissa svårigheter. På grund av att Allwinner bara är intresserad av Android-delarna av kärnan fungerar bara Android Gadget normalt - koden som implementerar kommunikation med adb, exporterar enheten via MTP-protokollet och emulerar en flashenhet på Android-enheter. Android Gadget själv stöder också RNDIS-protokollet, men det är trasigt i Allwinner-kärnan. Om du försöker kompilera kärnan med någon annan USB-gadget, kommer enheten helt enkelt inte att visas på systemet, oavsett vad du gör.
För att lösa problemet, på ett vänskapligt sätt, måste du hitta platsen där USB-kontrollern initieras i koden för Android-gadgeten android.c modifierad av utvecklarna, men det finns också en lösning för att göra åtminstone Ethernet-emulering över USB arbete:

--- 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;

Denna patch tvingar fram USB-klientläge, vilket gör att du kan använda vanliga USB-prylar från Linux.
Nu bör du bygga om kärnan med denna patch och den nödvändiga gadgeten. Jag valde EEM för att... Enligt testresultat visade det sig vara mer produktivt än NCM.
Armbian-teamet tillhandahåller mycket enkelt och bekvämt monteringssystem för alla stödda styrelser i distributionen. Ladda bara ner den, sätt in vår patch userpatches/kernel/sun8i-default/otg.patch, redigera lite compile.sh och välj önskad gadget:

Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router

Kärnan kommer att kompileras till ett deb-paket, vilket inte kommer att vara svårt att installera på kortet via dpkg.
Allt som återstår är att ansluta kortet via USB och konfigurera vår nya nätverksadapter för att ta emot en adress via DHCP. För att göra detta måste du lägga till något i stil med följande /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... det kommer att vara slumpmässigt varje gång enheten startas om, vilket är obekvämt och besvärligt.
Vi ansluter MicroUSB-kabeln till OTG-kontakten, ansluter ström från routern (den kan levereras till stift 2 och 3 på kammen, och inte bara till strömkontakten).

Allt som återstår är att konfigurera routern. Det räcker med att installera paketet med EEM-drivrutinen och lägga till vår nya USB-nätverksenhet till bryggan för den lokala brandväggszonen:

opkg install kmod-usb-net-cdc-eem

Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router
För att dirigera all trafik till VPN-tunneln måste du antingen lägga till en SNAT-regel till kortets IP-adress på routersidan, eller distribuera kortets adress som en gateway-adress via dnsmasq. Det senare görs genom att lägga till följande rad till /etc/dnsmasq.conf:

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

där 192.168.1.100 — IP-adressen till ditt kort. Glöm inte att ange routeradressen i nätverksinställningarna på själva kortet!

En melaminsvamp användes för att isolera kortkontakterna från routerkontakterna. Det blev ungefär så här:
Snabba upp OpenVPN för $9.99* eller integrera Orange Pi One i din router

Slutsats

Nätverket via USB fungerar förvånansvärt snabbt: 100-120 Mb/s, jag förväntade mig mindre. OpenVPN passerar cirka 70 Mb/s krypterad trafik, vilket inte heller är särskilt mycket, men tillräckligt för mina behov. Routerlocket stängs inte tätt, vilket lämnar ett litet mellanrum. Aesthetes kan ta bort Ethernet- och USB-värdkontakterna från kortet, vilket gör att locket kan stängas helt och fortfarande ha lite utrymme kvar.
Det är bättre att inte ägna sig åt sådan pornografi och köpa Turris Omnia.

Källa: will.com

Lägg en kommentar