Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router

Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router

Ang ilan sa atin ay hindi gumagamit ng Internet nang walang VPN para sa isang kadahilanan o iba pa: ang isang tao ay nangangailangan ng isang nakalaang IP, at ito ay mas madali at mas mura bumili ng isang VPS na may dalawang IP kaysa sa pagbili ng isang address mula sa isang provider, may gustong ma-access ang lahat ng mga website , at hindi lamang sa mga pinapayagan sa teritoryo ng Russian Federation, ang iba ay nangangailangan ng IPv6, ngunit hindi ito ibinibigay ng provider...
Kadalasan, ang isang koneksyon sa VPN ay itinatag sa mismong device na ginagamit sa isang tiyak na sandali, na makatuwiran kung mayroon ka lamang isang computer at isang telepono at bihirang gamitin ang mga ito sa parehong oras. Kung maraming device sa iyong home network, o, halimbawa, may ilan kung saan hindi ma-configure ang VPN, magiging mas maginhawang gumawa ng tunnel nang direkta sa home router para hindi mag-isip tungkol sa pagse-set up ng bawat device nang hiwalay. .

Если вы хоть раз устанавливали OpenVPN на свой маршрутизатор, вы, вероятно, были неприятно удивлены скоростью его работы. SoC’и даже дешевых роутеров без особых проблем пропускают через себя окологигабитный трафик, за счет выноса функций маршрутизации и NAT на отдельный чип, предназначенный исключительно для выполнения этой задачи, а основные процессоры таких роутеров довольно слабы, т.к. нагрузки на них практически никакой нет. Такой компромисс позволяет достигнуть высокой скорости работы роутера и заметно снизить цену готового устройства — маршрутизаторы с мощными процессорами стоят в несколько раз дороже, и позиционируются уже не только как коробка для раздачи интернета, но и в качестве NAS, торрентокачалки и домашней мультимедиа-системы.

Мой роутер, TP-Link TL-WDR4300, нельзя назвать новым — модель появилась в середине 2012 года, и обладает 560 МГц-процессором архитектуры MIPS32 74Kc, мощности которого хватает лишь на 20-23 Мб/с шифрованного трафика через OpenVPN, что по меркам скорости современного домашнего интернета совсем немного.
Paano natin mapapataas ang bilis ng isang naka-encrypt na lagusan? Ang aking router ay medyo gumagana, sumusuporta sa 3x3 MIMO, at sa pangkalahatan ay gumagana nang maayos, hindi ko nais na baguhin ito.
Dahil nakaugalian na ngayon na gumawa ng 10-megabyte na mga pahina sa Internet, magsulat ng mga desktop application sa node.js at i-pack ang mga ito sa isang 100-megabyte na file, dagdagan ang kapangyarihan ng pag-compute sa halip na pag-optimize, gagawa kami ng isang bagay na kakila-kilabot - ililipat namin ang koneksyon sa VPN sa isang produktibong single-board na "computer" Orange Pi One, na i-install namin sa case ng router nang hindi gumagamit ng mga kasalukuyang network at USB port, sa halagang $9.99* lang!
* + paghahatid, + buwis, + para sa beer, + MicroSD.

OpenVPN

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

Orange PiOne

Одноплатник Orange Pi One от компании Xunlong — самое выгодное предложение по соотношению производительность/цена на данный момент. За $9.99* вы получаете добротный четырехядерный процессор ARM Cortex-A7, (стабильно) работающий на частоте 1008 МГц, и явно производительней соседей Raspberry Pi Zero и Next Thing C.H.I.P. по ценовой категории. На этом плюсы заканчиваются. Компания Xunlong уделяет софту своих плат ровно ноль внимания, и на момент запуска One в продажу не предоставляла даже файл конфигурации платы, не говоря уже о готовых образах. Allwinner — производитель SoC — тоже не особо трепетно относится к поддержке своего продукта. Их интересует только минимальная работоспособность в ОС Android 4.4.4, а значит, мы вынуждены использовать ядро версии 3.4 с Android-патчами. К счастью, есть энтузиасты, которые собирают дистрибутивы, правят ядро, пишут код для поддержки плат в mainline-ядре, т.е. фактически делают работу за производителя, заставляя это говно приемлемо работать. Для своих целей я выбрал дистрибутив Armbian, он часто и удобно обновляется (новые ядра устанавливаются прямо через пакетный менеджер, а не копированием файлов на специальный раздел, как это обычно бывает у Allwinner), да и поддерживает большинство периферии, в отличие от остальных.

Ruta

Upang hindi ma-load ang mahinang processor ng router na may encryption at mapabilis ang aming koneksyon sa VPN, maaari naming ilipat ang gawaing ito sa mga balikat ng isang mas malakas na processor ng Orange Pi sa pamamagitan ng pagkonekta nito sa router sa ilang paraan. Naiisip ko ang pagkonekta sa alinman sa pamamagitan ng Ethernet o USB - pareho sa mga pamantayang ito ay sinusuportahan ng parehong device, ngunit hindi ko gustong gumamit ng mga kasalukuyang port. Sa kabutihang palad, may isang paraan out.

Ang GL850G USB hub chip, na ginagamit sa router, ay sumusuporta sa 4 na USB port, dalawa sa mga ito ay hindi naka-wire. Hindi malinaw kung bakit hindi inalis ng tagagawa ang mga ito, sa palagay ko, upang maiwasan ang mga user na kumonekta sa 4 na device na may mataas na kasalukuyang pagkonsumo (halimbawa, mga hard drive) nang sabay-sabay. Ang karaniwang power supply ng router ay hindi idinisenyo para sa gayong pagkarga. Sa anumang kaso, ito ay para sa aming kalamangan.
Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router
Upang makakuha ng isa pang USB port, kailangan mo lamang maghinang ng dalawang wire sa mga pin 8(D-) at 9(D+) o 11(D-) at 12(D+).

Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router

Однако недостаточно просто так подключить два USB-устройства и надеяться, что все заработает само собой, как это бы произошло с Ethernet. Во-первых, нам нужно заставить одного из них работать в режиме USB Client, а не USB Host, во-вторых, нам нужно определиться с тем, как устройства будут определять друг друга. Существует множество драйверов так называемых USB Gadgets (по названию подсистемы Linux-ядра), которые позволяют эмулировать различные типы USB-устройств: сетевой адаптер, аудиокарту, клавиатуру и мышь, флешку, фотоаппарат, консоль через последовательный порт. Так как наше устройство будет работать с сетью, нам лучше всего подойдет эмуляция Ethernet-адаптера.

Mayroong tatlong mga pamantayan sa Ethernet-over-USB:

  • Remote NDIS (RNDIS). Устаревший стандарт от Microsoft, использовался преимущественно во времена Windows XP.
  • Ethernet Control Model (ECM). Isang simpleng pamantayan na sumasaklaw sa mga Ethernet frame sa loob ng mga USB packet. Mahusay para sa mga wired modem na may koneksyon sa USB, kung saan ito ay maginhawa upang ilipat ang mga frame nang walang pagproseso, ngunit dahil sa pagiging simple at mga limitasyon ng USB bus, ito ay hindi masyadong mabilis.
  • Ethernet Emulation Model (EEM). Isang mas matalinong protocol na isinasaalang-alang ang mga limitasyon ng USB at mahusay na pinagsasama-sama ang maramihang mga frame sa isa, kaya tumataas ang throughput.
  • Network Control Model (NCM). Ang pinakabagong protocol. May mga benepisyo ng EEM at higit na ino-optimize ang karanasan sa bus.

Чтобы заставить работать любой из этих протоколов на нашей плате, как всегда, придется встретиться с некоторыми трудностями. Из-за того, что Allwinner интересуют только Android-части ядра, нормально работает только Android Gadget — тот код, который реализует связь с adb, экспорт устройства по протоколу MTP и эмуляцию флешки на Android-устройствах. Сам Android Gadget поддерживает и протокол RNDIS, но в ядре Allwinner он сломан. Если вы попробуете скомпилировать ядро с любым другим USB Gadget, устройство просто не появится в системе, что бы вы ни делали.
Для решения проблемы, по-хорошему, необходимо найти место инициализации 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 Gadgets из Linux.
Ngayon ay dapat mong muling itayo ang kernel gamit ang patch na ito at ang kinakailangang gadget. Pinili ko ang EEM dahil... Ayon sa mga resulta ng pagsubok, ito ay naging mas produktibo kaysa sa NCM.
Nagbibigay ang pangkat ng Armbian napaka-simple at maginhawang sistema ng pagpupulong para sa lahat ng suportadong board sa pamamahagi. I-download lang ito, ilagay ang aming patch userpatches/kernel/sun8i-default/otg.patch, edit ng konti compile.sh at piliin ang kinakailangang gadget:

Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router

Ang kernel ay isasama sa isang deb package, na hindi magiging mahirap i-install sa board sa pamamagitan ng dpkg.
Ang natitira na lang ay ikonekta ang board sa pamamagitan ng USB at i-configure ang aming bagong network adapter para makatanggap ng address sa pamamagitan ng DHCP. Upang gawin ito kailangan mong magdagdag ng isang bagay tulad ng sumusunod sa /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'

Mas mainam na itakda nang manu-mano ang MAC address, dahil... ito ay magiging random sa bawat oras na ang aparato ay reboot, na kung saan ay hindi maginhawa at mahirap.
Ikinonekta namin ang MicroUSB cable sa OTG connector, ikonekta ang kapangyarihan mula sa router (maaari itong ibigay sa mga pin 2 at 3 ng suklay, at hindi lamang sa power connector).

Ang natitira na lang ay i-configure ang router. Sapat na i-install ang package gamit ang EEM driver at idagdag ang aming bagong USB network device sa tulay ng lokal na firewall zone:

opkg install kmod-usb-net-cdc-eem

Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router
Upang iruta ang lahat ng trapiko sa VPN tunnel, kailangan mong magdagdag ng panuntunan ng SNAT sa IP address ng board sa gilid ng router, o ipamahagi ang address ng board bilang gateway address sa pamamagitan ng dnsmasq. Ang huli ay ginagawa sa pamamagitan ng pagdaragdag ng sumusunod na linya sa /etc/dnsmasq.conf:

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

saan 192.168.1.100 — IP address ng iyong board. Huwag kalimutang ipasok ang address ng router sa mga setting ng network sa mismong board!

Ginamit ang melamine sponge para ihiwalay ang mga contact sa board mula sa mga contact ng router. Ito ay naging ganito:
Bilisan namin OpenVPN sa halagang $9.99* o i-embed ang Orange Pi One sa isang router

Konklusyon

Работает сеть через USB на удивление быстро: 100-120 Мб/с, я ожидал меньшего. OpenVPN пропускает через себя около 70 Мб/с шифрованного трафика, что тоже не сильно много, но для моих нужд хватает. Крышка маршрутизатора закрывается неплотно, оставляя небольшой зазор. Эстеты могут выпаять Ethernet и USB Host-разъемы у платы, что позволит крышке закрыться полностью, и еще место останется.
Mas mainam na huwag makisali sa gayong pornograpiya at bumili Turris Omnia.

Pinagmulan: www.habr.com

Bumili ng maaasahang pagho-host para sa mga site na may proteksyon ng DDoS, mga server ng VPS VDS 🔥 Bumili ng maaasahang website hosting na may proteksyon ng DDoS, VPS VDS servers | ProHoster