Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača

Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača

Niektorí z nás nepoužívajú internet bez VPN z jedného alebo druhého dôvodu: niekto potrebuje vyhradenú IP a je jednoduchšie a lacnejšie kúpiť VPS s dvoma IP ako kupovať adresu od poskytovateľa, niekto chce mať prístup ku všetkým webovým stránkam , a nielen tie povolené na území Ruskej federácie, iné potrebujú IPv6, ale poskytovateľ ho neposkytuje...
Najčastejšie sa pripojenie VPN vytvorí na samotnom zariadení, ktoré sa používa v určitom okamihu, čo má zmysel, ak máte iba jeden počítač a jeden telefón a zriedka ich používate súčasne. Ak je vo vašej domácej sieti veľa zariadení, alebo napríklad existujú také, na ktorých nie je možné nakonfigurovať VPN, bolo by vhodnejšie vytvoriť tunel priamo na domácom routeri, aby ste nemuseli premýšľať o nastavovaní každého zariadenia samostatne. .

Ak ste niekedy nainštalovali OpenVPN na váš router, pravdepodobne ste boli nepríjemne prekvapení, ako rýchlo funguje. SoC aj lacných routerov bez problémov prejdú asi gigabitovou prevádzkou, kvôli presunu funkcií smerovania a NAT na samostatný čip určený výhradne na túto úlohu a hlavné procesory takýchto routerov sú dosť slabé, pretože Nie je na nich prakticky žiadna záťaž. Tento kompromis vám umožňuje dosiahnuť vysokú rýchlosť smerovača a výrazne znížiť cenu hotového zariadenia - smerovače s výkonnými procesormi stoja niekoľkonásobne viac a sú umiestnené nielen ako box na distribúciu internetu, ale aj ako NAS, torrent downloader 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 má 560 MHz procesor architektúry MIPS32 74Kc, ktorého výkon stačí len na 20-23 Mb/s šifrovaného prenosu cez OpenVPN, čo je podľa štandardov Rýchlosť moderného domáceho internetu je dosť nízka.
Ako môžeme zvýšiť rýchlosť šifrovaného tunela? Môj router je celkom funkčný, podporuje 3x3 MIMO a vo všeobecnosti funguje dobre, nechcel by som ho meniť.
Keďže je dnes zvykom robiť 10-megabajtové internetové stránky, písať desktopové aplikácie v node.js a baliť ich do 100-megabajtového súboru, namiesto optimalizácie zvyšovať výpočtový výkon, urobíme niečo strašné - VPN pripojenie prenesieme na produktívny jednodoskový „počítač“ Orange Pi One, ktorý nainštalujeme do puzdra smerovača bez zaberania existujúcich sieťových a USB portov, len za 9.99 $*!
* + donáška, + dane, + za pivo, + MicroSD.

OpenVPN

Procesor smerovača nemožno nazvať úplne slabým - je schopný šifrovať a hashovať údaje pomocou algoritmu AES-128-CBC-SHA1 rýchlosťou 50 Mb/s, čo je výrazne rýchlejšie, ako funguje OpenVPN, a moderný stream CHACHA20 šifra s hashom POLY1305 dosahuje dokonca 130 megabitov za sekundu! Prečo je rýchlosť tunela VPN taká nízka? Je to všetko o prepínaní kontextu medzi používateľským priestorom a priestorom jadra: OpenVPN šifruje prevádzku a komunikuje s vonkajším svetom v kontexte používateľa a samotné smerovanie prebieha v kontexte jadra. Operačný systém musí neustále prepínať tam a späť pre každý prijatý alebo odoslaný paket a táto operácia je pomalá. Tento problém je vlastný všetkým VPN aplikáciám bežiacim cez ovládač TUN/TAP a nedá sa povedať, že problém nízkej rýchlosti je spôsobený zlou optimalizáciou OpenVPN (aj keď samozrejme existujú miesta, ktoré je potrebné prepracovať). Ani jeden klient VPN v používateľskom priestore neposkytuje na mojom notebooku ani gigabit so zakázaným šifrovaním, nehovoriac o systémoch so slabým procesorom.

Orange PiOne

Jednodoskový Orange Pi One od Xunlong je momentálne najlepšia ponuka v pomere výkon/cena. Za 9.99 $* získate solídny štvorjadrový procesor ARM Cortex-A7, ktorý beží (stabilne) na frekvencii 1008 4.4.4 MHz a jasne prevyšuje svojich cenových susedov, Raspberry Pi Zero a Next Thing CHIP. Tu výhody končia. Spoločnosť Xunlong venuje softvéru svojich dosiek presne nulovú pozornosť a v čase uvedenia One do predaja neposkytla ani konfiguračný súbor dosky, o hotových obrázkoch ani nehovoriac. Allwinner, výrobca SoC, tiež nie je zvlášť citlivý na podporu svojho produktu. Zaujíma ich iba minimálny výkon v OS Android 3.4, čo znamená, že sme nútení používať jadro XNUMX s opravami Androidu. Našťastie existujú nadšenci, ktorí zostavujú distribúcie, upravujú jadro, píšu kód na podporu dosiek v jadre hlavnej rady, t.j. v skutočnosti robia prácu za výrobcu, vďaka čomu tieto svinstvá fungujú prijateľne. Pre moje účely som si vybral distribúciu Armbian, ktorá sa často a pohodlne aktualizuje (nové jadrá sa inštalujú priamo cez správcu balíkov a nie kopírovaním súborov na špeciálny oddiel, ako je to zvyčajne v prípade Allwinner), a podporuje väčšinu periférií, na rozdiel od ostatných.

router

Aby sme slabý procesor routera nezaťažili šifrovaním a zrýchlili nám VPN pripojenie, môžeme túto úlohu presunúť na plecia výkonnejšieho procesora Orange Pi tak, že ho nejakým spôsobom pripojíme k routeru. Napadá ma pripojenie cez Ethernet alebo USB - oba tieto štandardy podporujú obe zariadenia, ale nechcel som zaberať existujúce porty. Našťastie existuje cesta von.

Čip rozbočovača USB GL850G, ktorý sa používa v smerovači, podporuje 4 porty USB, z ktorých dva nie sú káblové. Nie je jasné, prečo ich výrobca neodpájkoval, predpokladám, aby zabránil používateľom pripojiť 4 zariadenia s vysokou spotrebou prúdu (napríklad pevné disky) naraz. Štandardné napájanie routera nie je určené na takúto záťaž. V každom prípade je to v náš prospech.
Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača
Ak chcete získať ďalší port USB, stačí prispájkovať dva vodiče na kolíky 8 (D-) a 9 (D+) alebo 11 (D-) a 12 (D+).

Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača

Nestačí však jednoducho zapojiť dve USB zariadenia a dúfať, že všetko bude fungovať samo, ako by to bolo pri Ethernete. Po prvé, musíme zabezpečiť, aby jedno z nich fungovalo v režime USB Client a nie USB Host, a po druhé, musíme sa rozhodnúť, ako sa budú zariadenia navzájom rozpoznávať. Existuje mnoho ovládačov pre takzvané USB Gadgets (pomenované podľa subsystému jadra Linuxu), ktoré vám umožňujú emulovať rôzne typy USB zariadení: sieťový adaptér, zvuková karta, klávesnica a myš, flash disk, fotoaparát, konzola cez sériový port. prístav. Keďže naše zariadenie bude pracovať so sieťou, emulácia ethernetového adaptéra je pre nás najlepšia.

Existujú tri štandardy Ethernet-over-USB:

  • Vzdialený NDIS (RNDIS). Zastaraný štandard od spoločnosti Microsoft, používaný predovšetkým počas Windows XP.
  • Ethernet Control Model (ECM). Jednoduchý štandard, ktorý zapuzdruje ethernetové rámce do paketov USB. Skvelé pre káblové modemy s USB pripojením, kde je pohodlné prenášať rámce bez spracovania, ale vzhľadom na jednoduchosť a obmedzenia USB zbernice nie je veľmi rýchly.
  • Ethernetový emulačný model (EEM). Inteligentnejší protokol, ktorý zohľadňuje obmedzenia USB a optimálne agreguje viacero snímok do jedného, ​​čím zvyšuje priepustnosť.
  • Model riadenia siete (NCM). Najnovší protokol. Má výhody EEM a ďalej optimalizuje zážitok z autobusu.

Aby ktorýkoľvek z týchto protokolov fungoval na našej doske, ako vždy, budeme musieť čeliť určitým ťažkostiam. Vzhľadom na to, že Allwinner sa zaujíma len o Android časti jadra, normálne funguje iba Android Gadget – kód, ktorý implementuje komunikáciu s adb, export zariadenia cez protokol MTP a emuláciu flash disku na Android zariadeniach. Samotný Android Gadget tiež podporuje protokol RNDIS, ale v jadre Allwinner je poškodený. Ak sa pokúsite skompilovať jadro pomocou akéhokoľvek iného modulu USB Gadget, zariadenie sa jednoducho nezobrazí v systéme, bez ohľadu na to, čo robíte.
Ak chcete problém vyriešiť priateľským spôsobom, musíte v kóde modulu gadget Android android.c upravenom vývojármi nájsť miesto, kde sa inicializuje ovládač USB, ale existuje aj riešenie, ako vytvoriť aspoň emuláciu Ethernet cez Práca s 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 oprava vynúti režim klienta USB, čo vám umožní používať bežné USB gadgety z Linuxu.
Teraz by ste mali prebudovať jadro pomocou tejto opravy a potrebného modulu gadget. Vybral som si EEM, pretože... Podľa výsledkov testov sa ukázalo, že je produktívnejší ako NCM.
Armbijský tím zabezpečuje veľmi jednoduchý a pohodlný montážny systém pre všetky podporované dosky v distribúcii. Stačí si ho stiahnuť, vložiť náš patch userpatches/kernel/sun8i-default/otg.patch, trochu upraviť compile.sh a vyberte požadovaný modul gadget:

Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača

Jadro bude skompilované do deb balíka, ktorý nebude ťažké nainštalovať na dosku dpkg.
Zostáva len pripojiť dosku cez USB a nakonfigurovať náš nový sieťový adaptér na príjem adresy cez DHCP. Ak to chcete urobiť, musíte pridať niečo ako nasledujúce /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'

Je lepšie nastaviť MAC adresu ručne, pretože... bude to náhodné pri každom reštarte zariadenia, čo je nepohodlné a problematické.
Kábel MicroUSB zapojíme do OTG konektora, pripojíme napájanie z routera (môže byť napájaný na piny 2 a 3 hrebeňa, nielen do napájacieho konektora).

Zostáva iba nakonfigurovať smerovač. Stačí nainštalovať balík s ovládačom EEM a pridať naše nové sieťové zariadenie USB do mostíka lokálnej zóny firewallu:

opkg install kmod-usb-net-cdc-eem

Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača
Ak chcete smerovať všetku komunikáciu do tunela VPN, musíte buď pridať pravidlo SNAT k adrese IP dosky na strane smerovača, alebo distribuovať adresu dosky ako adresu brány cez dnsmasq. To sa vykoná pridaním nasledujúceho riadku do /etc/dnsmasq.conf:

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

kde 192.168.1.100 — IP adresa vašej dosky. Nezabudnite zadať adresu smerovača v nastaveniach siete na samotnej doske!

Na izoláciu kontaktov dosky od kontaktov smerovača bola použitá melamínová špongia. Ukázalo sa niečo takéto:
Zrýchlite OpenVPN za 9.99 $* alebo integrujte Orange Pi One do svojho smerovača

Záver

Sieť cez USB funguje prekvapivo rýchlo: 100-120 Mb/s, čakal som menej. OpenVPN prechádza okolo 70 Mb/s šifrovanej prevádzky, čo tiež nie je veľa, ale pre moje potreby postačuje. Veko smerovača sa nezatvára tesne a ponecháva malú medzeru. Estéti môžu z dosky odstrániť konektory Ethernet a USB Host, čo umožní úplné zatvorenie veka a ešte zostane nejaké miesto.
Je lepšie nezapájať sa do takejto pornografie a nakupovať Turris Omnia.

Zdroj: hab.com

Pridať komentár