Skip to content

Latest commit

 

History

History
372 lines (283 loc) · 23.4 KB

File metadata and controls

372 lines (283 loc) · 23.4 KB

نصب نود Nexora

نود لایهٔ داده است: یک agent بدون حالت که ترافیک کاربران را پایان می‌دهد و هر چه پنل بگوید انجام می‌دهد. نه دیتابیس دارد، نه رابط مدیریتی، و نه فایل تنظیماتی که ارزش پشتیبان‌گیری داشته باشد — تنها حالتش یک جفت گواهی است. این عمدی است: نودی که از دست برود دوباره در پنل ثبت می‌شود و دقیقاً همان‌طور بازمی‌گردد، و هیچ چیزی روی آن نیاز به مهاجرت یا بازیابی ندارد.

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

پیش‌نیازها

  • یک سرور لینوکسی با systemd. معماری‌های amd64، arm64، armv5/v6/v7، ‏386، s390x و riscv64 همگی منتشر می‌شوند.
  • دسترسی root.
  • دسترسی خروجی به پنل، و پورت TCP ‏62050 که از سمت پنل در دسترس باشد — روی IPv4 یا IPv6؛ نود روی هر دو گوش می‌دهد.
  • هر پورتی که inboundهای اختصاص‌یافته به این نود روی آن گوش می‌دهند.

نود به لایسنس مستقل نیاز ندارد. لایسنس پنل تعیین می‌کند چند نود را می‌تواند مدیریت کند.

نصب معمول

در پنل نود را اضافه کنید و دستوری را که نشان می‌دهد کپی کنید:

curl -fsSL https://PANEL/install-node.sh | bash -s -- --panel PANEL --token TOKEN

آن را با کاربر root روی سرور جدید اجرا کنید. در کمتر از یک دقیقه:

۱. معماری را تشخیص می‌دهد و باینری نود را از پنل شما دانلود می‌کند، نه از اینترنت. ۲. مقدار TOKEN را با گواهی کلاینت mTLS پنل مبادله می‌کند. این توکن یک‌بارمصرف است و انقضا دارد؛ پنل آن را در همین درخواست مصرف می‌کند و دیگر هرگز کار نمی‌کند. ۳. گواهی و کلید سرور مخصوص خود نود را می‌سازد. ۴. فایل /opt/nexora-node/config.json و یک یونیت systemd می‌نویسد و سرویس را استارت می‌کند.

پنل وصل می‌شود، اثر انگشت گواهی نود را در همان اولین اتصال ثبت می‌کند و از آن پس فقط همان گواهی را می‌پذیرد — اعتماد در اولین استفاده (TOFU). نود هم متقابلاً فقط گواهی کلاینت پنل را می‌پذیرد. هیچ چیز دیگری در اینترنت نمی‌تواند طوری با پورت ۶۲۰۵۰ حرف بزند که از دست‌دهی TLS عبور کند.

گزینه‌هایی که می‌توانید به دستور اضافه کنید:

فلگ اثر
--listen ADDR بایند کردن API کنترلی روی جایی غیر از [::]:62050 (وایلدکارد IPv6 که IPv4 را هم پاسخ می‌دهد)
--binary-url URL گرفتن باینری از جایی غیر از پنل

اگر پنل برای معماری این سرور باینری آماده نداشته باشد، نصب در گام ۱ با پیام node binary not provisioned شکست می‌خورد. آن را روی سرور پنل آماده کنید و دستور را دوباره اجرا کنید — فقط به این خاطر سراغ نصب دستی نروید:

# روی سرور پنل
curl -fsSL -o /tmp/node.tar.gz \
  https://github.com/nexora-vpn/node/releases/latest/download/nexora-node-linux-armv7.tar.gz
tar -C /tmp -xzf /tmp/node.tar.gz
install -m 0755 /tmp/nexora-node/nexora-node /var/opt/nexora/bin/nexora-node-linux-armv7

نصب خودکار

پنل می‌تواند همهٔ کارهای بالا را از راه SSH برایتان انجام دهد. در کشوی نصب نود — یا در پایین پنجرهٔ افزودن نود — به تب خودکار (SSH) بروید، یک ورود به سرور در اختیار پنل بگذارید و تشخیص را بزنید.

پنل گزارش می‌دهد این سرور چیست (توزیع، معماری، داشتن systemd یا داکر) و چه چیزی روی آن نصب است، سپس برنامه را نشان می‌دهد: با چه روشی و به چه نسخه‌ای می‌رود. با زدن نصب، خروجی زنده برمی‌گردد.

یک تفاوت مهم با دستور بالا دارد: آپلود می‌کند. نصب‌کننده، گواهی کلاینت پنل و — به‌طور پیش‌فرض — خود باینری نود، همه از روی همان اتصال SSH می‌روند. سرور نه به مسیری تا پنل نیاز دارد، نه تا گیت‌هاب، و نه به اعتماد به گواهی TLS پنل. چون چیزی دانلود نمی‌شود، توکن نصب هم اصلاً در کار نیست.

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

اطلاعات ورود

به‌طور پیش‌فرض چیزی ذخیره نمی‌شود. رمز عبور فقط برای همان یک اتصال استفاده و بعد دور ریخته می‌شود.

اگر کلید پنل روی این سرور مجاز شود را بزنید، پنل کلید عمومی خودش را به authorized_keys کاربر ورود اضافه می‌کند و بعد با باز کردن یک اتصال دوم ثابت می‌کند که کار می‌کند. از آن پس به‌روزرسانی‌ها هیچ رمزی نمی‌خواهند. این یک دسترسی ماندگار به هر کاری است که آن کاربر می‌تواند بکند — از منوی نود (ابطال کلید پنل) یا با حذف دستی خط nexora-panel-… از ~/.ssh/authorized_keys باطلش کنید.

کاربر ورود لازم نیست root باشد. کاربری با sudo هم کار می‌کند؛ پنل با همان رمزی که داده‌اید ارتقای دسترسی می‌دهد.

اولین اتصال، کلید میزبان SSH سرور را پین می‌کند — همان‌طور که پنل گواهی TLS یک نود را پین می‌کند. اگر سرور بعداً کلید دیگری ارائه کند، پنل وصل نمی‌شود و می‌گوید چرا، به‌جای اینکه ادامه دهد: یا ماشین عوض شده، یا چیزی میان شما و آن نشسته است.

انتقال نود به سرور دیگر

به‌جای ویرایش آدرس، از انتقال به سرور دیگر در منوی نود استفاده کنید. سه چیز به ماشینی که نود روی آن بوده پین شده‌اند: پین گواهی TLS، کلید میزبان SSH، و آنچه پنل از نحوهٔ استقرار نود به یاد دارد. اگر به سرور جدید منتقل شوند، اولی هر اتصالی را رد می‌کند، دومی هر ورودی را، و سومی نصب‌کننده را وامی‌دارد برای میزبانی که شاید اصلاً داکر ندارد، به‌روزرسانی داکری برنامه‌ریزی کند. انتقال هر سه را پاک می‌کند و بعد روی سرور جدید مثل یک سرور تازه نصب می‌کنید — چون همان است.

روش استقرار و نسخه

هر دو برایتان انتخاب می‌شوند و هر دو قابل تغییرند.

روش استقرار پیش‌فرض همان چیزی است که سرور از قبل اجرا می‌کند، پس یک به‌روزرسانی هرگز بی‌صدا نود را از کانتینر به سرویس (یا برعکس) تبدیل نمی‌کند. روی سرور تازه، اگر systemd باشد systemd، وگرنه داکر. انتخاب صریح آن‌یکی هم پشتیبانی می‌شود: نصب‌کننده اول استقرار قبلی را برمی‌دارد تا آن دو بر سر پورت ۶۲۰۵۰ دعوا نکنند.

نسخهٔ پیش‌فرض همان باینری نودی است که روی پنل شما آماده است — همانی که نصب‌کنندهٔ پنل کنار خودش دانلود کرده. اگر نسخهٔ مشخصی بخواهید، سرور آن را از گیت‌هاب می‌گیرد؛ همین اتفاق خودکار می‌افتد برای معماری‌ای که پنل شما برایش چیزی آماده ندارد (پنل amd64 و arm64 را آماده می‌کند؛ armv7 و ۳۸۶ و s390x و riscv64 از روی ریلیز می‌آیند). نصب داکری هم تگ ایمیج متناظر را می‌کشد.

فایروال

پورت ۶۲۰۵۰ با mTLS صحبت می‌کند و همه را جز پنل رد می‌کند، ولی دلیلی ندارد که آن را به همه نشان دهید:

ufw allow from PANEL_IP to any port 62050 proto tcp

اگر پنل از طریق IPv6 به این نود می‌رسد، قانون باید همان آدرسی را نام ببرد که اتصال واقعاً از آن می‌آید؛ یک قانون v4 اتصال v6 را پوشش نمی‌دهد:

ufw allow from 2001:db8::1 to any port 62050 proto tcp

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

نودی که از طریق IPv6 در دسترس است

هیچ کار خاصی در هیچ‌کدام از دو طرف لازم نیست. نود به‌صورت پیش‌فرض روی [::]:62050 بایند می‌شود که روی یک هاست dual-stack اتصال‌های IPv4 را هم می‌پذیرد — پس یک نصب یکسان کار می‌کند، چه پنل از v4 برسد، چه از v6، چه از هر دو. روی هاستی که IPv6 در آن کاملاً خاموش است نود نمی‌تواند این آدرس را بایند کند و خودش به 0.0.0.0:62050 برمی‌گردد، که همان چیزی است که آن هاست منظورش بوده.

سروری که فقط آدرس IPv6 دارد هم چیز اضافه‌ای نمی‌خواهد. در پنل با آدرسش به شکل ساده اضافه‌اش کنید:

2001:db8::1

براکت هم پذیرفته و حذف می‌شود — [2001:db8::1] و 2001:db8::1 یک نود هستند. پنل براکت‌ها را هرجا که نحو لازم دارد برمی‌گرداند و هرجا که لازم ندارد نمی‌گذارد: لینک اشتراک‌گذاری به شکل vless://…@[2001:db8::1]:443?… درمی‌آید و پروفایل وایرگارد به شکل Endpoint = [2001:db8::1]:51820، در حالی که کانفیگ clash یا sing-box و خط remote در OpenVPN آدرس را بدون براکت می‌گیرند. همین قاعده برای آدرس عمومی (آدرسی که در لینک‌ها منتشر می‌شود، وقتی با آدرسی که پنل به آن وصل می‌شود فرق دارد) و برای هاست SSH نصب خودکار هم برقرار است.

یک چیز را IPv6 عوض نمی‌کند: اگر inbound شما TLS دارد و SNI تنظیم نشده، کلاینت گواهی را با خود آدرس تطبیق می‌دهد، پس آن آدرس باید روی گواهی باشد. گواهی نود را دقیقاً مثل حالت IPv4 با آدرس IPv6 در فهرست SAN دوباره صادر کنید.

پنل و نود روی یک سرور

پیشنهاد نمی‌شود. کار می‌کند و چیزی در Nexora جلوی آن را نمی‌گیرد — ولی پیش از اینکه این کار را بکنید، بخوانید که چرا احتمالاً نباید بکنید.

این دو با هم تداخل ندارند. پنل روی ۲۰۹۵ گوش می‌دهد و نود روی ۶۲۰۵۰؛ یکی در /opt/nexora-panel نصب می‌شود و دیگری در /opt/nexora-node، هرکدام سرویس systemd جداگانه‌ای دارند، و تنها ریشهٔ مسیر حالتشان مشترک است — /var/opt/nexora/nexora.db و /var/opt/nexora/bin/ مال پنل‌اند و /var/opt/nexora/certs/ مال نود.

برای این کار همان دستور تک‌خطی پنل را روی خودِ سرور پنل اجرا کنید و چون پنل همان‌جا است، API کنترلی را روی loopback بایند کنید:

curl -fsSL https://PANEL/install-node.sh | bash -s -- \
  --panel PANEL --token TOKEN --listen 127.0.0.1:62050

بعد نود را در پنل با آدرس 127.0.0.1 اضافه کنید. پورت ۶۲۰۵۰ اصلاً از خود ماشین بیرون نمی‌رود، پس قانون ufw بالا را کامل رد کنید.

در داکر، رپوی پنل همین چیدمان را به‌صورت یک استک آماده دارد: docker/panel-and-node.

چرا پیشنهاد نمی‌شود

  • آدرس پنل شما را عمومی می‌کند. آی‌پی نود در هر لینک اشتراک و هر کانفیگی که به کاربر می‌دهید نوشته می‌شود. یکی‌کردن سرورها یعنی هر کاربر — و هر کسی که آن کانفیگ‌ها را جمع کند — می‌فهمد پنل شما کجاست. اگر بعداً آن آدرس به‌خاطر عبور ترافیک پروکسی فیلتر یا بلک‌لیست شود، فقط یک نود را از دست نمی‌دهید؛ پنل و همهٔ لینک‌های اشتراک را با هم از دست می‌دهید.
  • یک ماشین، یک سرنوشت. ترافیک کاربر پرنوسان و بی‌سقف است: CPU، حافظه، file descriptor و پهنای باند می‌خورد. نودی که زیر بار برود پنل را هم با خودش پایین می‌کشد — و پنلِ پایین‌آمده، اشتراک کاربرانِ همهٔ نودهای دیگر را هم از کار می‌اندازد.
  • چیز دورانداختنی را به چیز جایگزین‌ناپذیر می‌چسباند. نود ساخته شده که دور انداخته و دوباره ثبت شود؛ دیتابیس پنل تنها چیزی در کل مجموعه است که ارزش پشتیبان‌گیری دارد. روی سرور مشترک، نصب دوبارهٔ نود یعنی کار کردن روی همان دیتابیس.
  • حذف نود تله دارد. دستور rm -rf /var/opt/nexora در بخش حذفِ پایین همین صفحه، دیتابیس پنل را پاک می‌کند. روی سرور مشترک فقط /opt/nexora-node و /var/opt/nexora/certs را حذف کنید.
  • باز هم یک نود خرج برمی‌دارد. نودی که کنار پنل نشسته، دقیقاً مثل بقیه در سقف نود لایسنس شما شمرده می‌شود.

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

نصب دستی

برای سروری بدون دسترسی به اینترنت، هاستی بدون systemd، یا پنلی که ترجیح می‌دهید از آن به بیرون درخواستی نرود، همان چهار گام به‌صورت دستی.

۱. نصب باینری.

ARCH=amd64   # یا arm64, armv7, armv6, armv5, 386, s390x, riscv64
curl -fsSL -o /tmp/node.tar.gz \
  https://github.com/nexora-vpn/node/releases/latest/download/nexora-node-linux-${ARCH}.tar.gz
tar -C /tmp -xzf /tmp/node.tar.gz
mkdir -p /opt/nexora-node /var/opt/nexora/certs
install -m 0755 /tmp/nexora-node/nexora-node /opt/nexora-node/nexora-node

۲. گرفتن گواهی کلاینت پنل. آن را از صفحهٔ نصب نود در پنل کپی کنید و در مسیر /var/opt/nexora/certs/panel_ca.pem ذخیره کنید. این یک گواهی عمومی است، نه یک راز — نودی که آن را داشته باشد باز هم نمی‌تواند کاری با پنل بکند.

۳. ساخت گواهی مخصوص نود.

/opt/nexora-node/nexora-node gencerts -dir /var/opt/nexora/certs

۴. پیکربندی و استارت.

cat > /opt/nexora-node/config.json <<'JSON'
{
  "listen": "[::]:62050",
  "cert_file": "/var/opt/nexora/certs/ssl_cert.pem",
  "key_file": "/var/opt/nexora/certs/ssl_key.pem",
  "client_ca_file": "/var/opt/nexora/certs/panel_ca.pem"
}
JSON

cp /tmp/nexora-node/nexora-node.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now nexora-node

بعد نود را در پنل با آدرس همین سرور و پورت ۶۲۰۵۰ اضافه کنید. پنل دقیقاً مثل حالت نصب اسکریپتی، گواهی را در اولین اتصال پین می‌کند.

داکر

git clone https://github.com/nexora-vpn/node
cd node
mkdir -p certs
cp /path/to/panel_ca.pem certs/
docker compose up -d

فایل compose عمداً از شبکهٔ host استفاده می‌کند. نود ترافیک کاربر را روی هر پورتی که inboundهایش استفاده می‌کنند پایان می‌دهد و آن پورت‌ها بعداً در پنل انتخاب می‌شوند — با شبکهٔ bridge، هر inbound جدید یعنی ویرایش فایل compose و ساخت دوبارهٔ کانتینر.

به‌روزرسانی

نودها از پنل به‌روز می‌شوند: کشوی نصب نود را باز کنید، به تب خودکار (SSH) بروید و به‌روزرسانی را بزنید. پنل باینری جدید را آپلود می‌کند (یا ایمیج جدید را می‌کشد)، جایگزین نسخهٔ در حال اجرا می‌کند و آن را ری‌استارت می‌کند. لازم نیست چیزی روی خود نود تایپ شود.

دستور دستی هم درجا به‌روزرسانی می‌کند — همان را دوباره روی سروری که از قبل نود دارد اجرا کنید؛ نصب موجود را تشخیص می‌دهد، config.json و گواهی‌ها را نگه می‌دارد و فقط باینری را عوض می‌کند:

curl -fsSL https://PANEL/install-node.sh | bash -s -- --panel PANEL --token TOKEN

یا خودتان باینری را جایگزین و سرویس را ری‌استارت کنید:

systemctl stop nexora-node
install -m 0755 /tmp/nexora-node/nexora-node /opt/nexora-node/nexora-node
systemctl start nexora-node

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

در داکر: docker compose pull && docker compose up -d.

حذف

systemctl disable --now nexora-node
rm -f /etc/systemd/system/nexora-node.service
systemctl daemon-reload
rm -rf /opt/nexora-node /var/opt/nexora

اگر پنل روی همین سرور نصب است، /var/opt/nexora را حذف نکنید — دیتابیس پنل آنجاست. به‌جایش فقط /var/opt/nexora/certs را پاک کنید.

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

هر چیز کجاست

مسیر چیست
/opt/nexora-node/nexora-node باینری
/opt/nexora-node/config.json آدرس listen و مسیر گواهی‌ها — و نه چیز دیگری
/var/opt/nexora/certs/ssl_cert.pem گواهی سرور مخصوص نود
/var/opt/nexora/certs/ssl_key.pem کلید خصوصی آن
/var/opt/nexora/certs/panel_ca.pem گواهی کلاینت پنل، تنها گواهی پذیرفته‌شده
/etc/systemd/system/nexora-node.service یونیت سرویس

هر چیز دیگری — inbound، outbound، endpoint، مسیریابی، کاربران — از پنل push می‌شود و در حافظه نگه داشته می‌شود. چیز دیگری روی دیسک برای پشتیبان‌گیری نیست.

عیب‌یابی

دستور نصب با پیام node binary not provisioned شکست می‌خورد. پنل برای این معماری باینری آماده ندارد. همان‌طور که بالاتر آمد آن را روی سرور پنل آماده کنید و دستور را با یک توکن تازه دوباره اجرا کنید.

دستور نصب با پیام invalid token یا token already used شکست می‌خورد. توکن‌های نصب نود یک‌بارمصرف و زمان‌دار هستند. در پنل یکی تازه بسازید و کل دستور را دوباره کپی کنید.

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

systemctl status nexora-node          # روی نود
journalctl -u nexora-node -n 50       # روی نود
nc -vz NODE_IP 62050                  # از سرور پنل
nc -vz -6 2001:db8::1 62050           # …اگر پنل از طریق IPv6 می‌رسد

معمول‌ترین علت، قانون فایروالی است که آدرس پنل را در بر نمی‌گیرد؛ دومین علت، security group ارائه‌دهندهٔ ابری است. اگر نود از طریق IPv6 در دسترس است، مطمئن شوید قانون فایروال یک قانون v6 است — قانون v4 آن را پوشش نمی‌دهد — و اینکه ss -lnt | grep 62050 نود را روی [::] نشان می‌دهد، نه 0.0.0.0؛ حالت دوم یعنی IPv6 روی هاست خاموش است و نود عقب‌نشینی کرده.

نود دوباره نصب شده و پنل قبولش نمی‌کند. نصب دوباره گواهی سرور تازه‌ای می‌سازد و پنل هنوز گواهی قبلی را پین کرده است. نود را در پنل حذف و دوباره اضافه کنید — پین در اولین اتصال بعدی از نو گرفته می‌شود.