Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер

Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер

Някои от нас не използват интернет без VPN по една или друга причина: някой се нуждае от специален IP и е по-лесно и по-евтино да купи VPS с два IP, отколкото да купи адрес от доставчик, някой иска да има достъп до всички уебсайтове , и не само разрешените на територията на Руската федерация, други се нуждаят от IPv6, но доставчикът не го предоставя...
Най-често VPN връзка се установява на самото устройство, което се използва в определен момент, което има смисъл, ако имате само един компютър и един телефон и рядко ги използвате едновременно. Ако има много устройства във вашата домашна мрежа или например има такива, на които VPN не може да бъде конфигуриран, би било по-удобно да създадете тунел директно на домашния рутер, за да не мислите за настройка на всяко устройство поотделно .

Ако някога сте инсталирали OpenVPN на вашия рутер, вероятно сте били неприятно изненадани от това колко бързо работи. SoC дори на евтини рутери пропускат около гигабитов трафик без никакви проблеми, поради прехвърлянето на функциите за маршрутизиране и NAT към отделен чип, предназначен изключително за тази задача, а основните процесори на такива рутери са доста слаби, т.к. Практически няма натоварване върху тях. Този компромис ви позволява да постигнете висока скорост на рутера и значително да намалите цената на готовото устройство - рутерите с мощни процесори струват няколко пъти повече и се позиционират не само като кутия за разпространение на интернет, но и като NAS, торент програма за изтегляне и домашна мултимедийна система.

Моят рутер TP-Link TL-WDR4300 не може да се нарече нов - моделът се появи в средата на 2012 г. и има процесор с архитектура 560 MHz MIPS32 74Kc, чиято мощност е достатъчна само за 20-23 Mb/s криптиран трафик чрез OpenVPN, което е по стандартите Скоростта на съвременния домашен интернет е доста ниска.
Как можем да увеличим скоростта на криптиран тунел? Моят рутер е доста функционален, поддържа 3x3 MIMO и като цяло работи добре, не бих искал да го сменям.
Тъй като вече е обичайно да се правят 10-мегабайтови интернет страници, да се пишат настолни приложения в node.js и да се пакетират във файл от 100 мегабайта, да се увеличи изчислителната мощност вместо оптимизация, ще направим нещо ужасно - ще прехвърлим VPN връзката към продуктивен едноплатков „компютър“ Orange Pi One, който ние ще инсталираме в кутията на рутера, без да заемаме съществуващи мрежови и USB портове, само за $9.99*!
* + доставка, + такси, + за бира, + MicroSD.

OpenVPN

Процесорът на рутера не може да се нарече напълно слаб - той е в състояние да криптира и хешира данни с помощта на алгоритъма AES-128-CBC-SHA1 със скорост от 50 Mb/s, което е значително по-бързо от начина, по който работи OpenVPN, и модерния поток CHACHA20 шифър с хеш POLY1305 дори достига 130 мегабита в секунда! Защо скоростта на VPN тунела е толкова ниска? Всичко е свързано с превключването на контекста между потребителското пространство и пространството на ядрото: OpenVPN криптира трафика и комуникира с външния свят в потребителския контекст, а самото маршрутизиране се извършва в контекста на ядрото. Операционната система трябва постоянно да превключва напред-назад за всеки получен или предаден пакет и тази операция е бавна. Този проблем е присъщ на всички VPN приложения, работещи през TUN/TAP драйвер, и не може да се каже, че проблемът с ниската скорост е причинен от лоша OpenVPN оптимизация (въпреки че, разбира се, има места, които трябва да бъдат преработени). Нито един потребителски VPN клиент не предоставя дори гигабит с деактивирано криптиране на моя лаптоп, да не говорим за системи със слаб процесор.

Orange PiOne

Едноплатковият Orange Pi One от Xunlong е най-доброто предложение като съотношение производителност/цена в момента. За $9.99* получавате солиден четириядрен процесор ARM Cortex-A7, работещ (стабилно) на 1008 MHz и ясно превъзхожда своите съседи в ценова точка Raspberry Pi Zero и Next Thing CHIP. Тук предимствата свършват. Компанията Xunlong не обръща абсолютно никакво внимание на софтуера на своите платки и по времето, когато One беше пусната в продажба, тя дори не предостави конфигурационен файл на платката, да не говорим за готови изображения. Allwinner, производител на SoC, също не е особено чувствителен към поддръжката на своя продукт. Те се интересуват само от минимална производителност в операционната система Android 4.4.4, което означава, че сме принудени да използваме ядрото 3.4 с Android пачове. За щастие има ентусиасти, които сглобяват дистрибуции, редактират ядрото, пишат код за поддръжка на платки в основното ядро, т.е. те всъщност вършат работата за производителя, правейки тези глупости да работят приемливо. За моите цели избрах дистрибуцията на Armbian; тя се актуализира често и удобно (новите ядра се инсталират директно през мениджъра на пакети, а не чрез копиране на файлове в специален дял, както обикновено се случва с Allwinner) и поддържа повечето периферни устройства, за разлика от останалите.

рутер

За да не натоварваме слабия процесор на рутера с криптиране и да ускорим нашата VPN връзка, можем да прехвърлим тази задача на раменете на по-мощен процесор Orange Pi, като го свържем по някакъв начин с рутера. Свързването чрез Ethernet или USB идва на ум - и двата стандарта се поддържат от двете устройства, но не исках да заемам съществуващи портове. За щастие има изход.

Чипът GL850G USB hub, който се използва в рутера, поддържа 4 USB порта, два от които не са жични. Не е ясно защо производителят не ги е разпоил, предполагам, за да попречи на потребителите да свързват едновременно 4 устройства с висока консумация на ток (например твърди дискове). Стандартното захранване на рутера не е предназначено за такова натоварване. Във всеки случай това е в наша полза.
Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер
За да получите друг USB порт, просто трябва да запоите два проводника към щифтове 8(D-) и 9(D+) или 11(D-) и 12(D+).

Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер

Не е достатъчно обаче просто да включите две USB устройства и да се надявате, че всичко ще работи от само себе си, както би било с Ethernet. Първо, трябва да накараме едно от тях да работи в режим USB клиент, а не USB хост, и второ, трябва да решим как устройствата ще се откриват взаимно. Има много драйвери за така наречените USB Gadgets (наречени на подсистемата на ядрото на Linux), които ви позволяват да емулирате различни видове USB устройства: мрежов адаптер, аудио карта, клавиатура и мишка, флаш устройство, камера, конзола чрез сериен порт. Тъй като нашето устройство ще работи с мрежата, емулирането на Ethernet адаптер е най-доброто за нас.

Има три стандарта за Ethernet през USB:

  • Отдалечен NDIS (RNDIS). Остарял стандарт от Microsoft, използван предимно по време на Windows XP.
  • Ethernet контролен модел (ECM). Прост стандарт, който капсулира Ethernet рамки в USB пакети. Страхотен за кабелни модеми с USB връзка, където е удобно да прехвърляте кадри без обработка, но поради своята простота и ограниченията на USB шината не е много бърз.
  • Модел на емулация на Ethernet (EEM). По-интелигентен протокол, който отчита USB ограниченията и оптимално агрегира множество рамки в една, като по този начин увеличава пропускателната способност.
  • Модел за управление на мрежата (NCM). Най-новият протокол. Има предимствата на EEM и допълнително оптимизира изживяването с автобус.

За да накараме някой от тези протоколи да работи на нашата дъска, както винаги, ще трябва да срещнем някои трудности. Поради факта, че Allwinner се интересува само от Android частите на ядрото, само Android Gadget работи нормално - кодът, който реализира комуникация с adb, експортиране на устройството през MTP протокола и емулиране на флашка на Android устройства. Самият Android Gadget също поддържа протокола RNDIS, но той е повреден в ядрото на Allwinner. Ако се опитате да компилирате ядрото с друга USB притурка, устройството просто няма да се появи в системата, независимо какво правите.
За да разрешите проблема по приятелски начин, трябва да намерите мястото, където USB контролерът е инициализиран в кода на Android притурката android.c, модифициран от разработчиците, но има и заобиколно решение, за да направите поне Ethernet емулация 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;

Тази корекция активира USB клиентски режим, което ви позволява да използвате обикновени USB притурки от Linux.
Сега трябва да възстановите ядрото с тази корекция и необходимата притурка. Избрах EEM, защото... Според резултатите от теста се оказа по-продуктивен от NCM.
Отборът на Армбиан осигурява много проста и удобна система за сглобяване за всички поддържани платки в дистрибуцията. Просто го изтеглете, поставете нашата корекция userpatches/kernel/sun8i-default/otg.patch, редактирайте малко compile.sh и изберете необходимата притурка:

Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер

Ядрото ще бъде компилирано в deb пакет, който няма да е трудно да се инсталира на платката чрез dpkg.
Остава само да свържем платката през USB и да конфигурираме новия ни мрежов адаптер да получава адрес през DHCP. За да направите това, трябва да добавите нещо като следното към /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 адреса ръчно, защото... ще бъде произволно всеки път, когато устройството се рестартира, което е неудобно и обезпокоително.
Свързваме MicroUSB кабела към OTG конектора, свързваме захранването от рутера (може да се подава към щифтове 2 и 3 на гребена, а не само към конектора за захранване).

Остава само да конфигурирате рутера. Достатъчно е да инсталирате пакета с EEM драйвера и да добавите нашето ново USB мрежово устройство към моста на зоната на локалната защитна стена:

opkg install kmod-usb-net-cdc-eem

Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер
За да насочите целия трафик към VPN тунела, трябва или да добавите SNAT правило към IP адреса на платката от страната на рутера, или да разпределите адреса на платката като адрес на шлюз чрез dnsmasq. Последното се прави чрез добавяне на следния ред към /etc/dnsmasq.conf:

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

където 192.168.1.100 — IP адрес на вашата дъска. Не забравяйте да въведете адреса на рутера в мрежовите настройки на самата платка!

Използвана е меламинова гъба за изолиране на контактите на платката от контактите на рутера. Оказа се нещо подобно:
Ускорете OpenVPN за $9.99* или интегрирайте Orange Pi One във вашия рутер

Заключение

Мрежата през USB работи изненадващо бързо: 100-120 Mb/s, очаквах по-малко. OpenVPN пропуска около 70 Mb/s криптиран трафик, което също не е много, но достатъчно за моите нужди. Капакът на рутера не се затваря плътно, оставяйки малка празнина. Естетите могат да премахнат Ethernet и USB Host конекторите от платката, което ще позволи на капака да се затвори напълно и все пак да остане малко място.
По-добре е да не се занимавате с такава порнография и да купувате Turris Omnia.

Източник: www.habr.com

Добавяне на нов коментар