راهنما
قبل از شروع، این‌ها رو بخون

سرور ایران نباید روی پورت ۲۲ باشه

پورت ۲۲ روی سرورهای ایران از بیرون مسدوده. اگه پورت SSH سرور ایرانت رو عوض نکنی، پنل اصلاً نمی‌تونه بهش وصل بشه و سرور همیشه با خطای Connection timed out می‌مونه. این تنها دلیل بیشتر خطاهاست. سرور خارج این محدودیت رو نداره.

شروع سریع

۱ پورت SSH سرور ایران رو عوض کن

این دستور رو روی سرور ایرانت بزن (نه توی پنل). پورت 2222 فقط یه نمونه‌ست، هر پورتی بین ۱۰۲۴ تا ۶۵۵۳۵ می‌تونی بذاری.

cat > /etc/ssh/sshd_config.d/99-tunnel-port.conf <<'EOF'
Port 22
Port 2222
EOF

ufw allow 2222/tcp 2>/dev/null || true

systemctl disable --now ssh.socket 2>/dev/null || true
systemctl enable --now ssh.service 2>/dev/null || systemctl enable --now sshd.service 2>/dev/null
systemctl restart ssh.service 2>/dev/null || systemctl restart sshd.service

sshd -T | grep -i '^port'
ss -tlnp | grep -E ':22 |:2222 '

دو خط آخر خروجی می‌دن؛ اگه درست انجام شده باشه باید هم ۲۲ و هم ۲۲۲۲ رو ببینی (چهار خط: دو تا برای IPv4 و دو تا برای IPv6). اگه ۲۲۲۲ رو ندیدی یعنی کار نکرده.

چرا این‌قدر طولانیه؟ از اوبونتو ۲۲.۱۰ به بعد پورت SSH رو ssh.socket تعیین می‌کنه، نه فایل کانفیگ. به همین خاطر دستورهای کوتاهی که تو اینترنت پیدا می‌کنی روی سرورهای جدید هیچ اثری ندارن و آدم فکر می‌کنه پورت عوض شده ولی نشده. خط disable --now ssh.socket دقیقاً برای همینه.
ترمینال فعلی رو نبند. اول با یه پنجره‌ی جدید تست کن که پورت جدید جواب می‌ده: ssh -p 2222 root@YOUR_IP — اگه وارد شدی، اون‌وقت قبلی رو ببند.
دقت کن که این دستور پورت ۲۲ رو حذف نمی‌کنه، فقط ۲۲۲۲ رو کنارش اضافه می‌کنه. عمداً این‌طوریه تا اگه جایی اشتباه شد از سرورت قفل نشی. پورت ۲۲ از بیرون ایران بسته‌ست و ضرری نداره.

بعدش موقع افزودن سرور تو پنل، تو فیلد «SSH پورت» بنویس 2222.

۲ رمز فقط یک بار — بعدش فقط آی‌پی

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

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

۱بار اولآی‌پی + پورت + رمز روت
۲کلید نصب می‌شهخودکار، رمز دور ریخته می‌شه
۳دفعات بعدفقط آی‌پی + پورت

۳ اگه اصلاً نمی‌خوای رمز بدی

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

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

ساخت تانل

۱ ساخت تانل، قدم‌به‌قدم

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

  1. سرور خارجت آماده باشه. سرویسی که می‌خوای تانل کنی (مثلاً x-ui) باید از قبل روی سرور خارج نصب و روشن باشه و روی یه پورت مشخص گوش بده. اگه هنوز نصبش نکردی، از «میان‌برها» تو داشبورد بزن نصب x-ui.
  2. یکی از هفت موتور رو باز کن (از صفحه‌ی اصلی پنل یا نوار کناری).
  3. بزن افزودن سرور و سرور خارج رو اول اضافه کن: اسم دلخواه (Label)، آی‌پی، پورت SSH و رمز روت (یا خالی اگه کلیدت از قبل نصبه — بخش ۳). منتظر بمون تا وضعیتش بشه آماده.
  4. همین کار رو برای سرور ایران هم تکرار کن — یادت نره پورت SSHش باید از ۲۲ عوض شده باشه (بخش ۱). اگه همین سرور رو قبلاً تو موتور دیگه‌ای اضافه کرده بودی، فیلد رمز رو خالی بذار.
  5. برو تب تانل‌ها و بزن افزودن تانل.
  6. سرور ایران و سرور خارجی که ساختی رو انتخاب کن، و پورتی که سرویست روی سرور خارج به آن گوش می‌ده رو وارد کن (قدم ۱). اگه موتور اجازه‌ی چند پورت هم‌زمان رو می‌ده، همه رو با هم اضافه کن.
  7. ذخیره کن. تانل می‌ره تو وضعیت «در حال ساخت» و چند ثانیه بعد باید سالم بشه. اگه نشد، دکمه‌های «لاگ ایران» و «لاگ خارج» روی کارت تانل دلیل واقعی رو نشون می‌دن.
Hysteria2 یه مورد خاصه: به‌جای یک پورت ساده، یک دامنه، یک پورت خود Hysteria (که QUIC رویش بالا میاد) و یک فهرست از پورت‌های فورواردشده می‌خواد. دامنه باید از قبل به آی‌پی سرور خارجت اشاره کند.
  • یک پورت، یک تانل — یک پورت روی یک سرور ایران نمی‌تونه هم‌زمان تو دو تانل باشه. دومی بالا نمیاد.
  • سرورها بین موتورها مشترک نیستن — هر موتور لیست سرور خودش رو داره. اگه می‌خوای همون ماشین رو تو موتور دیگه‌ای هم داشته باشی، اونجا هم اضافه‌ش کن (این بار بدون رمز، چون کلیدت از قدم ۲ قبلاً رویش نصبه).

۲ کدوم موتور رو انتخاب کنم؟

هیچ‌کدوم همیشه بهترین نیست — بستگی به این داره که رو مسیر تو چی فیلتر شده. با ساده‌ترین شروع کن، جواب نداد بعدی رو امتحان کن.

  • Rathole — سبک و پایدار، بدون نیاز به دامنه. برای شروع بهترین گزینه‌ست.
  • GOST و Hysteria2 — برای حالت‌های رمزنگاری‌شده به دامنه‌ی واقعی نیاز دارن که به سرور خارجت اشاره کنه.
  • Spoof — با آی‌پی جعلی کار می‌کنه. فقط وقتی جواب می‌ده که هاستینگت جلوی خروج بسته‌ی جعلی رو نگیره.

فیل‌اور خودکار با کلادفلر

۱ فیل‌اور خودکار با کلادفلر — مهم‌ترین قابلیت پنل

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

۱تشخیص قطعیدو بار پشت‌سرهم بی‌جواب (حدود ۲ دقیقه)
۲انتقال تانل‌هاهمه‌ی تانل‌های اون سرور می‌رن روی سرور بعدی استخر
۳تعویض آی‌پی دامنهرکورد A تو کلادفلر می‌ره روی آی‌پی جدید

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

  • حداقل دو سرور ایران لازمه و هر دو باید وضعیتشون «آماده» باشه. اگه یدکی آماده نباشه پنل فقط بهت خطا نشون می‌ده و چیزی رو جابه‌جا نمی‌کنه.
  • فقط داخل استخر خودش کار می‌کنه — سرورهایی که خودت تو اون قانون انتخاب کردی. به هیچ سرور یا تانل دیگه‌ای دست نمی‌زنه.
  • پروکسی کلادفلر (ابر نارنجی) رو خاموش کن. رکورد باید DNS-only باشه وگرنه ترافیک تانلت از کلادفلر رد می‌شه و کار نمی‌کنه.
  • TTL رو کم بذار (Auto یا ۶۰ ثانیه) تا تعویض آی‌پی سریع پخش بشه.

۲ توکن API کلادفلر رو چطور بگیرم؟

برای بخش بالا یه توکن لازمه. توکن بساز، نه Global API Key — گلوبال‌کی به کل حسابت دسترسی داره، ولی توکن فقط به همون دامنه‌ای که انتخاب می‌کنی.

  1. وارد dash.cloudflare.com شو.
  2. از منوی گوشه‌ی بالا سمت راست (عکس پروفایلت) بزن My Profile.
  3. از منوی کناری بزن API Tokens.
  4. بزن Create Token.
  5. بالای صفحه یه گزینه هست به اسم Create Custom Token — روی Get started کنارش بزن. (قالب‌های آماده رو انتخاب نکن.)
  6. تو بخش Permissions دقیقاً این دو ردیف رو بساز:
    ZoneDNSEdit
    ZoneZoneRead
    ردیف دوم رو با دکمه‌ی + Add more اضافه کن.
  7. تو بخش Zone Resources بذار Include → Specific zone → دامنه‌ی خودت.
  8. پایین صفحه Continue to summary و بعد Create Token.
  9. حالا توکن نشونت داده می‌شه. همون لحظه کپیش کن — کلادفلر دیگه هیچ‌وقت دوباره نشونت نمی‌ده.
  10. بیا تو پنل، بخش کلادفلر، توکن رو پیست کن و ذخیره کن. پنل خودش چک می‌کنه معتبره یا نه.
اگه دسترسی Zone:Read رو یادت بره، پنل موقع ذخیره‌ی قانون دامنه‌ت رو پیدا نمی‌کنه و خطا می‌گیری. اگه DNS:Edit رو یادت بره، همه‌چیز درست به‌نظر می‌رسه ولی موقع قطعی، آی‌پی عوض نمی‌شه — یعنی دقیقاً همون لحظه‌ای که بهش نیاز داری کار نمی‌کنه. هر دو ردیف رو بذار.

بعد از ذخیره‌ی توکن، یه قانون بساز: دامنه، اسم رکورد (مثلاً tunnel.example.com) و استخر سرورهای ایران به ترتیب اولویت. اولین سرورِ استخر می‌شه فعال، بقیه یدک.

عیب‌یابی

۱ فایروال — وقتی همه‌چیز درسته ولی باز نمی‌شه

روی خیلی از سرورها فایروال فعاله. نتیجه‌ش اینه که سرویس بالا میاد، پورت هم گوش می‌ده، ولی از بیرون هیچی باز نمی‌شه. پنل x-ui که براتون نصب می‌کنیم، پورتش رو خودکار باز می‌کنیم — ولی اگه هاستینگت فایروال جدا داشته باشه یا قانون دستی گذاشته باشی، باید خودت بازش کنی.

# PORT رو با پورت خودت عوض کن

# ubuntu / debian
ufw allow PORT/tcp
ufw reload

# centos / rocky
firewall-cmd --permanent --add-port=PORT/tcp
firewall-cmd --reload

# بدون ufw و firewalld
iptables -I INPUT -p tcp --dport PORT -j ACCEPT

بعدش چک کن سرویس واقعاً روی اون پورت گوش می‌ده:

ss -tlnp | grep PORT
systemctl status x-ui --no-pager | head -5
خاموش کردن کامل فایروال آخرین راهه، نه اولین. ufw disable روی سروری که خودت هم با SSH بهش وصلی یعنی هر پورتی باز می‌شه — اول پورت مورد نظرت رو تکی باز کن. و اگه مجبور شدی خاموشش کنی، مطمئن شو پورت SSHت رو داری وگرنه از سرورت قفل می‌شی.

یه نکته‌ی مهم: بعضی هاستینگ‌ها (هتزنر، آروان و…) یه فایروال جدا توی پنل خودشون دارن که ربطی به سرور نداره. اگه دستورهای بالا رو زدی و بازم نشد، حتماً اونجا رو هم چک کن.

۲ خطاهای رایج

Connection timed out

پورت SSH بسته‌ست یا اشتباهه. اگه سرور ایرانه، مطمئن شو پورت رو از ۲۲ عوض کردی و تو فایروال بازش کردی.

Permission denied (publickey,password)

رمز روت اشتباهه، یا رمز ندادی و کلید هم روی سرور نصب نیست. یا رمز رو وارد کن، یا دستور بخش ۳ رو روی سرورت بزن.

Address already in use

اون پورت روی سرور ایران قبلاً گرفته شده — یا تانل دیگه‌ای داری یا سرویس دیگه‌ای روش نشسته. پورت دیگه‌ای بردار.

تانل ساخته شد ولی «نیمه‌فعال»

یعنی سرویس بالا اومده ولی بعضی پورت‌ها گوش نمی‌دن. لاگ همون سمت رو ببین؛ معمولاً پورت اشغاله یا فایروال بسته‌ست.

نکات تکمیلی

★ نکاتی که خوبه بدونی

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

برای اینکه خیالت راحت باشه

v2rayfree1 از نظر معماری فرق داره با یه «پنل فروش» معمولی: هفت موتور تانلی که روی سرورهای مشتری‌ها اجرا می‌شه، همونایی هستن که ما خودمون روزانه روشون کار می‌کنیم — نسخه‌ی جدا، ساده‌شده یا آزمایش‌نشده نیست.

رمز روت ذخیره نمی‌شه فقط یک‌بار و لحظه‌ای مصرف می‌شه
کلید SSH مخصوص خودته هیچ مشتری دیگه‌ای بهش دسترسی نداره
داده‌ی حساب‌ها از هم جداست در سطح دیتابیس، نه فقط رابط کاربری
رمز روت سرورهام کجا نگه‌داری می‌شه؟

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

کس دیگه‌ای می‌تونه به سرورهای من دسترسی داشته باشه؟

هر حساب یک کلید SSH کاملاً مخصوص به خودش داره که با حساب‌های دیگه مشترک نیست. جداسازی هم فقط تو رابط کاربری نیست — دیتابیس پنل طوری تنظیم شده که حتی یک کوئری اشتباه هم نمی‌تونه رکورد سرور/تانل یک حساب رو برای حساب دیگه برگردونه.

ربات تلگرام به چه چیزی از حسابم دسترسی داره؟

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

اشتراکم تموم بشه، سرورها و تانل‌هام پاک می‌شن؟

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

چرا باید به موتورهای این پنل اعتماد کنم؟

این هفت موتور یه نسخه‌ی جدا یا ساده‌شده برای فروش نیستن — عیناً همون پنل‌هایی هستن که خودمون هر روز روشون کار می‌کنیم. وقتی یه فیچر جدید یا رفع‌اشکالی روی نسخه‌ی اصلی انجام می‌شه، همون تغییر عیناً به این نسخه هم می‌رسه.

اگه مشکلی پیش بیاد، پشتیبانی چطوریه؟

از بخش «پشتیبانی» تو پروفایلت تیکت بزن — هر چقدر دقیق‌تر بنویسی (اسم سرور، موتور، و اگه خطایی می‌بینی عکسش) سریع‌تر پیگیری می‌شه. اگه ربات تلگرامت رو وصل کرده باشی، از همونجا هم می‌تونی سرور اضافه کنی، تانل بزنی و x-ui نصب کنی، بدون باز کردن پنل.