FA
Bebra را امتحان کنیدامتحان کنید

بررسی‌های فنی

پروتکل‌های VPN کجا قرار دارند و چه چیزی آن‌ها را لو می‌دهد

Roman Sedov Roman Sedov

12 دقیقه مطالعه

پروتکل‌های VPN
فهرست مطالب
  1. پروتکل با الگوریتم رمزگذاری یکی نیست
  2. پروتکل‌های داخلی سیستم‌عامل
  3. پروتکل‌هایی که به برنامه نیاز دارند
  4. چه چیزی جلوی اتصال را می‌گیرد
  5. پروتکل‌های Bebra
  6. پرسش‌ها و پاسخ‌ها

اگر در تنظیمات Windows یک اتصال VPN اضافه کنید، سیستم‌عامل از شما می‌خواهد نوع آن را انتخاب کنید: PPTP،‏ L2TP/IPsec،‏ SSTP یا IKEv2. این‌ها پروتکل‌های VPN هستند که سیستم‌عامل شما خودش و بدون نرم‌افزار اضافه می‌شناسد. برنامه‌های سرویس‌های VPN معمولاً با پروتکل‌های دیگری کار می‌کنند. اینکه پروتکل کجا قرار دارد، تعیین می‌کند چه کسی آن را تنظیم می‌کند، از کدام شبکه‌ها عبور می‌کند و چطور شناسایی می‌شود.

پروتکل با الگوریتم رمزگذاری یکی نیست

الگوریتم رمزگذاری داده‌های شما را به بایت‌هایی تبدیل می‌کند که بدون کلید به کار کسی نمی‌آیند. بیشتر وقت‌ها این الگوریتم AES یا ChaCha20 است، همان‌هایی که از سایت‌های معمولی روی HTTPS محافظت می‌کنند. بقیه کارها با پروتکل است. پروتکل تعیین می‌کند هر طرف چطور ثابت کند همان کسی است که ادعا می‌کند (با رمز عبور، گواهی یا کلید)، چطور بر سر کلید این نشست توافق کنند، بسته‌ها از کدام پورت بروند و سرآیندهای رمزگذاری‌نشده‌شان چه بگویند.

برای همین دو پروتکل با الگوریتم رمزگذاری یکسان ممکن است در شبکه رفتار بسیار متفاوتی داشته باشند. معمولاً تفاوت در خود الگوریتم نیست، بلکه در هر چیزی است که دور آن قرار دارد. در مقاله «VPN چیست» توضیح داده‌ایم که یک درخواست رمزگذاری‌شده چطور به سایت می‌رسد.

پروتکل‌های داخلی سیستم‌عامل

پروتکل داخلی به نصب چیزی نیاز ندارد. آدرس سرور، اطلاعات ورود و کلید را مستقیم در تنظیمات سیستم وارد می‌کنید. به همین دلیل شرکت‌ها اغلب از این اتصال‌ها استفاده می‌کنند و مدیر شبکه پروفایل VPN را در اختیار کارمندان می‌گذارد. هر سیستم‌عامل از مجموعه متفاوتی پشتیبانی می‌کند.

سیستم‌عاملآنچه بدون برنامه می‌توان اضافه کردخوب است بدانید
WindowsPPTP،‏ L2TP/IPsec،‏ SSTP،‏ IKEv2در حالت خودکار، Windows آن‌ها را یکی‌یکی امتحان می‌کند و از امن‌ترها شروع می‌کند
iPhone،‏ iPad و MacL2TP،‏ IPsec،‏ IKEv2Apple در سال 2016 پشتیبانی از PPTP را حذف کرد، از iOS 10 و macOS Sierra به بعد
Android 12 و بالاترفقط گونه‌های IKEv2/IPsecدیگر نمی‌توان در تنظیمات سیستم اتصال PPTP یا L2TP ساخت

پروتکل PPTP که رمز عبور قوی نجاتش نمی‌دهد

پروتکل PPTP در سال 1999 با شماره RFC 2637 منتشر شد و امنیتش بر روش ورود MS-CHAPv2 تکیه دارد. در سال 2012 در کنفرانس DEF CON این روش ورود را کاملاً شکستند. برای شکستن یک ورود ضبط‌شده کافی است یک کلید 56 بیتی DES پیدا شود و رمز عبور طولانی و پیچیده هیچ فرقی ایجاد نمی‌کند. توصیه پژوهشگران صریح بود: ترافیک PPTP را رمزگذاری‌نشده فرض کنید. چهار سال بعد Apple پروتکل PPTP را از سیستم‌عامل‌هایش حذف کرد. Windows هنوز کلاینت آن را دارد، هرچند Microsoft در سال 2024 پروتکل PPTP را در Windows Server به فهرست قابلیت‌های منسوخ منتقل کرد.

پروتکل L2TP/IPsec و دردسر NAT

پروتکل L2TP (RFC 2661، آن هم از سال 1999) فقط تونل را می‌سازد و رمزگذاری را IPsec برایش انجام می‌دهد، به همین دلیل در تنظیمات آن‌ها را به‌صورت جفت می‌بینید (RFC 3193، سال 2001). Windows دو نسخه از این جفت را ارائه می‌دهد، یکی با گواهی و یکی با کلید از پیش مشترک. سخت‌ترین مشکل آن NAT است، یعنی روترهایی که چند دستگاه را پشت یک آدرس قرار می‌دهند. در این حالت بسته‌های IPsec باید در UDP روی پورت 4500 پیچیده شوند. اگر خود سرور پشت NAT باشد، Windows به‌طور پیش‌فرض اتصال را برقرار نمی‌کند و Microsoft در مقاله پشتیبانی 926179 برای مجاز کردن آن از شما می‌خواهد رجیستری را ویرایش کنید.

پروتکل SSTP، فقط برای Windows

پروتکل SSTP با Windows Vista SP1 و Windows Server 2008 آمد. این پروتکل PPP را، یعنی همان پروتکل لایه پیوند داده که PPTP بر پایه آن ساخته شده، درون HTTPS روی پورت TCP 443 حمل می‌کند. سیستم‌عامل‌های Apple و Android هیچ‌کدام کلاینت داخلی SSTP ندارند. این هم تونلی روی TCP است و چنین تونل‌هایی روی خطی که بسته از دست می‌دهد کند می‌شوند (دلیلش را در ادامه می‌گوییم).

پروتکل IKEv2 که همه سیستم‌عامل‌ها دارند

از میان پروتکل‌های داخلی، فقط IKEv2 در همه سیستم‌عامل‌های جدول هست. تعریف آن در RFC 7296 (سال 2014) آمده است. سرور معمولاً هویتش را با گواهی ثابت می‌کند و شما با گواهی یا با نام کاربری و رمز عبور از طریق EAP وارد می‌شوید. مذاکره روی پورت UDP 500 شروع می‌شود و اگر دو طرف در مسیر NAT تشخیص دهند، به پورت 4500 می‌روند. افزونه MOBIKE (RFC 4555) باعث می‌شود نشست با تغییر آدرس IP دستگاه، بدون ورود دوباره، ادامه پیدا کند. روی دیگر سکه این است که IKEv2 بدون UDP اصلاً کار نمی‌کند.

پروتکل‌هایی که به برنامه نیاز دارند

بقیه پروتکل‌ها را سیستم‌عامل خودش نمی‌شناسد. آن‌ها را برنامه‌ای جداگانه با خود می‌آورد، مثل کلاینت OpenVPN، برنامه یک سرویس VPN یا سفت‌افزار روتر. مزیتش این است که با هر به‌روزرسانی همان برنامه می‌توانند تغییر کنند و لازم نیست منتظر نسخه تازه سیستم‌عامل بمانند.

OpenVPN

نرم‌افزار متن‌باز OpenVPN ساخته James Yonan است و نخستین بار در سال 2001 منتشر شد. اتصال به سرور معمولاً در یک فایل ⁦.ovpn⁩ با آدرس، پورت و کلیدها تعریف می‌شود که آن را به کلاینتی روی رایانه، گوشی یا روتر وارد می‌کنید. توافق بر سر کلیدها از طریق TLS انجام می‌شود و داده روی UDP یا TCP منتقل می‌شود؛ پورت استاندارد 1194 است. در مقاله‌ای که سال 2022 در کنفرانس USENIX Security ارائه شد، پژوهشگرانی که با یک ارائه‌دهنده اینترنت با یک میلیون مشترک همکاری می‌کردند، بیش از 85 درصد جریان‌های OpenVPN را تقریباً بدون تشخیص اشتباه شناسایی کردند. یک الگوی بایتی، اندازه بسته‌ها و پاسخ‌های سرور تنها چیزهایی بود که لازم داشتند و با همین‌ها 34 مورد از 41 پیکربندی را که با عنوان «مبهم‌سازی‌شده» فروخته می‌شدند، شناسایی کردند.

WireGuard

پروتکل مدرن WireGuard به‌عنوان جایگزینی سریع‌تر و ساده‌تر برای IPsec و OpenVPN طراحی شده است. تبادل کلید با Curve25519 انجام می‌شود، داده‌ها با ChaCha20 و Poly1305 محافظت می‌شوند و بسته‌ها فقط روی UDP منتقل می‌شوند. WireGuard از نسخه 5.6 بخشی از هسته Linux است؛ این نسخه بهار 2020 منتشر شد. سفت‌افزارهای روتر مانند OpenWrt و KeeneticOS (نسخه 3.3 و بالاتر) از آن پشتیبانی می‌کنند و برنامه‌های رسمی آن برای Windows،‏ macOS،‏ iOS و Android هم وجود دارد. نخستین پیام هر نشست همیشه نوع و اندازه یکسانی دارد، پس شناسایی‌اش در شبکه آسان است. در روسیه WireGuard از سال 2023 مسدود است. در اوت همان سال، این پروتکل همراه با OpenVPN حدود یک روز روی شبکه‌های تلفن همراه وصل نمی‌شد و موج دوم مسدودسازی در پایان سپتامبر آغاز شد.

Shadowsocks

پروتکل Shadowsocks در سال 2012 به‌عنوان جایگزینی رمزگذاری‌شده برای پروکسی SOCKS پدید آمد (تفاوت پروکسی و VPN را در مقاله VPN یا پروکسی توضیح داده‌ایم). تنظیمش بسیار ساده است و فقط آدرس، پورت، رمز عبور و الگوریتم رمزگذاری می‌خواهد. جریان داده‌اش هیچ سرآیند رمزگذاری‌نشده‌ای ندارد و همین در چشم فیلتر بیشتر آن را لو می‌دهد تا پنهان کند. ترافیک معمولی تقریباً همیشه کمی متن خوانا دارد، پس جریانی از بایت‌های کاملاً تصادفی به چشم می‌آید. مقاله‌ای در USENIX Security سال 2023 شرح می‌دهد که یک سامانه فیلترینگ در چین از نوامبر 2021 چنین جریان‌هایی را بر اساس نسبت بیت‌های 1 و نویسه‌های قابل‌چاپ جدا می‌کند و Shadowsocks هم مشمول همین قاعده شد.

VLESS + REALITY

پروتکل VLESS در اوت 2020 در V2Ray 4.27.0 منتشر شد. هر کاربر را با یک UUID، یعنی رشته‌ای طولانی از حروف و ارقام، شناسایی می‌کند و در پیکربندی معمول رمزگذاری خودش خاموش است، پس داده‌ها را یک لایه بیرونی TLS محافظت می‌کند. REALITY تعیین می‌کند این لایه از بیرون چه شکلی داشته باشد. سرور یک جفت کلید X25519 دارد و کلاینت کلید عمومی و یک شناسه کوتاه به نام shortId را می‌داند. در تنظیمات سرور، سایت واقعی شخص دیگری مشخص شده است و دست‌دهی TLS مانند بازدید از همان سایت به نظر می‌رسد. اگر اتصالی در بررسی کلید رد شود، سرور آن را به همان سایت می‌سپارد و آن سایت خودش پاسخ می‌دهد.

XHTTP

شیوه انتقال XHTTP از پروژه Xray می‌آید و در سال 2024 با نام SplitHTTP شناخته می‌شد. از بیرون مانند تبادل معمولی با یک سایت، یعنی درخواست‌ها و پاسخ‌های HTTP، به نظر می‌رسد و بیشتر تجهیزات میانی HTTP و بسیاری از CDNها چنین ترافیکی را عبور می‌دهند. ارسال و دریافت حتی می‌توانند از مسیرهای متفاوتی بروند، مثلاً یکی از طریق CDN و دیگری مستقیم.

Hysteria2

پروتکل Hysteria2 روی UDP و با نسخه خودش از QUIC کار می‌کند. از بیرون شبیه HTTP/3 است، یعنی تازه‌ترین نسخه پروتکلی که سایت‌ها با آن بارگذاری می‌شوند. کلاینت با یک درخواست HTTP/3 وارد می‌شود که رمز عبور را در یک سرآیند همراه دارد. اگر رمز عبور اشتباه باشد، سرور قرار است مثل یک وب‌سرور معمولی رفتار کند یا پاسخ یک سایت واقعی را برگرداند تا هیچ چیز پروکسی را لو ندهد. توسعه‌دهندگان Hysteria2 آن را برای خطوطی با اتلاف بسته زیاد ساخته‌اند، اما جایی که UDP کاملاً مسدود است، این پروتکل هم مثل IKEv2 نمی‌تواند عبور کند.

چه چیزی جلوی اتصال را می‌گیرد

شبکه فقط ترافیک وب را عبور می‌دهد

هتل‌ها، محل‌های برگزاری همایش و برخی ادارات فقط ترافیک وب را روی پورت‌های TCP 80 و 443 به بیرون راه می‌دهند. پروتکل‌های IKEv2 و L2TP/IPsec با پورت‌های UDP 500 و 4500 در آنجا وصل نمی‌شوند و OpenVPN روی پورت استاندارد 1194 هم همین‌طور. آنچه عبور می‌کند SSTP،‏ OpenVPN تنظیم‌شده روی TCP 443 و پروتکل‌هایی است که از همان پورت استفاده می‌کنند و شبیه HTTPS هستند. Microsoft پروتکل SSTP را دقیقاً برای چنین شبکه‌هایی ساخت.

پروتکل از روی الگویش شناسایی می‌شود

پروتکل‌هایی که برای شبکه‌های اداری طراحی شده‌اند، پورت‌های ثابتی دارند و نشست‌هایشان را به شکلی قابل‌تشخیص آغاز می‌کنند. تجهیزات بازرسی عمیق بسته (DPI) ارائه‌دهنده اینترنت این نشانه‌ها را در لحظه بررسی می‌کنند و می‌توانند یک پروتکل را بدون دست زدن به بقیه اینترنت قطع کنند. همان‌طور که مقاله مربوط به OpenVPN نشان می‌دهد، برای این کار لازم نیست چیزی رمزگشایی شود. به همین دلیل پروتکل‌های جدیدتر می‌کوشند شبیه HTTPS به یک سایت شناخته‌شده یا شبیه HTTP/3 باشند، در حالی که Shadowsocks، همان‌طور که بالاتر دیدید، به خاطر تصادفی بودنی که بیش از حد یکدست است گیر می‌افتد.

اتلاف بسته و TCP

پروتکل TCP مطمئن می‌شود هر بسته به مقصد برسد و هر بسته‌ای را که گم شود دوباره می‌فرستد. وقتی خود تونل روی TCP کار می‌کند، مثل SSTP و OpenVPN در حالت TCP، اتصال‌های TCP دیگری را حمل می‌کند که ارسال دوباره خودشان را دارند. روی خطی که بسته از دست می‌دهد، هر دو لایه منتظر همان داده می‌مانند و آن را دوباره می‌فرستند و تأخیر پله‌پله بالا می‌رود. پس تونل کلاسیک بهتر است روی UDP باشد و TCP برای شبکه‌هایی بماند که UDP در آن‌ها مسدود است.

پروتکل‌های جدیدتر به‌جای بسته، جریان داده را منتقل می‌کنند. برنامه روی دستگاه شما اتصال‌های TCP برنامه‌ها را خودش تحویل می‌گیرد و فقط محتوای آن‌ها را از تونل می‌فرستد، پس ارسال دوباره دولایه پیش نمی‌آید. با این حال، ترافیک UDP بازی‌ها و تماس‌ها درون انتقالی بر پایه TCP مانند VLESS + REALITY همچنان باید منتظر بماند تا تکه گم‌شده دوباره برسد. روی چنین خطوطی، انتقالی بر پایه UDP مانند Hysteria2 روان‌تر کار می‌کند.

پروتکل‌های Bebra

اتصال Bebra از طریق VLESS + REALITY،‏ XHTTP،‏ Hysteria2 و Shadowsocks برقرار می‌شود. برنامه پروتکل و مسیر را خودش انتخاب می‌کند و اگر مسیری از کار بیفتد، به مسیر دیگری می‌رود، پس لازم نیست خودتان پروتکلی انتخاب کنید. جزئیات بیشتر در صفحه فناوری‌ها آمده است.

برای روترهای Keenetic،‏ OpenWrt و MikroTik برنامه‌ای از Bebra هست که روی خود روتر اجرا می‌شود. برای مدل‌هایی که فقط از پروتکل‌های داخلی پشتیبانی می‌کنند، در بخش «روتر» داشبورد حسابتان در سایت زبانه «روترهای دیگر» هست با OpenVPN (UDP و TCP) و PPTP. از این دو، فقط OpenVPN داده‌های شما را به‌طور قابل‌اعتماد رمزگذاری می‌کند.

هر طرحی همه 187 کشور را در بر می‌گیرد. دوره آزمایشی به قیمت 10 ₽ نشان می‌دهد اتصال در شبکه خودتان چطور رفتار می‌کند. 3 روز دسترسی کامل، سپس 500 ₽ در ماه. اشتراک به طور خودکار تمدید می‌شود.

پرسش‌ها و پاسخ‌ها

آیا پروتکل همان الگوریتم رمزگذاری است؟

نه. الگوریتم رمزگذاری مثل AES یا ChaCha20 داده را بدون کلید ناخوانا می‌کند. پروتکل هر چیزی را که دور آن است تعیین می‌کند: دو طرف چطور همدیگر را بشناسند، چطور بر سر کلید توافق کنند، بسته‌ها از کدام پورت بروند و چه شکلی داشته باشند. برای همین پروتکل‌هایی با الگوریتم رمزگذاری یکسان ممکن است در شبکه رفتار بسیار متفاوتی داشته باشند.

چرا VPN در خانه کار می‌کند، اما در هتل وصل نمی‌شود؟

شبکه‌های مهمان اغلب فقط ترافیک وب را روی پورت‌های TCP 80 و 443 به بیرون راه می‌دهند. پروتکل‌های IKEv2 و L2TP/IPsec روی پورت‌های UDP 500 و 4500 و همچنین OpenVPN روی پورت 1194 از آنجا عبور نمی‌کنند. اما SSTP،‏ OpenVPN روی TCP 443 و پروتکل‌هایی که شبیه HTTPS هستند معمولاً عبور می‌کنند.

چرا در Android نمی‌توانم PPTP یا L2TP اضافه کنم؟

از Android 12 به بعد، تنظیمات سیستم فقط اجازه ساخت اتصال‌های IKEv2/IPsec را می‌دهد. برای OpenVPN و پروتکل‌های دیگر به برنامه جداگانه نیاز دارید.

آیا رمز عبور طولانی PPTP را امن می‌کند؟

نه. نقطه ضعف PPTP خود روش ورود MS-CHAPv2 است. یک ورود ضبط‌شده را می‌توان با امتحان کردن همه کلیدهای 56 بیتی شکست و قدرت رمز عبور زمان این کار را تغییر نمی‌دهد. بهتر است فرض کنید ترافیک PPTP را دیگران هم می‌توانند بخوانند.

Roman Sedov

درباره نویسنده

Roman Sedov

نویسنده مطالب شبکه و پروتکل‌ها

پروتکل‌ها و شبکه‌ها را بررسی می‌کند: بین برنامه و سایت چه بر سر ترافیک شما می‌آید و چرا اتصال همان‌طور رفتار می‌کند که می‌کند.

برنامه Bebra

برنامه برای iPhone و iPad،‏ Android،‏ Windows،‏ Mac،‏ Linux،‏ Android TV و Apple TV. یک اشتراک هر تعداد دستگاهی را پوشش می‌دهد و هر طرحی همه 187 کشور را در بر می‌گیرد.