بازگشت به وبلاگ
اوت 19, 2026راهنماها

نحوه نصب پنل 3X-UI روی VPS

راهنمای کامل و تولیدمحور برای نصب پنل 3X-UI مربوط به Xray روی Ubuntu، قفل‌کردن رابط وب، صدور TLS، ساخت inbound از نوع VLESS Reality، مدیریت کاربران و اتصال کلاینت‌ها روی دسکتاپ و موبایل.

نحوه نصب پنل 3X-UI روی VPS

3X-UI یک پنل وب برای Xray-core است. با آن می‌توانید inboundها (VLESS، VMess، Trojan، Shadowsocks و بقیه) را مدیریت کنید، لینک اشتراک صادر کنید، محدودیت ترافیک و تاریخ انقضا بگذارید و اتصال‌های زنده را بدون ویرایش دستی JSON ببینید. برای کسانی که از قبل VPS دارند، یکی از سریع‌ترین راه‌ها برای داشتن پشتهٔ پروکسی قابل نگهداری است؛ نه یک کانفیگ یک‌بارمصرف که شش ماه بعد کسی جرئت دست زدن به آن را ندارد.

این راهنما برای یک VPS تازه با Ubuntu 22.04 یا 24.04 نوشته شده؛ همان چیزی که بیشتر ایمیج‌های لینوکس Hiddence بعد از اولین بوت به نظر می‌رسند. بیلد پرکاربرد MHSanaei 3X-UI را نصب می‌کنیم، در اولین ورود همهٔ رازهای پیش‌فرض را عوض می‌کنیم، پنل را پشت HTTPS می‌گذاریم، فقط پورت‌هایی را باز می‌کنیم که واقعاً لازم دارید، یک inbound از نوع VLESS + Reality می‌سازیم و بعد سراغ اپ‌های کلاینت می‌رویم. اگر قبلاً مقالهٔ Marzban ما را دنبال کرده‌اید ایده شبیه است — پنل روی Xray — اما مسیر نصب، چیدمان فایل‌ها و کار روزمره فرق دارد؛ مگر واقعاً بلد باشید پورت‌ها را جدا کنید، هر دو را روی یک سرور قاطی نکنید.

چرا 3X-UI به‌جای کانفیگ خام Xray

کانفیگ خام Xray برای یک کاربر و یک inbound کافی است. به‌محض این‌که دوست اضافه کنید، کلیدهای Reality را بچرخانید یا به URL اشتراکی نیاز داشته باشید که گوشی با یک ضربه وارد کند، پنل ساعت‌ها وقت می‌خرد. 3X-UI کاربران را در پایگاه دادهٔ محلی نگه می‌دارد، بعد از تغییرها Xray را تمیز ری‌استارت می‌کند و داشبورد جمع‌وجوری برای ترافیک و وضعیت آنلاین می‌دهد. به‌تنهایی لایهٔ جادویی ناشناسی نیست: محل VPS، اثر انگشت TLS، نوع inbound و بهداشت عملیاتی خودتان هنوز تعیین می‌کند راه‌اندازی روی شبکه چه رفتاری داشته باشد.

  • رابط وب برای inboundها، کلاینت‌ها، ترافیک و انقضا به‌جای JSON دست‌نویس
  • لینک اشتراک داخلی برای v2rayN، v2rayNG، Streisand، Happ و کلاینت‌های مشابه
  • نصب با یک فرمان به‌علاوهٔ مسیر به‌روزرسانی مستند
  • روی VPS کوچک خوب کار می‌کند (1 vCPU / 1 گیگابایت RAM برای استفادهٔ شخصی کافی است)
  • root روی سرور خودتان می‌ماند — پنل کانفیگ‌ها را به ابر شخص ثالث نمی‌فرستد

آنچه قبل از شروع لازم دارید

بخش دامنه و فایروال را رد نکنید. پنلی که روی HTTP در پورت 2053 با رمز پیش‌فرض رها شود ظرف چند ساعت توسط ربات‌ها اسکن می‌شود. این موارد را آماده کنید، سپس به‌عنوان root (یا کاربر sudo) از طریق SSH وصل شوید.

  • یک Linux VPS با آدرس IPv4 عمومی (Ubuntu 22.04/24.04 توصیه می‌شود)
  • حداقل 1 گیگابایت RAM و 10 گیگابایت دیسک؛ اگر سرویس‌های دیگر هم اجرا می‌کنید 2 گیگابایت راحت‌تر است
  • دسترسی root یا sudo از طریق SSH
  • دامنه یا زیردامنه‌ای با رکورد A به IP سرور (برای گواهی درست پنل لازم است)
  • حدود ۲۰ تا ۳۰ دقیقه، به‌علاوهٔ انتظار DNS اگر تازه رکورد A را ساخته‌اید

گام ۱: سیستم را به‌روز کنید و منطقهٔ زمانی را تنظیم کنید

VPS تازه‌وارد اغلب به‌روزرسانی امنیتی در صف دارد و ساعت روی UTC است. اول بسته‌ها را به‌روز کنید تا نصب‌کننده با OpenSSL یا curl کهنه درگیر نشود. تنظیم منطقهٔ زمانی برای خود Xray اختیاری است، اما خواندن لاگ پنل و تاریخ انقضای گواهی را خیلی ساده‌تر می‌کند.

bash
ssh root@YOUR_VPS_IP

apt update && apt -y upgrade
apt -y install curl wget ca-certificates gnupg socat tar unzip

timedatectl set-timezone UTC
hostnamectl set-hostname panel

# Confirm DNS for your subdomain (should print your VPS IP):
dig +short panel.example.com

گام ۲: 3X-UI را نصب کنید

اسکریپت نصب رسمی بیلد MHSanaei 3X-UI آخرین انتشار را دانلود می‌کند، Xray-core را نصب می‌کند، سرویس systemd می‌سازد و URL اولین ورود را چاپ می‌کند. خروجی را دقیق بخوانید: مسیر تصادفی و نام کاربری/رمز تولیدشده دارد. فوراً آن‌ها را در مدیر رمز کپی کنید. اگر اسکریپت پورت پنل را پرسید، 2053 را نگه دارید یا پورت بالای استفاده‌نشده انتخاب کنید؛ فقط برای گام فایروال یادتان بماند.

bash
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

# After install, useful commands:
x-ui                    # interactive menu (start/stop/restart, reset, update)
systemctl status x-ui    # confirm the service is active
ss -tulpn | grep x-ui    # see which port the panel listens on
این نشست SSH را باز نگه دارید. اگر از پنل بیرون افتادید، منوی x-ui روی سرور می‌تواند رمز مدیر را بدون نصب مجدد بازنشانی کند.

گام ۳: اولین ورود و سخت‌کردن فوری

URL چاپ‌شده توسط نصب‌کننده را باز کنید، معمولاً http://YOUR_IP:2053/<random-path>. با اعتبارهای تولیدشده وارد شوید، سپس به تنظیمات پنل (یا پیکربندی) بروید. نام کاربری و رمز را به مقادیر یکتا تغییر دهید. اگر پنل اجازه داد مسیر پایهٔ وب را عوض کنید، این کار را بکنید — مسیر تصادفی بلند بخش بزرگی از اسکن‌های گذری را قطع می‌کند. اگر چیزی غیر از 2053 می‌خواهید پورت شنود را تنظیم کنید. ذخیره کنید و پنل را از رابط یا با systemctl restart x-ui ری‌استارت کنید، سپس دوباره روی URL جدید وارد شوید.

بعد اگر بیلدتان ارائه می‌دهد احراز هویت دومرحله‌ای را روشن کنید و قالب‌های inbound بلااستفاده را خاموش کنید. در تنظیمات Xray نسخهٔ هسته‌ای را که با پنل آمده نگه دارید مگر دلیل مشخصی برای پین کردن بیلد دیگر داشته باشید. اگر بعداً Reality یا پروکسی معکوس از پورت‌های 80/443 استفاده می‌کنند، هنوز پنل را آنجا باز نکنید — یک استراتژی انتخاب کنید و به آن بچسبید.

  • ورود مدیر تولیدشده را فوراً عوض کنید
  • مسیر وب محرمانه را نگه دارید؛ پنل را به / منتقل نکنید
  • پورت غیرپیش‌فرض پنل را ترجیح دهید و ثبت کنید
  • این رمز را هرگز روی سرویس‌های دیگر دوباره استفاده نکنید

گام ۴: گواهی TLS برای پنل

مرورگرها روی HTTP هشدار می‌دهند و فرستادن رمز مدیر به‌صورت متن ساده روی شبکهٔ عمومی ایدهٔ بدی است. اگر پورت 80 آزاد باشد و دامنه به این VPS اشاره کند، 3X-UI می‌تواند گواهی Let's Encrypt بخواهد. در پنل بخش گواهی / SSL را باز کنید، panel.example.com را وارد کنید و گواهی را درخواست کنید. اگر پورت 80 اشغال است از جریان DNS-01 استفاده کنید یا Caddy/Nginx را جلو بگذارید و به 127.0.0.1:2053 پروکسی معکوس کنید.

bash
# Quick check that port 80 is free before the panel ACME challenge:
ss -tulpn | grep ':80'

# If you terminate TLS on Caddy instead of inside 3X-UI:
# Caddyfile example (panel stays on 127.0.0.1:2053):
# panel.example.com {
#     reverse_proxy 127.0.0.1:2053
# }
گواهی روی پنل فقط برای رابط وب است. VLESS Reality داستان TLS دیگری دارد (خود را به‌جای سایت دیگر جا می‌زند) و این فایل Let's Encrypt را برای ترافیک کلاینت استفاده نمی‌کند.

گام ۵: یک inbound از نوع VLESS Reality بسازید

در Inbounds یک inbound جدید بسازید. پیش‌فرض محکم برای بسیاری از شبکه‌ها VLESS با Reality و TCP است. پورتی انتخاب کنید که پورت پنل نباشد — اگر چیز دیگری آنجا بسته نشده 443 رایج است؛ وگرنه پورت TCP بالا بگذارید و در فایروال یکدست باشید. برای کلاینت اول UUID بسازید، جفت کلید Reality را در رابط تولید کنید و dest / serverNames را روی هدف مشروعی بگذارید که اجازه دارید تقلید کنید (سایت شناخته‌شده‌ای که TLS 1.3 را پشتیبانی می‌کند). inbound را ذخیره کنید و در لاگ پنل تأیید کنید Xray بدون خطا دوباره بار شد.

سپس اگر لازم است کلاینت‌های اضافه روی همان inbound بگذارید: هر کاربر UUID، برچسب ایمیل اختیاری و محدودیت ترافیک یا زمان اختیاری می‌گیرد. لینک اتصال یا URL اشتراک را از ردیف کاربر کپی کنید. آن لینک‌ها را در چت عمومی نگذارید؛ معادل رمز عبورند.

bash
# On the server, confirm Xray is listening on the inbound port (example: 443):
ss -tulpn | grep -E ':443|:2053'

# Follow Xray logs if a client cannot connect:
journalctl -u x-ui -f

گام ۶: فایروال — فقط پورت‌هایی که لازم دارید

روی Ubuntu همان UFW کافی است. اول SSH را اجازه دهید تا خودتان را قفل نکنید، بعد پورت پنل و پورت inbound. اگر گواهی Let's Encrypt را از پنل خواستید، هنگام صدور 80/tcp را هم باز کنید. inbound Reality روی 443 به 443/tcp نیاز دارد (و پنل روی همان پورت نباشد).

bash
ufw allow OpenSSH
ufw allow 2053/tcp comment '3x-ui panel (change if you picked another port)'
ufw allow 443/tcp comment 'VLESS Reality inbound'
# ufw allow 80/tcp comment 'only if panel ACME needs it'
ufw enable
ufw status verbose

اتصال کلاینت‌ها

در Windows برنامهٔ v2rayN می‌تواند لینک VLESS را از کلیپ‌بورد وارد کند. در Android برنامهٔ v2rayNG یا کلاینت‌های مشابه Xray همان کار را از QR می‌کنند. در iOS کلاینتی با پشتیبانی VLESS Reality استفاده کنید (مثلاً Streisand یا Happ، بسته به آنچه الان در منطقهٔ شما در دسترس است). بعد از ورود، پروفایل را روشن کنید و فهرست آنلاین پنل را ببینید. اگر کلاینت آفلاین ماند معمولاً پورت اشتباه است، UDP روی inbound فقط-TCP روشن مانده، serverName مربوط به Reality با dest جور نیست، یا فایروال محلی لپ‌تاپ مقصر است.

  • Windows: v2rayN — لینک VLESS را وارد کنید، مسیریابی را طبق نیاز تنظیم کنید (سراسری در برابر مبتنی بر قاعده)
  • Android: v2rayNG — QR را از صفحهٔ کاربر پنل اسکن کنید
  • macOS / iOS: کلاینت با پشتیبانی VLESS + Reality؛ همان لینک را بچسبانید
  • URL اشتراک: در کلاینت اضافه کنید تا چرخش UUID نیاز به ورود دستی دوباره نداشته باشد

به‌روزرسانی، پشتیبان و ایمنی نصب مجدد

قبل از هر به‌روزرسانی پنل از رابط یک پشتیبان بگیرید (پایگاه داده + کانفیگ). آن را بیرون از VPS نگه دارید. به‌روزرسانی معمولاً x-ui و بعد گزینهٔ update در منو است، یا همان اسکریپت نصب که نصب موجود را تشخیص می‌دهد. بعد از به‌روزرسانی تأیید کنید سرویس systemd فعال است و inboundها هنوز گوش می‌دهند. اگر سیستم‌عامل را از نو نصب کردید پشتیبان را در پنل برگردانید، نه این‌که هر UUID را دستی دوباره بسازید.

bash
x-ui   # choose update when prompted, or:
# bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

# Backup files commonly live under /etc/x-ui/ — copy them off-box:
ls -la /etc/x-ui/
# Example offsite copy:
# scp -r /etc/x-ui/ you@backup-host:~/x-ui-backup-$(date +%F)/

عیب‌یابی

بیشتر شکست‌های روز اول DNS، پورت یا فیلدهای Reality هستند. قبل از نصب مجدد پنل این فهرست را طی کنید. نصب مجدد بدون پشتیبان همان راه از دست دادن همهٔ UUID کلاینت‌هاست.

  • رابط وب باز نمی‌شود: systemctl status x-ui، ss -tulpn و UFW را بررسی کنید. مطمئن شوید مسیر محرمانه را در URL گذاشته‌اید.
  • رمز مدیر را فراموش کردید: روی سرور x-ui را اجرا کنید و گزینهٔ بازنشانی را بزنید.
  • کلاینت وصل می‌شود بعد گیر می‌کند: پورت inbound بسته است، یا UDP را روی inbound Reality از نوع TCP روشن کرده‌اید.
  • خطاهای TLS روی پنل: رکورد A دامنه هنوز اینجا را نشان نمی‌دهد، یا پورت 80 هنگام ACME مشغول است.
  • دست‌دادن Reality شکست می‌خورد: ناهماهنگی dest/serverNames، یا سرویس دیگری از قبل روی 443 است.
  • CPU بالا: inbound زیاد روی طرح 1 vCPU، یا اسکن/سیلاب روی پورت باز — ss و شمار آنلاین پنل را ببینید.

نکات امنیتی که واقعاً مهم‌اند

با پنل مثل نرم‌افزار مدیریت تولید رفتار کنید. می‌تواند کاربر جدید بسازد و هر UUID را بخواند. محدود کنید چه کسی به پورت وب برسد: اگر IP ثابت دفتر دارید در UFW برای 2053/tcp فقط همان IP را اجازه دهید. SSH را روی کلید نگه دارید نه رمز. اگر Reality روی 443 دارید وب‌سایت عمومی نامرتبط روی همان IP اجرا نکنید — پشته‌های TLS رقیب روی یک پورت منبع کلاسیک قطعی است. اگر اسکرین پنل زمانی به چت درز کرد رمز مدیر را عوض کنید.

  • فقط کلید SSH؛ بعد از کار کردن کلیدها ورود با رمز را خاموش کنید
  • وقتی می‌توانید پورت پنل را در فایروال محدود کنید
  • /etc/x-ui را طبق برنامه از سرور بیرون کپی کنید
  • URL اشتراک را در گروه‌های عمومی تلگرام پخش نکنید
  • دیسک را زیر نظر بگیرید: لاگ و آمار ترافیک روی inbound شلوغ رشد می‌کند

نکات عملی

  • یک inbound با کلاینت‌های زیاد از ده inbound تقریباً یکسان راحت‌تر اداره می‌شود
  • کلاینت‌ها را بر اساس دستگاه نام‌گذاری کنید (laptop-anna، phone-ben) تا نمودار ترافیک معنا داشته باشد
  • اگر برای وب‌سایت هم پروکسی معکوس لازم دارید سایت را روی IP یا پورت دیگر بگذارید — با Reality سر 443 نجنگید
  • بعد از هر ری‌استارت x-ui قبل از بستن نشست SSH یک کلاینت را آزمایش کنید
  • قبل از به‌روزرسانی changelog را بخوانید؛ جهش‌های «latest» جمعه شب را رد کنید

حالا 3X-UI به‌صورت سرویس systemd نصب شده، URL مدیر قفل شده، TLS روی پنل هست، inbound از نوع VLESS Reality ساخته شده، قوانین فایروال با آن پورت‌ها جور است و عادت پشتیبان دارید. کلاینت‌ها را از صفحهٔ inbound اضافه کنید، لینک را روی هر دستگاه وارد کنید و پنل را فقط بعد از پشتیبان به‌روز کنید. اگر چیزی شکست، مسیر بازیابی منوی x-ui روی VPS است — نه نصب کامل دوباره.