Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse

Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse

Mõned meist ei kasuta ühel või teisel põhjusel Internetti ilma VPN-ita: keegi vajab spetsiaalset IP-d ning lihtsam ja odavam on osta kahe IP-ga VPS kui teenusepakkujalt aadressi ostmine, keegi soovib juurdepääsu kõigile veebisaitidele. , ja mitte ainult need, mis on lubatud Vene Föderatsiooni territooriumil, teised vajavad IPv6-d, kuid pakkuja seda ei paku...
Enamasti luuakse VPN-ühendus kindlal hetkel kasutatavas seadmes endas, mis on mõttekas, kui sul on ainult üks arvuti ja üks telefon ning kasutad neid harva korraga. Kui koduvõrgus on palju seadmeid või on näiteks selliseid, millel VPN-i ei saa seadistada, oleks mugavam luua tunnel otse koduruuterisse, et mitte mõelda iga seadme eraldi seadistamisele. .

Kui olete kunagi oma ruuterisse OpenVPN-i installinud, olete selle töö kiirusest tõenäoliselt ebameeldivalt üllatunud. Isegi odavate ruuterite SoC-d läbivad probleemideta umbes gigabitise liikluse, kuna marsruutimise ja NAT-i funktsioonid edastatakse eraldi kiibile, mis on mõeldud ainult selle ülesande jaoks, ja selliste ruuterite põhiprotsessorid on üsna nõrgad, kuna Koormust neil praktiliselt pole. See kompromiss võimaldab teil saavutada ruuteri suure kiiruse ja vähendada oluliselt valmis seadme hinda - võimsate protsessoritega ruuterid maksavad mitu korda rohkem ja on paigutatud mitte ainult Interneti levitamise kastiks, vaid ka NAS-i, torrentina. allalaadija ja kodune multimeediumisüsteem.

Minu ruuterit TP-Link TL-WDR4300 ei saa uueks nimetada - mudel ilmus 2012. aasta keskel ja sellel on 560 MHz MIPS32 74Kc arhitektuuriga protsessor, mille võimsusest piisab vaid 20-23 Mb/s krüpteeritud liikluseks. OpenVPN-i kaudu, mis on standardite järgi Kaasaegse kodu Interneti kiirus on üsna madal.
Kuidas saame krüptitud tunneli kiirust suurendada? Minu ruuter on üsna funktsionaalne, toetab 3x3 MIMO-d ja üldiselt töötab hästi, ma ei tahaks seda muuta.
Kuna praegu on tavaks teha 10-megabaidiseid internetilehti, kirjutada node.js-is töölauarakendusi ja pakkida need 100-megabaidisesse faili, optimeerimise asemel arvutusvõimsust suurendada, siis teeme midagi hirmsat - kanname VPN-ühenduse üle produktiivne ühe plaadiga "arvuti" Orange Pi One, mille paigaldame ruuteri korpusesse ilma olemasolevaid võrgu- ja USB-porte kasutamata, vaid 9.99 $* eest!
* + kohaletoimetamine, + maksud, + õlle eest, + MicroSD.

OpenVPN

Ruuteri protsessorit ei saa nimetada täiesti nõrgaks - see on võimeline krüpteerima ja räsima andmeid, kasutades AES-128-CBC-SHA1 algoritmi kiirusega 50 Mb/s, mis on märgatavalt kiirem kui OpenVPN ja tänapäevane CHACHA20 voog. POLY1305 räsiga šifr ulatub isegi 130 megabitti sekundis! Miks on VPN-tunneli kiirus nii väike? See kõik puudutab konteksti vahetamist kasutajaruumi ja kerneli ruumi vahel: OpenVPN krüpteerib liikluse ja suhtleb välismaailmaga kasutaja kontekstis ning marsruutimine ise toimub kerneli kontekstis. Operatsioonisüsteem peab iga vastuvõetud või edastatud paketi puhul pidevalt edasi-tagasi lülituma ning see toiming on aeglane. See probleem on omane kõikidele VPN-rakendustele, mis töötavad TUN/TAP-draiveri kaudu ning ei saa väita, et väikese kiiruse probleemi põhjustaks kehv OpenVPN-i optimeerimine (kuigi loomulikult on kohti, mis vajavad ümbertegemist). Mitte ükski kasutajaruumi VPN-klient ei paku isegi gigabitti, kui minu sülearvutis on keelatud krüptimine, rääkimata nõrga protsessoriga süsteemidest.

Oranž Pi One

Ühe plaadiga Orange Pi One firmalt Xunlong on jõudluse/hinna suhte poolest hetkel parim pakkumine. 9.99 $* eest saate tugeva neljatuumalise ARM Cortex-A7 protsessori, mis töötab (stabiilselt) sagedusel 1008 MHz ja ületab selgelt oma hinnaklassi naabreid Raspberry Pi Zero ja Next Thing CHIP. Siin eelised lõpevad. Xunlongi firma pöörab oma plaatide tarkvarale täpselt null tähelepanu ning One’i müügile jõudmise ajal ei andnud ta isegi plaadi konfiguratsioonifaili, rääkimata valmispiltidest. SoC-tootja Allwinner ei ole ka oma toote toetamise suhtes eriti tundlik. Neid huvitab Android 4.4.4 operatsioonisüsteemi minimaalne jõudlus, mis tähendab, et oleme sunnitud kasutama 3.4 tuuma koos Androidi paikadega. Õnneks leidub entusiaste, kes koostavad distributsioone, redigeerivad kernelit, kirjutavad põhiliini kernelis olevatele tugiplaatidele koodi, st. nad tegelikult teevad seda tööd tootja heaks, muutes selle jama vastuvõetavaks. Oma eesmärkidel valisin Armbiani distributsiooni, mida värskendatakse sageli ja mugavalt (uued tuumad installitakse otse paketihalduri kaudu, mitte failide kopeerimisega spetsiaalsesse partitsiooni, nagu tavaliselt Allwinneri puhul) ja see toetab enamikku välisseadmed, erinevalt teistest.

Ruuter

Et mitte koormata ruuteri nõrka protsessorit krüpteerimisega ja kiirendada meie VPN-ühendust, saame selle ülesande nihutada võimsama Orange Pi protsessori õlgadele, ühendades selle mingil moel ruuteriga. Meenub Etherneti või USB-ühenduse loomine – mõlemad seadmed toetavad mõlemat standardit, kuid ma ei tahtnud olemasolevaid porte kasutada. Õnneks on väljapääs.

Ruuteris kasutatav USB-jaoturi GL850G kiip toetab 4 USB-porti, millest kaks on juhtmeta. Jääb arusaamatuks, miks ma eeldan, et tootja ei joodis neid lahti, et kasutajad ei saaks korraga ühendada 4 suure voolutarbimisega seadet (näiteks kõvakettad). Ruuteri standardtoiteallikas pole sellise koormuse jaoks mõeldud. Igal juhul on see meile kasulik.
Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse
Teise USB-pordi saamiseks peate lihtsalt jootma kaks juhet tihvtide 8(D-) ja 9(D+) või 11(D-) ja 12(D+) külge.

Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse

Siiski ei piisa lihtsalt kahe USB-seadme ühendamisest ja lootmisest, et kõik toimib iseenesest, nagu Etherneti puhul. Esiteks peame panema ühe neist töötama USB-kliendirežiimis, mitte USB-hosti režiimis, ja teiseks peame otsustama, kuidas seadmed üksteist tuvastavad. Nn USB-vidinatele (nimetatud Linuxi kerneli alamsüsteemi järgi) on palju draivereid, mis võimaldavad emuleerida erinevat tüüpi USB-seadmeid: võrguadapter, helikaart, klaviatuur ja hiir, välkmälu, kaamera, konsool jadaühenduse kaudu. sadamasse. Kuna meie seade töötab võrguga, on Etherneti adapteri emuleerimine meie jaoks parim.

Etherneti üle USB-standardeid on kolm:

  • Kaug-NDIS (RNDIS). Microsofti vananenud standard, mida kasutatakse peamiselt Windows XP ajal.
  • Etherneti juhtimismudel (ECM). Lihtne standard, mis kapseldab Etherneti raamid USB-pakettidesse. Suurepärane USB ühendusega juhtmega modemitele, kus on mugav kaadreid ilma töötlemiseta üle kanda, kuid tänu oma lihtsusele ja USB siini piirangutele pole see kuigi kiire.
  • Etherneti emulatsioonimudel (EEM). Nutikam protokoll, mis võtab arvesse USB-piiranguid ja koondab optimaalselt mitu kaadrit üheks, suurendades seeläbi läbilaskevõimet.
  • Võrgu juhtimismudel (NCM). Uusim protokoll. Sellel on EEM-i eelised ja see optimeerib veelgi bussikogemust.

Et saada mõni neist protokollidest meie pardal tööle, nagu alati, peame kokku puutuma teatud raskustega. Kuna Allwinnerit huvitavad ainult kerneli Androidi osad, töötab normaalselt ainult Androidi vidin - kood, mis rakendab sidet adb-ga, seadme eksportimist MTP-protokolli kaudu ja Android-seadmetes mälupulka emuleerimist. Androidi vidin ise toetab ka RNDIS-protokolli, kuid see on Allwinneri tuumas katki. Kui proovite tuuma kompileerida mõne muu USB-vidinaga, siis seadet lihtsalt ei kuvata süsteemis, hoolimata sellest, mida teete.
Probleemi sõbralikuks lahendamiseks peate leidma arendajate poolt muudetud Androidi vidina android.c koodis USB-kontrolleri lähtestamise koha, kuid on ka lahendus, mis võimaldab vähemalt Etherneti emulatsiooni üle teha. USB töö:

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

See plaaster sunnib USB-kliendirežiimi, võimaldades teil kasutada tavalisi Linuxi USB-vidinaid.
Nüüd tuleks kernel selle paiga ja vajaliku vidinaga uuesti üles ehitada. Valisin EEM-i, sest... Katsetulemuste kohaselt osutus see NCM-ist produktiivsemaks.
Armbia meeskond pakub väga lihtne ja mugav montaažisüsteem kõigi jaotuse toetatud plaatide jaoks. Lihtsalt laadige see alla ja sisestage meie plaaster userpatches/kernel/sun8i-default/otg.patch, muuda veidi compile.sh ja valige vajalik vidin:

Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse

Kernel kompileeritakse deb-paketiks, mille kaudu plaadile installimine pole keeruline dpkg.
Jääb üle vaid plaat USB kaudu ühendada ja meie uus võrguadapter konfigureerida DHCP kaudu aadressi vastu võtma. Selleks peate lisama midagi järgmist /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'

Parem on MAC-aadress käsitsi määrata, sest... see on juhuslik iga kord, kui seade taaskäivitatakse, mis on ebamugav ja tülikas.
Ühendame MicroUSB-kaabli OTG-pistikuga, ühendame ruuteri toite (selle saab varustada kammi 2 ja 3 viiguga, mitte ainult toitepistikuga).

Alles jääb vaid ruuteri konfigureerimine. Piisab, kui installida pakett koos EEM draiveriga ja lisada meie uus USB võrguseade kohaliku tulemüüri tsooni sillale:

opkg install kmod-usb-net-cdc-eem

Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse
Kogu liikluse suunamiseks VPN-tunnelisse peate kas lisama ruuteripoolsele plaadi IP-aadressile SNAT-reegli või levitama plaadi aadressi dnsmasqi kaudu lüüsiaadressina. Viimast tehakse järgmise rea lisamisega /etc/dnsmasq.conf:

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

kus 192.168.1.100 - teie tahvli IP-aadress. Ärge unustage ruuteri aadressi sisestada plaadi enda võrguseadetesse!

Plaatide kontaktide eraldamiseks ruuteri kontaktidest kasutati melamiinkäsna. Selgus midagi sellist:
Kiirendage OpenVPN-i 9.99 $* eest või integreerige Orange Pi One oma ruuterisse

Järeldus

Võrk USB kaudu töötab üllatavalt kiiresti: 100-120 Mb/s, ootasin vähem. OpenVPN läbib umbes 70 Mb/s krüpteeritud liiklust, mida pole samuti kuigi palju, aga minu vajadusteks piisavalt. Ruuteri kaas ei sulgu tihedalt, jättes väikese vahe. Esteetid saavad plaadilt eemaldada Etherneti ja USB-hosti pistikud, mis võimaldab kaanel täielikult sulguda ja ruumi jääb alles.
Parem on sellise pornograafiaga mitte tegeleda ja osta Turris Omnia.

Allikas: www.habr.com

Lisa kommentaar