Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router

Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router

Unii dintre noi nu folosesc internetul fără VPN din diferite motive: unii au nevoie de un IP dedicat, și este mai simplu și mai ieftin să cumpere un VPS cu două IP-uri decât să cumpere un adresă de la furnizor, alții doresc să acceseze toate site-urile web, nu doar cele permise pe teritoriul României, iar unii au nevoie de IPv6, dar furnizorul nu îl oferă...
Cel mai adesea, conexiunea VPN este stabilită pe dispozitivul folosit în acel moment, ceea ce este perfect justificat dacă aveți doar un singur computer și un telefon și le folosiți rar simultan. Însă, dacă în rețeaua dumneavoastră de acasă există multe dispozitive, sau de exemplu, sunt unele pe care nu se poate configura VPN, ar fi mai convenabil să ridicați un tunel direct pe routerul de acasă, pentru a nu vă face griji cu privire la configurarea fiecărui dispozitiv în parte.

Dacă ați instalat vreodată OpenVPN pe routerul dumneavoastră, este probabil că ați fost neplăcut surprinși de viteza acestuia. SoC-urile chiar și ale routerelor ieftine permit fără probleme trecerea unui trafic de aproape un gigabit, datorită externalizării funcțiilor de rutare și NAT pe un cip separat, destinat exclusiv pentru această sarcină, iar procesoarele principale ale acestor routere sunt destul de slabe, deoarece nu sunt supuse la nicio sarcină. O astfel de compunere permite atingerea unei viteze mari de lucru a routerului și scăderea semnificativă a prețului dispozitivului final — routerele cu procesoare puternice costă de câteva ori mai mult și sunt poziționate nu doar ca simple cutii pentru distribuirea internetului, ci și ca NAS, descărcătoare de torrente și sisteme multimedia de acasă.

Routerul meu, TP-Link TL-WDR4300, nu poate fi considerat nou — modelul a apărut la mijlocul anului 2012 și dispune de un procesor de 560 MHz arhitectură MIPS32 74Kc, a cărui putere este suficientă doar pentru 20-23 Mb/s de trafic criptat prin OpenVPN, ceea ce este destul de puțin comparativ cu viteza internetului de acasă modern.
Cum putem crește viteza tunelului criptat? Routerul meu este destul de funcțional, suportă 3×3 MIMO, și în general, funcționează bine, nu aș dori să-l schimb.
Având în vedere că acum este obișnuit să se facă pagini web de 10 MB, să se scrie aplicații desktop în node.js și să se împacheteze în fișiere de 100 MB, să se crească puterea de calcul în loc să se optimizeze, vom face ceva îngrozitor - vom muta conectarea VPN pe un „computer” performant Orange Pi One, pe care îl vom instala în carcasa routerului, fără a ocupa porturile existente de rețea și USB, totul pentru $9.99*!
* + livrare, + taxe, + pentru bere, + MicroSD.

OpenVPN

Nu se poate spune că procesorul routerului este chiar atât de slab - acesta poate cripta și hash-ui date folosind algoritmul AES-128-CBC-SHA1 cu o viteză de 50 Mb/s, ceea ce este vizibil mai rapid decât modul în care funcționează OpenVPN, iar modernul algoritm de criptare CHACHA20 cu hash POLY1305 atinge chiar 130 megabiți pe secundă! De ce totuși viteza tunelului VPN este atât de scăzută? Totul ține de schimbarea contextului între spațiul utilizatorului și spațiul nucleului: OpenVPN cripta traficul și comunică cu exteriorul în contextul utilizatorului, în timp ce în contextul nucleului se desfășoară în mod real rutarea. Sistemul de operare trebuie să comute constant între cele două, la fiecare pachet primit sau trimis, iar această operație nu este rapidă. Această problemă este comună tuturor aplicațiilor VPN care funcționează prin driverul TUN/TAP, și nu se poate spune că problema vitezei scăzute este cauzată de o optimizare proastă a OpenVPN (deși, desigur, există locuri care ar trebui refăcute). Niciun client VPN din spațiul utilizatorului nu atinge chiar și un gigabit cu criptarea dezactivată pe laptopul meu, darămite pe sisteme cu procesoare slabe.

Orange Pi One

Placa Orange Pi One de la compania Xunlong - cea mai avantajoasă ofertă în termeni de performanță/preț de pe piață în acest moment. Pentru $9.99* obțineți un procesor quad-core ARM Cortex-A7 de bună calitate, care funcționează constant la o frecvență de 1008 MHz, și este vizibil mai performant decât concurenții săi Raspberry Pi Zero și Next Thing C.H.I.P. în aceeași categorie de preț. Aici se termină și avantajele. Compania Xunlong acordă zero atenție software-ului plăcilor sale, iar la lansarea One pe piață nu a furnizat nici măcar un fișier de configurare a plăcii, cu atât mai puțin imagini gata făcute. Allwinner - producătorul SoC - de asemenea, nu arată o prea mare grijă față de suportul produsului său. Îi interesează doar funcționalitatea minimă în Android 4.4.4, ceea ce înseamnă că suntem nevoiți să folosim un nucleu de versiune 3.4 cu patch-uri pentru Android. Din fericire, există entuziaști care strâng distribuții, modifică nucleul, scriu cod pentru suportul plăcilor în nucleul mainline, adică efectiv fac munca pentru producător, făcând această platformă să funcționeze acceptabil. Pentru scopurile mele, am ales distribuția Armbian, care se actualizează frecvent și convenabil (noul nucleu se instalează direct prin managerul de pachete, nu prin copierea fișierelor pe o partiție specială, cum se întâmplă de obicei cu Allwinner) și care suportă majoritatea periferiilor, spre deosebire de celelalte.

Router

Pentru a nu supraîncărca procesorul slab al routerului cu criptarea și pentru a accelera conexiunea VPN, putem delega această sarcină unui procesor mai puternic Orange Pi, conectându-l la router în vreun fel. Îmi vine în minte conectarea fie prin Ethernet, fie prin USB - ambele standarde sunt acceptate de ambele dispozitive, dar nu aș dori să ocup porturile deja existente. Din fericire, există o soluție.

Circuitul USB hub GL850G, care este utilizat în router, suportă funcționarea a 4 porturi USB, două dintre care nu sunt solderizate. Nu este clar de ce producătorul nu le-a solderizat, presupun că pentru a nu permite utilizatorilor să conecteze simultan 4 dispozitive cu consum mare de curent (de exemplu, hard disk-uri), deoarece sursa de alimentare standard a routerului nu este proiectată pentru o astfel de sarcină. Oricum, acest lucru este în avantajul nostru.
Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router
Pentru a obține un alt port USB, este suficient să lipim două fire la pini 8(D-) și 9(D+) sau 11(D-) și 12(D+).

Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router

Cu toate acestea, nu este suficient să conectezi pur și simplu două dispozitive USB și să speri că totul va funcționa de la sine, așa cum s-ar întâmpla cu Ethernet. În primul rând, trebuie să facem ca unul dintre ele să funcționeze în modul USB Client și nu USB Host, iar în al doilea rând, trebuie să ne decidem cum se vor identifica dispozitivele între ele. Există numeroși drivere pentru așa-numitele USB Gadgets (după numele subsistemului din nucleul Linux) care permit emularea diferitelor tipuri de dispozitive USB: adaptor de rețea, placă audio, tastatură și mouse, unitate flash, aparat foto, consolă prin port serial. Deoarece dispozitivul nostru va funcționa cu rețeaua, emularea adaptorului Ethernet ni se potrivește cel mai bine.

Există trei standarde Ethernet-over-USB:

  • Remote NDIS (RNDIS). Un standard învechit de la Microsoft, utilizat în principal pe vremea Windows XP.
  • Ethernet Control Model (ECM). Un standard simplu care încorporează cadre Ethernet în pachete USB. Se potrivește excelent pentru modemuri cu fir care au conexiune USB, unde este convenabil să transferi cadrele fără prelucrare, dar din cauza simplității sale și a limitărilor bus-ului USB, nu funcționează foarte rapid.
  • Ethernet Emulation Model (EEM). Un protocol mai inteligent care ia în considerare limitările USB și agregă optim mai multe cadre într-unul, crescând astfel lățimea de bandă.
  • Network Control Model (NCM). Cel mai nou protocol. Are avantajele EEM și optimizează și mai mult funcționarea cu bus-ul.

Pentru a face să funcționeze oricare dintre aceste protocoale pe placa noastră, de obicei, va fi nevoie să facem față unor dificultăți. Deoarece Allwinner este interesat doar de părțile Android ale nucleului, doar Android Gadget funcționează normal - acea parte de cod care implementează conexiunea cu adb, exportul dispozitivului prin protocolul MTP și emularea unităților flash pe dispozitivele Android. Însuși Android Gadget suportă și protocoalele RNDIS, dar în nucleul Allwinner acesta este deteriorat. Dacă încerci să compilezi nucleul cu orice alt USB Gadget, dispozitivul pur și simplu nu va apărea în sistem, indiferent de ceea ce faci.
Pentru a rezolva problema, ar trebui să găsim locul de inițializare a controller-ului USB în codul modificat de dezvoltatori din android.c, dar există și o manevră alternativă pentru a face să funcționeze, cel puțin, emularea Ethernet prin USB:

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

Această patch forțează activarea modului USB-client, permițând utilizarea gadget-urilor USB obișnuite din Linux.
Acum este necesar să recompilăm kernel-ul cu această patch și gadget-ul necesar. Am ales EEM, deoarece rezultatele testelor au arătat că este mai eficient decât NCM.
Echipa Armbian oferă un sistem de compilare foarte simplu și convenabil pentru toate plăcile acceptate din distribuție. Este suficient să-l descărcați, să puneți patch-ul nostru în userpatches/kernel/sun8i-default/otg.patch, să editați puțin compile.sh și să alegeți gadget-ul dorit:

Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router

Kernel-ul se va compila într-un pachet deb, care nu va fi greu de instalat pe placă prin dpkg.
Rămâne doar să conectați placa prin USB și să configurați noul nostru adaptor de rețea pentru a obține o adresă prin DHCP. Pentru aceasta, este necesar să adăugați aproximativ următoarele în /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'

Este mai bine să setați manual adresa MAC, deoarece va fi aleatorie la fiecare repornire a dispozitivului, ceea ce este incomod și complicat.
Conectăm cablul MicroUSB la conectorul OTG, conectăm alimentarea de la router (o putem aplica pe pini 2 și 3 ai mufe, nu doar la conectorul de alimentare).

Rămâne să configurăm routerul. Este suficient să instalăm pachetul cu driverul EEM și să adăugăm noul nostru dispozitiv USB de rețea în bridge-ul zonei firewall locale:

opkg install kmod-usb-net-cdc-eem

Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router
Pentru a ruta tot traficul în tunelul VPN, trebuie fie să adăugați o regulă SNAT pe adresa IP a plăcii de pe partea routerului, fie să distribuiți adresa plăcii ca adresă de gateway prin dnsmasq. Ultima se face prin adăugarea următoarei linii în /etc/dnsmasq.conf:

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

unde 192.168.1.100 — adresa IP a plăcii dvs. Nu uitați să configurați adresa routerului în setările de rețea ale plăcii în sine!

Pentru izolarea contactelor plăcii de contactele routerului, a fost utilizată o perie de melamină. A ieșit cam așa:
Accelerăm OpenVPN pentru $9.99* sau integrăm Orange Pi One în router

Concluzie

Rețeaua funcționează prin USB surprinzător de repede: 100-120 Mb/s, m-am așteptat la mai puțin. OpenVPN trece prin aproximativ 70 Mb/s de trafic criptat, ceea ce nu este foarte mult, dar este suficient pentru nevoile mele. Capacitatea routerului nu se închide perfect, lăsând o mică fanta. Estetii pot îndepărta conectorii Ethernet și USB Host de pe placă, ceea ce va permite capacului să se închidă complet, și va mai rămâne și spațiu.
Sau mai bine nu te ocupa cu astfel de porcării și cumpără Turris Omnia.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster