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

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

Neki od nas ne koriste internet bez VPN-a iz ovog ili onog razloga: nekome treba namjenski IP, a lakše je i jeftinije kupiti VPS sa dva IP-a nego kupovati adresu od provajdera, neko želi pristupiti svim web stranicama , i ne samo oni dozvoljeni na teritoriji Ruske Federacije, drugima je potreban IPv6, ali ga provajder ne daje...
Najčešće se VPN veza uspostavlja na samom uređaju koji se koristi u određenom trenutku, što ima smisla ako imate samo jedan računar i jedan telefon i rijetko ih koristite u isto vrijeme. Ako u vašoj kućnoj mreži postoji mnogo uređaja ili, na primjer, postoje neki na kojima se VPN ne može konfigurirati, bilo bi zgodnije napraviti tunel direktno na kućnom ruteru kako ne biste razmišljali o postavljanju svakog uređaja zasebno .

Ako ste ikada instalirali OpenVPN na svoj ruter, vjerovatno ste bili neugodno iznenađeni koliko brzo radi. SoC-ovi čak i jeftinih rutera bez ikakvih problema prolaze kroz oko gigabitni promet, zbog prijenosa rutiranja i NAT funkcija na poseban čip dizajniran isključivo za ovaj zadatak, a glavni procesori takvih rutera su prilično slabi, jer Praktično nema opterećenja na njima. Ovaj kompromis vam omogućava da postignete veliku brzinu rutera i značajno smanjite cijenu gotovog uređaja - ruteri sa moćnim procesorima koštaju nekoliko puta više, a pozicionirani su ne samo kao kutija za distribuciju Interneta, već i kao NAS, torrent downloader i kućni multimedijalni sistem.

Moj ruter, TP-Link TL-WDR4300, ne može se nazvati novim - model se pojavio sredinom 2012. godine i ima procesor MIPS560 32Kc od 74 MHz, čija je snaga dovoljna samo za 20-23 Mb/s šifriranog prometa preko OpenVPN-a, što je po standardima Brzina modernog kućnog interneta je prilično niska.
Kako možemo povećati brzinu šifriranog tunela? Moj ruter je prilično funkcionalan, podržava 3x3 MIMO i općenito radi dobro, ne bih ga želio mijenjati.
Pošto je sada uobičajeno praviti internet stranice od 10 megabajta, pisati desktop aplikacije u node.js i spakovati ih u fajl od 100 megabajta, povećati računarsku snagu umesto optimizacije, uradićemo nešto strašno - prebacićemo VPN vezu na produktivni "kompjuter" sa jednom pločom Orange Pi One, koji ćemo instalirati u kućište rutera bez preuzimanja postojećih mrežnih i USB portova, za samo 9.99 USD*!
* + dostava, + porezi, + za pivo, + MicroSD.

OpenVPN

Procesor rutera se ne može nazvati potpuno slabim - sposoban je da šifrira i hešira podatke koristeći AES-128-CBC-SHA1 algoritam brzinom od 50 Mb/s, što je primjetno brže od načina na koji radi OpenVPN, i moderni CHACHA20 stream šifra sa POLY1305 hešom dostiže čak 130 megabita u sekundi! Zašto je brzina VPN tunela tako mala? Sve je u prebacivanju konteksta između korisničkog prostora i prostora kernela: OpenVPN šifrira promet i komunicira sa vanjskim svijetom u korisničkom kontekstu, a samo rutiranje se događa u kontekstu kernela. Operativni sistem mora stalno da se prebacuje naprijed-nazad za svaki primljeni ili preneseni paket, a ova operacija je spora. Ovaj problem je inherentan svim VPN aplikacijama koje rade preko TUN/TAP drajvera i ne može se reći da je problem male brzine uzrokovan lošom OpenVPN optimizacijom (iako, naravno, postoje mjesta koja treba preraditi). Ni jedan VPN klijent korisničkog prostora ne pruža čak ni gigabit sa onemogućenom enkripcijom na mom laptopu, a kamoli sistemima sa slabim procesorom.

Orange PiOne

Orange Pi One sa jednom pločicom iz Xunlonga je trenutno najbolja ponuda u pogledu omjera performansi i cijene. Za 9.99 dolara* dobijate solidan četvorojezgarni ARM Cortex-A7 procesor koji radi (stabilno) na 1008 MHz, i očigledno nadmašuje svoje susede po ceni Raspberry Pi Zero i Next Thing CHIP. Tu prestaju prednosti. Kompanija Xunlong ne obraća pažnju na softver svojih ploča, a u vrijeme kada je One puštena u prodaju, nije dala čak ni konfiguracijski fajl ploče, a da ne spominjemo gotove slike. Allwinner, proizvođač SoC-a, također nije posebno osjetljiv na podršku svom proizvodu. Zanimaju ih samo minimalne performanse u Android 4.4.4 OS, što znači da smo primorani da koristimo 3.4 kernel sa Android zakrpama. Srećom, postoje entuzijasti koji sklapaju distribucije, uređuju kernel, pišu kod za podršku pločama u glavnom kernelu, tj. oni zapravo rade posao za proizvođača, čineći ovo sranje prihvatljivim. Za svoje potrebe odabrao sam Armbian distribuciju; ona se često i zgodno ažurira (novi kerneli se instaliraju direktno preko upravitelja paketa, a ne kopiranjem datoteka na posebnu particiju, kao što je obično slučaj sa Allwinnerom), i podržava većinu periferije, za razliku od ostalih.

Ruter

Kako ne bismo opterećivali slab procesor rutera enkripcijom i ubrzali našu VPN vezu, ovaj zadatak možemo prebaciti na ramena moćnijeg Orange Pi procesora tako što ćemo ga na neki način povezati s ruterom. Pada mi na pamet povezivanje bilo preko Etherneta ili USB-a - oba ova standarda podržavaju oba uređaja, ali nisam želio preuzeti postojeće portove. Srećom, postoji izlaz.

GL850G USB hub čip, koji se koristi u ruteru, podržava 4 USB porta, 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 sa velikom potrošnjom struje (na primjer, čvrste diskove) odjednom. Standardno napajanje rutera nije dizajnirano za takvo opterećenje. U svakom slučaju, ovo nam ide u prilog.
Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj ruter
Da biste dobili još jedan USB port, 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 ruter

Međutim, nije dovoljno samo priključiti dva USB uređaja i nadati se da će sve raditi samo od sebe, kao što bi to bilo s Ethernetom. Prvo, trebamo učiniti da jedan od njih radi u USB Client modu, a ne USB Host, i drugo, moramo odlučiti kako će uređaji detektirati jedni druge. Postoji mnogo drajvera za takozvane USB gadgete (nazvane po podsistemu jezgre Linuxa), koji vam omogućavaju da emulirate različite vrste USB uređaja: mrežni adapter, audio karticu, tastaturu i miš, fleš disk, kameru, konzolu preko serijskog luka. Budući da će naš uređaj raditi s mrežom, emulacija Ethernet adaptera je najbolja za nas.

Postoje tri Ethernet-over-USB standarda:

  • Udaljeni NDIS (RNDIS). Zastarjeli standard iz Microsofta, koji se prvenstveno koristi tokom Windows XP-a.
  • Ethernet kontrolni model (ECM). Jednostavan standard koji inkapsulira Ethernet okvire unutar USB paketa. Odlično za žičane modeme sa USB vezom, gdje je zgodno prenositi okvire bez obrade, ali zbog svoje jednostavnosti i ograničenja USB magistrale nije baš brz.
  • Model Ethernet emulacije (EEM). Pametniji protokol koji uzima u obzir USB ograničenja i optimalno agregira više okvira u jedan, čime se povećava propusnost.
  • Model mrežne kontrole (NCM). Najnoviji protokol. Ima prednosti EEM-a i dodatno optimizira iskustvo sa autobusom.

Da bi bilo koji od ovih protokola radio 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 kernela, normalno radi samo Android Gadget - kod koji implementira komunikaciju sa adb-om, izvozi uređaj preko MTP protokola i emulira fleš disk na Android uređajima. Sam Android Gadget takođe podržava RNDIS protokol, ali je pokvaren u Allwinner kernelu. Ako pokušate kompajlirati kernel s bilo kojim drugim USB gadgetom, uređaj se jednostavno neće pojaviti na sistemu, bez obzira što radite.
Da biste riješili problem, na prijateljski način, morate pronaći mjesto gdje je USB kontroler inicijaliziran 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 forsira USB klijentski način, omogućavajući vam da koristite obične USB gadgete iz Linuxa.
Sada biste trebali ponovo izgraditi kernel sa ovom zakrpom i potrebnim gadgetom. Izabrao sam EEM jer... Prema rezultatima testiranja, pokazalo se da je produktivniji od NCM-a.
Armbian tim pruža vrlo jednostavan i praktičan sistem montaže za sve podržane ploče u distribuciji. Samo ga preuzmite, ubacite našu zakrpu userpatches/kernel/sun8i-default/otg.patch, uredi malo compile.sh i odaberite željeni gadžet:

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

Kernel će biti preveden u deb paket, koji neće biti teško instalirati na ploču putem dpkg.
Ostaje samo da povežemo ploču preko USB-a i konfigurišemo naš novi mrežni adapter da prima adresu preko 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'

MAC adresu je bolje postaviti ručno, jer... biće nasumično svaki put kada se uređaj ponovo pokrene, što je nezgodno i problematično.
Povezujemo MicroUSB kabel na OTG konektor, spajamo napajanje iz rutera (može se napajati na pinove 2 i 3 češlja, a ne samo na konektor za napajanje).

Ostaje samo da konfigurišete ruter. Dovoljno je instalirati paket sa EEM drajverom i dodati naš novi USB mrežni uređaj na most lokalne firewall zone:

opkg install kmod-usb-net-cdc-eem

Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj ruter
Da biste sav promet usmjerili na VPN tunel, trebate ili dodati SNAT pravilo na IP adresu ploče na strani rutera ili distribuirati adresu ploče kao adresu gatewaya putem dnsmasq-a. Ovo posljednje se radi dodavanjem sljedećeg reda 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 da unesete adresu rutera u mrežne postavke na samoj ploči!

Melaminski sunđer je korišten za izolaciju kontakata ploče od kontakata rutera. Ispalo je nesto ovako:
Ubrzajte OpenVPN za 9.99 USD* ili integrirajte Orange Pi One u svoj ruter

zaključak

Mreža preko USB-a radi iznenađujuće brzo: 100-120 Mb/s, očekivao sam manje. OpenVPN prolazi kroz oko 70 Mb/s šifrovanog saobraćaja, što takođe nije mnogo, ali dovoljno za moje potrebe. Poklopac glodala se ne zatvara čvrsto, ostavljajući mali razmak. Esteti mogu ukloniti Ethernet i USB Host konektore sa ploče, što će omogućiti da se poklopac potpuno zatvori i da ostane malo prostora.
Bolje je ne baviti se takvom pornografijom i kupiti Turris Omnia.

izvor: www.habr.com

Dodajte komentar