Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik

Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik

Nekateri med nami ne uporabljamo interneta brez VPN-ja iz takšnih ali drugačnih razlogov: nekdo potrebuje namenski IP in je lažje in ceneje kupiti VPS z dvema IP-jema kot kupiti naslov pri ponudniku, nekdo želi dostopati do vseh spletnih mest , in ne samo tisti, ki so dovoljeni na ozemlju Ruske federacije, drugi potrebujejo IPv6, vendar ga ponudnik ne zagotavlja ...
Najpogosteje se VPN povezava vzpostavi na sami napravi, ki se v določenem trenutku uporablja, kar je smiselno, če imate samo en računalnik in en telefon in ju le redko uporabljate hkrati. Če je v vašem domačem omrežju veliko naprav ali na primer na nekaterih ni mogoče konfigurirati VPN, bi bilo bolj priročno ustvariti tunel neposredno na domačem usmerjevalniku, da ne bi razmišljali o nastavitvi vsake naprave posebej .

Če ste že kdaj namestili OpenVPN na svoj usmerjevalnik, ste bili verjetno neprijetno presenečeni nad tem, kako hitro deluje. SoC-ji celo poceni usmerjevalnikov brez težav prepuščajo približno gigabitni promet zaradi prenosa funkcij usmerjanja in NAT na ločen čip, zasnovan izključno za to nalogo, glavni procesorji takih usmerjevalnikov pa so precej šibki, ker Na njih praktično ni obremenitve. Ta kompromis vam omogoča, da dosežete visoko hitrost usmerjevalnika in znatno znižate ceno končne naprave - usmerjevalniki z zmogljivimi procesorji stanejo večkrat več in so postavljeni ne le kot škatla za distribucijo interneta, ampak tudi kot NAS, torrent prenosnik in domači multimedijski sistem.

Mojega usmerjevalnika TP-Link TL-WDR4300 ne moremo imenovati novega - model se je pojavil sredi leta 2012 in ima 560 MHz arhitekturni procesor MIPS32 74Kc, katerega moč zadošča le za 20-23 Mb/s šifriranega prometa prek OpenVPN, kar je po standardih Hitrost sodobnega domačega interneta je precej nizka.
Kako lahko povečamo hitrost šifriranega tunela? Moj usmerjevalnik je precej funkcionalen, podpira 3x3 MIMO in na splošno dobro deluje, ne bi ga rad menjal.
Ker je zdaj že v navadi delati 10-megabajtne internetne strani, pisati namizne aplikacije v node.js in jih pakirati v 100-megabajtno datoteko, povečevati računalniško moč namesto optimizacije, bomo naredili nekaj groznega - povezavo VPN bomo prenesli na produktiven “računalnik” z eno ploščo Orange Pi One, ki ga bomo vgradili v ohišje usmerjevalnika, ne da bi zasedel obstoječa omrežja in USB priključke, za samo 9.99 $*!
* + dostava, + davki, + za pivo, + MicroSD.

OpenVPN

Procesorja usmerjevalnika ne moremo imenovati popolnoma šibkega - sposoben je šifrirati in zgoščevati podatke z uporabo algoritma AES-128-CBC-SHA1 s hitrostjo 50 Mb/s, kar je opazno hitreje od delovanja OpenVPN, in sodobnega toka CHACHA20. šifra z razpršitvijo POLY1305 doseže celo 130 megabitov na sekundo! Zakaj je hitrost tunela VPN tako nizka? Gre za preklapljanje med prostorom uporabnika in prostorom jedra: OpenVPN šifrira promet in komunicira z zunanjim svetom v kontekstu uporabnika, samo usmerjanje pa se zgodi v kontekstu jedra. Operacijski sistem mora nenehno preklapljati naprej in nazaj za vsak prejeti ali oddani paket in to delovanje je počasno. Ta težava je neločljivo povezana z vsemi aplikacijami VPN, ki se izvajajo prek gonilnika TUN/TAP, in ni mogoče reči, da je težavo nizke hitrosti povzročila slaba optimizacija OpenVPN (čeprav obstajajo mesta, ki jih je treba predelati). Niti en uporabniški odjemalec VPN ne nudi niti gigabita z onemogočenim šifriranjem na mojem prenosniku, kaj šele sistemi s šibkim procesorjem.

Oranžna Pi One

Enojna plošča Orange Pi One proizvajalca Xunlong je najboljša ponudba glede na razmerje zmogljivost/cena v tem trenutku. Za 9.99 USD* dobite soliden štirijedrni procesor ARM Cortex-A7, ki deluje (stabilno) pri 1008 MHz in očitno prekaša svoja cenovna soseda Raspberry Pi Zero in Next Thing CHIP. Tu se prednosti končajo. Podjetje Xunlong programski opremi svojih plošč ne posveča ravno nič pozornosti in v času, ko je bila One lansirana v prodajo, ni zagotovilo niti konfiguracijske datoteke plošče, da o že pripravljenih slikah niti ne govorimo. Allwinner, proizvajalec SoC, tudi ni posebej občutljiv na podporo svojemu izdelku. Zanima jih le minimalna zmogljivost v OS Android 4.4.4, kar pomeni, da smo prisiljeni uporabljati jedro 3.4 s popravki za Android. Na srečo obstajajo entuziasti, ki sestavljajo distribucije, urejajo jedro, pišejo kodo za podporo plošč v glavnem jedru, tj. dejansko opravijo delo za proizvajalca, zaradi česar to sranje deluje sprejemljivo. Za svoje namene sem izbral distribucijo Armbian, ki se pogosto in priročno posodablja (nova jedra se namestijo neposredno prek upravitelja paketov in ne s kopiranjem datotek na posebno particijo, kot je običajno pri Allwinnerju) in podpira večino periferne naprave, za razliko od ostalih.

Usmerjevalnik

Da s šifriranjem ne obremenimo šibkega procesorja usmerjevalnika in pohitrimo našo VPN povezavo, lahko to nalogo prevalimo na ramena zmogljivejšega procesorja Orange Pi, tako da ga na nek način povežemo z usmerjevalnikom. Povezava prek Etherneta ali USB-ja mi pride na misel - oba standarda podpirata obe napravi, vendar nisem želel zasesti obstoječih vrat. Na srečo obstaja izhod.

GL850G USB hub čip, ki se uporablja v usmerjevalniku, podpira 4 USB priključke, od katerih dva nista žična. Nejasno je, zakaj jih proizvajalec ni odspajkal, domnevam, da uporabnikom prepreči povezavo 4 naprav z visoko porabo toka (na primer trdih diskov) hkrati. Standardni napajalnik usmerjevalnika ni zasnovan za takšno obremenitev. V vsakem primeru je to naša prednost.
Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik
Če želite dobiti še en USB priključek, morate le prispajkati dve žici na nožice 8(D-) in 9(D+) ali 11(D-) in 12(D+).

Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik

Ni pa dovolj le priklopiti dve napravi USB in upati, da bo vse delovalo samo od sebe, kot bi pri ethernetu. Prvič, omogočiti moramo, da ena od njih deluje v načinu USB Client in ne USB Host, in drugič, odločiti se moramo, kako se bosta napravi medsebojno zaznali. Obstaja veliko gonilnikov za tako imenovane pripomočke USB (poimenovane po podsistemu jedra Linuxa), ki vam omogočajo posnemanje različnih vrst naprav USB: omrežni adapter, zvočna kartica, tipkovnica in miška, bliskovni pogon, kamera, konzola prek serijskega vmesnika. pristanišče. Ker bo naša naprava delovala z omrežjem, je za nas najboljša posnemanje ethernetnega adapterja.

Obstajajo trije standardi Ethernet-over-USB:

  • Oddaljeni NDIS (RNDIS). Zastarel Microsoftov standard, ki se uporablja predvsem v sistemu Windows XP.
  • Ethernet krmilni model (ECM). Preprost standard, ki enkapsulira okvire Ethernet v pakete USB. Odličen za žične modeme s povezavo USB, kjer je priročno prenašati okvirje brez obdelave, vendar zaradi svoje preprostosti in omejitev vodila USB ni zelo hiter.
  • Ethernetni emulacijski model (EEM). Pametnejši protokol, ki upošteva omejitve USB in optimalno združi več okvirjev v enega ter tako poveča prepustnost.
  • Model nadzora omrežja (NCM). Najnovejši protokol. Ima prednosti EEM in dodatno optimizira izkušnjo avtobusa.

Da bi kateri koli od teh protokolov deloval na naši plošči, se bomo morali kot vedno soočiti z nekaterimi težavami. Ker Allwinnerja zanimajo samo Android deli jedra, normalno deluje samo Android Gadget - koda, ki izvaja komunikacijo z adb, izvoz naprave prek protokola MTP in posnemanje bliskovnega pogona na napravah Android. Sam Android Gadget podpira tudi protokol RNDIS, vendar je pokvarjen v jedru Allwinner. Če poskusite prevesti jedro s katerim koli drugim pripomočkom USB, se naprava preprosto ne bo pojavila v sistemu, ne glede na to, kaj naredite.
Če želite rešiti težavo na prijateljski način, morate najti mesto, kjer je krmilnik USB inicializiran v kodi pripomočka Android android.c, ki so ga spremenili razvijalci, vendar obstaja tudi rešitev, da naredite vsaj emulacijo Etherneta USB deluje:

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

Ta popravek vsili odjemalski način USB, kar vam omogoča uporabo običajnih pripomočkov USB iz Linuxa.
Zdaj bi morali znova zgraditi jedro s tem popravkom in potrebnim pripomočkom. EEM sem izbral, ker... Glede na rezultate testov se je izkazalo, da je bolj produktivno kot NCM.
Ekipa Armbian poskrbi zelo preprost in priročen sistem sestavljanja za vse podprte plošče v distribuciji. Samo prenesite ga, vstavite naš popravek userpatches/kernel/sun8i-default/otg.patch, malo uredi compile.sh in izberite želeni pripomoček:

Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik

Jedro bo prevedeno v paket deb, ki ga ne bo težko namestiti na ploščo prek dpkg.
Vse, kar ostane, je povezava plošče prek USB-ja in konfiguracija našega novega omrežnega adapterja za prejemanje naslova prek DHCP. Če želite to narediti, morate dodati nekaj podobnega naslednjemu /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'

Bolje je, da naslov MAC nastavite ročno, ker... ob vsakem ponovnem zagonu naprave bo naključno, kar je neprijetno in težavno.
Kabel MicroUSB priključimo na priključek OTG, priključimo napajanje iz usmerjevalnika (lahko ga napajamo na nožice 2 in 3 glavnika in ne samo na napajalni priključek).

Vse, kar ostane, je konfiguracija usmerjevalnika. Dovolj je, da namestite paket z gonilnikom EEM in dodate našo novo USB omrežno napravo v most lokalnega območja požarnega zidu:

opkg install kmod-usb-net-cdc-eem

Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik
Če želite usmeriti ves promet v tunel VPN, morate bodisi dodati pravilo SNAT naslovu IP plošče na strani usmerjevalnika ali pa razdeliti naslov plošče kot naslov prehoda prek dnsmasq. Slednje naredite tako, da dodate naslednjo vrstico /etc/dnsmasq.conf:

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

če 192.168.1.100 — IP naslov vaše plošče. Ne pozabite vnesti naslova usmerjevalnika v omrežnih nastavitvah na sami plošči!

Za izolacijo kontaktov plošče od kontaktov usmerjevalnika je bila uporabljena melaminska goba. Izkazalo se je nekaj takega:
Pospešite OpenVPN za 9.99 USD* ali integrirajte Orange Pi One v svoj usmerjevalnik

Zaključek

Omrežje prek USB deluje presenetljivo hitro: 100-120 Mb/s, pričakoval sem manj. OpenVPN prepušča približno 70 Mb/s šifriranega prometa, kar tudi ni veliko, a dovolj za moje potrebe. Pokrov usmerjevalnika se ne zapre tesno, zato ostane majhna reža. Esteti lahko s plošče odstranijo konektorja Ethernet in USB Host, kar bo omogočilo, da se pokrov popolnoma zapre in bo še vedno ostalo nekaj prostora.
Bolje je, da se ne ukvarjate s takšno pornografijo in kupujete Turris Omnia.

Vir: www.habr.com

Dodaj komentar