Skip to content

تغییر بدون ری‌استارت ​

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

قاعده ​

هر تغییر فقط به‌صورت همان تغییر به نود می‌رسد:

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

و یک تغییر هیچ‌وقت نود را از قبل بدتر نمی‌کند: بخشی که شکست بخورد گزارش می‌شود و بقیه همچنان اعمال می‌شود.

هش‌ها: دانستن اینکه نود چه اجرا می‌کند ​

نود فهرستی از چیزهایی که اجرا می‌کند گزارش می‌دهد، با یک هش برای هر آیتم:

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

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

چه چیزی زنده اعمال می‌شود ​

تغییرچطور به نود می‌رسد
کاربرهای یک اینباند: اضافه، حذف، فعال، غیرفعال، تمدید، اطلاعات ورود تازهکل مجموعه‌ی کاربرهای اینباند در جا جایگزین می‌شود. اتصال‌های باز بقیه‌ی کاربرها دست‌نخورده می‌مانند. مجموعه‌ای برابر با آنچه اینباند دارد چیزی را تغییر نمی‌دهد.
اعضای یک تونل: نود مقصدی اضافه یا حذف شده، اطلاعات ورودی چرخانده شدهبه نیمه‌ی در حال اجرا peerهای تازه‌اش گفته می‌شود. لینک‌هایی که برقرارند برقرار می‌مانند؛ لینک‌های مقصد حذف‌شده قطع می‌شوند.
قانون‌های مسیریابی، رول‌ست‌ها، اوتباند final، DNS، سطح لاگ، همگام‌سازی زمان، گواهی‌های مورد اعتمادبا هم به‌صورت یک به‌روزرسانی پایه اعمال می‌شوند. اگر مرحله‌ای در میانه رد شود، مرحله‌هایی که انجام شده‌اند برگردانده می‌شوند.
یک اینباند، اوتباند یا اندپوینت تازهکنار چیزی که در حال اجراست اضافه می‌شود.
آیتمی که حذف شدهحذف می‌شود. نود حذف چیزی را که پیکربندی در حال اجرا هنوز لازم دارد، مثل اوتباند final، رد می‌کند؛ پنل اول جایگزین را اضافه می‌کند و سپس حذف را دوباره امتحان می‌کند.

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

چه چیزی بازسازی می‌شود ​

بعضی تغییرها را نمی‌شود روی آیتمی در حال اجرا اعمال کرد، و آن‌وقت همان یک آیتم دوباره ساخته می‌شود:

  • اینباندی که تغییر کرده: پورت، TLS، گواهی، ترنسپورت یا گزینه‌های پروتکلش.
  • کاربرهای چند پروتکل که فهرست کاربرشان را نمی‌شود در جا تغییر داد: SOCKS، HTTP، mixed، Naive، Mieru، ShadowTLS و WireGuard با تغییر کاربر همان یک آیتم را بازسازی می‌کنند.
  • شکل یک تونل: پورت‌ها، TLS، ترنسپورت یا توزیع بارش.

هزینه‌ی بازسازی کمتر از آن است که به نظر می‌رسد:

  • اینباند TCP بازسازی‌شده اتصال‌های بازش را نگه می‌دارد.
  • اینباند QUIC بازسازی‌شده (Hysteria2، TUIC) به کلاینت‌هایش خبر می‌دهد، تا به‌جای منتظر ماندن برای timeout فوراً دوباره وصل شوند.
  • کلاینت‌های WireGuard در حدود ۲۰ ثانیه برمی‌گردند.

کی نود ری‌استارت می‌شود ​

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

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

یک آیتم بد نود را متوقف نمی‌کند ​

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

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

پنل هنگام ذخیره چیزی را بررسی می‌کند که نود هنگام بارگذاری رد می‌کرد، پس بیشتر اشتباه‌ها در همان فرم گرفته می‌شوند، پیش از اینکه چیزی به نود برسد.

خودترمیمی ​

یک تغییر ممکن است در راه شکست بخورد: نودی برای مدت کوتاهی در دسترس نبوده، مرحله‌ای رد شده، یا دو تغییر با هم تلاقی کرده‌اند. پنل فرض نمی‌کند یک تغییر حتماً رسیده است:

  1. هر تغییر تکی به یک مقایسه‌ی کامل برمی‌گردد. اگر افزودن یک کاربر شکست بخورد، پنل کل نود را با چیزی که باید اجرا کند مقایسه می‌کند و همه‌ی تفاوت‌ها را می‌فرستد.
  2. مقایسه‌ی کامل به ارسال کامل برمی‌گردد، وقتی نود هیچ چیزی در حال اجرا ندارد یا نمی‌تواند پایه را زنده بپذیرد.
  3. ضربان، هر ۱۵ ثانیه، پیکربندی را دوباره برای نودی می‌فرستد که چیزی را که به آن داده شده سرو نمی‌کند. تا وقتی نود همچنان رد می‌کند، فاصله را از ۳۰ ثانیه تا ۱۰ دقیقه بیشتر می‌کند.
  4. یک پیمایش انحراف هر ۱۰ دقیقه پایه‌ی هر نود (مسیریابی، DNS و رول‌ست‌ها) را با آنچه باید باشد مقایسه می‌کند و هر تفاوتی را اصلاح می‌کند.

همگام‌سازی در منوی یک نود همین مقایسه را دستی اجرا می‌کند.

رول‌ست‌ها روی نود ​

پنل هر رول‌ست را دانلود می‌کند، به‌روز نگه می‌دارد و روی اتصال کنترل برای هر نودی که لازمش دارد می‌فرستد. نودها خودشان هیچ چیزی از اینترنت دریافت نمی‌کنند.

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

چه چیزی هرگز فرستاده نمی‌شود ​

  • آیتم‌هایی که به همه یا به هیچ‌کس سرویس می‌دادند. اینباند بدون کاربر جایی کنار گذاشته می‌شود که فهرست کاربر خالی آن را یک پراکسی باز (SOCKS، HTTP، mixed) یا سروری روی یک کلید مشترک (Shadowsocks، Snell) می‌کرد، و همین درباره‌ی سرور OpenVPN یا OpenConnect بدون کاربر هم صدق می‌کند. وقتی کاربری پیدا کرد فرستاده می‌شود.
  • کاربری بدون اطلاعات ورودی که پروتکلش لازم دارد. آن کاربر با هشداری روی نود از آن اینباند کنار گذاشته می‌شود و همه‌ی کاربرهای دیگر سرویس می‌گیرند.
  • نود و پنلش: نشست‌ها، ضربان‌ها و کاری که نود بدون پنلش می‌کند.
  • درون یک تونل: اعضای یک تونل چطور زنده تغییر می‌کنند.
  • نودها: فهرست نودها، هشدارهایشان و عمل همگام‌سازی.

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