Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router

Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router

Sommige van ons gebruik om die een of ander rede nie die internet sonder 'n VPN nie: iemand benodig 'n toegewyde IP, en dit is makliker en goedkoper om 'n VPS met twee IP's te koop as om 'n adres van 'n verskaffer te koop, iemand wil toegang tot alle webwerwe hê , en nie net diegene wat op die grondgebied van die Russiese Federasie toegelaat word nie, ander benodig IPv6, maar die verskaffer verskaf dit nie ...
Dikwels word 'n VPN-verbinding tot stand gebring op die toestel self wat op 'n sekere oomblik gebruik word, wat sin maak as jy net een rekenaar en een foon het en dit selde op dieselfde tyd gebruik. As daar baie toestelle in u tuisnetwerk is, of daar byvoorbeeld sommige is waarop VPN nie gekonfigureer kan word nie, sal dit geriefliker wees om 'n tonnel direk op die tuisroeteerder te skep om nie daaraan te dink om elke toestel afsonderlik op te stel nie. .

As jy ooit OpenVPN op jou router geïnstalleer het, is jy waarskynlik onaangenaam verras oor hoe vinnig dit werk. Die SoC's van selfs goedkoop routers gaan deur ongeveer 'n gigabit-verkeer sonder enige probleme, as gevolg van die oordrag van roetering en NAT-funksies na 'n aparte skyfie wat uitsluitlik vir hierdie taak ontwerp is, en die hoofverwerkers van sulke routers is redelik swak, want Daar is feitlik geen las op hulle nie. Hierdie kompromie laat jou toe om 'n hoë spoed van die router te bereik en die prys van die voltooide toestel aansienlik te verminder - routers met kragtige verwerkers kos 'n paar keer meer, en is nie net geposisioneer as 'n boks vir die verspreiding van die internet nie, maar ook as 'n NAS, torrent aflaaier en tuis multimediastelsel.

My router, TP-Link TL-WDR4300, kan nie nuut genoem word nie - die model het in die middel van 2012 verskyn, en het 'n 560 MHz MIPS32 74Kc argitektuurverwerker, waarvan die krag net genoeg is vir 20-23 Mb/s geënkripteerde verkeer via OpenVPN, wat volgens standaarde is Die spoed van moderne tuisinternet is redelik laag.
Hoe kan ons die spoed van 'n geënkripteerde tonnel verhoog? My router is redelik funksioneel, ondersteun 3x3 MIMO, en werk oor die algemeen goed, ek sal dit nie wil verander nie.
Aangesien dit nou gebruiklik is om 10-megagreep-internetbladsye te maak, lessenaartoepassings in node.js te skryf en dit in 'n 100-megagreep-lêer te pak, rekenaarkrag in plaas van optimalisering te verhoog, sal ons iets verskrikliks doen - ons sal die VPN-verbinding oordra na 'n produktiewe enkelbord-“rekenaar” Orange Pi One, wat ons in die roeteerderkas sal installeer sonder om bestaande netwerk- en USB-poorte op te neem, vir slegs $9.99*!
* + aflewering, + belasting, + vir bier, + MicroSD.

OpenVPN

Die roeteerder se verwerker kan nie heeltemal swak genoem word nie - dit is in staat om data te enkripteer en te hash met die AES-128-CBC-SHA1-algoritme teen 'n spoed van 50 Mb/s, wat merkbaar vinniger is as hoe OpenVPN werk, en die moderne CHACHA20-stroom syfer met 'n POLY1305 hash bereik selfs 130 megabit per sekonde! Waarom is die spoed van die VPN-tonnel so laag? Dit gaan alles oor kontekswisseling tussen gebruikersruimte en kernspasie: OpenVPN enkripteer verkeer en kommunikeer met die buitewêreld in die gebruikerskonteks, en die roetering self vind in die kernkonteks plaas. Die bedryfstelsel moet voortdurend heen en weer skakel vir elke pakkie wat ontvang of versend word, en hierdie operasie is stadig. Hierdie probleem is inherent aan alle VPN-toepassings wat deur 'n TUN/TAP-bestuurder loop, en daar kan nie gesê word dat die probleem van lae spoed deur swak OpenVPN-optimering veroorsaak word nie (hoewel daar natuurlik plekke is wat herwerk moet word). Nie 'n enkele gebruikersruimte VPN-kliënt bied selfs 'n gigabit met enkripsie gedeaktiveer op my skootrekenaar nie, wat nog te sê van stelsels met 'n swak verwerker.

Oranje Pi Een

Die enkelbord Orange Pi One van Xunlong is die beste aanbod in terme van prestasie/prysverhouding op die oomblik. Vir $9.99* kry jy 'n soliede vierkern-ARM Cortex-A7-verwerker wat (stabiel) op 1008 MHz loop, en vaar duidelik beter as sy pryspunt-bure, die Raspberry Pi Zero en Next Thing CHIP. Dit is waar die voordele eindig. Die Xunlong-maatskappy gee presies geen aandag aan die sagteware van sy borde nie, en toe die One te koop aangebied is, het dit nie eens 'n bordkonfigurasielêer verskaf nie, om nie eers te praat van klaargemaakte beelde nie. Allwinner, 'n SoC-vervaardiger, is ook nie besonder sensitief vir die ondersteuning van sy produk nie. Hulle stel net belang in minimale werkverrigting in die Android 4.4.4-bedryfstelsel, wat beteken dat ons gedwing word om die 3.4-kern met Android-kolle te gebruik. Gelukkig is daar entoesiaste wat verspreidings saamstel, die kern redigeer, kode skryf om borde in die hooflynkern te ondersteun, m.a.w. hulle doen eintlik die werk vir die vervaardiger, wat hierdie kak aanvaarbaar maak. Vir my doeleindes het ek die Armbian-verspreiding gekies; dit word gereeld en gerieflik opgedateer (nuwe pitte word direk deur die pakketbestuurder geïnstalleer, en nie deur lêers na 'n spesiale partisie te kopieer nie, soos gewoonlik die geval is met Allwinner), en dit ondersteun die meeste randapparatuur, anders as die ander.

router

Om nie die swak verwerker van die router met enkripsie te laai en ons VPN-verbinding te bespoedig nie, kan ons hierdie taak na die skouers van 'n kragtiger Orange Pi-verwerker verskuif deur dit op een of ander manier aan die router te koppel. Dit kom by my op om óf via Ethernet óf USB te koppel - albei hierdie standaarde word deur albei toestelle ondersteun, maar ek wou nie bestaande poorte gebruik nie. Gelukkig is daar 'n uitweg.

Die GL850G USB-hubskyfie, wat in die router gebruik word, ondersteun 4 USB-poorte, waarvan twee nie bedraad is nie. Dit is onduidelik hoekom die vervaardiger hulle nie ontsoldeer het nie, neem ek aan, om te verhoed dat gebruikers 4 toestelle met hoë stroomverbruik (byvoorbeeld hardeskywe) gelyktydig koppel. Die standaard kragtoevoer van die router is nie ontwerp vir so 'n las nie. Dit is in elk geval tot ons voordeel.
Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router
Om nog 'n USB-poort te kry, moet jy net twee drade aan penne 8(D-) en 9(D+) of 11(D-) en 12(D+) soldeer.

Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router

Dit is egter nie genoeg om bloot twee USB-toestelle in te koppel en te hoop dat alles op sy eie sal werk, soos met Ethernet nie. Eerstens moet ons een van hulle in USB-kliëntmodus laat werk, en nie USB-gasheer nie, en tweedens moet ons besluit hoe die toestelle mekaar sal opspoor. Daar is baie drywers vir die sogenaamde USB Gadgets (genoem na die Linux-kern-substelsel), wat jou toelaat om verskeie soorte USB-toestelle na te boots: netwerkadapter, oudiokaart, sleutelbord en muis, flitsskyf, kamera, konsole via 'n reeks hawe. Aangesien ons toestel met die netwerk sal werk, is dit die beste vir ons om 'n Ethernet-adapter na te boots.

Daar is drie Ethernet-oor-USB-standaarde:

  • Afgeleë NDIS (RNDIS). 'n Verouderde standaard van Microsoft, wat hoofsaaklik tydens Windows XP gebruik word.
  • Ethernet-beheermodel (ECM). 'n Eenvoudige standaard wat Ethernet-rame binne USB-pakkies omsluit. Ideaal vir bedrade modems met 'n USB-verbinding, waar dit gerieflik is om rame sonder verwerking oor te dra, maar as gevolg van die eenvoud en beperkings van die USB-bus, is dit nie baie vinnig nie.
  • Ethernet-emulasiemodel (EEM). 'n Slimmer protokol wat USB-beperkings in ag neem en veelvuldige rame optimaal in een saamvoeg, en sodoende deurset verhoog.
  • Netwerkbeheermodel (NCM). Die nuutste protokol. Het die voordele van EEM en optimaliseer die buservaring verder.

Om enige van hierdie protokolle te kry om op ons direksie te werk, soos altyd, sal ons 'n paar probleme moet ondervind. As gevolg van die feit dat Allwinner net in die Android-dele van die kern belangstel, werk net Android Gadget normaal - die kode wat kommunikasie met adb implementeer, die toestel via die MTP-protokol uitvoer en 'n flash drive op Android-toestelle naboots. Android Gadget self ondersteun ook die RNDIS-protokol, maar dit is gebreek in die Allwinner-kern. As jy probeer om die kern met enige ander USB Gadget saam te stel, sal die toestel eenvoudig nie op die stelsel verskyn nie, maak nie saak wat jy doen nie.
Om die probleem op 'n vriendskaplike manier op te los, moet jy die plek vind waar die USB-beheerder geïnisialiseer word in die kode van die Android-toestel android.c wat deur die ontwikkelaars gewysig is, maar daar is ook 'n oplossing om ten minste Ethernet-emulasie oor te maak 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;

Hierdie pleister dwing USB-kliëntmodus af, sodat jy gewone USB-toerusting van Linux kan gebruik.
Nou moet jy die kern herbou met hierdie pleister en die nodige gadget. Ek het EEM gekies omdat... Volgens toetsresultate het dit geblyk meer produktief te wees as NCM.
Die Armbiese span verskaf baie eenvoudige en gerieflike monteerstelsel vir alle ondersteunde borde in die verspreiding. Laai dit net af, sit ons pleister in userpatches/kernel/sun8i-default/otg.patch, wysig 'n bietjie compile.sh en kies die vereiste gadget:

Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router

Die kern sal saamgestel word in 'n deb-pakket, wat nie moeilik sal wees om via die bord te installeer nie dpkg.
Al wat oorbly is om die bord via USB te koppel en ons nuwe netwerkadapter te konfigureer om 'n adres via DHCP te ontvang. Om dit te doen moet jy iets soos die volgende byvoeg /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'

Dit is beter om die MAC-adres handmatig in te stel, want... dit sal ewekansig wees elke keer as die toestel herlaai word, wat ongerieflik en lastig is.
Ons koppel die MicroUSB-kabel aan die OTG-aansluiting, koppel krag vanaf die router (dit kan aan penne 2 en 3 van die kam voorsien word, en nie net aan die kragaansluiting nie).

Al wat oorbly is om die router te konfigureer. Dit is genoeg om die pakket met die EEM-bestuurder te installeer en ons nuwe USB-netwerktoestel by die brug van die plaaslike firewall-sone te voeg:

opkg install kmod-usb-net-cdc-eem

Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router
Om alle verkeer na die VPN-tonnel te stuur, moet jy óf 'n SNAT-reël by die bord se IP-adres aan die roeteerderkant voeg, óf die bord se adres as 'n poortadres via dnsmasq versprei. Laasgenoemde word gedoen deur die volgende reël by te voeg /etc/dnsmasq.conf:

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

waar 192.168.1.100 - IP-adres van jou bord. Moenie vergeet om die routeradres in die netwerkinstellings op die bord self in te voer nie!

'n Melamienspons is gebruik om die bordkontakte van die roeteerderkontakte te isoleer. Dit het iets soos volg uitgedraai:
Bespoedig OpenVPN vir $9.99* of integreer Orange Pi One in jou router

Gevolgtrekking

Die netwerk via USB werk verbasend vinnig: 100-120 Mb/s, ek het minder verwag. OpenVPN gaan deur ongeveer 70 Mb/s geënkripteerde verkeer, wat ook nie baie is nie, maar genoeg vir my behoeftes. Die deksel van die router sluit nie styf nie, wat 'n klein gaping laat. Aesthetes kan die Ethernet- en USB Host-verbindings van die bord verwyder, wat die deksel heeltemal sal laat sluit en nog 'n bietjie spasie oor het.
Dit is beter om nie aan sulke pornografie deel te neem en te koop nie Turris Omnia.

Bron: will.com

Voeg 'n opmerking