Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem

Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem

Niektórzy z nas nie korzystają z Internetu bez VPN z tego czy innego powodu: ktoś potrzebuje dedykowanego adresu IP, a łatwiej i taniej jest kupić VPS z dwoma adresami IP niż kupować adres od dostawcy, ktoś chce uzyskać dostęp do wszystkich stron internetowych i to nie tylko te dozwolone na terytorium Federacji Rosyjskiej, inne potrzebują protokołu IPv6, ale dostawca go nie zapewnia...
Najczęściej połączenie VPN nawiązywane jest na samym urządzeniu, które jest w danym momencie używane, co ma sens, jeśli masz tylko jeden komputer i jeden telefon i rzadko z nich korzystasz w tym samym czasie. Jeśli w Twojej sieci domowej znajduje się wiele urządzeń lub np. są takie, na których nie można skonfigurować VPN, wygodniej byłoby utworzyć tunel bezpośrednio na routerze domowym, aby nie myśleć o konfigurowaniu każdego urządzenia z osobna .

Jeśli kiedykolwiek instalowałeś OpenVPN na swoim routerze, prawdopodobnie byłeś niemile zaskoczony szybkością jego działania. SoC nawet tanich routerów bez problemu radzą sobie z ruchem około gigabitowym, ze względu na przeniesienie funkcji routingu i NAT do osobnego chipa przeznaczonego wyłącznie do tego zadania, a główne procesory takich routerów są dość słabe, ponieważ Praktycznie nie ma na nich żadnego obciążenia. Kompromis ten pozwala osiągnąć dużą prędkość routera i znacznie obniżyć cenę gotowego urządzenia - routery z wydajnymi procesorami kosztują kilkakrotnie więcej i pozycjonowane są nie tylko jako pudełko do dystrybucji Internetu, ale także jako NAS, torrent downloader i domowy system multimedialny.

Mojego routera TP-Link TL-WDR4300 nie można nazwać nowym - model pojawił się w połowie 2012 roku i posiada procesor o architekturze MIPS560 32Kc 74 MHz, którego moc wystarcza jedynie na 20-23 Mb/s szyfrowanego ruchu przez OpenVPN, co jest standardowe. Szybkość współczesnego Internetu domowego jest dość niska.
Jak możemy zwiększyć prędkość zaszyfrowanego tunelu? Mój router jest całkiem funkcjonalny, obsługuje 3x3 MIMO i ogólnie działa dobrze, nie chciałbym go zmieniać.
Ponieważ obecnie panuje zwyczaj tworzenia 10-megabajtowych stron internetowych, pisanie aplikacji desktopowych w node.js i pakowanie ich do 100-megabajtowego pliku, zwiększanie mocy obliczeniowej zamiast optymalizacji, zrobimy coś strasznego - przeniesiemy połączenie VPN do wydajny jednopłytkowy „komputer” Orange Pi One, który zainstalujemy w obudowie routera bez zajmowania istniejących portów sieciowych i USB, za jedyne 9.99 USD*!
* + dostawa, + podatki, + za piwo, + MicroSD.

OpenVPN

Procesora routera nie można nazwać całkowicie słabym - potrafi szyfrować i hashować dane przy użyciu algorytmu AES-128-CBC-SHA1 z prędkością 50 Mb/s, czyli zauważalnie szybciej niż przy pracy OpenVPN i nowoczesnym strumieniu CHACHA20 szyfr z hashem POLY1305 osiąga nawet 130 megabitów na sekundę! Dlaczego prędkość tunelu VPN jest tak niska? Chodzi o przełączanie kontekstu między przestrzenią użytkownika a przestrzenią jądra: OpenVPN szyfruje ruch i komunikuje się ze światem zewnętrznym w kontekście użytkownika, a sam routing odbywa się w kontekście jądra. System operacyjny musi stale przełączać się w tę i z powrotem po każdym odebranym lub przesłanym pakiecie, a ta operacja jest powolna. Ten problem jest nieodłącznym elementem wszystkich aplikacji VPN działających poprzez sterownik TUN/TAP i nie można powiedzieć, że problem niskiej prędkości jest spowodowany słabą optymalizacją OpenVPN (choć oczywiście są miejsca, które wymagają przeróbki). Żaden klient VPN w przestrzeni użytkownika nie zapewnia nawet gigabitu przy wyłączonym szyfrowaniu na moim laptopie, nie mówiąc już o systemach ze słabym procesorem.

Pomarańczowy Pi One

Jednopłytkowy Orange Pi One firmy Xunlong to obecnie najlepsza oferta pod względem stosunku wydajności do ceny. Za 9.99 USD* otrzymujesz solidny czterordzeniowy procesor ARM Cortex-A7 pracujący (stabilnie) z częstotliwością 1008 MHz i wyraźnie przewyższający swoich cenowych sąsiadów, Raspberry Pi Zero i Next Thing CHIP. Na tym kończą się zalety. Firma Xunlong przywiązuje dokładnie zerową uwagę do oprogramowania swoich płytek, a w momencie wypuszczenia One do sprzedaży nie udostępniła nawet pliku konfiguracyjnego płytki, nie mówiąc już o gotowych obrazkach. Allwinner, producent SoC, również nie jest szczególnie wyczulony na wspieranie swojego produktu. Interesuje ich jedynie minimalna wydajność w systemie Android 4.4.4, co oznacza, że ​​jesteśmy zmuszeni używać jądra 3.4 z poprawkami do Androida. Na szczęście są pasjonaci, którzy montują dystrybucje, edytują jądro, piszą kod do obsługi płytek w jądrze głównym, czyli tzw. faktycznie wykonują pracę dla producenta, dzięki czemu to badziewie działa w akceptowalny sposób. Na moje potrzeby wybrałem dystrybucję Armbian, jest ona często i wygodnie aktualizowana (nowe jądra instaluje się bezpośrednio przez menedżera pakietów, a nie poprzez kopiowanie plików na specjalną partycję, jak to zwykle ma miejsce w przypadku Allwinnera) i obsługuje większość urządzenia peryferyjne, w odróżnieniu od pozostałych.

Routera

Aby nie obciążać szyfrowaniem słabego procesora routera i przyspieszyć nasze połączenie VPN, możemy przenieść to zadanie na barki mocniejszego procesora Orange Pi, podłączając go w jakiś sposób do routera. Przychodzi mi na myśl połączenie albo przez Ethernet, albo przez USB – oba te standardy są obsługiwane przez oba urządzenia, jednak nie chciałem zajmować istniejących portów. Na szczęście jest wyjście.

Zastosowany w routerze chip koncentratora USB GL850G obsługuje 4 porty USB, z czego dwa nie są okablowane. Nie jest jasne, dlaczego producent ich nie wylutował, jak sądzę, aby uniemożliwić użytkownikom podłączenie 4 urządzeń o dużym poborze prądu (np. Dysków twardych) na raz. Standardowy zasilacz routera nie jest przeznaczony do takiego obciążenia. W każdym razie jest to na naszą korzyść.
Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem
Aby otrzymać kolejny port USB wystarczy przylutować dwa przewody do pinów 8(D-) i 9(D+) lub 11(D-) i 12(D+).

Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem

Jednak nie wystarczy po prostu podłączyć dwa urządzenia USB i mieć nadzieję, że wszystko będzie działać samoczynnie, tak jak miałoby to miejsce w przypadku Ethernetu. Po pierwsze, musimy sprawić, aby jedno z nich działało w trybie Klienta USB, a nie USB Host, a po drugie, musimy zdecydować, w jaki sposób urządzenia będą się wykrywać. Istnieje wiele sterowników dla tzw. gadżetów USB (nazwanych na cześć podsystemu jądra Linuksa), które pozwalają emulować różnego rodzaju urządzenia USB: kartę sieciową, kartę dźwiękową, klawiaturę i mysz, pendrive, kamerę, konsolę poprzez port szeregowy Port. Ponieważ nasze urządzenie będzie współpracować z siecią, najlepsza dla nas będzie emulacja adaptera Ethernet.

Istnieją trzy standardy Ethernet-over-USB:

  • Zdalny NDIS (RNDIS). Przestarzały standard firmy Microsoft, używany głównie w systemie Windows XP.
  • Model sterowania Ethernetem (ECM). Prosty standard, który hermetyzuje ramki Ethernet w pakietach USB. Świetnie nadaje się do modemów przewodowych z łączem USB, gdzie wygodnie jest przesyłać ramki bez przetwarzania, ale ze względu na prostotę i ograniczenia magistrali USB nie jest to zbyt szybkie.
  • Model emulacji Ethernetu (EEM). Inteligentniejszy protokół, który uwzględnia ograniczenia USB i optymalnie agreguje wiele ramek w jedną, zwiększając w ten sposób przepustowość.
  • Model kontroli sieci (NCM). Najnowszy protokół. Ma zalety EEM i dodatkowo optymalizuje obsługę autobusu.

Aby którykolwiek z tych protokołów działał na naszej płycie, jak zawsze, będziemy musieli napotkać pewne trudności. W związku z tym, że Allwinnera interesują tylko części jądra Androida, normalnie działa jedynie Android Gadget - kod realizujący komunikację z adb, eksport urządzenia poprzez protokół MTP oraz emulację pendrive'a na urządzeniach z Androidem. Sam Android Gadget również obsługuje protokół RNDIS, ale jest on uszkodzony w jądrze Allwinnera. Jeśli spróbujesz skompilować jądro z jakimkolwiek innym gadżetem USB, urządzenie po prostu nie pojawi się w systemie, niezależnie od tego, co zrobisz.
Aby rozwiązać problem w sposób polubowny, należy znaleźć miejsce inicjalizacji kontrolera USB w zmodyfikowanym przez programistów kodzie gadżetu Android.c Android.c, ale jest też sposób na wykonanie przynajmniej emulacji Ethernetu Praca 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;

Ta poprawka wymusza tryb klienta USB, umożliwiając korzystanie ze zwykłych gadżetów USB z systemu Linux.
Teraz powinieneś odbudować jądro za pomocą tej łatki i niezbędnego gadżetu. Wybrałem EEM, ponieważ... Według wyników testów okazał się bardziej produktywny niż NCM.
Zespół Armbian zapewnia bardzo prosty i wygodny system montażu dla wszystkich obsługiwanych płyt w dystrybucji. Wystarczy go pobrać, zainstalować naszą łatkę userpatches/kernel/sun8i-default/otg.patch, edytuj trochę compile.sh i wybierz wymagany gadżet:

Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem

Jądro zostanie skompilowane do pakietu deb, który nie będzie trudny do zainstalowania na płycie dpkg.
Pozostaje tylko podłączyć płytkę przez USB i skonfigurować naszą nową kartę sieciową tak, aby otrzymywała adres przez DHCP. Aby to zrobić, musisz dodać coś takiego jak poniższe /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'

Lepiej ustawić adres MAC ręcznie, bo... będzie losowy przy każdym ponownym uruchomieniu urządzenia, co jest niewygodne i kłopotliwe.
Kabel MicroUSB podłączamy do złącza OTG, podłączamy zasilanie z routera (można je doprowadzić do pinów 2 i 3 grzebienia, a nie tylko do złącza zasilania).

Pozostaje tylko skonfigurować router. Wystarczy zainstalować pakiet ze sterownikiem EEM i dodać nasze nowe urządzenie sieciowe USB do mostka strefy lokalnego firewalla:

opkg install kmod-usb-net-cdc-eem

Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem
Aby skierować cały ruch do tunelu VPN, musisz albo dodać regułę SNAT do adresu IP płyty po stronie routera, albo rozpowszechnić adres płyty jako adres bramy przez dnsmasq. To drugie można wykonać, dodając następujący wiersz do /etc/dnsmasq.conf:

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

gdzie 192.168.1.100 — Adres IP Twojej tablicy. Nie zapomnij wpisać adresu routera w ustawieniach sieciowych na samej płycie!

Do odizolowania styków płytki od styków routera zastosowano gąbkę melaminową. Wyszło coś takiego:
Przyspiesz OpenVPN za 9.99 USD* lub zintegruj Orange Pi One ze swoim routerem

wniosek

Sieć przez USB działa zaskakująco szybko: 100-120 Mb/s, spodziewałem się mniej. OpenVPN przepuszcza około 70 Mb/s zaszyfrowanego ruchu, co też nie jest zbyt dużą wartością, ale na moje potrzeby wystarczy. Pokrywa routera nie zamyka się szczelnie, pozostawiając niewielką szczelinę. Estetycy mogą wyjąć złącza Ethernet i USB Host z płytki, co umożliwi całkowite zamknięcie pokrywy i pozostawienie jeszcze trochę wolnego miejsca.
Lepiej nie angażować się w taką pornografię i kupować Turris Omnia.

Źródło: www.habr.com

Dodaj komentarz