
برخی از ما به دلایلی از اینترنت بدون VPN استفاده نمی کنیم: شخصی به یک IP اختصاصی نیاز دارد، و خرید VPS با دو IP آسان تر و ارزان تر از خرید یک آدرس از یک ارائه دهنده است، شخصی می خواهد به همه وب سایت ها دسترسی داشته باشد. و نه تنها کسانی که در قلمرو فدراسیون روسیه مجاز هستند، دیگران نیز به IPv6 نیاز دارند، اما ارائه دهنده آن را ارائه نمی دهد ...
اغلب، یک اتصال VPN بر روی خود دستگاهی که در یک لحظه مورد استفاده قرار میگیرد برقرار میشود، که اگر فقط یک رایانه و یک تلفن داشته باشید و به ندرت همزمان از آنها استفاده کنید، منطقی است. اگر دستگاههای زیادی در شبکه خانگی شما وجود دارد، یا مثلاً برخی از آنها هستند که VPN نمیتوانند روی آنها پیکربندی شوند، راحتتر است که یک تونل مستقیماً روی روتر خانگی ایجاد کنید تا به راهاندازی هر دستگاه به طور جداگانه فکر نکنید. .
اگر تا حالا نصب کردید OpenVPN وقتی یک روتر نصب کردید، احتمالاً از سرعت آن به طرز ناخوشایندی شگفتزده شدید. حتی SoC های روترهای ارزان قیمت نیز به لطف انتقال توابع مسیریابی و NAT اختصاصی به یک تراشه جداگانه، ترافیک نزدیک به گیگابیت را بدون هیچ مشکلی مدیریت میکنند. پردازندههای اصلی در این روترها بسیار ضعیف هستند، زیرا عملاً هیچ باری روی آنها نیست. این سازش امکان سرعت بالای روتر و کاهش قابل توجه قیمت دستگاه نهایی را فراهم میکند - روترهایی با پردازندههای قدرتمند چندین برابر گرانتر هستند و اکنون نه تنها به عنوان جعبههای اشتراک اینترنت، بلکه به عنوان NAS، دانلودکنندههای تورنت و سیستمهای چندرسانهای خانگی نیز مورد استفاده قرار میگیرند.
روتر من، TP-Link TL-WDR4300، را نمیتوان جدید نامید - این مدل در اواسط سال ۲۰۱۲ عرضه شد و دارای یک پردازنده ۵۶۰ مگاهرتزی با معماری MIPS32 74Kc است که قدرت آن فقط برای ۲۰ تا ۲۳ مگابیت بر ثانیه ترافیک رمزگذاری شده از طریق ... کافی است. OpenVPNکه با استانداردهای سرعت اینترنت خانگی مدرن بسیار کم است.
چگونه می توانیم سرعت یک تونل رمزگذاری شده را افزایش دهیم؟ روتر من کاملاً کاربردی است، از MIMO 3x3 پشتیبانی می کند و به طور کلی خوب کار می کند، من نمی خواهم آن را تغییر دهم.
از آنجایی که اکنون مرسوم است که صفحات اینترنتی 10 مگابایتی بسازیم، برنامه های دسکتاپ را در node.js بنویسیم و آنها را در یک فایل 100 مگابایتی قرار دهیم، به جای بهینه سازی، قدرت محاسباتی را افزایش دهیم، کار وحشتناکی انجام خواهیم داد - اتصال VPN را به یک "کامپیوتر" تک برد مولد Orange Pi One، که ما آن را بدون استفاده از پورت های شبکه و USB موجود در محفظه روتر نصب می کنیم، تنها با 9.99 دلار*!
* + تحویل، + مالیات، + برای آبجو، + MicroSD.
OpenVPN
پردازنده این روتر را نمیتوان کاملاً ضعیف نامید - میتواند دادهها را با استفاده از الگوریتم AES-128-CBC-SHA1 با سرعت 50 مگابیت در ثانیه رمزگذاری و هش کند، که به طور قابل توجهی سریعتر از نحوه کار آن است. OpenVPNو رمز جریانی مدرن CHACHA20 با هش POLY1305 به سرعت ۱۳۰ مگابیت در ثانیه میرسد! پس چرا تونل VPN اینقدر کند است؟ همه چیز به تغییر زمینه بین فضای کاربر و فضای هسته مربوط میشود: OpenVPN ترافیک را رمزگذاری میکند و در چارچوب کاربر با دنیای خارج ارتباط برقرار میکند، در حالی که مسیریابی واقعی در چارچوب هسته رخ میدهد. سیستم عامل باید دائماً برای هر بسته دریافتی یا ارسالی به عقب و جلو سوئیچ کند و این عملیات کند است. این مشکل برای همه برنامههای VPN که از طریق درایور TUN/TAP اجرا میشوند، ذاتی است و اینطور نیست که سرعت پایین به دلیل بهینهسازی ضعیف باشد. OpenVPN (البته، البته، برخی زمینهها وجود دارند که میتوانند نیاز به بهبود داشته باشند.) حتی یک کلاینت VPN فضای کاربری هم در لپتاپ من با غیرفعال بودن رمزگذاری، حتی یک گیگابیت سرعت ارائه نمیدهد، چه برسد به سیستمهایی با پردازنده ضعیف.
نارنجی پی وان
برد تکی Orange Pi One از Xunlong در حال حاضر بهترین ارزش خرید را دارد. با قیمت 9.99 دلار*، یک پردازنده چهار هستهای ARM Cortex-A7 قدرتمند با سرعت 1008 مگاهرتز (پایدار) دریافت میکنید که به وضوح از همسایگان همرده خود، Raspberry Pi Zero و Next Thing CHIP، عملکرد بهتری دارد. مزایا همینجا تمام میشود. Xunlong هیچ توجهی به نرمافزار روی بردهای خود ندارد و در زمان عرضه One، حتی یک فایل پیکربندی برد هم ارائه نکرده بود، چه برسد به تصاویر آماده. Allwinner، سازنده SoC، نیز به طور خاص متعهد به پشتیبانی از محصول خود نیست. آنها فقط به حداقل قابلیتهای سیستم عامل علاقهمند هستند. Android ۴.۴.۴، که یعنی ما مجبوریم از کرنل نسخه ۳.۴ استفاده کنیم. Android-patches. خوشبختانه، علاقهمندانی هستند که توزیعها را میسازند، هسته را تغییر میدهند و برای پشتیبانی از بردها در هسته اصلی کد مینویسند - به عبارت دیگر، آنها اساساً کار سازنده را انجام میدهند و باعث میشوند این مزخرفات به طور قابل قبولی کار کنند. برای اهداف من، توزیع Armbian را انتخاب کردم. این توزیع به طور مکرر و به راحتی بهروزرسانی میشود (هستههای جدید مستقیماً از طریق مدیر بسته نصب میشوند، نه با کپی کردن فایلها در یک پارتیشن خاص، همانطور که معمولاً در مورد Allwinner اتفاق میافتد) و برخلاف سایرین، از اکثر لوازم جانبی پشتیبانی میکند.
روتر
برای اینکه پردازنده ضعیف روتر با رمزگذاری بارگیری نشود و سرعت اتصال VPN خود را افزایش دهیم، میتوانیم این وظیفه را به دوش یک پردازنده قدرتمندتر Orange Pi با اتصال آن به روتر به نوعی منتقل کنیم. اتصال از طریق اترنت یا USB به ذهن متبادر می شود - هر دوی این استانداردها توسط هر دو دستگاه پشتیبانی می شوند، اما من نمی خواستم پورت های موجود را بگیرم. خوشبختانه راهی برای خروج وجود دارد.
تراشه هاب USB GL850G که در روتر استفاده می شود، از 4 پورت USB پشتیبانی می کند که دو عدد از آنها سیمی نیستند. مشخص نیست که چرا سازنده آنها را لحیم نکرده است، تصور می کنم، برای جلوگیری از اتصال همزمان 4 دستگاه با مصرف جریان بالا (مثلاً هارد دیسک) توسط کاربران. منبع تغذیه استاندارد روتر برای چنین باری طراحی نشده است. در هر صورت این به نفع ماست.

برای دریافت پورت USB دیگر، فقط باید دو سیم را به پین های 8 (D-) و 9 (D+) یا 11 (D-) و 12 (D+) لحیم کنید.

با این حال، کافی نیست که صرفاً دو دستگاه USB را به هم متصل کنیم و امیدوار باشیم که همه چیز به طور خودکار، مانند اترنت، کار کند. اول، باید یکی از آنها را مجبور کنیم که در حالت USB Client کار کند، نه USB Host، و دوم، باید تعیین کنیم که دستگاهها چگونه یکدیگر را تشخیص میدهند. درایورهای زیادی برای به اصطلاح USB Gadgets (که نامشان از زیرسیستم گرفته شده است) وجود دارد. Linux-kernels) که امکان شبیهسازی انواع مختلف دستگاههای USB را فراهم میکنند: آداپتورهای شبکه، کارتهای صدا، صفحهکلید و ماوس، فلش مموریها، دوربینها و کنسولهای سریال. از آنجایی که دستگاه ما به شبکه متصل خواهد شد، شبیهسازی یک آداپتور اترنت بهترین گزینه است.
سه استاندارد Ethernet-over-USB وجود دارد:
- NDIS از راه دور (RNDIS)یک استاندارد منسوخشده از مایکروسافت، که عمدتاً در طول ... استفاده میشد. Windows XP
- مدل کنترل اترنت (ECM). یک استاندارد ساده که فریم های اترنت را در بسته های USB کپسوله می کند. برای مودم های سیمی با اتصال USB عالی است، جایی که انتقال فریم ها بدون پردازش راحت است، اما به دلیل سادگی و محدودیت های گذرگاه USB، خیلی سریع نیست.
- مدل شبیه سازی اترنت (EEM). یک پروتکل هوشمندتر که محدودیتهای USB را در نظر میگیرد و به طور بهینه چندین فریم را در یک فریم جمع میکند و در نتیجه توان عملیاتی را افزایش میدهد.
- مدل کنترل شبکه (NCM). جدیدترین پروتکل دارای مزایای EEM است و تجربه اتوبوس را بیشتر بهینه می کند.
مثل همیشه، به کار انداختن هر یک از این پروتکلها روی برد ما، چالشهایی را به همراه خواهد داشت. با توجه به این واقعیت که Allwinner فقط به موارد زیر علاقهمند است: Android-بخشهایی از هسته، فقط به طور عادی کار میکند Android Gadget کدی است که ارتباط با adb، خروجی گرفتن از دستگاه از طریق پروتکل MTP و شبیهسازی فلش درایو را پیادهسازی میکند. Android-دستگاهها. خودش Android این گجت همچنین از پروتکل RNDIS پشتیبانی میکند، اما در هسته Allwinner دچار مشکل است. اگر سعی کنید هسته را با هر گجت USB دیگری کامپایل کنید، دستگاه به سادگی در سیستم ظاهر نمیشود، مهم نیست چه کاری انجام میدهید.
برای حل مشکل، در حالت ایدهآل، لازم است مکانی را که کنترلر USB در کد اصلاحشده توسط توسعهدهندگان مقداردهی اولیه شده است، پیدا کنید. Android-android.c gadget، اما یک راه حل موقت هم وجود دارد که حداقل شبیهسازی اترنت را از طریق 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 و ابزار مورد نیاز را انتخاب کنید:

هسته در یک بسته 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'بهتر است مک آدرس را به صورت دستی تنظیم کنید، زیرا ... هر بار که دستگاه راه اندازی مجدد می شود، تصادفی خواهد بود، که ناخوشایند و دردسرساز است.
ما کابل MicroUSB را به کانکتور OTG وصل می کنیم، برق را از روتر وصل می کنیم (می توان آن را به پایه های 2 و 3 شانه و نه فقط به کانکتور برق عرضه کرد).
تنها چیزی که باقی می ماند پیکربندی روتر است. کافی است بسته را با درایور EEM نصب کنید و دستگاه شبکه USB جدید خود را به پل منطقه فایروال محلی اضافه کنید:
opkg install kmod-usb-net-cdc-eem
برای هدایت تمام ترافیک به تونل VPN، باید یک قانون SNAT به آدرس IP برد در سمت روتر اضافه کنید یا آدرس برد را به عنوان یک آدرس دروازه از طریق dnsmasq توزیع کنید. مورد دوم با افزودن خط زیر به انجام می شود /etc/dnsmasq.conf:
dhcp-option = tag:lan, option:router, 192.168.1.100جایی که 192.168.1.100 - آدرس IP برد شما. فراموش نکنید که آدرس روتر را در تنظیمات شبکه روی خود برد وارد کنید!
یک اسفنج ملامینه برای جداسازی کنتاکت های برد از کنتاکت های روتر استفاده شد. چیزی شبیه این معلوم شد:

نتیجه
شبکه از طریق USB به طرز شگفت انگیزی سریع کار می کند: ۱۰۰-۱۲۰ مگابیت در ثانیه، انتظار کمتری داشتم. OpenVPN این دستگاه حدود ۷۰ مگابیت بر ثانیه ترافیک رمزگذاری شده را مدیریت میکند که زیاد نیست، اما برای نیازهای من کافی است. پوشش روتر محکم بسته نمیشود و یک شکاف کوچک باقی میگذارد. کسانی که زیبایی را ترجیح میدهند میتوانند کانکتورهای اترنت و USB Host را از روی برد لحیمکاری کنند و به این ترتیب پوشش کاملاً بسته میشود و هنوز هم مقداری جا دارد.
بهتر است وارد چنین پورنوگرافی نشوید و خرید نکنید .
منبع: www.habr.com
