mistgate مستندات
FA
199

در پنل مدیریت: نودها

افزودن نود

بین نصب از راه SSH و نصب دستی یکی را انتخاب کنید، سروری را با فرمان یک‌بارمصرف ثبت کنید، آنلاین شدنش را ببینید و بعداً تمیز حذفش کنید.

در این صفحه

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

راه کاری که می‌کنید چه وقت انتخابش کنید
نصب خودکار از راه SSH نشانی سرور را وارد می‌کنید، کلید میزبان SSH آن را تأیید می‌کنید و رمز عبور را می‌نویسید؛ بقیه را پنل انجام می‌دهد. راه معمول. در نصب نود از راه SSH توضیح داده شده.
گرفتن دستور نصب دستی ایجنت را روی سرور کپی می‌کنید و یک فرمان یک‌بارمصرف را با root اجرا می‌کنید. پنل نمی‌تواند از راه SSH به سرور برسد (در نسخهٔ Cloudflare: نشانی از آنِ Cloudflare است یا Cloudflare پراکسی‌اش می‌کند، شبکه خصوصی است، یا SSH فقط روی IP خودتان باز است)، سرور فقط ورود با کلید را می‌پذیرد، یا می‌خواهید فرمان‌ها را خودتان اجرا کنید. در همین صفحه توضیح داده شده.

ایجنت هوش مصنوعی هم می‌تواند از راه MCP نصب SSH را شروع کند؛ شما تأیید می‌کنید و رمز عبور را در صفحهٔ تأیید می‌نویسید: راهنمای ایجنت هوش مصنوعی را ببینید. این صفحه توضیح می‌دهد نود را چطور حذف کنید. اگر پنجره مستقیم روی فیلدهای نام، کشور و آدرس باز می‌شود، پنل از نصب SSH قدیمی‌تر است: اول به‌روزش کنید (به به‌روزرسانی پنل نگاه کنید).

پیش از نصب دستی#

  • سروری که پیش‌نیازها را دارد، با root از راه SSH.
  • فایل اجرایی ایجنت از همان ریلیز پنل: mistgate-node-linux-amd64 یا mistgate-node-linux-arm64. پنلی که بستهٔ ریلیز مورد اعتماد دارد یک فرمان scp آماده برایش چاپ می‌کند؛ وگرنه آن را از همان ریلیز GitHub پنل بردارید، یا از bin/ بیلد خودتان.
  • پنل باید از سرور روی نشانی عمومی‌اش و TCP 443 (یا نشانی‌ای که به serve --agent-addr داده‌اید) در دسترس باشد. پنل هرگز به نود وصل نمی‌شود.

1. نصب دستی را انتخاب کنید#

در نودها ← افزودن نود گزینهٔ گرفتن دستور نصب دستی را انتخاب کنید. همین پنجره از کاشی افزودن نود در نمای کلی، پالت فرمان و پایان جادوگر راه‌اندازی هم باز می‌شود. اگر از قبل نود دستیِ در انتظاری ساخته‌اید، پیش از استفاده از همان نام در جادوگر SSH آن را از رده خارج کنید، یا نام آزاد دیگری انتخاب کنید.

فیلد چه بنویسید
نام a–z، 0–9 و خط تیره، 2 تا 24 نویسه، مثلاً de1. نام‌ها میان نودهای زنده و نصب‌های SSH فعال یکتا هستند؛ از رده خارج کردن نود، نامش را آزاد می‌کند و تاریخچه‌اش را نگه می‌دارد.
کشور اختیاری. برای DNS اهمیت دارد: روی نودهای داخل روسیه، عیب‌یاب gosuslugi.ru را بررسی می‌کند و DNS یاندکس را پیشنهاد می‌دهد.
آدرس دامنه یا IP، بدون https:// و بدون پورت. کلاینت‌ها به آن وصل می‌شوند و در هر اشتراک می‌رود. گواهی Let's Encrypt برای Hysteria2 دامنه‌ای می‌خواهد که رکورد A آن به سرور اشاره کند.

وقتی آدرس یک IP است، پنجره پیش از ادامه این را می‌گوید: Hysteria2 روی آن نود آن‌وقت دامنه‌ای با رکورد A یا گواهی خودامضا (pin‌شده) می‌خواهد، که هنگام افزودن پروفایل انتخابش می‌کنید. AmneziaWG روی IP همان‌طور که هست کار می‌کند.

ساخت دستور نصب را بزنید. نود در فهرست با «منتظر نصب» ظاهر می‌شود و پنجره سه مرحله نشان می‌دهد.

2. ایجنت را روی سرور بگذارید#

اگر پنل در پوشهٔ داده‌اش بستهٔ ریلیز مورد اعتماد داشته باشد (پنلی از ریلیز رسمی خودش یکی دانلود می‌کند)، مرحلهٔ 1 پنجره یک فرمان scp آماده نشان می‌دهد که روی سرور پنل اجرا می‌شود. ایجنت amd64 را کپی می‌کند؛ برای سرور ARM، amd64 را به arm64 تغییر دهید.

وگرنه ایجنت همان ریلیز را خودتان در /root/mistgate-node کپی کنید، مثلاً از ماشین ساخت:

Shell
scp bin/mistgate-node-linux-amd64 root@de1.example.com:/root/mistgate-node

3. فرمان را با root اجرا کنید#

با SSH و کاربر root وارد سرور شوید و فرمان مرحلهٔ 2 پنجره را بچسبانید (کپی دستور). این شکلی است:

Shell
chmod +x /root/mistgate-node && /root/mistgate-node enroll --panel panel.example.com:443 --sni <secret name> \
  --ca-sha256 <fingerprint> --token <one-time token> && /root/mistgate-node install
بخش معنی
--panel میزبان و پورتی که ایجنت به آن وصل می‌شود.
--sni نام TLS مخفی که به نقطهٔ اتصال ایجنت می‌رسد. بدون آن پنل سایت پوششی را نشان می‌دهد.
--ca-sha256 اثرانگشت CA پنل. نود فقط با آن به پنل اعتماد می‌کند. پنجره آن را زیر جزئیات هم نشان می‌دهد.
--token توکن ثبت یک‌بارمصرف. یک بار کار می‌کند و بعد از یک ساعت منقضی می‌شود؛ پنجره تا چه زمانی را نشان می‌دهد.

در صورت موفقیت این را چاپ می‌کند:

متن
enrolled as nod_... with panel.example.com:443; state in /var/lib/mistgate-node
next: mistgate-node install   (or, in the foreground: mistgate-node run)
installed /etc/systemd/system/mistgate-node.service (state /var/lib/mistgate-node)
started; follow it with: journalctl -u mistgate-node -f
نکته

تا وقتی enroll اجرا می‌شود، توکن در فهرست فرایندهای سرور دیده می‌شود. یک‌بارمصرف و کوتاه‌عمر است؛ اگر دیگران هم از سرور استفاده می‌کنند، به‌جای --token متغیر MISTGATE_ENROLL_TOKEN را تنظیم کنید یا توکن را با --token-stdin از ورودی استاندارد بدهید.

روی سرور چه می‌شود#

enroll:

  1. روی نود یک کلید P-256 و یک درخواست گواهی می‌سازد. کلید هرگز سرور را ترک نمی‌کند.
  2. با نام مخفی روی TLS 1.3 به --panel وصل می‌شود و سرور را فقط وقتی می‌پذیرد که زنجیره‌اش به CA‌ای با اثرانگشت pin‌شده ختم شود.
  3. توکن و درخواست را می‌فرستد. پنل توکن را بررسی می‌کند (فقط هش آن را ذخیره می‌کند)، گواهی کلاینتی با اعتبار 30 روز صادر می‌کند و همراه CA خود برمی‌گرداند.
  4. کلید و گواهی (identity.pem)، CA پنل (ca.pem) و نشانی پنل (agent.json) را در /var/lib/mistgate-node می‌نویسد (پوشه 0700، فایل‌ها 0600).

install:

  1. بررسی می‌کند با root اجرا می‌شود و پوشهٔ وضعیت یک هویت دارد.
  2. خودش را به /usr/local/bin/mistgate-node کپی می‌کند. فایل داخل /root دیگر لازم نیست.
  3. unit سخت‌شدهٔ /etc/systemd/system/mistgate-node.service را متناسب با حافظهٔ سرور می‌نویسد، سپس systemctl daemon-reload، enable و restart را اجرا می‌کند.

ایجنت، پس از راه‌اندازی:

  1. خط پایهٔ میزبان را اعمال می‌کند: مقدارهای sysctl برای fq و BBR، حداکثر بافر سوکت UDP (net.core.rmem_max و net.core.wmem_max) دست‌کم 16 MiB، سقف اندازهٔ journald و نگهبان SSH در جدول nftables مخصوص خودش. سوکت‌های تازهٔ رلهٔ UDP دست‌کم 1 MiB از net.core.rmem_default و net.core.wmem_default به ارث می‌برند؛ net.ipv4.udp_mem همچنان سقف کل حافظهٔ UDP را تعیین می‌کند. جدول conntrack دست‌کم 65,536 ورودی و 16,384 bucket می‌گیرد و مقدارهای زندهٔ بزرگ‌تر حفظ می‌شوند.
  2. آخرین وضعیت اعمال‌شده را از پوشهٔ وضعیتش برمی‌گرداند (در اولین شروع چیزی نیست).
  3. یک اتصال بلندمدت با TLS دوطرفه به پنل باز می‌کند، واقعیت‌های میزبان را گزارش می‌دهد و تنظیم‌ها و وضعیت مطلوب را دریافت می‌کند: کدام سرورها را اجرا کند، با اعتبارنامهٔ کدام کاربران.
  4. هر 10 ثانیه ترافیک، نشست‌ها و سنجه‌های میزبان را می‌فرستد، 30 ثانیه پس از اتصال و بعد از آن هر 10 دقیقه عیب‌یاب را اجرا می‌کند، و وقتی کمتر از 10 روز به پایان گواهی مانده آن را (با کلید تازه) تمدید می‌کند.

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

4. نود آنلاین می‌شود#

پنجره خودش تازه می‌شود. ظرف چند ثانیه پس از install مرحلهٔ 3 به متصل شد تبدیل می‌شود، و رویدادهای نود «برای اولین بار متصل شد» را با نسخهٔ ایجنت نشان می‌دهند. افزودن پروفایل به de1 را بزنید تا با اولین کاربران ادامه دهید: تا وقتی پروفایلی روی نود اجرا نشود، نود می‌گوید «پروفایلی نیست: کاربران این نود را نمی‌گیرند».

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

اگر نود آنلاین نشد، لاگ ایجنت را روی سرور بخوانید:

Shell
systemctl restart mistgate-node && journalctl -u mistgate-node -n 50 --no-pager

خط‌های دارای panel connection lost دلیل را دارند. ساعت سرور را هم بررسی کنید که درست باشد.

دستور نصب تازه#

نودی که منتظر نصب است در صفحهٔ خودش، در نمای کلی و در چک‌لیست اولین راه‌اندازی دکمهٔ دستور نصب تازه دارد. وقتی فرمان منقضی شد یا گم شد از آن استفاده کنید. فرمان تازه فرمان‌های قدیمیِ مصرف‌نشده را از کار می‌اندازد.

نودی که قبلاً ثبت شده بوده (گواهی گم‌شده، سرور دوباره نصب‌شده، پوشهٔ وضعیت گم‌شده) همین دکمه را در زبانهٔ سرور خودش دارد، برای هر نودی که از رده خارج نیست. فقط مالک آن را می‌بیند. نود نام، پروفایل‌ها و کاربرانش را نگه می‌دارد؛ گواهی قدیمی وقتی ایجنت جدید وصل شود از کار می‌افتد. اگر پوشهٔ وضعیت قدیمی هنوز روی سرور باشد، enroll با already enrolled; use --force to replace the identity امتناع می‌کند: بعد از enroll پرچم --force را اضافه کنید.

حذف نود#

نود را باز کنید، سرور ← منطقهٔ خطر ← از رده خارج کردن، و برای تأیید نام نود را بنویسید. پنل آن‌وقت:

  • نود را از دسترسی همهٔ کاربران بیرون می‌برد: کاربران دیگر آن را در اشتراکشان نمی‌گیرند، لینک‌هایشان همان می‌ماند؛
  • گواهی نود را باطل و فرمان‌های نصب مصرف‌نشدهٔ آن را لغو می‌کند؛
  • رکورد و تاریخچهٔ نود را در پنل و لاگ ممیزی نگه می‌دارد؛ نامش برای نصب بعدی آزاد می‌شود؛
  • دسترسی SSH ذخیره‌شدهٔ نودی را که از راه SSH نصب شده نگه می‌دارد: همچنان می‌توانید رمز عبور را زیر سرور ← دسترسی SSH نودِ از رده خارج‌شده نشان دهید، و فقط فراموش کردن دسترسی ذخیره‌شده آن را پاک می‌کند. اگر پنل آن رمز عبور را ساخته باشد (چرخش از راه MCP)، پنجرهٔ از رده خارج کردن هشدارتان می‌دهد: آن را نشان دهید و یک نسخه نگه دارید.

اگر ایجنت وصل باشد، فرمان از رده خارج شدن را می‌گیرد و، روی سرور:

  1. سرورهایش را متوقف می‌کند؛
  2. اگر نود WARP داشت آن را برمی‌دارد؛
  3. تغییرهای میزبانش را برمی‌دارد: جدول‌های nftables‌اش، قانون‌های UFW دارای برچسبش (قانون‌های listener UDP و قانون‌های 80/443 نصب SSH؛ قانون SSH می‌ماند)، رابط‌های AmneziaWG، فایل‌های sysctl و journald (journald دوباره راه‌اندازی می‌شود، پس سقف اندازه‌اش همان لحظه برداشته می‌شود)، و راه‌حل resolver عیب‌یاب اگر اعمال شده بود؛
  4. پوشهٔ وضعیتش را پاک می‌کند (اول کلید) و خارج می‌شود.

آنچه روی سرور می‌ماند: فایل اجرایی، unit (هنوز فعال)، مقدارهایی که از قبل در کرنل در حال اجرا تنظیم شده‌اند (fq، BBR، بافرهای UDP، IP forwarding) تا راه‌اندازی دوبارهٔ بعدی، و ماژول کرنل AmneziaWG با بسته‌هایش اگر نصبش کرده باشید. بقیه را دستی پاک کنید:

Shell
systemctl disable --now mistgate-node
rm -f /etc/systemd/system/mistgate-node.service
systemctl daemon-reload
rm -f /usr/local/bin/mistgate-node /usr/local/bin/mistgate-node.prev /usr/local/bin/mistgate-node.new /root/mistgate-node
rm -rf /var/lib/mistgate-node
هشدار

نودی که هنگام از رده خارج کردن آفلاین بود هرگز فرمان را نگرفته است. پنل گواهی‌اش را نمی‌پذیرد، اما ایجنت آخرین وضعیتی را که اعمال کرده اجرا می‌کند (سرورهایش برای کاربرانی که داشت کار می‌کنند) و همچنان سعی می‌کند وصل شود. پنل همان لحظه می‌گوید («{name} دستور را نگرفت») و همهٔ فرمان‌ها را برای کپی نشان می‌دهد. چنین سروری را دستی پاک کنید، با مرحله‌های زیر شروع کنید، سپس فرمان‌های بالا را اجرا کنید.

Shell
systemctl disable --now mistgate-node      # its stop runs cleanup-net: tunnel interfaces, WARP routes, their tables
nft delete table inet mistgate_node        # the SSH guard and port-hopping rules
rm -f /etc/sysctl.d/90-mistgate.conf /etc/systemd/journald.conf.d/90-mistgate.conf
systemctl restart systemd-journald

اگر راه‌حل resolver عیب‌یاب را روی آن نود اعمال کرده‌اید، /etc/systemd/resolved.conf.d/90-mistgate.conf را حذف و systemd-resolved را دوباره راه‌اندازی کنید، یا /etc/resolv.conf را از /etc/resolv.conf.mistgate.bak برگردانید (وقتی /etc/resolv.conf.mistgate.bak.link وجود دارد، اصل فایل یک symlink به مسیری بوده که در آن نوشته شده).

mistgate-node cleanup-net را هر وقت بخواهید می‌توان اجرا کرد. رابط‌های AmneziaWG و WARP، مسیرها و قاعده‌های WARP و جدول‌های nftablesشان را حذف می‌کند؛ ایجنت هنگام شروع دوباره می‌سازدشان. آدرس‌های IPv6‌ای را که ایجنت به سرور افزوده (آدرس‌های خودِ نود، که در ipv6-owned.json در پوشهٔ وضعیت آمده‌اند) دست نمی‌زند، تا راه‌اندازی دوباره یا به‌روزرسانی آن‌ها را نیندازد؛ mistgate-node cleanup-net --ipv6-addresses آن‌ها را هم برمی‌دارد، و هرگز آدرسی را که از پیش روی میزبان بوده برنمی‌دارد. از رده خارج کردن نود هم آن‌ها را برمی‌دارد.

وقتی ثبت شکست می‌خورد#

چه می‌بینید علت چه کنید
enroll: --panel, --sni, --ca-sha256 and --token are required فرمان هنگام چسباندن بریده شده. دوباره با کپی دستور کپی کنید.
--ca-sha256 must be 64 hex digits همان. همان.
enrollment token unknown, expired or used فرمان از یک ساعت قدیمی‌تر است، قبلاً استفاده شده، یا فرمان تازه‌تری برای این نود ساخته شده. دستور نصب تازه در صفحهٔ نود.
too many failed attempts, try later ده تلاش ناموفق در یک دقیقه از این آدرس. یک دقیقه صبر کنید و فرمان تازه به کار ببرید.
node retired نود از رده خارج شده. نود جدیدی اضافه کنید.
no certificate in the chain matches the pinned CA fingerprint، panel did not present its CA certificate یا the CA returned by the panel does not match --ca-sha256 چیزی غیر از پنل در --panel به TLS پاسخ می‌دهد: CDN یا reverse proxy جلوی آن، آدرس اشتباه، یا پنلی که پس از ساخت فرمان پوشهٔ دادهاش دوباره ساخته شده. DNS پنل را مستقیم به سرور پنل اشاره دهید، --public-url و --agent-addr را بررسی کنید، فرمان تازه بسازید.
timeout یا connection refused پنل از کار افتاده، فایروالی TCP 443 را به پنل می‌بندد، یا آدرس داخل فرمان اشتباه است. پنل و فایروالش را بررسی کنید؛ از نود با curl -I https://panel.example.com/ امتحان کنید.
already enrolled; use --force to replace the identity پوشهٔ وضعیت از قبل یک هویت دارد. بعد از enroll پرچم --force را اضافه کنید، یا اول /var/lib/mistgate-node را حذف کنید.
install: must run as root root نیستید. فرمان را با root اجرا کنید.
holds no identity: run mistgate-node enroll first enroll شکست خورد، یا install یک --state-dir دیگر گرفت. enroll را با همان پوشهٔ وضعیت دوباره اجرا کنید.
پنل مدیریت به ساخت دستور نصب با «panel address is not configured» پاسخ می‌دهد پنل هیچ نشانی‌ای برای ایجنت‌ها نمی‌شناسد: setup بدون --public-url اجرا شده و serve پرچم --agent-addr را ندارد. پنل را با --agent-addr panel.example.com:443 دوباره راه‌اندازی کنید.

نشانه‌ها و راه‌حل‌های بیشتر در عیب‌یابی است. تنظیم‌های روزمرهٔ نود در نودها آمده است.

ویرایش این صفحه در GitHub