برخی از ما به دلایلی از اینترنت بدون VPN استفاده نمی کنیم: شخصی به یک IP اختصاصی نیاز دارد، و خرید VPS با دو IP آسان تر و ارزان تر از خرید یک آدرس از یک ارائه دهنده است، شخصی می خواهد به همه وب سایت ها دسترسی داشته باشد. و نه تنها کسانی که در قلمرو فدراسیون روسیه مجاز هستند، دیگران نیز به IPv6 نیاز دارند، اما ارائه دهنده آن را ارائه نمی دهد ...
اغلب، یک اتصال VPN بر روی خود دستگاهی که در یک لحظه مورد استفاده قرار میگیرد برقرار میشود، که اگر فقط یک رایانه و یک تلفن داشته باشید و به ندرت همزمان از آنها استفاده کنید، منطقی است. اگر دستگاههای زیادی در شبکه خانگی شما وجود دارد، یا مثلاً برخی از آنها هستند که VPN نمیتوانند روی آنها پیکربندی شوند، راحتتر است که یک تونل مستقیماً روی روتر خانگی ایجاد کنید تا به راهاندازی هر دستگاه به طور جداگانه فکر نکنید. .
اگر تا به حال OpenVPN را روی روتر خود نصب کرده اید، احتمالاً از سرعت عملکرد آن به طرز ناخوشایندی شگفت زده شده اید. SoCهای روترهای ارزان قیمت نیز به دلیل انتقال عملکردهای مسیریابی و NAT به یک تراشه جداگانه که منحصراً برای این کار طراحی شده است، بدون هیچ مشکلی از یک گیگابیت ترافیک عبور می کنند و پردازنده های اصلی چنین روترهایی کاملاً ضعیف هستند، زیرا عملا هیچ باری روی آنها وجود ندارد. این مصالحه به شما امکان می دهد به سرعت بالایی از روتر دست یابید و قیمت دستگاه تمام شده را به میزان قابل توجهی کاهش دهید - روترهایی با پردازنده های قدرتمند چندین برابر هزینه بیشتری دارند و نه تنها به عنوان جعبه ای برای توزیع اینترنت، بلکه به عنوان یک NAS، تورنت نیز قرار می گیرند. دانلودر و سیستم چند رسانه ای خانگی.
روتر من، TP-Link TL-WDR4300، را نمی توان جدید نامید - این مدل در اواسط سال 2012 ظاهر شد و دارای یک پردازنده معماری 560Kc MIPS32 با فرکانس 74 مگاهرتز است که قدرت آن فقط برای 20-23 مگابیت بر ثانیه ترافیک رمزگذاری شده کافی است. از طریق OpenVPN که طبق استانداردها است سرعت اینترنت خانگی مدرن بسیار کم است.
چگونه می توانیم سرعت یک تونل رمزگذاری شده را افزایش دهیم؟ روتر من کاملاً کاربردی است، از MIMO 3x3 پشتیبانی می کند و به طور کلی خوب کار می کند، من نمی خواهم آن را تغییر دهم.
از آنجایی که اکنون مرسوم است که صفحات اینترنتی 10 مگابایتی بسازیم، برنامه های دسکتاپ را در node.js بنویسیم و آنها را در یک فایل 100 مگابایتی قرار دهیم، به جای بهینه سازی، قدرت محاسباتی را افزایش دهیم، کار وحشتناکی انجام خواهیم داد - اتصال VPN را به یک "کامپیوتر" تک برد مولد Orange Pi One، که ما آن را بدون استفاده از پورت های شبکه و USB موجود در محفظه روتر نصب می کنیم، تنها با 9.99 دلار*!
* + تحویل، + مالیات، + برای آبجو، + MicroSD.
OpenVPN
پردازنده روتر را نمی توان کاملا ضعیف نامید - می تواند با استفاده از الگوریتم AES-128-CBC-SHA1 با سرعت 50 مگابیت بر ثانیه، داده ها را رمزگذاری و هش کند، که به طور قابل توجهی سریعتر از نحوه کار OpenVPN و جریان مدرن CHACHA20 است. رمز با هش POLY1305 حتی به 130 مگابیت در ثانیه می رسد! چرا سرعت تونل 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، نیز حساسیت خاصی به پشتیبانی از محصول خود ندارد. آنها فقط به حداقل عملکرد در سیستم عامل اندروید 4.4.4 علاقه مند هستند، به این معنی که ما مجبور هستیم از هسته 3.4 با وصله های اندروید استفاده کنیم. خوشبختانه، مشتاقانی هستند که توزیعها را جمعآوری میکنند، هسته را ویرایش میکنند، برای پشتیبانی از بردها در هسته اصلی کد مینویسند. آنها در واقع کار را برای سازنده انجام می دهند و باعث می شوند این مزخرف به طور قابل قبولی کار کند. برای اهدافم، توزیع 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 (نامگذاری شده از زیرسیستم هسته لینوکس) وجود دارد که به شما امکان میدهد انواع مختلفی از دستگاههای USB را شبیهسازی کنید: آداپتور شبکه، کارت صوتی، صفحه کلید و ماوس، درایو فلش، دوربین، کنسول از طریق یک سریال. بندر. از آنجایی که دستگاه ما با شبکه کار می کند، شبیه سازی یک آداپتور اترنت برای ما بهترین است.
سه استاندارد Ethernet-over-USB وجود دارد:
- NDIS از راه دور (RNDIS). یک استاندارد قدیمی از مایکروسافت که عمدتاً در ویندوز XP استفاده می شود.
- مدل کنترل اترنت (ECM). یک استاندارد ساده که فریم های اترنت را در بسته های USB کپسوله می کند. برای مودم های سیمی با اتصال USB عالی است، جایی که انتقال فریم ها بدون پردازش راحت است، اما به دلیل سادگی و محدودیت های گذرگاه USB، خیلی سریع نیست.
- مدل شبیه سازی اترنت (EEM). یک پروتکل هوشمندتر که محدودیتهای USB را در نظر میگیرد و به طور بهینه چندین فریم را در یک فریم جمع میکند و در نتیجه توان عملیاتی را افزایش میدهد.
- مدل کنترل شبکه (NCM). جدیدترین پروتکل دارای مزایای EEM است و تجربه اتوبوس را بیشتر بهینه می کند.
برای اینکه هر یک از این پروتکل ها مانند همیشه روی برد ما کار کند، باید با مشکلاتی روبرو شویم. با توجه به این واقعیت که Allwinner فقط به بخش های Android هسته علاقه دارد، فقط Android Gadget به طور معمول کار می کند - کدی که ارتباط با adb را پیاده سازی می کند، دستگاه را از طریق پروتکل MTP صادر می کند و یک درایو فلش را در دستگاه های Android شبیه سازی می کند. خود گجت اندروید نیز از پروتکل RNDIS پشتیبانی می کند، اما در هسته Allwinner شکسته شده است. اگر سعی کنید هسته را با هر ابزار USB دیگری کامپایل کنید، مهم نیست که چه کاری انجام دهید، دستگاه به سادگی در سیستم ظاهر نمی شود.
برای حل مشکل، به روشی دوستانه، باید مکانی را که کنترلر USB در کد ابزار اندرویدی android.c اصلاح شده توسط توسعه دهندگان مقداردهی اولیه می شود، پیدا کنید، اما راه حلی نیز وجود دارد که حداقل شبیه سازی اترنت را انجام دهید. کار 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 معمولی از لینوکس استفاده کنید.
حالا باید با این پچ و گجت لازم هسته را بازسازی کنید. من 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 به طرز شگفت انگیزی سریع کار می کند: 100-120 مگابیت در ثانیه، انتظار کمتری داشتم. OpenVPN از حدود 70 مگابیت بر ثانیه ترافیک رمزگذاری شده عبور می کند، که آن هم خیلی زیاد نیست، اما برای نیازهای من کافی است. درب روتر محکم بسته نمی شود و یک شکاف کوچک باقی می ماند. Aesthetes میتوانند کانکتورهای اترنت و USB Host را از برد جدا کنند، که به درب آن اجازه میدهد کاملا بسته شود و همچنان مقداری فضای باقی بماند.
بهتر است وارد چنین پورنوگرافی نشوید و خرید نکنید
منبع: www.habr.com