Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru

Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru

Někteří z nás z toho či onoho důvodu nepoužívají internet bez VPN: někdo potřebuje vyhrazenou IP a je jednodušší a levnější koupit VPS se dvěma IP než kupovat adresu od ISP, někdo chce mít přístup ke všem webům , a to nejen povoleno na území Ruské federace, třetí potřebuje IPv6 a poskytovatel jej neposkytuje ...
Nejčastěji se na samotném zařízení naváže připojení VPN, které se používá v určitou chvíli, což je docela opodstatněné, pokud máte pouze jeden počítač a jeden telefon a používáte je jen zřídka současně. Pokud je ve vaší domácí síti mnoho zařízení, nebo například taková, na kterých nelze nakonfigurovat VPN, bylo by výhodnější nastavit tunel přímo na vašem domácím routeru, abyste nemuseli přemýšlet o konfiguraci každého zařízení zvlášť .

Pokud jste někdy na svůj router instalovali OpenVPN, pravděpodobně vás jeho rychlost nemile překvapila. SoC i levných routerů procházejí kolem gigabitového provozu samy bez problémů, kvůli přenosu funkcí směrování a NAT na samostatný čip určený výhradně pro tento úkol a hlavní procesory takových routerů jsou spíše slabé, tk. Není na nich prakticky žádná zátěž. Takový kompromis vám umožní dosáhnout vysoké rychlosti routeru a výrazně snížit cenu hotového zařízení - routery s výkonnými procesory jsou několikanásobně dražší a jsou umístěny nejen jako internetový distribuční box, ale také jako NAS, torrent downloader a domácí multimediální systém.

Můj router, TP-Link TL-WDR4300, nelze nazvat novým - model se objevil v polovině roku 2012 a má 560 MHz procesor architektury MIPS32 74Kc, jehož výkon stačí pouze na 20-23 Mb / s šifrovaný provoz přes OpenVPN, což je podle standardů rychlost moderního domácího internetu docela dost.
Jak bychom zvýšili rychlost šifrovaného tunelu? Můj router je docela funkční, podporuje 3×3 MIMO a celkově funguje dobře, měnit bych ho nechtěl.
Vzhledem k tomu, že je dnes zvykem dělat 10 MB webové stránky, psát desktopové aplikace v node.js a sbalit je do 100 MB souboru, zvýšit výpočetní výkon místo optimalizace, uděláme něco hrozného – VPN připojení posuneme na produktivní jednodeskový „počítač“ Orange Pi One, který instalujeme do pouzdra routeru, aniž bychom zabírali stávající síťové a USB porty, pouze za 9.99 $*!
* + doprava, + daně, + za pivo, + MicroSD.

OpenVPN

Procesor routeru nelze nazvat úplně slabým – je schopen šifrovat a hashovat data pomocí algoritmu AES-128-CBC-SHA1 rychlostí 50 Mb/s, což je znatelně rychleji, než jak funguje OpenVPN, a moderní Streamová šifra CHACHA20 s hashem POLY1305 dokonce vyvíjí 130 megabitů za sekundu! Proč je rychlost tunelu VPN tak pomalá? Je to všechno o přepínání kontextu mezi uživatelským prostorem a prostorem jádra: OpenVPN šifruje provoz a komunikuje s vnějším světem v uživatelském kontextu a samotné směrování probíhá v kontextu jádra. Operační systém se musí neustále přepínat tam a zpět, pro každý přijatý nebo vyslaný paket, a tato operace není rychlá. Tento problém je vlastní všem VPN aplikacím běžícím přes ovladač TUN / TAP a nelze říci, že by problém s nízkou rychlostí byl způsoben špatnou optimalizací OpenVPN (i když samozřejmě existují místa, která je třeba předělat). Ani jeden klient VPN v uživatelském prostoru nevydá ani gigabit s deaktivovaným šifrováním na mém notebooku, nemluvě o systémech se slabým procesorem.

Oranžový PiOne

Jednodeska Orange Pi One od Xunlongu je v současnosti nejlepší výkon/cena. Za 9.99 $* získáte solidní čtyřjádrový procesor ARM Cortex-A7 běžící (stabilně) na 1008 MHz, který v dané cenové relaci jasně překonává Raspberry Pi Zero a Next Thing CHIP. Tady plusy končí. Xunlong věnuje softwaru svých desek přesně nulovou pozornost a v době uvedení One neposkytoval k prodeji ani konfigurační soubor desky, o hotových obrázcích nemluvě. Allwinner, výrobce SoC, také není nijak zvlášť uctivý k podpoře svého produktu. Zajímá je pouze minimální výkon v Androidu 4.4.4, což znamená, že jsme nuceni používat jádro verze 3.4 s Android záplatami. Naštěstí existují nadšenci, kteří staví distribuce, upravují jádro, píší kód pro podporu desek v jádře hlavní řady, tzn. ve skutečnosti dělat práci pro výrobce, takže tato práce je přijatelná. Pro své účely jsem zvolil distribuci Armbian, je často a pohodlně aktualizována (nová jádra se instalují přímo přes správce balíčků, a ne kopírováním souborů na speciální oddíl, jak tomu bývá u Allwinneru) a podporuje většinu periferií, na rozdíl od ostatních.

Směrovač

Abychom nezatížili slabý procesor routeru šifrováním a zrychlili naše VPN připojení, můžeme tento úkol přesunout na výkonnější procesor Orange Pi tak, že jej nějakým způsobem připojíme k routeru. Napadá mě buď ethernetové nebo USB připojení – oba tyto standardy podporují obě zařízení, nechtěl jsem ale zabírat stávající porty. Naštěstí existuje cesta ven.

Čip rozbočovače USB GL850G použitý v routeru podporuje 4 porty USB, z nichž dva nejsou připájeny. Není jasné, proč je výrobce neodpájel, předpokládám, že proto, aby uživatelé nemohli připojit 4 zařízení s velkým proudovým odběrem (například pevné disky) najednou. Běžné napájení routeru není dimenzováno na takovou zátěž. Ať tak či onak, je to v náš prospěch.
Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru
Pro získání dalšího USB portu stačí připájet dva vodiče na 8(D-) a 9(D+) nebo 11(D-) a 12(D+) piny.

Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru

Nestačí však jednoduše připojit dvě USB zařízení a doufat, že vše funguje samo, jako by tomu bylo u Ethernetu. Za prvé, musíme zajistit, aby jedno z nich fungovalo v režimu USB Client, a ne USB Host, a zadruhé se musíme rozhodnout, jak se budou zařízení navzájem určovat. Existuje mnoho ovladačů pro takzvané USB Gadgets (podle názvu subsystému linuxového jádra), které umožňují emulovat různé typy USB zařízení: síťový adaptér, zvuková karta, klávesnice a myš, flash disk, kamera, konzole přes sériové rozhraní přístav. Protože naše zařízení bude pracovat se sítí, je pro nás nejvhodnější emulace ethernetového adaptéru.

Existují tři standardy Ethernet-over-USB:

  • Vzdálený NDIS (RNDIS). Zastaralý standard od Microsoftu, používaný především v dobách Windows XP.
  • Ethernet Control Model (ECM). Jednoduchý standard, který zapouzdřuje ethernetové rámce do paketů USB. Skvělé pro drátové modemy s USB připojením, kde je pohodlné přenášet rámce bez zpracování, ale vzhledem k jednoduchosti a omezením USB sběrnice to není moc rychlé.
  • Ethernetový emulační model (EEM). Chytřejší protokol, který zohledňuje omezení USB a optimálně agreguje více rámců do jednoho, čímž zvyšuje propustnost.
  • Model řízení sítě (NCM). Nejnovější protokol. Má výhody EEM a dále optimalizuje manipulaci s autobusem.

Aby některý z těchto protokolů na naší desce fungoval, jako vždy, budeme muset čelit určitým potížím. Vzhledem k tomu, že Allwinner se zajímá pouze o Android části jádra, normálně funguje pouze Android Gadget - kód, který implementuje adb komunikaci, export zařízení přes MTP protokol a emulaci flash disku na Android zařízeních. Samotný Android Gadget také podporuje protokol RNDIS, ten je však v jádře Allwinner rozbitý. Pokud se pokusíte zkompilovat jádro pomocí jakéhokoli jiného USB gadgetu, zařízení se jednoduše nezobrazí v systému, ať uděláte, co uděláte.
Chcete-li problém vyřešit, v dobrém slova smyslu, musíte najít místo pro inicializaci řadiče USB v kódu gadgetu Android.c Android upraveného vývojáři, ale existuje také řešení, jak udělat alespoň emulaci Ethernetu přes USB práce:

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

Tato oprava násilně zapíná režim klienta USB, který vám umožňuje používat běžné USB gadgety z Linuxu.
Nyní byste měli znovu sestavit jádro pomocí této opravy a potřebného gadgetu. Vybral jsem si EEM, protože podle výsledků testů se ukázalo, že je produktivnější než NCM.
Armbijský tým zajišťuje velmi jednoduchý a pohodlný montážní systém pro všechny podporované desky v distribuci. Stačí si jej stáhnout, vložit náš patch userpatches/kernel/sun8i-default/otg.patch, mírně upravit compile.sh a vyberte potřebný gadget:

Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru

Jádro bude sestaveno do deb balíčku, který lze snadno nainstalovat na desku pomocí dpkg.
Zbývá pouze připojit desku přes USB a nakonfigurovat náš nový síťový adaptér pro příjem adresy přes DHCP. Chcete-li to provést, musíte přidat něco jako následující /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ší nastavit MAC adresu ručně, protože. bude náhodné pokaždé, když restartujete zařízení, což je nepohodlné a problematické.
MicroUSB kabel zapojíme do OTG konektoru, připojíme napájení z routeru (lze napájet na piny 2 a 3 hřebenu, nejen do napájecího konektoru).

Zbývá nakonfigurovat router. Stačí nainstalovat balíček s ovladačem EEM a přidat naše nové síťové zařízení USB do můstku místní zóny firewallu:

opkg install kmod-usb-net-cdc-eem

Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru
Chcete-li směrovat veškerý provoz do tunelu VPN, musíte buď přidat pravidlo SNAT k IP adrese desky na straně routeru, nebo distribuovat adresu desky jako adresu brány přes dnsmasq. To se provede přidáním následujícího řádku do /etc/dnsmasq.conf:

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

kde 192.168.1.100 - IP adresa vaší desky. Nezapomeňte zaregistrovat adresu routeru v nastavení sítě na samotné desce!

K izolaci kontaktů desky od kontaktů routeru byla použita melaminová houba. Ukázalo se něco takového:
Zrychlete OpenVPN za 9.99 $* nebo vložte Orange Pi One do routeru

Závěr

Síť přes USB je překvapivě rychlá: 100-120 Mb/s, čekal jsem méně. OpenVPN projde přes sebe cca 70 Mb/s šifrovaného provozu, což také není moc, ale pro mé potřeby dostačující. Kryt frézky se těsně nezavírá a zanechává malou mezeru. Estéti mohou z desky odpájet konektory Ethernet a USB Host, což umožní úplné uzavření krytu a ještě zbude místo.
Je lepší se do takové pornografie nepouštět a kupovat Turris Omnia.

Zdroj: www.habr.com

Přidat komentář