
Niektorí z nás nepoužívajú internet bez VPN z rôznych dôvodov: niekto potrebuje dedikovanú IP adresu a je jednoduchšie a lacnejšie kúpiť VPS s dvoma IP adresami, ako kupovať adresu od poskytovateľa, niekto chce mať prístup na všetky webové stránky, nie len na tie povolené na území SR, iní potrebujú IPv6, ale poskytovateľ to nenabízí...
VPN pripojenie sa najčastejšie nastavuje na samotnom zariadení, ktoré sa používa v danom okamihu, čo je celkom opodstatnené, ak máte len jeden počítač a jeden telefón, a používa ich len zriedka súčasne. Ak však vo vašej domácej sieti existuje množstvo zariadení, alebo napríklad sú také, na ktorých nie je možné nastaviť VPN, bolo by pohodlnejšie vybudovať tunel priamo na domácom routeri, aby ste sa nemuseli zaoberať nastavením každého zariadenia osobitne.
Ak ste niekedy inštalovali OpenVPN na svoj router, pravdepodobne ste boli nepríjemne prekvapení rýchlosťou jeho fungovania. SoC zariadenia aj lacných routerov bez problémov zvládajú blízkosť gigabitného prenosu, vďaka preneseniu funkcií smerovania a NAT na samostatný čip, ktorý je určený výhradne na vykonávanie tejto úlohy, zatiaľ čo hlavné procesory takýchto routerov sú celkom slabé, keďže na ne nie je takmer žiadne zaťaženie. Takýto kompromis umožňuje dosiahnuť vysokú rýchlosť pre router a výrazne znížiť cenu hotového zariadenia – routery s výkonnými procesormi stoja niekoľkokrát viac a sú už pozicionované nie iba ako krabička na rozdeľovanie internetu, ale aj ako NAS, torrentový klient a domáci multimediálny systém.
Môj router, TP-Link TL-WDR4300, nemožno nazvať novým – model sa objavil v polovici roku 2012, a disponuje 560 MHz procesorom architektúry MIPS32 74Kc, pričom jeho výkon stačí len na 20-23 Mbit/s šifrovaného prenosu cez OpenVPN, čo je pre dnešné rýchlosti domáceho internetu veľmi málo.
Ako by sme mohli zvýšiť rýchlosť šifrovaného tunela? Môj router je celkom funkčný, podporuje 3×3 MIMO a vo všeobecnosti funguje dobre, nechcel by som ho meniť.
V súčasnosti, keď sú obvyklé internetové stránky s veľkosťou 10 megabajtov, písanie desktopových aplikácií na node.js a balenie ich do 100-megabajtového súboru, ako aj zvyšovanie výpočtových výkonov namiesto optimalizácie, vykonáme niečo desivé — prenesieme VPN pripojenie na výkonný jednoplatňový "počítač" Orange Pi One, ktorý nainštalujeme do skrinky routera, pričom nebudeme obsadzovať existujúce sieťové a USB porty, a to všetko za $9.99*!
* + doprava, + dane, + na pivo, + MicroSD.
OpenVPN
Nie je možné nazvať procesor routera úplne slabým — je schopný šifrovať a hashovať dáta pomocou algoritmu AES-128-CBC-SHA1 rýchlosťou 50 Mb/s, čo je oveľa rýchlejšie ako funguje OpenVPN, a moderný prúdený šifrovací algoritmus CHACHA20 s hashom POLY1305 dokonca dosahuje 130 megabitov za sekundu! Prečo je ale rýchlosť VPN tunela taká nízka? Všetko súvisí so prechádzanie medzi priestorom používateľa a jadrom: OpenVPN šifruje prenos a komunikuje so svetom z pohľadu používateľa, zatiaľ čo v kontexte jadra prebieha samotná smerovanie. Operačný systém sa musí neustále prepínať tam a späť na každý prijatý alebo odoslaný paket, a táto operácia nie je rýchla. Tento problém sa týka všetkých VPN aplikácií, ktoré pracujú cez TUN/TAP ovládač, a nemožno povedať, že problém nízkej rýchlosti je spôsobený zlou optimalizáciou OpenVPN (aj keď samozrejme sú miesta, ktoré by mohli byť zlepšené). Žiadny VPN klient z používateľského priestoru nevyprodukuje ani gigabit s vypnutým šifrovaním na mojom notebooku, nieto ešte o systémach so slabým procesorom.
Orange Pi One
Jednoplatník Orange Pi One od spoločnosti Xunlong je aktuálne najvýhodnejšia ponuka z hľadiska výkonu a ceny. Za 9,99 $* získate kvalitný štvormjadrový procesor ARM Cortex-A7, ktorý stabilne pracuje na frekvencii 1008 MHz, a je zjavne výkonnejší ako susedia Raspberry Pi Zero a Next Thing C.H.I.P. v tejto cenovej kategórii. Týmto však klady končia. Spoločnosť Xunlong venovala softvéru svojich platní absolútne nulovú pozornosť, a v čase uvedenia One do predaja neposkytla ani súbor na konfiguráciu platne, nieto ešte hotové obrazy. Allwinner — výrobca SoC — tiež nepodáva veľkú starostlivosť o podporu svojho produktu. Zaujíma ich iba minimálna funkčnosť v OS Android 4.4.4, takže sme nútení použiť jadro verzie 3.4 s Android-patchmi. Našťastie existujú nadšenci, ktorí zbierajú distribúcie, upravujú jadro, píšu kód na podporu platničiek v mainline-jadre, čo de facto robí prácu za výrobcu a núti túto technológiu akceptovateľne fungovať. Pre svoje účely som si zvolil distribúciu Armbian; tá sa často a pohodlne aktualizuje (nové jadrá sa inštalujú priamo cez balíčkový manažér, a nie kopírovaním súborov na špeciálny oddiel, ako to obvykle robí Allwinner), a podporuje väčšinu periférií, na rozdiel od iných.
Router
Aby sme nezaťažovali slabý procesor routera šifrovaním a zrýchlili naše VPN pripojenie, môžeme preniesť túto úlohu na výkonnejší procesor Orange Pi pripojením k routeru akýmkoľvek spôsobom. Napadá ma pripojenie buď cez Ethernet, alebo cez USB — obidva tieto štandardy sú podporované oboma zariadeniami, ale nechceli sme obsadzovať už existujúce porty. Našťastie, existuje spôsob.
Čip USB hubu GL850G, ktorý je použitý v routeri, podporuje prácu 4 USB portov, z ktorých dva nie sú osadené. Nie je jasné, prečo výrobca ich neosadil, predpokladám, aby nedal užívateľom možnosť pripojiť naraz 4 zariadenia s vysokou spotrebou prúdu (napríklad externé disky), keďže vstavaný napájací zdroj routera nie je na takú záťaž určený. V každom prípade, to nám ide na ruku.

Na získanie ďalšieho USB portu stačí pripojiť dva vodiče na 8(D-) a 9(D+) alebo 11(D-) a 12(D+) piny.

Nestačí iba jednoducho pripojiť dve USB zariadenia a dúfať, že všetko bude fungovať samo ako pri Ethernet. Po prvé, musíme jedno z nich nastaviť do režimu USB klient, a nie USB host, a po druhé, musíme sa dohodnúť, ako sa zariadenia budú navzájom identifikovať. Existuje množstvo ovládačov nazývaných USB Gadgets (podľa názvu subsystému Linuxového jadra), ktoré umožňujú emuláciu rôznych typov USB zariadení: sieťový adaptér, zvukovú kartu, klávesnicu a myš, flash disk, fotoaparát, konzolu cez sériový port. Keďže naše zariadenie bude pracovať so sieťou, najlepšie nám vyhovuje emulácia Ethernet adaptéra.
Existujú tri štandardy Ethernet-over-USB:
- Remote NDIS (RNDIS). Zastaralý štandard od Microsoftu, ktorý sa používal prevažne v čase Windows XP.
- Ethernet Control Model (ECM). Jednoduchý štandard, ktorý enkapsuluje Ethernet rámce do USB paketov. Výborne sa hodí pre káblové modemy s USB pripojením, kde je pohodlné prenášať rámce bez spracovania, ale kvôli svojej jednoduchosti a obmedzeniam USB zbernice nefunguje príliš rýchlo.
- Ethernet Emulation Model (EEM). Inteligentnejší protokol, ktorý berie do úvahy obmedzenia USB a optimálne agreguje niekoľko rámcov do jedného, čím zvyšuje priepustnosť.
- Network Control Model (NCM). Najnovší protokol. Má výhody EEM a ešte viac optimalizuje prácu so zbernicou.
Aby sme spustili akýkoľvek z týchto protokolov na našej doske, ako vždy, narazíme na určité ťažkosti. Keďže Allwinner sa zaujíma iba o Android časti jadra, normálne funguje iba Android Gadget — ten kód, ktorý implementuje pripojenie k adb, export zariadenia prostredníctvom protokolu MTP a emuláciu flash disku na Android zariadeniach. Samotný Android Gadget podporuje aj protokol RNDIS, ale v jadre Allwinner je rozbitý. Ak sa pokúsite skompilovať jadro s akýmkoľvek iným USB Gadget, zariadenie sa jednoducho neobjaví v systéme, nech robíte čokoľvek.
Na vyriešenie problému je v podstate potrebné nájsť miesto inicializácie USB kontroléra v modifikovanom kóde Android Gadgets android.c, ale existuje aj obchádzací manéver, aby sme aspoň spustili emuláciu Ethernet cez 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; /* 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;Táto záplata násilne zapína režim USB klienta, čo umožňuje používať bežné USB Gadgety z Linuxu.
Teraz je potrebné prekompilovať jadro s touto záplatou a potrebným gadgetom. Vybral som EEM, pretože podľa výsledkov testov bol výkonnejší ako NCM.
Tím Armbian poskytuje pre všetky podporované dosky v distribúcii. Stačí si ho stiahnuť, umiestniť našu záplatu do userpatches/kernel/sun8i-default/otg.patch, trochu upraviť compile.sh a vybrať potrebný gadget:

Jadro sa skompiluje do deb balíka, ktorý nebude problém nainštalovať na dosku cez dpkg.
Stačí pripojiť dosku cez USB a nastaviť náš nový sieťový adaptér na získanie adresy prostredníctvom DHCP. Na to je potrebné pridať približne toto do /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 lepšie nastaviť ručne, pretože bude náhodná pri každom reštarte zariadenia, čo je nepraktické a nepohodlné.
Pripojíme MicroUSB kábel k OTG konektoru, pripojíme napájanie z routera (môže byť privedené na 2 a 3 piny svorkovnice, nie len na konektor napájania).
Zostáva nastaviť router. Stačí nainštalovať balík s EEM ovládačom a pridať naše nové sieťové USB zariadenie do mosta lokálnej firewall zóny:
opkg install kmod-usb-net-cdc-eem
Aby sme nasmerovali celý prenos do VPN tunelu, je potrebné buď pridať SNAT pravidlo na IP adresu dosky na strane routera, alebo pridelovať IP adresu dosky ako adresu brány prostredníctvom dnsmasq. Posledné sa realizuje pridaním nasledujúcej čiary do /etc/dnsmasq.conf:
dhcp-option = tag:lan, option:router, 192.168.1.100kde 192.168.1.100 — IP adresa vašej dosky. Nezabudnite nastaviť adresu routera v nastaveniach siete na samotnej doske!
Na izoláciu kontaktov dosky od kontaktov routera sa použila melaminová špongia. Vyzeralo to takto:

Záver
Sieť cez USB funguje prekvapivo rýchlo: 100-120 Mb/s, očakával som menej. OpenVPN zvláda približne 70 Mb/s šifrovaného prenosu, čo tiež nie je veľa, ale na moje potreby to stačí. Kryt routera sa nedosadne tesne, čo zanecháva malú medzeru. Estetici môžu odpojiť Ethernet a USB Host konektory z dosky, čo umožní krytu úplne zapadnúť a ešte zostane miesto.
Radšej sa takou pornografiou nezapodievať a radšej si kúpiť .
Zdroj: habr.com
