رفتن به محتوا

نود سروری است که ترافیک کاربران از آن عبور می‌کند. پنل پیکربندی هر نود را تولید کرده و از طریق HTTPS به عامل نود ارسال می‌کند؛ کلاینت‌ها مستقیماً به نود متصل می‌شوند و پنل هرگز ترافیک آن‌ها را عبور نمی‌دهد.

بخش نودها: وضعیت زنده‌ی نود، ترافیک روزانه و سرویس‌ها

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

جایگاه نوع هسته سرویس
Xray xray VLESS، VMess، Trojan، Shadowsocks
IPsec ikev2 یا l2tp کلاینت‌های بومی IKEv2/IPsec یا L2TP/IPsec
L2TP l2tp کلاینت‌های L2TP/IPsec، کنار هسته‌ی IKEv2 در جایگاه IPsec

با IKEv2 در جایگاه IPsec و یک هسته‌ی L2TP در جایگاه L2TP، یک سرور هر دو را هم‌زمان سرویس می‌دهد: strongSwan هر دو اتصال را کنار هم بارگذاری می‌کند و xl2tpd کنارش اجرا می‌شود. گوشی‌های اندروید جدید (از اندروید ۱۲ به بعد L2TP ندارند) با IKEv2 وصل می‌شوند و گوشی‌های قدیمی، آیفون و ویندوز با L2TP. در صفحه‌ی هسته‌ها، روی کارت هسته‌ی L2TP نود را تیک بزنید.

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

۱. در صفحه‌ی نودها، نود را با نشانی، پورت عامل و هسته‌های دو جایگاهش ایجاد کنید. پنل یک کلید API اختصاصی برای نود تولید می‌کند.

۲. دستور نصبی را که برای نود نمایش داده می‌شود روی سرور نود اجرا کنید. این دستور فایل install-node.sh را از تگ ریلیزِ هم‌نسخه با خود پنل (مثلاً v1.5.6، نه شاخه‌ی main) در یک فایل موقت دانلود می‌کند و فقط اگر SHA-256 آن با چک‌سامِ ساخته‌شده در پنل یکی باشد، آن را با کلید API و پورت نود اجرا می‌کند؛ اسکریپتِ تغییرکرده یا دستکاری‌شده پیش از اجرای هر چیزی متوقف می‌شود.

مقدار پیش‌فرض PORT برابر 62050 است. اسکریپت ایمیج آماده‌ی نود را دریافت می‌کند (و در صورت در دسترس نبودن، آن را به‌صورت محلی می‌سازد)، ماژول‌های کرنل لازم را بارگذاری می‌کند، برای سرعت بیشتر در مسیرهای طولانی و پراتلاف الگوریتم BBR و بافرهای شبکه‌ی بزرگ‌تر را فعال می‌کند (/etc/sysctl.d/99-tifusi-network.conf) و کانتینر tifusi-node را روی شبکه‌ی میزبان اجرا می‌کند.

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

نصب از طریق SSH (از داخل پنل)

Section titled “نصب از طریق SSH (از داخل پنل)”

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

۱. کاربر و پورت SSH سرور و فقط برای اتصال اول، رمز یا کلید خصوصی آن را وارد کنید. گزینه‌ی نصب کلید پنل را روشن بگذارید: پنل کلید خودش (data/ssh/id_ed25519 که در اولین استفاده ساخته می‌شود) را به authorized_keys سرور اضافه می‌کند و از آن به بعد با همین کلید وصل می‌شود. رمز یا کلید شما هیچ‌جا ذخیره نمی‌شود.

۲. روش آفلاین (بسته) یا آنلاین (گیت‌هاب) را انتخاب کرده و شروع نصب را بزنید. روش آنلاین همان دستور یک‌خطی را روی سرور اجرا می‌کند. روش آفلاین بسته‌ی توضیح‌داده‌شده در پایین را با SFTP بارگذاری می‌کند (اگر همان فایل با SHA-256 یکسان از قبل روی سرور باشد، بارگذاری انجام نمی‌شود) و اجرایش می‌کند. خروجی نصب زنده نمایش داده می‌شود و در پایان پنل نود را همگام‌سازی می‌کند.

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

زبانه‌ی ترمینال هر دستوری را روی سرور نود اجرا می‌کند (با root، یا با sudo بدون رمز برای کاربر دیگر) و خروجی و کد خروج را نشان می‌دهد؛ دکمه‌های آماده برای وضعیت نود، لاگ، ری‌استارت، دیسک و رم، فایروال و پورت‌ها هم هست. SSH نودها فقط برای مالک پنل باز است و هر دستور همراه با نام مدیر اجراکننده در لاگ ثبت می‌شود.

شیت SSH هر نود یک تب آپدیت دارد و صفحه‌ی نودها یک 🔄 آپدیت تدریجی نودها برای چند نود با هم، با Canary در ابتدا. نود ایمیج جدید را خودش تست می‌کند، ایمیج فعلی را با نام tifusi-node-agent:rollback نگه می‌دارد و اگر ایجنت جدید جواب ندهد خودش برش می‌گرداند؛ بعد پنل کانفیگ را دوباره می‌فرستد، بررسی می‌کند هر سرویسی که سالم بود هنوز سالم باشد و نود را برای یک دوره زیر نظر می‌گیرد، و تازه سراغ نود بعدی می‌رود. جزئیات در به‌روزرسانی امن. دستور tifusi node update روی خود سرور نود هم مثل قبل کار می‌کند.

برای سروری که به گیت‌هاب، ghcr.io، داکر هاب و مخازن apt دسترسی ندارد (سرور ایران هنگام قطعی اینترنت بین‌الملل)، بسته را روی سرور پنل که اینترنت آزاد دارد بسازید:

Terminal window
tifusi panel node-bundle

خروجی فایل data/node-bundle/tifusi-node-offline.tar است و شامل این‌هاست: ایمیج نود (docker save)، باینری‌های استاتیک داکر (روی سرور بدون داکر با سرویس systemd خودش نصب می‌شود و به توزیع وابسته نیست)، بسته‌های iptables/kmod/iproute2 برای اوبونتو ۲۲.۰۴ و ۲۴.۰۴ و دبیان ۱۲ (فقط وقتی سرور آن‌ها را ندارد نصب می‌شوند)، باینری‌های تانل، دستور tifusi node و فایل SHA256SUMS که نصب‌کننده اول آن را بررسی می‌کند. بعد از هر به‌روزرسانی پنل بسته را دوباره بسازید تا نودها ایمیج جدید را بگیرند.

از دکمه‌ی SSH نود (روش آفلاین) استفاده کنید، یا از همان‌جا بسته را دانلود کرده و خودتان از طریق شبکه‌ی داخلی منتقل کنید:

Terminal window
scp tifusi-node-offline.tar root@NODE:/root/
ssh root@NODE 'cd /root && tar xf tifusi-node-offline.tar && cd tifusi-node-offline && bash install-node.sh <API_KEY> [PORT]'

install-node.sh فقط وقتی به حالت آفلاین می‌رود که از داخل بسته‌ی بازشده اجرا شود (یا TIFUSI_OFFLINE_DIR به آن اشاره کند)؛ دستور یک‌خطی curl همیشگی تغییری نکرده است. در حالت آفلاین اگر ufw فعال باشد، پورت عامل را هم باز می‌کند. پیش از شروع قطعی، یک نسخه از بسته را روی سرور ایران نگه دارید.

نصب‌کننده دستور tifusi node را روی سرور نود نصب می‌کند؛ منوی مخصوص همان سرور با گزینه‌های status، logs، restart و uninstall که به‌صورت tifusi node <action> هم کار می‌کند.

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

۱. tifusi node uninstall روی خود نود، عامل را حذف می‌کند.

۲. گزینه‌ی Remove a node from this panel در tifusi panel، یا صفحه‌ی نودها، نود را از پنل حذف می‌کند.

هر تغییری که بر یک نود اثر می‌گذارد (ایجاد، تمدید، محدودسازی یا حذف کاربر، ویرایش هسته، تغییر گروه) به مجموعه‌ی مؤثر کاربران آن نود تبدیل شده و در دو بخش ارسال می‌شود: JSON نهایی Xray به POST /config، و اتصال‌های IPsec، رمزهای EAP، PSK و بازه‌های نشانی به POST /ipsec-config. هر TIFUSI_TRAFFIC_SYNC_INTERVAL_SECONDS ثانیه (پیش‌فرض ۳۰) پنل مسیرهای GET /health و GET /stats را فراخوانی می‌کند، ترافیک هر کاربر را جمع می‌زند، کاربران را در موعد مقرر به وضعیت expired یا limited می‌برد و نودهایی را که مجموعه‌ی کاربرانشان تغییر کرده دوباره همگام می‌کند. نمودار کامل این چرخه در بخش معماری آمده است.

هر ارسال به‌صورت امن اعمال می‌شود: ایجنت کانفیگ جدید Xray را قبل از دست زدن به پروسه‌ی در حال اجرا با xray run -test بررسی می‌کند، آخرین کانفیگی را که اجرا شده نگه می‌دارد و اگر سرویسی روی کانفیگ جدید از کار بیفتد آن را برمی‌گرداند (Xray، WireGuard، Hysteria2، strongSwan، xl2tpd، pptpd). کانفیگ ردشده با دلیلش روی صفحه‌ی نود نشان داده می‌شود و نود با کانفیگ قبلی متصل می‌ماند. به‌روزرسانی امن را ببینید.

محدودیت دستگاه هر کاربر روی خود نود و به‌صورت اتصال هم‌زمان برای Xray، IKEv2 (حالت EAP) و L2TP اعمال می‌شود. دستگاه‌هایی که وصل هستند وصل می‌مانند و دستگاه اضافه تا خالی شدن جا منتظر می‌ماند. در Xray هر IP یک دستگاه حساب می‌شود و بررسی هم کاربر و هم IP را در نظر می‌گیرد، پس مشتریانی که پشت یک IP اپراتور هستند بر یکدیگر اثر نمی‌گذارند.

  • عامل نود با یک گواهی خودامضا که در نخستین اجرا تولید می‌شود (backend/node_agent/tls.py) روی HTTPS سرویس می‌دهد؛ به این ترتیب اعتبارنامه‌ها و اسرار ارسالی در مسیر رمزنگاری می‌شوند.
  • هر درخواست کلید اختصاصی نود را در سرآیند X-Node-Api-Key حمل می‌کند. پنل گواهی عامل را اعتبارسنجی نمی‌کند، بنابراین کلید API اعتبارنامه‌ی اصلی است. TLS دوطرفه هنوز پیاده‌سازی نشده است.
  • کانتینر نود با --network host اجرا می‌شود تا Xray بتواند پورت‌هایی را که پس از راه‌اندازی کانتینر تعریف می‌شوند اشغال کند و پورت‌های UDP 500، 4500 و 1701 روی نشانی عمومی به charon و xl2tpd برسند.