
Bəzilərimiz internetdən VPN olmadan istifadə etmirik, müxtəlif səbəblərə görə: bəzilərinə xüsusi IP lazımdır, VPS ilə iki IP almaq provayderdən düzgün ünvan almaqdan daha asan və ucuzdur, bəziləri bütün veb saytlarına, Rusiya daxilində icazə verilənlərdən başqa, daxil olmaq istəyir, üçüncülər isə IPv6-yı istəyir, amma provayderi onu təklif etmir...
Çox vaxt VPN bağlantısını istifadə olunan cihazda qururlar, bu da əsasən doğrudur, əgər sizin yalnız bir kompüteriniz və bir telefonunuz varsa və onları nadir hallarda eyni zamanda istifadə edirsiniz. Lakin əgər evdə çoxlu cihaz varsa və ya VPN quraşdırmaq mümkün olan cihazlar yoxdursa, hər bir cihazın ayarını düşünmədən ev marşrutizatorunda tunel yaratmaq daha rahat olardı.
Əgər sizin OpenVPN-i marşrutizatorunuza bir dəfə də quraşdırmısınızsa, yəqin ki, onun sürətindən məmnun qalmamısınız. Hətta ucuz marşrutizatorların SoC-ləri, yönləndirmə və NAT funksiyalarını yalnız bu iş üçün nəzərdə tutulmuş ayrıca çipə ayırmaqla, gigabit trafiki keçirmək barədə çətinlik çəkmirlər; bu cür marşrutizatorların əsas prosessorları isə olduqca zəifdir, çünki onlara hampir heç bir yük yoxdur. Bu cür kompromis, marşrutizatorun yüksək sürətini təmin edir və hazır cihazın qiymətini əhəmiyyətli dərəcədə azaldır — güclü prosessorlu marşrutizatorlar bir neçə dəfə bahadır və yalnız internet paylayıcısı olaraq deyil, həm də NAS, torrent yükləyici və ev multimedia sistemi kimi təqdim edilir.
Mənim marşrutizatorum, TP-Link TL-WDR4300, yeni adlandırılmayacaq - model 2012-ci il ortalarında meydana çıxıb və MIPS32 74Kc arxitekturasına malik 560 MHz prosessora malikdir, bu güc OpenVPN vasitəsilə şifrələnmiş trafik üçün yalnız 20-23 Mbit/s yetər, bu da müasir ev internetinin sürəti üçün olduqca azdır.
Şifrələnmiş tunelin sürətini necə artıra bilərik? Mənim marşrutizatorum xeyli funksionaldır, 3×3 MIMO dəstəkləyir, və ümumilikdə yaxşı işləyir, onu dəyişdirmək istəmirəm.
İndi 10-meqabaytlıq internet səhifələrinin hazırlanması, node.js-də masaüstü tətbiqlərin yazılması və 100-meqabaytlıq fayl olaraq paketlənməsi, hesablama güclərini artıraraq optimallaşdırmadan daha mərhələli bir şey etməyi qəbul edirik, biz çox dəhşətli bir şey edəcəyik — VPN bağlantısını Orange Pi One adlı güclü bir platalı "kompütər"-ə keçirəcəyik, onu marşrutizatorun korpusuna quraşdıraraq, mövcud şəbəkə və USB portlarını tutmadan, yalnız $9.99*!
* + çatdırılma, + vergilər, + pivə, + MicroSD.
OpenVPN
Routerun prosessorunu zəif adlandırmaq olmaz - o, AES-128-CBC-SHA1 alqoritmi ilə məlumatları 50 Mb/s sürətlə şifrələyə və hash-ləyə bilir, bu da OpenVPN-in işləmə sürətindən xeyli sürətlidir, müasir axın şifrəsi CHACHA20 isə POLY1305 hash ilə birgə 130 megabit/saniyə sürətə çatır! Bəs niyə VPN tunelinin sürəti bu qədər aşağıdır? Bütün iş, istifadəçi və nüvə arasında kontekstin dəyişməsindədir: OpenVPN trafikini şifrələyir və xarici dünya ilə istifadəçi kontekstində ünsiyyət qurur, nüvə kontekstində isə marşrutlaşdırma baş verir. Əməliyyat sistemi, hər qəbul edilən və ya göndərilən paketdə, bir yerdən digərinə tez-tez keçid etməyə məcburdur və bu, sürətli bir əməliyyat deyil. Bu problem TUN/TAP sürücüsü ilə işləyən bütün VPN proqramlarına xasdır və aşağı sürətin OpenVPN-nin pis optimizasiyası səbəbi olduğunu demək olmaz (amma, əlbəttə, orada yenidən düzəldilməsi gərəkən yerlər var). Mənim noutbukda şifrələmə olmadan heç bir userspace VPN klienti bir gigabit belə vermir, zəif prosessorlu sistemlərdən nə demək olar.
Orange Pi One
Xunlong şirkətinin Orange Pi One birplankası hazırda qiymət/performans nisbətinə görə ən sərfəli təklifdir. $9.99* ödəməklə siz 1008 MHz tezlikdə (sabit) işləyən ARM Cortex-A7 dörd nüvəli prosessor əldə edirsiniz ki, bu da qiymət kateqoriyasında Raspberry Pi Zero və Next Thing C.H.I.P.-dən əhəmiyyətli dərəcədə daha güclüdür. Bu isə müsbət tərəflərin sonudur. Xunlong şirkəti, platalarının proqram təminatına heç bir diqqət ayırmır və One satışa çıxarılanda platanın konfiqurasiya faylını belə təqdim etməmişdi, hazır görüntülərdən danışmıram belə. SoC istehsalçısı Allwinner də məhsulunun dəstəyini xüsusilə qıcıqlandıran bir şəkildə etmir. Onları yalnız Android 4.4.4-də minimal işləkliyi maraqlandırır, deməli, biz versiya 3.4 kernelini Android patch-ləri ilə istifadə etməyə məcburuq. Xoşbəxtlikdən, entuziastlar var ki, distros toplayır, kernel yamanlayır, plataların mainline kernel-də dəstəklənməsi üçün kod yazır, yəni əslində istehsalçının işini görürlər, bu isyanı qəbul edilə bilən şəkildə işlətməyə məcbur edirlər. Öz məqsədlərim üçün mən Armbian distrosunu seçdim, bu, tez-tez və əlverişli şəkildə yenilənir (yeni kernel-lər birbaşa paket meneceri vasitəsilə quraşdırılır, Allwinner-də olduğu kimi xüsusi bölməyə faylları köçürmək əvəzinə) və digər plataları dəstəkləyi, fərqi ilə.
Router
Routerun zəif prosessorunu şifrələmə ilə yükləməmək və VPN əlaqəmizi sürətləndirmək üçün bu vəzifəni daha performanslı Orange Pi prosessorunun öhdəsinə verə bilərik, onu routera bir şəkildə qoşaraq. Ethernet və ya USB ilə qoşulma fikri gəlir — bu iki standart hər iki cihaz tərəfindən də dəstəklənir, amma artıq mövcud portlardan istifadə etmək istəmirik. Xoşbəxtlikdən, bir həll var.
Routerdə istifadə olunan GL850G USB hub çipi 4 USB portunun işləməsini dəstəkləyir, bunlardan ikisi açılmayıb. İstehsalçının onları açmamasının səbəbini başa düşmək çətindir, düşünürəm ki, istifadəçilərə bir anda yüksək enerji istehlak edən 4 cihazı (məsələn, sərt diskləri) qoşma imkanı verməməyi məqsəd qoyublar, çünki routerin standart güc təchizatı bu cür yükləməyə uyğun deyil. Hər halda, bu bizim üçün əlverişlidir.

Daha bir USB portu əldə etmək üçün 8(D-) və 9(D+) və ya 11(D-) və 12(D+) pinlərinə iki tel qoşmaq kifayətdir.

Amma sadəcə iki USB cihazını qoşub, Ethernetdə olduğu kimi hər şeyin öz-özünə işləyəcəyini gözləmək kifayət deyil. Birincisi, onlardan birini USB Client rejimində işə salmalıyıq, USB Host deyil, ikincisi, cihazların bir-birlərini necə tanıyacaqlarına qərar verməliyik. "USB Gadgets" adlanan bir çox sürücü var (Linux nüvəsinin alt sisteminə görə adlandırılır), bu da müxtəlif növ USB cihazlarını emulyasiya etməyə imkan verir: şəbəkə adapteri, səs kartı, klaviatura və siçan, flash yaddaş, fotoaparat, ardıcıllıq portu vasitəsilə konsol. Cihazımız şəbəkə ilə işləyəcəyinə görə, bizim üçün Ethernet adapterinin emulyasiyası ən uyğun olacaq.
Ethernet-over-USB üçün üç standart mövcuddur:
- Remote NDIS (RNDIS). Microsoft-un köhnə standartıdır, əsasən Windows XP dövründə istifadə olunmuşdur.
- Ethernet Control Model (ECM). Ethernet çərçivələrini USB paketlərinə kapsul edən sadə bir standartdır. USB qoşulması olan simli modemlər üçün mükəmməl uyğundur, burada çərçivələri işləmədən göndərmək rahatdır, amma sadəliyinə və USB avtobusunun məhdudiyyətlərinə görə, çox sürətli işləməz.
- Ethernet Emulation Model (EEM). USB-nin məhdudiyyətlərini nəzərə alan daha ağıllı bir protokoldur və bir neçə çərçivəni birləşdirərək ötürmə qabiliyyətini artırır.
- Network Control Model (NCM). Ən yeni protokoldur. EEM-in üstünlüklərinə malikdir və avtobusda işləməni daha da optimallaşdırır.
Bu protokollardan birinin bizim kartımızda çalışmasını sağlamak için, her zamanki gibi bazı zorluklarla karşılaşmak gerekecek. Allwinner sadece Android çekirdek parçalarıyla ilgilendiğinden, yalnızca Android Gadget düzgün çalışıyor - bu kod, adb ile iletişimi, MTP protokolü üzerinden cihazın dışa aktarımını ve Android cihazlarda flaş belleği taklit eden kodu uyguluyor. Android Gadget, RNDIS protokolünü de destekliyor, ancak Allwinner çekirdeğinde bozuk. Herhangi bir başka USB Gadget ile çekirdek derlemeye çalışırsanız, cihaz sistemde görünmeyecek, ne yaparsanız yapın.
Sorunu çözmek için, aslında Android gadget'ının android.c dosyasında USB denetleyicisinin başlatma yerini bulmak gerekir; ancak en azından, USB üzerinden Ethernet emülasyonunu çalıştırmak için bir alternatif işlem de vardır:
--- 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;Bu yaman, USB istemci modunu etkinleştirir, bu da Linux'tan sıradan USB Gadget'ları kullanmayı sağlar.
Şimdi bu yamanın ve gerekli gadget'ın olduğu çekirdeği yeniden derlemek gerekiyor. Performans testlerine göre EEM'i seçtim, çünkü NCM'den daha verimli olduğu bulundu.
Armbian ekibi sağlıyor. Tek yapmanız gereken bunu indirmek ve patch'imizi userpatches/kernel/sun8i-default/otg.patch, biraz düzenlemek compile.sh ve gerekli gadget'ı seçmek:

Çekirdek, board'a dpkg ile kolayca kurulum yapabileceğiniz bir deb-paketine derlenecek. Şimdi sadece kartı USB ile bağlamak ve yeni ağ adaptörümüzü DHCP üzerinden adres almak için ayarlamak kaldı. Bunun için aşağıdakine benzer bir şeyi eklemek gerekiyor:.
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' /etc/network/interfaces:
MAC adresini elle ayarlamak daha iyidir, çünkü her cihazın yeniden başlatılmasında rastgele olacaktır; bu da pratik olmayacak ve sorun çıkaracaktır.MicroUSB kablosunu OTG bağlantı noktasına takıyoruz, router'dan güç bağlıyoruz (gücü yalnızca güç konektörüne değil, uçanlar 2 ve 3'e de bağlayabilirsiniz).
Şimdi router'ı ayarlamak kaldı. Tek yapmanız gereken EEM sürücü paketi kurmak ve yeni ağ USB cihazımızı yerel güvenlik duvarı bölgesinin köprüsüne eklemek:
opkg install kmod-usb-net-cdc-eem
Tüm trafiği VPN tüneline yönlendirmek için, ya router tarafında kartın IP adresi için bir SNAT kuralı eklemeli ya da adresi dnsmasq üzerinden kart adresi olarak kullanmalısınız. Sonuncusu, aşağıdaki satırı ekleyerek yapılır:
dhcp-option = tag:lan, option:router, 192.168.1.100 /etc/dnsmasq.conf:
— kartınızın IP adresi. Kartın ağ ayarlarında yönlendiricinin adresini unutmamalısınız!burada 192.168.1.100 — IP-адрес вашей платы. Не забудьте прописать адрес машрутизатора в настройках сети на самой плате!
Kontaktların kartın kontaktlarından izolyasiyası üçün melamin süngər istifadə edilib. Belə bir şey oldu:

Nəticə
USB vasitəsilə şəbəkə təəccüblü dərəcədə sürətlidir: 100-120 Mb/s, mən daha azını gözləyirdim. OpenVPN şifrəli trafikdən təxminən 70 Mb/s keçirir ki, bu da çox deyil, amma mənim ehtiyaclarım üçün kifayətdir. Routerin qapağı boşluqla bağlı bağlanır, kiçik bir boşluq qoyur. Estetikalar, Ethernet və USB Host portlarını lövhədən çıxararaq qapağın tam bağlanmasına imkan verə bilər, həmçinin yer qalmış olar.
Yaxşı olar ki, belə şeylərlə məşğul olmayasınız və alın. .
Mənbə: habr.com
