Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač

Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač

Neki od nas ne koriste internet bez VPN-a iz ovog ili onog razloga: netko treba namjenski IP, a lakše je i jeftinije kupiti VPS s dva IP-a nego kupiti adresu od pružatelja usluga, netko želi pristup svim web stranicama , i to ne samo oni koji su dopušteni na teritoriju Ruske Federacije, drugi trebaju IPv6, ali ga pružatelj ne pruža...
Najčešće se VPN veza uspostavlja na samom uređaju koji se u određenom trenutku koristi, što ima smisla ako imate samo jedno računalo i jedan telefon i rijetko ih koristite u isto vrijeme. Ako postoji mnogo uređaja u vašoj kućnoj mreži ili, na primjer, postoje neki na kojima se VPN ne može konfigurirati, bilo bi prikladnije stvoriti tunel izravno na kućnom usmjerivaču kako ne biste razmišljali o postavljanju svakog uređaja zasebno .

Ako ste ikada instalirali OpenVPN na svoj router, vjerojatno ste bili neugodno iznenađeni koliko brzo radi. SoC-ovi čak i jeftinih usmjerivača bez ikakvih problema prolaze oko gigabitnog prometa, zbog prijenosa funkcija usmjeravanja i NAT-a na zaseban čip dizajniran isključivo za tu zadaću, a glavni procesori takvih usmjerivača prilično su slabi, jer Na njima praktički nema opterećenja. Ovaj kompromis omogućuje vam postizanje velike brzine usmjerivača i značajno smanjenje cijene gotovog uređaja - usmjerivači s moćnim procesorima koštaju nekoliko puta više i pozicionirani su ne samo kao kutija za distribuciju interneta, već i kao NAS, torrent downloader i kućni multimedijski sustav.

Moj ruter, TP-Link TL-WDR4300, ne može se nazvati novim - model se pojavio sredinom 2012., a ima procesor MIPS560 32Kc arhitekture na 74 MHz, čija snaga je dovoljna samo za 20-23 Mb/s šifriranog prometa putem OpenVPN-a, što je prema standardima. Brzina modernog kućnog interneta prilično je niska.
Kako možemo povećati brzinu šifriranog tunela? Moj ruter je dosta funkcionalan, podržava 3x3 MIMO i općenito dobro radi, ne bih ga htio mijenjati.
Budući da je sada uobičajeno raditi internetske stranice od 10 megabajta, pisati desktop aplikacije u node.js i pakirati ih u datoteku od 100 megabajta, povećavati snagu računala umjesto optimizacije, napravit ćemo nešto strašno - prenijet ćemo VPN vezu na produktivno jednopločno “računalo” Orange Pi One, koje ćemo ugraditi u kućište routera bez zauzimanja postojećih mrežnih i USB priključaka, za samo 9.99$*!
* + dostava, + porezi, + za pivo, + MicroSD.

OpenVPN

Procesor usmjerivača ne može se nazvati potpuno slabim - sposoban je šifrirati i hashirati podatke pomoću algoritma AES-128-CBC-SHA1 pri brzini od 50 Mb/s, što je osjetno brže od rada OpenVPN-a i modernog CHACHA20 streama. šifra s POLY1305 hashom doseže čak 130 megabita u sekundi! Zašto je brzina VPN tunela tako niska? Sve je u prebacivanju konteksta između korisničkog prostora i prostora jezgre: OpenVPN kriptira promet i komunicira s vanjskim svijetom u korisničkom kontekstu, a samo usmjeravanje događa se u kontekstu jezgre. Operativni sustav se mora stalno prebacivati ​​naprijed-natrag za svaki primljeni ili poslani paket, a ta je operacija spora. Ovaj problem je svojstven svim VPN aplikacijama koje rade preko TUN/TAP drajvera i ne može se reći da je problem niske brzine uzrokovan lošom OpenVPN optimizacijom (iako, naravno, postoje mjesta koja treba preraditi). Niti jedan korisnički VPN klijent ne pruža čak ni gigabit s onemogućenom enkripcijom na mom prijenosnom računalu, a kamoli sustavi sa slabim procesorom.

Narančasta Pi One

Jednopločni Orange Pi One iz Xunlonga najbolja je ponuda u omjeru performansi i cijene u ovom trenutku. Za 9.99 USD* dobivate solidan četverojezgreni ARM Cortex-A7 procesor koji radi (stabilno) na 1008 MHz i jasno nadmašuje svoje cjenovne susjede Raspberry Pi Zero i Next Thing CHIP. Ovdje prestaju prednosti. Tvrtka Xunlong softveru svojih ploča ne posvećuje baš nulte pažnje, a u trenutku kada je One pušten u prodaju nije čak ni dostavila konfiguracijsku datoteku ploče, a o gotovim slikama da i ne govorimo. Allwinner, proizvođač SoC-a, također nije posebno osjetljiv na podršku svom proizvodu. Zanimaju ih samo minimalne performanse u OS-u Android 4.4.4, što znači da smo prisiljeni koristiti 3.4 kernel s Android zakrpama. Srećom, postoje entuzijasti koji sastavljaju distribucije, uređuju kernel, pišu kod za podršku pločama u glavnom kernelu, tj. oni zapravo obavljaju posao za proizvođača, čineći ovo sranje prihvatljivim. Za svoje sam potrebe odabrao Armbian distribuciju; ona se često i prikladno ažurira (novi kerneli se instaliraju izravno kroz upravitelj paketa, a ne kopiranjem datoteka na posebnu particiju, kao što je obično slučaj s Allwinnerom), i podržava većinu periferije, za razliku od ostalih.

usmjerivač

Kako slabi procesor rutera ne bismo opteretili enkripcijom i ubrzali svoju VPN vezu, možemo taj zadatak prebaciti na pleća jačeg Orange Pi procesora tako da ga na neki način povežemo s ruterom. Pada mi na pamet povezivanje putem Etherneta ili USB-a - oba ova standarda podržavaju oba uređaja, ali nisam želio zauzeti postojeće priključke. Srećom, postoji izlaz.

GL850G USB hub čip, koji se koristi u ruteru, podržava 4 USB priključka, od kojih dva nisu ožičena. Nejasno je zašto ih proizvođač nije odlemio, pretpostavljam, kako bi spriječio korisnike da povežu 4 uređaja s velikom potrošnjom struje (na primjer, tvrde diskove) odjednom. Standardno napajanje rutera nije predviđeno za takvo opterećenje. U svakom slučaju, to je naša prednost.
Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač
Da biste dobili još jedan USB priključak, trebate samo zalemiti dvije žice na pinove 8(D-) i 9(D+) ili 11(D-) i 12(D+).

Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač

Međutim, nije dovoljno samo spojiti dva USB uređaja i nadati se da će sve raditi samo od sebe, kao što bi bilo s Ethernetom. Prvo, moramo omogućiti da jedan od njih radi u USB Client modu, a ne USB Host, i drugo, moramo odlučiti kako će uređaji detektirati jedan drugog. Postoji mnogo upravljačkih programa za takozvane USB gadgete (nazvane po podsustavu jezgre Linuxa), koji vam omogućuju oponašanje raznih vrsta USB uređaja: mrežni adapter, audio kartica, tipkovnica i miš, flash pogon, kamera, konzola putem serijskog luka. Budući da će naš uređaj raditi s mrežom, emulacija Ethernet adaptera je najbolja za nas.

Postoje tri standarda Ethernet-over-USB:

  • Udaljeni NDIS (RNDIS). Zastarjeli Microsoftov standard, koji se prvenstveno koristi u sustavu Windows XP.
  • Ethernet kontrolni model (ECM). Jednostavan standard koji enkapsulira Ethernet okvire unutar USB paketa. Izvrstan za žične modeme s USB vezom, gdje je zgodno prenositi okvire bez obrade, ali zbog svoje jednostavnosti i ograničenja USB sabirnice nije baš brz.
  • Model emulacije Etherneta (EEM). Pametniji protokol koji uzima u obzir USB ograničenja i optimalno spaja više okvira u jedan, čime se povećava propusnost.
  • Model kontrole mreže (NCM). Najnoviji protokol. Ima prednosti EEM-a i dodatno optimizira autobusno iskustvo.

Kako bismo natjerali bilo koji od ovih protokola da radi na našoj ploči, kao i uvijek, morat ćemo naići na neke poteškoće. Zbog činjenice da Allwinner zanimaju samo Android dijelovi jezgre, samo Android Gadget radi normalno - kod koji implementira komunikaciju s adb-om, izvoz uređaja putem MTP protokola i emulaciju flash pogona na Android uređajima. Sam Android Gadget također podržava RNDIS protokol, ali on je pokvaren u Allwinner kernelu. Ako pokušate kompajlirati kernel s bilo kojim drugim USB Gadgetom, uređaj se jednostavno neće pojaviti na sustavu, bez obzira što učinili.
Da biste riješili problem, na prijateljski način, trebate pronaći mjesto gdje se USB kontroler inicijalizira u kodu Android gadgeta android.c koji su modificirali programeri, ali postoji i zaobilazno rješenje da se napravi barem Ethernet emulacija preko USB rad:

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

Ova zakrpa nameće način rada USB klijenta, omogućujući vam korištenje uobičajenih USB gadgeta iz Linuxa.
Sada biste trebali ponovno izgraditi kernel s ovom zakrpom i potrebnim gadgetom. Izabrao sam EEM jer... Prema rezultatima ispitivanja, pokazalo se da je produktivniji od NCM-a.
Tim Armbian pruža vrlo jednostavan i praktičan sustav montaže za sve podržane ploče u distribuciji. Samo ga preuzmite, stavite našu zakrpu userpatches/kernel/sun8i-default/otg.patch, uredi malo compile.sh i odaberite željeni gadget:

Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač

Kernel će biti kompajliran u deb paket, koji neće biti teško instalirati na ploču putem dpkg.
Sve što preostaje je spojiti ploču putem USB-a i konfigurirati naš novi mrežni adapter za primanje adrese putem DHCP-a. Da biste to učinili, morate dodati nešto poput sljedećeg /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 postaviti MAC adresu ručno jer... bit će nasumično svaki put kada se uređaj ponovno pokrene, što je nezgodno i problematično.
Spojimo MicroUSB kabel na OTG konektor, spojimo napajanje iz usmjerivača (može se napajati na pinove 2 i 3 češlja, a ne samo na konektor za napajanje).

Ostaje samo konfigurirati ruter. Dovoljno je instalirati paket s EEM drajverom i dodati naš novi USB mrežni uređaj u most lokalne firewall zone:

opkg install kmod-usb-net-cdc-eem

Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač
Da biste sav promet usmjerili na VPN tunel, trebate ili dodati SNAT pravilo IP adresi ploče na strani usmjerivača ili distribuirati adresu ploče kao adresu pristupnika putem dnsmasq. Potonje se postiže dodavanjem sljedećeg retka u /etc/dnsmasq.conf:

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

gdje 192.168.1.100 — IP adresa vaše ploče. Ne zaboravite unijeti adresu rutera u postavkama mreže na samoj ploči!

Za izolaciju kontakata ploče od kontakata usmjerivača korištena je melaminska spužva. Ispalo je ovako nešto:
Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj usmjerivač

Zaključak

Mreža preko USB-a radi iznenađujuće brzo: 100-120 Mb/s, očekivao sam manje. OpenVPN propušta oko 70 Mb/s enkriptiranog prometa, što također nije puno, ali dovoljno za moje potrebe. Poklopac rutera se ne zatvara čvrsto, ostavljajući mali razmak. Estete mogu ukloniti Ethernet i USB Host konektore s ploče, što će omogućiti da se poklopac potpuno zatvori i da ostane malo prostora.
Bolje se ne baviti takvom pornografijom i kupovati Turris Omnia.

Izvor: www.habr.com

Dodajte komentar