Skip to content

مسیر یک بسته ​

این صفحه یک اتصال را در گذر از یک نود دنبال می‌کند، از لحظه‌ای که به نود می‌رسد تا لحظه‌ای که به سمت اینترنت خارج می‌شود. وقتی به کار می‌آید که باید بدانید یک تنظیم کجا اثر می‌کند: کدام لایه گواهی را می‌خواند، کاربر کجا شناخته می‌شود، و محدودیت‌ها و شمارنده‌ها کجا قرار دارند.

روی هر جعبه در نمودار بزنید تا بخوانید در آن مرحله چه اتفاقی می‌افتد. بخش‌های پایین همین را با جزئیات بیشتر می‌گویند.

یک اتصال در مسیرش از میان نود
اپ کاربر
به آدرس لینک وصل می‌شود
شنونده
یک پورت، یک ingress یا چند پورت
TLS و ترنسپورت
TLS، REALITY؛ ws، grpc، xhttp…
پروتکل
کاربر اینجا شناخته می‌شود
تونل به نود خروجی
از نود دیگری خارج می‌شود
اندپوینت‌ها
WireGuard، OpenVPN، OpenConnect
تونل از رله
این نود در نقش خروجی
شناسایی مقصد
دامنه یا پروتکل واقعی
اینترنت
اوت‌باند
مستقیم، پراکسی دیگر، مسدود
مسیریابی
قانون‌ها، رول‌ست‌ها، final
پنل
شمارنده‌ها را جمع می‌کند

روی هر جعبه بزنید تا ببینید آنجا چه اتفاقی می‌افتد.

ترافیک کاربرانپیکربندی و آمار، روی TLS دوطرفه

دو مسیر جدا ​

یک نود دو نوع ترافیک حمل می‌کند که هیچ‌وقت با هم قاطی نمی‌شوند:

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

این دو فقط در سه جا به هم می‌رسند: جدول کاربرهایی که هر اینباند می‌پذیرد، جدول محدودیت‌های هر کاربر، و شمارنده‌های ترافیک. هر چیز دیگری که نود نگه می‌دارد از پنل آمده و در حافظه است؛ ببینید نود و پنلش.

۱. شنونده ​

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

شکلچه می‌کند
یک اینباند، یک پورتحالت معمول. پورت فقط مال همان اینباند است.
یک اینگرسیک پورت، معمولاً ۴۴۳، که چند اینباند آن را شریک‌اند. اینگرس نام و پروتکل کاربردی را از handshake TLS می‌خواند و اتصال را، درون خود نود، به اینباندی می‌سپارد که یک قانون نام برده است.
مجموعه‌ای از پورت‌ها (پرش پورت)برای Hysteria و Hysteria2. نود روی همه‌ی پورت‌های مجموعه، تا ۵۱۲ پورت، گوش می‌دهد و به هر کلاینت از همان پورتی جواب می‌دهد که کلاینت به آن فرستاده است.

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

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

۲. TLS، REALITY و ترنسپورت ​

اگر اینباند از TLS استفاده می‌کند، handshake اینجا با گواهی‌ای کامل می‌شود که پنل در پیکربندی نود گذاشته است. اینباند REALITY handshake خودش را با کلیدهایی که پنل ساخته کامل می‌کند. با اینگرس در حالت terminate، اینگرس این مرحله را از قبل انجام داده و یک جریان ساده به اینباند می‌سپارد.

سپس ترنسپورت، اگر اینباند داشته باشد، باز می‌شود: WebSocket، gRPC، HTTP، HTTPUpgrade، XHTTP، mKCP یا QUIC. آنچه می‌ماند جریان خود پروتکل است. اینباند VLESS می‌تواند رمزنگاری VLESS را هم داشته باشد، لایه‌ای بین TLS و پروتکل؛ ببینید رمزنگاری VLESS.

۳. پروتکل: کاربر شناسایی می‌شود ​

پروتکل (VLESS، VMess، Trojan، Shadowsocks، Hysteria2، TUIC و بقیه) اطلاعات ورود را از جریان می‌خواند و کاربر را در مجموعه‌ای که پنل به این اینباند داده پیدا می‌کند. از اینجا به بعد اتصال نام کاربر را با خود دارد.

  • اطلاعات ورود ناشناخته همین‌جا رد می‌شود، پیش از اینکه چیزی مسیریابی شود.
  • کاربرها با اطلاعات ورودشان تطبیق داده می‌شوند، نه با جایگاهشان. وقتی حسابی حذف می‌شود یا اطلاعات ورودش تغییر می‌کند، نود فوراً پذیرفتن جریان‌های تازه برای آن را متوقف می‌کند، از جمله جریان‌های درون اتصالی که از قبل چند جریان را حمل می‌کند (QUIC، مالتی‌پلکس).
  • محدودیت دستگاه اینجا بررسی نمی‌شود. نود دستگاه را نمی‌بیند، فقط آدرس را. محدودیت دستگاه وقتی عمل می‌کند که اپ اشتراک خودش را دریافت می‌کند؛ ببینید ترافیک، سهمیه‌ها و محدودیت‌ها.

اندپوینت‌ها خودشان کاربر را شناسایی می‌کنند ​

اندپوینت‌های WireGuard، OpenVPN و OpenConnect از مرحله‌های ۲ و ۳ رد می‌شوند. هم‌زمان راه ورود و راه خروج‌اند، و هر کدام کاربر را به روش خودش شناسایی می‌کند: peer در WireGuard با کلیدهایی که پنل برای آن کاربر ساخته، و OpenVPN و OpenConnect با ورود کاربر. سپس ترافیک مستقیم به مسیریابی می‌رود.

ترافیک از یک تونل ​

روی نود مقصد یک تونل، نیمه‌ی تونل جریان‌ها را از رله می‌پذیرد و مستقیم به مسیریابی می‌سپارد. این ترافیک روی نود مقصد به حساب کاربرها گذاشته نمی‌شود و آدرس‌هایش در محدودیت آدرس شمرده نمی‌شوند: رله از قبل کاربر را شمرده است، و روی نود مقصد، اتصال از آدرس رله می‌آید، نه از آدرس کاربر. ببینید درون یک تونل.

۴. شناسایی محتوا (sniffing) ​

وقتی قانون‌های مسیریابی بخواهند، نود اولین بایت‌های اتصال را می‌خواند تا بفهمد چه چیزی است: نام دامنه در یک درخواست TLS یا HTTP، یا پروتکلی مثل BitTorrent. آن‌وقت قانون‌ها می‌توانند حتی وقتی اپ با آدرس وصل شده با دامنه‌ی واقعی تطبیق دهند، و با پروتکل‌هایی که کاربر اعلام نکرده است.

۵. مسیریابی ​

مسیریابی قالب نود تعیین می‌کند اتصال کجا برود. قانون‌ها به ترتیب امتحان می‌شوند و بر اساس دامنه، آدرس، رول‌ست، پروتکل، اینباند، کاربر و بیشتر تطبیق می‌دهند. اولین قانونی که تطبیق بخورد اوتباند را انتخاب می‌کند؛ وقتی هیچ‌کدام تطبیق نخورد، اوتباند final آن را می‌گیرد.

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

۶. محدودیت‌ها و شمارنده‌ها ​

وقتی مسیریابی اوتباندی را انتخاب کرد، اتصال پیش از جابه‌جا شدن هر بایتی دو بار پیچیده می‌شود:

  1. محدودیت‌های کاربر. محدودیت آدرس تعیین می‌کند آیا یک آدرس مبدأ دیگر می‌تواند برای این کاربر وصل شود. آدرس IPv4 جداگانه شمرده می‌شود، آدرس IPv6 با /64 آن، و هر آدرس تا ده دقیقه بعد از آخرین باری که دیده شده همچنان شمرده می‌شود. محدودیت سرعت بودجه‌ای برای هر جهت است که روی همین نود اعمال می‌شود. برای اینکه محدودیت آدرس چطور در کل ناوگان تسویه می‌شود، ترافیک، سهمیه‌ها و محدودیت‌ها را ببینید.
  2. شمارنده‌ها. بایت‌ها برای هر اینباند، هر اوتباند و هر کاربر شمرده می‌شوند، و اتصال به فهرست اتصال‌های زنده‌ی نود اضافه می‌شود.

محدودیت‌ها نزدیک‌ترین لایه به اتصال‌اند، پس محدودیت سرعت دقیقاً همان بایت‌هایی را کند می‌کند که شمارنده‌ها گزارش می‌دهند.

۷. اوتباند ​

اوتباند اتصال را جلو می‌فرستد:

اوتبانداتصال کجا می‌رود
Directمستقیم به مقصد، از آدرس همین نود.
یک پراکسیاز راه سرور دیگری که نام برده‌اید، مثل پراکسی یک ارائه‌دهنده‌ی دیگر.
Blockرد می‌شود. هر رد شدن برای هر اوتباند block و هر نود شمرده می‌شود.
یک تونلبه یک نود مقصد، که آن را به اینترنت می‌فرستد.
یک اندپوینتاز راه یک رابط WireGuard یا مشابه آن بیرون می‌رود.

رد شدن‌ها فقط وقتی شمرده می‌شوند که از یک اوتباند از نوع block بگذرند، و به همین دلیل پیش‌تنظیم‌های آماده مثل مسدودکننده‌ی تورنت به یک اوتباند block مسیر می‌دهند. این آمار با هر ضربان به پنل می‌رسد، و پنل می‌تواند وقتی نرخش بالا رفت هشدار بدهد؛ ببینید پایش و معیارها.

۸. بازگشت به کاربر ​

پاسخ‌ها از همان راه برمی‌گردند، از همان لایه‌ها به ترتیب معکوس: اوتباند، شمارنده‌ها، پروتکل، ترنسپورت و TLS. همان شمارنده‌ها هر دو جهت را می‌بینند.

شمارنده‌ها کجا می‌روند ​

نود شمارنده‌هایش را در حافظه نگه می‌دارد و پنل آن‌ها را جمع می‌کند:

  • هر ۳۰ ثانیه پنل شمارنده‌های هر نود را جمع می‌کند. نود هر شمارنده را هنگام گزارش صفر می‌کند، پس هر بایت یک بار گزارش می‌شود.
  • هر ۱۰ ثانیه پنل آدرس‌هایی را که همه‌ی نودها دیده‌اند ادغام می‌کند و جدول اینکه چه کسی از کجا می‌تواند وصل شود را برمی‌گرداند.
  • در صورت نیاز پنل وقتی اتصال‌های زنده را روی یک کاربر یا نود باز می‌کنید، آن‌ها را از نود می‌پرسد.

اینکه بعد از آن چه بر سر این اعداد می‌آید در ترافیک، سهمیه‌ها و محدودیت‌ها آمده است. اینکه پیکربندی‌ای که به همه‌ی مرحله‌های بالا شکل داده چطور به نود می‌رسد در تغییر بدون ری‌استارت آمده است.

متن و تصویرها با مجوز CC BY 4.0.