Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių

Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių

Kai kurie iš mūsų dėl vienokių ar kitokių priežasčių nesinaudojame internetu be VPN: kažkam reikia tam skirto IP, o nusipirkti VPS su dviem IP yra lengviau ir pigiau nei perkant adresą iš tiekėjo, kažkas nori pasiekti visas svetaines. , ir ne tik leidžiamiems Rusijos Federacijos teritorijoje, kitiems reikia IPv6, bet tiekėjas jo nesuteikia...
Dažniausiai VPN ryšys užmezgamas pačiame tam tikru momentu naudojamame įrenginyje, o tai prasminga, jei turite tik vieną kompiuterį ir vieną telefoną ir retai jais naudojatės vienu metu. Jei jūsų namų tinkle yra daug įrenginių arba, pavyzdžiui, yra tokių, kuriuose VPN negalima konfigūruoti, patogiau būtų sukurti tunelį tiesiai namų maršrutizatoriuje, kad nereikėtų galvoti apie kiekvieno įrenginio nustatymą atskirai. .

Jei kada nors savo maršrutizatoriuje įdiegėte OpenVPN, tikriausiai buvote nemaloniai nustebinti, kaip greitai jis veikia. Net ir pigių maršrutizatorių SoC be problemų praeina maždaug gigabito srautą, dėl maršruto parinkimo ir NAT funkcijų perkėlimo į atskirą lustą, skirtą išskirtinai šiai užduočiai, o pagrindiniai tokių maršrutizatorių procesoriai yra gana silpni, nes Jiems praktiškai nėra jokios apkrovos. Šis kompromisas leidžia pasiekti didelį maršrutizatoriaus greitį ir žymiai sumažinti gatavo įrenginio kainą – maršrutizatoriai su galingais procesoriais kainuoja kelis kartus brangiau ir yra išdėstyti ne tik kaip interneto platinimo dėžutė, bet ir kaip NAS, torrent. parsisiuntimo programa ir namų daugialypės terpės sistema.

Mano maršrutizatorius TP-Link TL-WDR4300 negali būti vadinamas nauju - modelis pasirodė 2012 m. viduryje, turi 560 MHz MIPS32 74Kc architektūros procesorių, kurio galios užtenka tik 20-23 Mb/s šifruoto srauto. per OpenVPN, kuris pagal standartus Šiuolaikinio namų interneto greitis yra gana mažas.
Kaip galime padidinti šifruoto tunelio greitį? Mano maršrutizatorius yra gana funkcionalus, palaiko 3x3 MIMO ir apskritai veikia gerai, nenorėčiau jo keisti.
Kadangi dabar įprasta daryti 10 megabaitų interneto puslapius, rašyti darbalaukio programas į node.js ir supakuoti jas į 100 megabaitų failą, didinti skaičiavimo galią, o ne optimizuoti, tai padarysime ką nors baisaus - perkelsime VPN ryšį į produktyvus vienos plokštės „kompiuteris“ Orange Pi One, kurį įdiegsime maršrutizatoriaus korpuse nenaudodami esamų tinklo ir USB prievadų, tik už 9.99 USD*!
* + pristatymas, + mokesčiai, + alui, + MicroSD.

OpenVPN

Maršrutizatoriaus procesoriaus negalima pavadinti visiškai silpnu – jis gali šifruoti ir maišyti duomenis naudodamas AES-128-CBC-SHA1 algoritmą 50 Mb/s greičiu, kuris yra pastebimai greitesnis nei veikia OpenVPN, ir šiuolaikinį CHACHA20 srautą. šifras su POLY1305 maiša pasiekia net 130 megabitų per sekundę! Kodėl VPN tunelio greitis toks mažas? Viskas susiję su konteksto perjungimu iš vartotojo erdvės į branduolio erdvę: „OpenVPN“ užšifruoja srautą ir bendrauja su išoriniu pasauliu vartotojo kontekste, o pats maršruto parinkimas vyksta branduolio kontekste. Operacinė sistema turi nuolat persijungti pirmyn ir atgal kiekvieną gautą ar perduotą paketą, ir ši operacija vyksta lėtai. Ši problema būdinga visoms VPN programoms, veikiančioms per TUN/TAP tvarkyklę, ir negalima teigti, kad mažo greičio problemą sukelia prastas OpenVPN optimizavimas (nors, žinoma, yra vietų, kurias reikia pertvarkyti). Nė vienas vartotojo erdvės VPN klientas nepateikia net gigabito su išjungtu šifravimu mano nešiojamame kompiuteryje, jau nekalbant apie sistemas su silpnu procesoriumi.

Oranžinė Pi One

Vienos plokštės Orange Pi One iš Xunlong šiuo metu yra geriausias pasiūlymas pagal našumo ir kainos santykį. Už 9.99 USD* gausite tvirtą keturių branduolių ARM Cortex-A7 procesorių, veikiantį (stabilų) 1008 MHz dažniu ir akivaizdžiai lenkiantį savo kainos taško kaimynus Raspberry Pi Zero ir Next Thing CHIP. Čia privalumai ir baigiasi. „Xunlong“ kompanija lygiai nulinį dėmesį skiria savo plokščių programinei įrangai, o tuo metu, kai „One“ buvo išleista parduoti, ji net nepateikė plokštės konfigūracijos failo, jau nekalbant apie paruoštus vaizdus. „Allwinner“, SoC gamintojas, taip pat nėra ypač jautrus savo produkto palaikymui. Juos domina tik minimalus Android 4.4.4 OS našumas, o tai reiškia, kad esame priversti naudoti 3.4 branduolį su Android pataisomis. Laimei, yra entuziastų, kurie surenka distribucijas, redaguoja branduolį, rašo kodą palaikyti plokštėms pagrindiniame branduolyje, t.y. jie iš tikrųjų atlieka darbą už gamintoją, todėl šis šūdas darbas yra priimtinas. Savo tikslams pasirinkau Armbian distribuciją, kuri yra dažnai ir patogiai atnaujinama (nauji branduoliai diegiami tiesiai per paketų tvarkyklę, o ne kopijuojant failus į specialų skaidinį, kaip paprastai būna su Allwinner) ir palaiko daugumą periferiniai įrenginiai, skirtingai nei kiti.

Maršrutizatorius

Kad neapkrautume silpno maršrutizatoriaus procesoriaus šifravimu ir paspartintume mūsų VPN ryšį, šią užduotį galime perkelti ant galingesnio Orange Pi procesoriaus pečių, kokiu nors būdu prijungdami jį prie maršrutizatoriaus. Į galvą ateina jungtis per Ethernet arba USB – abu šiuos standartus palaiko abu įrenginiai, bet aš nenorėjau naudoti esamų prievadų. Laimei, yra išeitis.

Maršrutizatoriuje naudojamas USB šakotuvo lustas GL850G palaiko 4 USB prievadus, iš kurių du nėra laidiniai. Neaišku, kodėl gamintojas jų neišlitavo, manyčiau, kad vartotojai negalėtų vienu metu prijungti 4 didelės srovės suvartojimo įrenginių (pavyzdžiui, kietųjų diskų). Standartinis maršrutizatoriaus maitinimo šaltinis nėra skirtas tokiai apkrovai. Bet kokiu atveju tai mums į naudą.
Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių
Norint gauti kitą USB prievadą, tereikia prilituoti du laidus prie 8(D-) ir 9(D+) arba 11(D-) ir 12(D+) kaiščių.

Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių

Tačiau neužtenka tiesiog prijungti du USB įrenginius ir tikėtis, kad viskas veiks savaime, kaip būtų su Ethernet. Pirma, turime padaryti, kad vienas iš jų veiktų USB kliento režimu, o ne USB Host, ir, antra, turime nuspręsti, kaip įrenginiai aptiks vienas kitą. Yra daug vadinamųjų USB programėlių (pavadintų Linux branduolio posistemio vardu) tvarkyklių, kurios leidžia emuliuoti įvairių tipų USB įrenginius: tinklo adapterį, garso plokštę, klaviatūrą ir pelę, atmintinę, fotoaparatą, konsolę per nuoseklųjį ryšį. uostas. Kadangi mūsų įrenginys veiks su tinklu, mums geriausia emuliuoti Ethernet adapterį.

Yra trys „Ethernet-over-USB“ standartai:

  • Nuotolinis NDIS (RNDIS). Pasenęs „Microsoft“ standartas, daugiausia naudojamas „Windows XP“.
  • Ethernet valdymo modelis (ECM). Paprastas standartas, įterpiantis Ethernet kadrus į USB paketus. Puikiai tinka laidiniams modemams su USB jungtimi, kur patogu perkelti kadrus be apdorojimo, tačiau dėl savo paprastumo ir USB magistralės apribojimų tai nėra labai greita.
  • Ethernet emuliacijos modelis (EEM). Išmanesnis protokolas, kuris atsižvelgia į USB apribojimus ir optimaliai sujungia kelis kadrus į vieną, taip padidindamas pralaidumą.
  • Tinklo valdymo modelis (NCM). Naujausias protokolas. Turi EEM privalumus ir dar labiau optimizuoja autobuso patirtį.

Kad kuris nors iš šių protokolų veiktų mūsų lentoje, kaip visada, turėsime susidurti su tam tikrais sunkumais. Kadangi „Allwinner“ domina tik „Android“ branduolio dalys, normaliai veikia tik „Android Gadget“ – kodas, įgyvendinantis ryšį su adb, eksportuojantis įrenginį per MTP protokolą ir emuliuojantis „flash drive“ „Android“ įrenginiuose. Pati „Android Gadget“ taip pat palaiko RNDIS protokolą, tačiau „Allwinner“ branduolyje jis sugenda. Jei bandysite kompiliuoti branduolį naudodami bet kurią kitą USB įtaisą, įrenginys paprasčiausiai nepasirodys sistemoje, kad ir ką darytumėte.
Kad išspręstumėte problemą draugišku būdu, kūrėjų modifikuotame Android programėlės android.c kode turite rasti vietą, kur inicijuojamas USB valdiklis, tačiau taip pat yra išeitis, kad būtų atlikta bent Ethernet emuliacija. USB darbas:

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

Šis pleistras įjungia USB kliento režimą, leidžiantį naudoti įprastas USB programėles iš Linux.
Dabar turėtumėte atkurti branduolį naudodami šį pataisą ir reikiamą programėlę. Pasirinkau EEM, nes... Remiantis bandymų rezultatais, jis pasirodė esąs produktyvesnis nei NCM.
Armbijos komanda teikia labai paprasta ir patogi surinkimo sistema visoms palaikomoms platinimo plokštėms. Tiesiog atsisiųskite jį, įdėkite mūsų pataisą userpatches/kernel/sun8i-default/otg.patch, šiek tiek redaguokite compile.sh ir pasirinkite reikiamą programėlę:

Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių

Branduolys bus sukompiliuotas į deb paketą, kurį nebus sunku įdiegti į plokštę dpkg.
Belieka prijungti plokštę per USB ir sukonfigūruoti mūsų naują tinklo adapterį, kad jis gautų adresą per DHCP. Norėdami tai padaryti, turite pridėti kažką panašaus į toliau pateiktą /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'

Geriau MAC adresą nustatyti rankiniu būdu, nes... jis bus atsitiktinis kiekvieną kartą, kai įrenginys bus paleistas iš naujo, o tai nepatogu ir varginanti.
Prijungiame MicroUSB kabelį prie OTG jungties, jungiame maitinimą iš maršrutizatoriaus (galima tiekti į 2 ir 3 šukos kaiščius, o ne tik į maitinimo jungtį).

Lieka tik sukonfigūruoti maršrutizatorių. Pakanka įdiegti paketą su EEM tvarkykle ir pridėti mūsų naują USB tinklo įrenginį prie vietinės ugniasienės zonos tilto:

opkg install kmod-usb-net-cdc-eem

Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių
Norėdami nukreipti visą srautą į VPN tunelį, turite pridėti SNAT taisyklę prie plokštės IP adreso maršrutizatoriaus pusėje arba platinti plokštės adresą kaip šliuzo adresą per dnsmasq. Pastarasis atliekamas pridedant šią eilutę /etc/dnsmasq.conf:

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

kur 192.168.1.100 - Jūsų plokštės IP adresas. Nepamirškite įvesti maršrutizatoriaus adreso tinklo nustatymuose pačioje plokštėje!

Plokštės kontaktams atskirti nuo maršrutizatoriaus kontaktų buvo naudojama melamino kempinė. Tai pasirodė maždaug taip:
Paspartinkite „OpenVPN“ už 9.99 USD* arba integruokite „Orange Pi One“ į maršrutizatorių

išvada

Tinklas per USB veikia stebėtinai greitai: 100-120 Mb/s, tikėjausi mažiau. OpenVPN praeina apie 70 Mb/s šifruoto srauto, tai irgi nėra labai daug, bet mano poreikiams pakankamai. Maršrutizatoriaus dangtis sandariai neužsidaro, paliekant nedidelį tarpelį. Estetai gali nuimti eterneto ir USB pagrindinio kompiuterio jungtis nuo plokštės, o tai leis dangčiui visiškai užsidaryti ir vis tiek liks vietos.
Geriau neužsiimk tokia pornografija ir nepirk Turris Omnia.

Šaltinis: www.habr.com

Добавить комментарий