docs: vendor the documentation site into the monorepo

Fold the standalone 3x-ui-docs project (Next.js 16 + Fumadocs, deployed to
docs.sanaei.dev) into docs/ so the panel and its documentation share a single
source of truth, the way sing-box keeps its docs in-tree. The old repo becomes
redundant and can be retired.

- Import the full site under docs/ (app, components, content, lib, public,
  scripts, config). The self-contained pnpm project sits alongside the existing
  engineering notes with no filename collisions.
- Re-point "Edit on GitHub" links from MHSanaei/3x-ui-docs to this repo's
  docs/content/docs path (docs/lib/shared.ts, docs/app/.../page.tsx).
- Add docs-ci.yml and docs-deploy.yml under .github/workflows/, scoped to
  docs/** and run with working-directory: docs, since GitHub only runs
  workflows from the repo-root .github/. deploy-static.yml's GitHub Pages
  publish (CNAME docs.sanaei.dev) carries over unchanged.

Follow-up (outside this commit): attach the docs.sanaei.dev custom domain to
this repository's Pages (or set the Vercel project's root directory to docs),
confirm the site is live from the monorepo, then delete MHSanaei/3x-ui-docs.
This commit is contained in:
MHSanaei
2026-07-07 23:07:14 +02:00
parent 2c49dbf54e
commit 9b91f0f42e
283 changed files with 44179 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
---
title: کلاینت‌ها
description: مدیریت کلاینت‌های 3x-ui — اعتبارنامه‌ها، محدودیت ترافیک و انقضا، محدودیت IP، گروه‌ها، اقدامات گروهی، لینک‌های خارجی و وضعیت آنلاین.
icon: Users
---
یک **کلاینت** یک کاربر منفرد است که با یک **ایمیل** یکتا شناسایی می‌شود. در پنل
فعلی، کلاینت‌ها رکوردهای درجه‌یک هستند که می‌توانند هم‌زمان به **چندین ورودی**
متصل شوند و حساب‌داری ترافیک به‌صورت جداگانه برای هر کلاینت انجام می‌شود.
## فیلدهای کلاینت
| فیلد | اعمال بر | معنی |
| -------------- | --------------------- | ------------------------------------------------------------------ |
| **Email** | همه | شناسه‌ی یکتا که برای حساب‌داری و جست‌وجوها استفاده می‌شود. |
| **ID (UUID)** | VLESS, VMess | اعتبارنامه‌ی کلاینت. |
| **Password** | Trojan, Shadowsocks | اعتبارنامه‌ی کلاینت. |
| **Auth** | Hysteria2 | اعتبارنامه‌ی کلاینت. |
| **Flow** | VLESS | جریان XTLS، برای مثال `xtls-rprx-vision`. |
| **Limit IP** | همه | بیشینه‌ی تعداد IPهای مبدأ هم‌زمان (با Fail2ban اعمال می‌شود). |
| **Total (GB)** | همه | سهمیه‌ی ترافیک؛ هنگام اتمام، کلاینت غیرفعال می‌شود. |
| **Expiry** | همه | تاریخی که پس از آن کلاینت از کار می‌افتد. |
| **Reset** | همه | دوره‌ی تمدید خودکار به **روز** (سهمیه را از نو می‌چرخاند). |
| **Telegram ID**| همه | کلاینت را به یک کاربر Telegram برای سلف‌سرویس/اعلان‌ها پیوند می‌دهد.|
| **Sub ID** | همه | شناسه‌ی اشتراک که لینک‌های این کلاینت را گروه‌بندی می‌کند. |
| **Group** | همه | گروه اختیاری کلاینت برای سازمان‌دهی و فیلترکردن گروهی. |
| **Comment** | همه | یادداشت متنی آزاد. |
<Callout type="info">
رسیدن به محدودیت **ترافیک** یا **انقضا** کلاینت را غیرفعال می‌کند؛ پنل می‌تواند
هنگام غیرفعال‌شدن خودکار کلاینت‌ها، Xray را به‌صورت خودکار راه‌اندازی مجدد کند
(`restartXrayOnClientDisable`، به‌صورت پیش‌فرض فعال).
</Callout>
## محدودیت‌ها و کنترل IP
- سقف‌های **ترافیک / انقضا** هنگام رسیدن، کلاینت را غیرفعال می‌کنند؛ یک دوره‌ی
**Reset** سهمیه را به‌صورت خودکار تمدید می‌کند.
- **Limit IP** تعداد IPهای مبدأ هم‌زمان را محدود می‌کند. اعمال آن به Fail2ban متکی
است — به [امنیت](/docs/operations/security) مراجعه کنید. می‌توانید IPهای اخیر یک
کلاینت را مشاهده کرده و آن‌ها را از بخش اقدامات کلاینت پاک کنید.
- **وضعیت آنلاین** و زمان‌های **آخرین‌بار آنلاین** برای هر کلاینت (و در پیکربندی‌های
چندنودی برای هر نود) ثبت می‌شوند.
## لینک‌های اشتراک‌گذاری و لینک‌های خارجی
هر کلاینت برای ورودی‌هایش لینک‌های اشتراک‌گذاری و یک کد QR دارد، به‌علاوه‌ی یک
[اشتراک](/docs/config/subscription) ترکیبی. همچنین می‌توانید **لینک‌های خارجی** به
یک کلاینت متصل کنید — لینک‌های اضافی `vless://`، `vmess://`، `trojan://`، `ss://`،
`hysteria2://` یا `wireguard://`، یا یک URL اشتراک از راه دور — تا در کنار
لینک‌های تولیدشده توسط پنل، در اشتراک کلاینت نمایش داده شوند.
برای بررسی دقیق محتویات یک لینک، آن را در
[بازرس لینک اشتراک‌گذاری](/docs/config/share-links) جای‌گذاری کنید.
## اقدامات گروهی
برای مدیریت هم‌زمان تعداد زیادی کلاینت، پنل از اقدامات گروهی **ساخت، فعال‌سازی،
غیرفعال‌سازی، حذف، اتصال/قطع اتصال** (به ورودی‌ها)، **بازنشانی ترافیک** و
**تنظیم** (افزودن روز / افزودن بایت / تعیین flow) پشتیبانی می‌کند. اقدامات
نگه‌داری همچنین به شما امکان می‌دهند کلاینت‌های **تمام‌شده** (سهمیه/انقضای پایان‌یافته)
و کلاینت‌های **یتیم** (متصل‌نشده به هیچ ورودی) را حذف کنید.
<Callout type="warn">
لینک اشتراک‌گذاری یک کلاینت حاوی اعتبارنامه‌ی آن است. با لینک‌ها و کدهای QR مانند
رمز عبور رفتار کنید و در صورت نشت یکی از آن‌ها، اعتبارنامه را تعویض کنید.
</Callout>
+97
View File
@@ -0,0 +1,97 @@
---
title: ورودی‌ها و پروتکل‌ها
description: ساخت ورودی‌ها در 3x-ui — پروتکل‌ها، انتقال‌ها، بازنشانی و انقضای ترافیک، و fallbackهایی که چند پروتکل را روی یک پورت سرویس می‌دهند.
icon: ArrowDownToLine
---
یک **ورودی (inbound)** شنونده‌ای است که اتصال‌های کلاینت را روی یک پورت با
پروتکل و انتقال مشخصی می‌پذیرد. بیشتر کارهای روزمره شما ساخت و مدیریت ورودی‌ها و
کلاینت‌های درون آن‌هاست.
## ساخت یک ورودی
<Steps>
<Step>
### افزودن یک ورودی
به **Inbounds → Add** بروید، یک توضیح (remark) برای آن بگذارید، یک **پروتکل**
انتخاب کنید، و یک **پورت** و آدرس شنود انتخاب کنید.
</Step>
<Step>
### انتخاب انتقال و امنیت
انتقال (TCP، WebSocket، gRPC، HTTPUpgrade، XHTTP، …) و لایه امنیتی (هیچ‌کدام،
TLS یا REALITY) را انتخاب کنید. به [انتقال‌ها](/docs/config/transports) و
[REALITY](/docs/config/reality) مراجعه کنید.
</Step>
<Step>
### افزودن کلاینت‌ها
یک یا چند کلاینت اضافه کنید که هر کدام اعتبارنامه، محدودیت‌ها و لینک اشتراک
خودش را دارد. به [کلاینت‌ها](/docs/config/clients) مراجعه کنید.
</Step>
<Step>
### تنظیم محدودیت ترافیک، انقضا و بازنشانی
به‌صورت اختیاری می‌توانید کل ترافیک را محدود کنید و یک تاریخ انقضا برای ورودی
تعیین کنید، و یک زمان‌بندی **بازنشانی ترافیک** دوره‌ای انتخاب کنید: `never`
(پیش‌فرض)، `hourly`، `daily`، `weekly` یا `monthly`.
</Step>
</Steps>
## پروتکل‌های پشتیبانی‌شده
ویرایشگر ورودی این پروتکل‌ها را می‌پذیرد:
| پروتکل | توضیحات |
| ---------------------- | ------------------------------------------------------------------------ |
| **VLESS** | سبک؛ پایه‌ی REALITY + XTLS-Vision. توصیه‌شده. |
| **VMess** | قدیمی‌تر اما با پشتیبانی بسیار گسترده در کلاینت‌ها. |
| **Trojan** | مبتنی بر TLS؛ از XTLS و fallback پشتیبانی می‌کند. |
| **Shadowsocks** | شامل رمزهای Shadowsocks-2022 (`2022-blake3-*`). |
| **WireGuard** | تونل مدرن. |
| **Hysteria2** | با عنوان `hysteria` انتخاب می‌شود؛ پنل لینک‌های `hysteria2://` تولید می‌کند. |
| **HTTP** | پراکسی HTTP. |
| **Mixed (SOCKS/HTTP)** | یک شنونده ترکیبی SOCKS + HTTP. |
| **Dokodemo-door / Tunnel** | فورواردینگ پورت / هدایت ترافیک. |
| **MTProto** | پراکسی MTProto تلگرام که توسط یک فرایند همراه `mtg` سرویس می‌شود (نه Xray). |
<Callout type="info">
Hysteria2 در سطح داخلی یک پروتکل جداگانه نیست — همان پروتکل `hysteria` است که
نسخه انتقال آن روی ۲ تنظیم شده، و پنل برای آن لینک‌های اشتراک `hysteria2://`
تولید می‌کند.
</Callout>
## Fallbackها — چند پروتکل روی یک پورت
Fallbackها به یک پورت TLS واحد (مثلاً `443`) اجازه می‌دهند بیش از یک پروتکل را
سرویس دهد — برای مثال VLESS **و** Trojan — با هدایت دست‌دادن‌های (handshake)
ناهماهنگ به یک ورودی فرزند. در 3x-ui، fallbackها در پنل مدیریت می‌شوند (لیست
**Fallbacks** یک ورودی اصلی) به‌جای آنکه به‌صورت دستی در JSON نوشته شوند.
Fallbackها تنها زمانی در دسترس‌اند که ورودی اصلی این‌گونه باشد:
- **VLESS** یا **Trojan**،
- روی انتقال خام **TCP**،
- با امنیت **TLS** یا **REALITY**.
هر قاعده fallback یک ورودی فرزند را هدف قرار می‌دهد و می‌تواند بر اساس `path`،
`alpn` و `dest` تطبیق یابد. لینک‌های اشتراک کلاینت برای یک فرزند fallback
به‌صورت خودکار بازنویسی می‌شوند تا آدرس، پورت و TLS ورودی اصلی را اعلام کنند.
## مطمئن نیستید کدام را انتخاب کنید؟
از این جادوگر استفاده کنید تا بر اساس اهداف و کلاینت‌هایتان یک پیشنهاد دریافت کنید:
<ProtocolWizard />
<Callout type="info">
برای مقاومت در برابر سانسور با کلاینت‌های مدرن، **VLESS + REALITY +
XTLS-Vision** معمولاً بهترین انتخاب است — به
[REALITY](/docs/config/reality) ادامه دهید.
</Callout>
+14
View File
@@ -0,0 +1,14 @@
{
"title": "پیکربندی",
"icon": "Settings",
"pages": [
"panel",
"ssl-certificates",
"inbounds",
"reality",
"transports",
"clients",
"subscription",
"share-links"
]
}
+77
View File
@@ -0,0 +1,77 @@
---
title: تنظیمات پنل
description: تمام تنظیمات پنل 3x-ui — وب‌سرور، TLS، نمایش، امنیت و اعلان‌ها — همراه با مقادیر پیش‌فرض برگرفته از سورس.
icon: SlidersHorizontal
---
**تنظیمات پنل** نحوه‌ی ارائه و ایمن‌سازی خودِ پنل را کنترل می‌کند (جدا از ورودی‌ها
و کلاینت‌های شما). تنظیمات به‌صورت جفت‌های کلید/مقدار ذخیره می‌شوند؛ مقادیر
پیش‌فرض زیر مستقیماً از سورس پنل گرفته شده‌اند. اطلاعات محرمانه (توکن‌ها، گذرواژه‌ها)
فقط با نشانگرِ «تنظیم‌شده / تنظیم‌نشده» نمایش داده می‌شوند و هرگز به‌صورت کامل به
مرورگر بازگردانده نمی‌شوند.
## وب‌سرور
| Setting | Default | Meaning |
| ------------------- | ----------------------- | ----------------------------------------------------------------------- |
| `webPort` | `2053` | پورت پنل (۱ تا ۶۵۵۳۵). متغیر محیطی `XUI_PORT` در زمان اجرا آن را بازنویسی می‌کند. |
| `webListen` | _(همه‌ی واسط‌ها)_ | پنل را به یک IP مشخص مقید کنید. |
| `webBasePath` | `/` | مسیر URLی که پنل زیر آن ارائه می‌شود (همیشه به شکل `/…/` نرمال‌سازی می‌شود). |
| `webCertFile` / `webKeyFile` | _(هیچ‌کدام)_ | گواهی + کلید TLS. وقتی هر دو تنظیم شوند، پنل با **HTTPS** ارائه می‌شود. |
| `sessionMaxAge` | `360` | طول عمر نشست بر حسب **دقیقه** (پیش‌فرض ۶ ساعت). |
| `trustedProxyCIDRs` | `127.0.0.1/32,::1/128` | IPها/CIDRهایی که هدرهای فورواردشده‌شان (IP واقعی کلاینت) مورد اعتماد است. |
| `panelOutbound` | _(هیچ‌کدام)_ | مسیریابی خروجیِ خود پنل (بررسی به‌روزرسانی‌ها، Telegram، واکشی geo/sub) از طریق یک خروجی Xray با نام مشخص. |
پس از تغییر پورت یا مسیر پایه، آدرس پنل به‌صورت
`http(s)://<server>:<port><web-base-path>` درمی‌آید. می‌توانید مسیر پایه را در
نخستین اجرا با [`XUI_INIT_WEB_BASE_PATH`](/docs/reference/env-vars) از پیش تعیین کنید.
### TLS
ارائه‌ی پنل روی HTTPS از اطلاعات احراز هویت شما در حین انتقال محافظت می‌کند. یا
`webCertFile` + `webKeyFile` را تنظیم کنید — [منوی SSL در `x-ui`](/docs/config/ssl-certificates)
می‌تواند یک گواهی Let's Encrypt برای شما تهیه کند — یا TLS را روی یک
[پروکسی معکوس](/docs/operations/reverse-proxy) خاتمه دهید.
<Callout type="warn">
هرگز پنل را روی اینترنت عمومی با HTTP ساده در دسترس قرار ندهید. از TLS، یک پورت
غیرپیش‌فرض، و یک مسیر پایه‌ی وب تصادفیِ بلند استفاده کنید.
</Callout>
## نمایش
| Setting | Default | Meaning |
| ---------------- | ------------------------------------------------ | ------------------------------------------------------------- |
| `pageSize` | `25` | تعداد ردیف در هر صفحه از فهرست‌ها (`0` صفحه‌بندی را غیرفعال می‌کند). |
| `expireDiff` | `0` | تعداد روز پیش از انقضا برای شروع هشدار. |
| `trafficDiff` | `0` | درصد باقی‌مانده از سهمیه که در آن هشدار آغاز می‌شود. |
| `remarkTemplate` | `{{INBOUND}}-{{EMAIL}}\|📊{{TRAFFIC_LEFT}}\|⏳{{DAYS_LEFT}}D` | الگوی پیش‌فرض یادداشت کلاینت (نگاه کنید به [لینک‌های اشتراک‌گذاری](/docs/config/share-links#remark-template-variables)). |
| `timeLocation` | `Local` | منطقه‌ی زمانی برای آمار و انقضا. |
| `datepicker` | `gregorian` | تقویم برای ورودی‌های تاریخ (میلادی یا جلالی/شمسی). |
## امنیت و احراز هویت
اطلاعات احراز هویت، احراز هویت دومرحله‌ای، محدودکننده‌ی حملات جستجوی فراگیر،
نشست‌ها و LDAP در [نخستین ورود](/docs/guide/first-login) و
[امنیت](/docs/operations/security) پوشش داده شده‌اند. به‌طور خلاصه:
- گذرواژه‌ها به‌صورت هش‌های **bcrypt** ذخیره می‌شوند؛ تغییر آن‌ها همه‌ی نشست‌ها را از سیستم خارج می‌کند.
- **۲FA (TOTP)** می‌تواند در زمان ورود الزامی شود.
- یک سازوکار جایگزین **LDAP** می‌تواند زمانی که بررسی گذرواژه‌ی محلی ناموفق باشد، کاربران را احراز هویت کند.
- دسترسی API از **توکن‌های API** استفاده می‌کند که زیر تنظیمات پنل مدیریت می‌شوند (نگاه کنید به
[مرجع API](/docs/reference/api/api-tokens)).
## اعلان‌ها و اشتراک
این موارد گروه‌های تنظیمات و صفحه‌های مخصوص خود را دارند:
<Cards>
<Card title="ربات Telegram" href="/docs/operations/telegram-bot" description="توکن، شناسه‌های چت، هشدارها و گزارش‌ها." />
<Card title="اشتراک" href="/docs/config/subscription" description="سرور اشتراک، قالب‌ها و مسیرها." />
<Card title="امنیت" href="/docs/operations/security" description="۲FA، محدودیت‌های IP و سخت‌سازی." />
</Cards>
<Callout type="info">
اعلان‌های ایمیل (SMTP) نیز قابل پیکربندی‌اند (میزبان، پورت، رمزنگاری،
گیرندگان) با همان انواع رویدادهای ربات Telegram.
</Callout>
+135
View File
@@ -0,0 +1,135 @@
---
title: REALITY
description: راه‌اندازی یک ورودی VLESS + REALITY همراه با XTLS-Vision در 3x-ui — کلیدها، short IDها، SNI، اثرانگشت‌ها و اشتباهات رایج.
icon: ShieldCheck
---
**REALITY** یک لایه‌ی امنیتی انتقال در Xray است که پروکسی شما را به‌شکل ترافیک
عادی به یک وب‌سایت واقعی و پرطرفدار جلوه می‌دهد. برخلاف TLS کلاسیک، سرور شما به
**هیچ گواهی اختصاصی** نیاز ندارد — دست‌دهی (handshake) TLS سایت مقصد (`dest`) را
قرض می‌گیرد. در ترکیب با جریان **XTLS-Vision**، سریع است و در برابر بازرسی عمیق
بسته‌ها (DPI) مقاومت می‌کند.
REALITY همراه با **VLESS** (و Trojan) به‌کار می‌رود. جریان توصیه‌شده
`xtls-rprx-vision` است.
## تنظیمات کلیدی
وقتی **REALITY** را به‌عنوان حالت امنیتی روی یک ورودی VLESS انتخاب می‌کنید، 3x-ui
این فیلدها را نمایش می‌دهد:
| فیلد | چیست |
| ------------------------ | ------------------------------------------------------------------ |
| **Dest (target)** | یک سایت TLS واقعی برای جعل هویت، برای مثال `www.microsoft.com:443`. |
| **SNI / Server Names** | نام میزبانی که کلاینت‌ها ارسال می‌کنند؛ باید با گواهی مقصد بخواند. |
| **Public / Private key** | یک جفت‌کلید **x25519**. کلید خصوصی روی سرور باقی می‌ماند. |
| **Short IDs** | رشته‌های Hex برای احراز هویت کلاینت‌ها (می‌توانید چندتا داشته باشید).|
| **Flow** | روی `xtls-rprx-vision` تنظیم شود. |
| **Fingerprint (uTLS)** | اثرانگشت TLS کلاینت برای تقلید، برای مثال `chrome`. |
کلید خصوصی با ابزار `x25519` از Xray تولید می‌شود (پنل می‌تواند این جفت‌کلید را
برای شما بسازد):
```bash title="generate an x25519 keypair"
xray x25519
```
## راه‌اندازی در پنل
<Steps>
<Step>
### ساخت یک ورودی VLESS
یک ورودی جدید اضافه کنید، پروتکل **VLESS** را انتخاب کنید و **Security** را روی
**reality** تنظیم کنید.
</Step>
<Step>
### انتخاب مقصد (dest) و SNI
سایتی معتبر که از TLS 1.3 و HTTP/2 پشتیبانی می‌کند و هم از سرور و هم از کلاینت‌های
شما در دسترس است انتخاب کنید (برای مثال `www.microsoft.com:443`). نام سرورها / SNI
را طوری تنظیم کنید که با گواهی آن سایت بخواند.
</Step>
<Step>
### تولید کلیدها و short IDها
جفت‌کلید x25519 و یک یا چند short ID تولید کنید. **کلید خصوصی** را محرمانه نگه
دارید؛ کلاینت‌ها فقط **کلید عمومی** را دریافت می‌کنند.
</Step>
<Step>
### تنظیم جریان و اثرانگشت
از جریان `xtls-rprx-vision` و یک اثرانگشت رایج uTLS مانند `chrome` استفاده کنید.
</Step>
<Step>
### افزودن کلاینت و اشتراک‌گذاری لینک
یک کلاینت بسازید، سپس از لینک اشتراک‌گذاری یا کد QR آن در یک برنامه‌ی سازگار
(v2rayNG، Hiddify، Mihomo و دیگران) استفاده کنید.
</Step>
</Steps>
## پیکربندی چه شکلی است
روی سرور، `streamSettings` یک ورودی REALITY تقریباً به این شکل است:
```json title="server inbound (excerpt)"
{
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com"],
"privateKey": "<x25519 private key>",
"shortIds": ["<hex short id>"],
"fingerprint": "chrome"
}
}
```
لینک اشتراک‌گذاری متناظر کلاینت، پارامترهای **عمومی** را حمل می‌کند:
```text title="vless:// (excerpt)"
vless://<uuid>@<server>:443?security=reality&pbk=<public-key>&sid=<short-id>&sni=www.microsoft.com&fp=chrome&spx=%2F&flow=xtls-rprx-vision#my-reality
```
- `pbk` — کلید **عمومی** REALITY
- `sid` — short ID (با یکی از موارد روی سرور می‌خواند)
- `sni` — نام سرور (با گواهی مقصد می‌خواند)
- `fp` — اثرانگشت کلاینت
- `spx` — مسیر spiderX
- `flow` — `xtls-rprx-vision`
## اشتباهات رایج
<Callout type="warn">
- **مقصد نامناسب.** مقدار `dest` باید یک سایت واقعی باشد که از **TLS 1.3** و
**HTTP/2** پشتیبانی می‌کند، در دسترس است و در منطقه‌ی شما مسدود نیست. سایتی را
انتخاب کنید که مالک آن نیستید و ترافیک زیادی دارد.
- **عدم تطابق SNI.** مقدار SNI / نام سرورها باید با گواهی واقعی مقصد بخواند، وگرنه
دست‌دهی، استتار را لو می‌دهد.
- **نشت کلید خصوصی.** فقط و فقط **کلید عمومی** را میان کلاینت‌ها توزیع کنید.
- **جریان نادرست.** REALITY + XTLS-Vision به `flow = xtls-rprx-vision` هم در ورودیِ
مدخل کلاینت و هم در لینک اشتراک‌گذاری نیاز دارد.
</Callout>
## تولید یک پیکربندی
از تولیدکننده‌ی زیر برای ساخت یک جفت‌کلید تازه‌ی X25519، UUID و short ID استفاده
کنید، سپس JSON ورودی سرور و لینک اشتراک‌گذاری کلاینت را کپی کنید. همه‌چیز **در
مرورگر شما** محاسبه می‌شود — هیچ کلید یا لینکی به جایی ارسال نمی‌شود.
<RealityConfigGenerator />
<Callout type="info">
**کلید خصوصی** فقط به سرور شما تعلق دارد. لینک تولیدشده‌ی `vless://` (که حاوی
**کلید عمومی** است) را با کلاینت‌ها به اشتراک بگذارید.
</Callout>
@@ -0,0 +1,81 @@
---
title: لینک‌های اشتراک‌گذاری
description: قالب‌های لینک اشتراک‌گذاری 3x-ui (vless، vmess، trojan، ss، hysteria2، mtproto)، متغیرهای قالب توضیحات، و بازرس لینک درون‌مرورگری.
icon: Link
---
3x-ui برای هر کلاینت یک **لینک اشتراک‌گذاری** (و کد QR) تولید می‌کند. برنامه‌های کلاینت
مانند v2rayNG، Hiddify و Mihomo این لینک‌ها را برای پیکربندی خودشان وارد می‌کنند.
## قالب‌های لینک
| Scheme | ساختار |
| -------------- | --------------------------------------------------------------- |
| `vless://` | `vless://<uuid>@<host>:<port>?<params>#<remark>` |
| `vmess://` | `vmess://<base64-json>` (یک شیء JSON کدشده با base64) |
| `trojan://` | `trojan://<password>@<host>:<port>?<params>#<remark>` |
| `ss://` | `ss://<userinfo>@<host>:<port>?<params>#<remark>` (SIP002؛ Shadowsocks-2022 از userinfo کدگذاری‌شده با درصد استفاده می‌کند) |
| `hysteria2://` | `hysteria2://<auth>@<host>:<port>?<params>#<remark>` |
| `tg://proxy` | `tg://proxy?server=…&port=…&secret=…` (MTProto) |
پارامترهای کوئری تنظیمات انتقال و امنیت را حمل می‌کنند — `security`،
`sni`، `fp`، `pbk`، `sid`، `spx`، `flow`، `type`، `path`، `host`، `alpn` و
بیشتر.
## بازرسی یک لینک
هر لینک اشتراک‌گذاری را بچسبانید تا تک‌تک فیلدها رمزگشایی شوند. تجزیه **به‌طور کامل در
مرورگر شما** انجام می‌شود — لینک هرگز روی شبکه ارسال نمی‌شود.
<ShareLinkInspector />
<Callout type="warn">
لینک‌های اشتراک‌گذاری همه‌ی آنچه را برای اتصال به‌عنوان یک کلاینت لازم است در بر دارند، از جمله
اعتبارنامه‌ی کلاینت. با آن‌ها مانند رمز عبور رفتار کنید.
</Callout>
## متغیرهای قالب توضیحات
متنی که در هر لینک پس از `#` می‌آید (**توضیحات** یا remark) از یک قالب تولید می‌شود
که شما در تنظیمات پنل کنترل می‌کنید (`remarkTemplate`). مقدار پیش‌فرض این است:
```text
{{INBOUND}}-{{EMAIL}}|📊{{TRAFFIC_LEFT}}|⏳{{DAYS_LEFT}}D
```
توکن‌ها از نحو `{{UPPER_CASE}}` استفاده می‌کنند. قالب بر اساس `|` به بخش‌هایی تقسیم می‌شود؛
بخشی که تنها مقدارش نشانگر نامحدود `∞` باشد (برای `TRAFFIC_LEFT`،
`TRAFFIC_TOTAL`، `DAYS_LEFT` یا `TIME_LEFT`) حذف می‌شود، تا کلاینت‌های نامحدود
تزئینات خالی نشان ندهند.
### توکن‌های در دسترس
| توکن | مقدار |
| ----- | ----- |
| `{{EMAIL}}` / `{{USERNAME}}` | ایمیل کلاینت (شناسه) |
| `{{INBOUND}}` | توضیحات اینباند |
| `{{HOST}}` | توضیحات ردیف هاست (هاست‌های مدیریت‌شده) |
| `{{ID}}` / `{{SHORT_ID}}` | UUID کلاینت / ۸ کاراکتر نخست آن |
| `{{TELEGRAM_ID}}` · `{{SUB_ID}}` · `{{COMMENT}}` | شناسه Telegram، شناسه اشتراک، توضیح |
| `{{STATUS}}` / `{{STATUS_EMOJI}}` | `active`/`expired`/`depleted`/`disabled` (یا ✅⏳🚫) |
| `{{DAYS_LEFT}}` / `{{TIME_LEFT}}` | روزهای باقی‌مانده، یا `Xd Xh Xm` (`∞` در صورت نامحدود بودن) |
| `{{EXPIRE_DATE}}` / `{{JALALI_EXPIRE_DATE}}` / `{{EXPIRE_UNIX}}` | تاریخ انقضا به‌صورت میلادی / شمسی / ثانیه‌های Unix |
| `{{CREATED_UNIX}}` | زمان ایجاد (ثانیه‌های Unix) |
| `{{TRAFFIC_USED}}` / `{{TRAFFIC_LEFT}}` / `{{TRAFFIC_TOTAL}}` | مصرف خوانا برای انسان (`∞` در صورت نامحدود بودن) |
| `{{TRAFFIC_USED_BYTES}}` / `{{TRAFFIC_LEFT_BYTES}}` / `{{TRAFFIC_TOTAL_BYTES}}` | همان، بر حسب بایت |
| `{{UP}}` / `{{DOWN}}` | آپلود / دانلود (خوانا برای انسان) |
| `{{RESET_DAYS}}` · `{{USAGE_PERCENTAGE}}` | دوره بازنشانی (روز) · درصد مصرف‌شده |
| `{{PROTOCOL}}` / `{{TRANSPORT}}` / `{{SECURITY}}` | مثلاً `VLESS` / `ws` / `REALITY` |
<Callout type="info">
توکن‌های مصرف (ترافیک، روزها، وضعیت) در **بدنه**ی اشتراک ظاهر می‌شوند اما
از نمای نمایش/QR حذف می‌گردند، تا یک QR اشتراک‌گذاری‌شده سهمیه‌ی باقی‌مانده‌ی یک کلاینت
را افشا نکند. توکن‌های تاریخ از تنظیم `datepicker` پیروی می‌کنند (میلادی یا شمسی).
</Callout>
## مرتبط
<Cards>
<Card title="REALITY" href="/docs/config/reality" description="یک پیکربندی و لینک VLESS + REALITY بسازید." />
<Card title="اشتراک" href="/docs/config/subscription" description="همه‌ی لینک‌های یک کلاینت را از یک URL ارائه دهید." />
</Cards>
@@ -0,0 +1,179 @@
---
title: گواهی‌های SSL
description: دریافت و تمدید گواهی‌های TLS برای پنل و ورودی‌های 3x-ui — با منوی ACME در x-ui (دامنه یا IP خام)، گواهی wildcard از طریق Cloudflare DNS-01، یا Certbot دستی.
icon: ShieldCheck
---
یک گواهی TLS به شما امکان می‌دهد **پنل** را روی HTTPS سرویس‌دهی کنید (تا ترافیک ورود و
API شما رمزگذاری شود) و TLS را روی **ورودی‌ها** خاتمه دهید (VLESS-TLS، Trojan،
Shadowsocks-TLS و موارد مشابه). سه راه برای به‌دست‌آوردن گواهی وجود دارد:
- **منوی `x-ui`** — کلاینت داخلی [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment).
آسان‌ترین گزینه برای یک دامنه‌ی واحد یا یک IP خام.
- **Cloudflare DNS-01** — این هم از همان منو؛ برای گواهی‌های **wildcard** یا
زمانی که پورت 80 مسدود است / سرور پشت پراکسی Cloudflare قرار دارد لازم است.
- **Certbot دستی** — اگر ترجیح می‌دهید `acme.sh`/Certbot را خودتان مدیریت کنید.
<Callout type="info">
اگر پنل را پشت Nginx یا Caddy قرار می‌دهید، بگذارید پراکسی به‌جای شما گواهی را
مدیریت کند — به [پراکسی معکوس](/docs/operations/reverse-proxy) مراجعه کنید.
ورودی‌های [REALITY](/docs/config/reality) **هیچ** گواهی‌ای نیاز ندارند؛ آن‌ها
TLS یک سایت واقعی را قرض می‌گیرند. این صفحه برای پنل و برای ورودی‌های کلاسیک TLS است.
</Callout>
## منوی SSL در `x-ui` (Let's Encrypt)
`x-ui` را اجرا کنید و **`20` — SSL Certificate Management** را انتخاب کنید. این گزینه
[acme.sh](https://github.com/acmesh-official/acme.sh) را به کار می‌گیرد و موارد زیر را ارائه می‌دهد:
| گزینه | کاری که انجام می‌دهد |
| ------------------------------ | ------------------------------------------------------------------- |
| Get SSL (Domain) | صدور گواهی برای یک دامنه از طریق اعتبارسنجی HTTP. |
| Get SSL for IP Address | صدور یک گواهی کوتاه‌مدت (۶ روزه، با تمدید خودکار) برای یک **IP خام**. |
| Revoke | باطل‌کردن یک گواهی موجود. |
| Force Renew | تمدید همین حالا، پیش از انقضا. |
| Show Existing Domains | فهرست‌کردن گواهی‌هایی که از پیش روی سرور هستند. |
| Set Cert paths for the panel | اشاره‌دادن TLS پنل به یک گواهی صادرشده (فیلدها را برای شما تنظیم می‌کند). |
### صدور گواهی برای یک دامنه
<Steps>
<Step>
### دامنه را به سرور اشاره دهید
یک رکورد `A` (و/یا `AAAA`) برای دامنه‌ی خود بسازید که به IP عمومی این سرور
اشاره کند. تا زمانی که DNS منتشر (propagate) نشده باشد، اعتبارسنجی ناموفق خواهد بود.
</Step>
<Step>
### پورت 80 را آزاد کنید
اعتبارسنجی HTTP نیاز دارد که **پورت 80** از اینترنت در دسترس باشد و از پیش در حال
استفاده نباشد. هر چیزی را که به آن متصل است برای این مدت متوقف کنید و آن را از
[فایروال](/docs/reference/ports-firewall) عبور دهید.
</Step>
<Step>
### صادرکننده را اجرا کنید
`x-ui` ← `20` ← **Get SSL (Domain)**، سپس دامنه را وارد کنید. acme.sh گواهی را
درخواست می‌کند و آن را زیر `/root/cert/<domain>/` به‌صورت `fullchain.pem`
(زنجیره‌ی گواهی) و `privkey.pem` (کلید خصوصی) ذخیره می‌کند.
</Step>
<Step>
### آن را به پنل متصل کنید
گزینه‌ی **Set Cert paths for the panel** را انتخاب کنید تا `webCertFile` و
`webKeyFile` پر شوند و پنل راه‌اندازی مجدد شود، یا آن‌ها را خودتان در
[تنظیمات پنل](/docs/config/panel#tls) تنظیم کنید. به‌محض تنظیم‌شدن هر دو، پنل HTTPS را
سرویس‌دهی می‌کند.
</Step>
</Steps>
### صدور گواهی برای یک IP خام
دامنه‌ای ندارید؟ گزینه‌ی **Get SSL for IP Address** را انتخاب کنید تا یک گواهی
کوتاه‌مدت (با اعتبار حدود ۶ روز، که به‌صورت خودکار تمدید می‌شود) متصل به IP سرور
به‌دست آورید. برای دسترسی به پنل روی HTTPS پیش از آنکه دامنه‌ای راه‌اندازی کنید مفید است.
## Cloudflare (گواهی wildcard با DNS-01)
اعتبارسنجی DNS به‌جای پاسخ‌دادن روی پورت 80، با ساختن یک رکورد TXT ثابت می‌کند که شما
دامنه را در اختیار دارید — بنابراین **پشت پراکسی Cloudflare**، روی سرورهایی که
پورت 80 در آن‌ها مسدود است، و برای گواهی‌های **wildcard** (`*.example.com`) کار می‌کند.
DNS دامنه‌ی شما باید توسط Cloudflare مدیریت شود و به یکی از این موارد نیاز دارید:
- یک **توکن API محدودشده** با مجوز `Zone:DNS:Edit` (توصیه‌شده)، یا
- **ایمیل حساب + Global API Key**.
<Steps>
<Step>
### یک توکن API محدودشده بسازید
در داشبورد Cloudflare به **My Profile → API Tokens →
[Create Token](https://dash.cloudflare.com/profile/api-tokens)** بروید، قالب
**Edit zone DNS** را انتخاب کنید، آن را به zone‌ای که برایش گواهی صادر می‌کنید محدود
کنید و آن را بسازید. توکن را کپی کنید — فقط یک‌بار نمایش داده می‌شود.
</Step>
<Step>
### صادرکننده‌ی Cloudflare را اجرا کنید
`x-ui` ← **`21` — Cloudflare SSL Certificate**. هنگام پرسش، **`t`** را برای یک
توکن API (پیش‌فرض) یا **`g`** را برای Global API Key انتخاب کنید، سپس دامنه‌ی خود را
وارد کنید (و برای Global API Key، ایمیل حساب و کلید خود را). acme.sh رکورد TXT را
می‌سازد، اعتبارسنجی می‌کند و آن را پاک‌سازی می‌کند.
</Step>
<Step>
### پنل را به آن اشاره دهید
مانند جریان دامنه، از **Set Cert paths for the panel** (منوی `20`) استفاده کنید یا
`webCertFile` / `webKeyFile` را در [تنظیمات پنل](/docs/config/panel#tls) تنظیم کنید.
</Step>
</Steps>
<Callout type="info">
یک توکن محدودشده را به Global API Key ترجیح دهید — آن فقط اجازه‌ی ویرایش DNS را روی
zoneای که انتخاب می‌کنید می‌دهد، بنابراین نشت آن نمی‌تواند به بقیه‌ی حساب Cloudflare شما دست بزند.
</Callout>
## دستی (Certbot)
اگر ترجیح می‌دهید از منو استفاده نکنید، یک گواهی را با افزونه‌ی standalone مربوط به
Certbot صادر کنید (این هم نیاز دارد که پورت 80 آزاد باشد و دامنه به سرور اشاره کند):
```bash
apt-get install certbot -y
certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com
certbot renew --dry-run
```
Certbot گواهی را در `/etc/letsencrypt/live/yourdomain.com/` می‌نویسد
(`fullchain.pem` و `privkey.pem`). پنل را در [تنظیمات پنل](/docs/config/panel#tls) به آن
دو فایل اشاره دهید و تمدید را راه‌اندازی کنید — `certbot renew` به‌صورت پیش‌فرض روی یک
تایمر systemd اجرا می‌شود.
## استفاده از گواهی
- **پنل** — `webCertFile` (زنجیره‌ی کامل) و `webKeyFile` (کلید خصوصی) را در
[تنظیمات پنل](/docs/config/panel#tls) تنظیم کنید. برای آنکه پنل به HTTPS سوئیچ کند،
هر دو باید تنظیم شوند. گزینه‌ی منوی **`11` — View Current Settings** مسیرهای
درحال‌استفاده‌ی فعلی را چاپ می‌کند.
- **ورودی‌ها** — وقتی TLS را روی یک ورودی فعال می‌کنید، در تنظیمات TLS همان ورودی به
همان فایل‌های گواهی و کلید ارجاع دهید (یا محتوای آن‌ها را جای‌گذاری کنید). به
[ورودی‌ها](/docs/config/inbounds) و [ترابری‌ها](/docs/config/transports) مراجعه کنید.
<Callout type="warn">
گواهی‌ها منقضی می‌شوند (Let's Encrypt: ۹۰ روز؛ گواهی‌های IP: حدود ۶ روز). هم منو و هم
Certbot به‌صورت خودکار تمدید می‌کنند، اما پنل همچنان **فایل‌ها** را در مسیرهای ثابت‌شان
می‌خواند — بنابراین **در همان محل** تمدید کنید نه با جابه‌جاکردن فایل‌ها، و پنل در
راه‌اندازی مجدد بعدی‌اش گواهی جدید را برمی‌دارد. **Force Renew** (منوی `20`) یک تمدید
را به‌صورت درخواستی فعال می‌کند.
</Callout>
## گام‌های بعدی
<Cards>
<Card
title="تنظیمات پنل"
href="/docs/config/panel#tls"
description="webCertFile / webKeyFile و بقیه‌ی تنظیمات وب‌سرور."
/>
<Card
title="پراکسی معکوس"
href="/docs/operations/reverse-proxy"
description="به‌جای آن، بگذارید Nginx یا Caddy کار خاتمه‌دادن TLS را برایتان انجام دهد."
/>
<Card
title="REALITY"
href="/docs/config/reality"
description="TLS مخفیانه برای ورودی‌ها — بدون نیاز به گواهی."
/>
</Cards>
@@ -0,0 +1,86 @@
---
title: Subscription
description: راه‌اندازی سرور اشتراک 3x-ui — قالب‌های base64/JSON/Clash، پورت‌ها و مسیرها، TLS، هدرهای پاسخ و قالب‌های سفارشی.
icon: Rss
---
یک **اشتراک** (subscription) یک URL واحد است که همه‌ی پیکربندی‌های یک کلاینت را
برمی‌گرداند. برنامه‌های کلاینت آن را به‌صورت دوره‌ای تازه‌سازی می‌کنند، بنابراین وقتی
یک ورودی را تغییر می‌دهید، کلاینت‌ها این تغییر را به‌صورت خودکار دریافت می‌کنند. سرور
اشتراک به‌عنوان یک سرور **جداگانه** از پنل اجرا می‌شود.
## فعال‌سازی و پیکربندی
سرور اشتراک به‌صورت **پیش‌فرض روشن** است (`subEnable`). آن را در تنظیمات اشتراک
پنل پیکربندی کنید:
| Setting | Default | Meaning |
| ------------- | ------- | --------------------------------------------------------------- |
| `subPort` | `2096` | پورت گوش‌دادن (جدا از پنل). |
| `subListen` | _(همه)_ | آدرس اتصال (bind). |
| `subPath` | `/sub/` | مسیر پایه برای URLهای خام اشتراک. |
| `subDomain` | _(هیچ)_ | میزبان عمومی؛ اگر تنظیم شود، سرور فقط به همان Host پاسخ می‌دهد. |
| `subCertFile` / `subKeyFile` | _(هیچ)_ | گواهی و کلید TLS — هنگام تنظیم، سرور **HTTPS** ارائه می‌دهد. |
| `subEncrypt` | `true` | بدنه‌ی خام اشتراک را با base64 رمزگذاری می‌کند. |
| `subUpdates` | `12` | بازه‌ی پیشنهادی تازه‌سازی (ساعت) که به کلاینت‌ها ارسال می‌شود. |
یک URL اشتراک به این شکل است:
```text
https://<sub-host>:<sub-port>/sub/<sub-id>
```
که در آن `<sub-id>` همان **Sub ID** کلاینت است.
همان Sub ID در چند قالب روی مسیرهای مختلف ارائه می‌شود — فهرست **Base64** در
`subPath` و پیکربندی **JSON** (Xray-json) در مسیر JSON. URLها را بسازید و هر دو
بدنه را اینجا پیش‌نمایش کنید:
<SubscriptionBuilder />
## قالب‌های خروجی
**قالب بر اساس مسیر انتخاب می‌شود** و هرکدام کلید فعال‌سازی مخصوص خود را دارند:
| Format | Path | Enabled by | Output |
| --------------------- | --------- | ---------------- | --------------------------------------------------- |
| **لینک‌های خام** | `/sub/` | همیشه (اگر روشن باشد) | فهرستی از لینک‌های `vless://`، `vmess://`، … (هنگام فعال‌بودن `subEncrypt` با base64 رمزگذاری می‌شود). |
| **JSON** | `/json/` | `subJsonEnable` | پیکربندی(های) کامل کلاینت Xray. |
| **Clash / Mihomo** | `/clash/` | `subClashEnable` | پروفایل YAML. |
فقط ورودی‌های فعالی که از **VLESS، VMess، Trojan، Shadowsocks یا Hysteria2**
استفاده می‌کنند در یک اشتراک ظاهر می‌شوند و بر اساس شاخص sub-sort آن‌ها مرتب می‌شوند.
درخواست `/sub/` همراه با هدر `Accept: text/html` (یا `?html=1`) به‌جای بدنه‌ی خام،
یک صفحه‌ی اطلاعات خوانا برای انسان برمی‌گرداند.
### Base64 vs JSON
بدنه‌ی **Base64** صرفاً همان لینک‌های اشتراک‌گذاری است که با خط جدید به هم پیوسته و
با standard-base64 رمزگذاری شده‌اند (با `subEncrypt` قابل تغییر است). بدنه‌ی **JSON**
هر کلاینت را در یک پیکربندی کامل کلاینت Xray می‌پیچد — یک اسکلت ثابت (ورودی‌های محلی
mixed/HTTP، DNS، مسیریابی، policy) به‌علاوه‌ی یک outbound از نوع `proxy` که به ورودی
اشاره می‌کند. 3x-ui **برای یک کلاینت یک شیء پیکربندی واحد و برای چند کلاینت یک آرایه**
تولید می‌کند، از فرم تخت `settings` در outbound استفاده می‌کند
(`address`/`port`/`id`، `level: 8`) و `sockopt` را از `streamSettings` حذف می‌کند.
## هدرهای پاسخ
اشتراک‌ها هدرهای استانداردی برمی‌گردانند که برنامه‌های سازگار آن‌ها را می‌خوانند:
- **`Subscription-Userinfo`** — `upload`، `download`، `total` (بایت؛ `total=0`
یعنی نامحدود) و `expire` (ثانیه‌های Unix).
- **`Profile-Update-Interval`** — بازه‌ی تازه‌سازی برحسب ساعت (`subUpdates`).
- **`Profile-Title`**، **`Support-Url`**، **`Profile-Web-Page-Url`**،
**`Announce`** — برندینگ اختیاری که برخی کلاینت‌ها نمایش می‌دهند.
## قالب‌های سفارشی صفحه
برای برندینگ صفحه‌ی HTML اشتراک، `subThemeDir` را به یک پوشه‌ی حاوی قالب سفارشیِ
صفحه‌ی اطلاعات اشاره دهید. توضیح (remark) هر کلاینت روی هر لینک کاملاً قابل
قالب‌بندی است — به [لینک‌های اشتراک‌گذاری ← متغیرهای remark](/docs/config/share-links#remark-template-variables) مراجعه کنید.
<Callout type="info">
سرور اشتراک را پشت TLS قرار دهید (با تنظیم `subCertFile`/`subKeyFile`، یا یک
[پروکسی معکوس](/docs/operations/reverse-proxy)) تا محتوای اشتراک در حین انتقال
افشا نشود.
</Callout>
+201
View File
@@ -0,0 +1,201 @@
---
title: انتقال‌ها و امنیت
description: هر انتقالی که 3x-ui ارائه می‌دهد — TCP، mKCP، WebSocket، gRPC، HTTPUpgrade، XHTTP، Hysteria — به‌همراه تنظیماتشان، و نیز مبهم‌سازی FinalMask، sockopt، TLS/REALITY، XTLS-Vision و رمزنگاری VLESS.
icon: Network
---
یک **انتقال** تعیین می‌کند که بسته‌ها چگونه میان کلاینت و سرور حمل شوند، یک
لایه **امنیتی** تعیین می‌کند که چگونه رمزنگاری و استتار شوند، و **FinalMask**
می‌تواند آنچه باقی مانده را مبهم کند. پنل تنها ترکیب‌های معتبر را ارائه می‌دهد؛ این
صفحه تنظیمات هر انتقال و قواعدی را که پنل اعمال می‌کند فهرست می‌کند.
## انتقال‌ها
انتقال (مقدار `network` مربوط به inbound) را در فرم inbound/outbound انتخاب کنید. هر
شبکه کلید تنظیمات خود را روی سیم می‌نویسد (`tcpSettings`، `kcpSettings`، …).
| انتقال | کلید تنظیمات | چه زمانی از آن استفاده کنید |
| --------------- | --------------------- | ---------------------------------------------------------------------- |
| **TCP (Raw)** | `tcpSettings` | کمترین سربار. پایه‌ای برای REALITY + XTLS-Vision و fallback‌ها؛ استتار اختیاری هدر HTTP/1.1. |
| **mKCP** | `kcpSettings` | پروتکل قابل‌اعتماد روی **UDP** — پهنای باند را با تأخیر کمتر روی لینک‌های پُرافت معاوضه می‌کند. هیچ TLS/REALITY حمل نمی‌کند. |
| **WebSocket** | `wsSettings` | از طریق CDN‌ها و پراکسی‌های معکوس HTTP کار می‌کند؛ بسیار سازگار است. |
| **gRPC** | `grpcSettings` | مبتنی بر HTTP/2؛ مالتی‌پلکس خوبی دارد و به‌خوبی از طریق Nginx پراکسی می‌شود. |
| **HTTPUpgrade** | `httpupgradeSettings` | `Upgrade` مربوط به HTTP/1.1 و سازگار با CDN؛ سبک‌تر از WebSocket کامل. |
| **XHTTP** | `xhttpSettings` | انتقال HTTP مدرن با مالتی‌پلکس جریانی؛ سازگار با CDN و توانمند برای REALITY. |
| **Hysteria** | `hysteriaSettings` | انتقال مبتنی بر QUIC — تنها برای پروتکل **Hysteria2**. |
<Callout type="info">
inbound‌های **WireGuard** و **Tunnel** (dokodemo-door) هیچ انتخابگر انتقالی
نمایش نمی‌دهند — جریان آن‌ها تنها security/sockopt را حمل می‌کند. پنل‌های قدیمی‌تر
یک انتقال خام **HTTP/2 (`http`)** نیز نمایش می‌دادند؛ این انتقال جای خود را به
**XHTTP** داده و دیگر قابل انتخاب نیست.
</Callout>
### TCP (Raw) — `tcpSettings`
| فیلد | پیش‌فرض | معنی |
| ------------------------------ | ------- | ----------------------------------------------------------------------- |
| `acceptProxyProtocol` | `false` | پذیرش پروتکل PROXY از یک پراکسی بالادست تا IP واقعی کلاینت حفظ شود. |
| `header.type` | `none` | `none`، یا `http` برای استتار HTTP/1.1. |
| `header.request` / `response` | — | هنگام `type: http`: متد، مسیر، نسخه و یک نگاشت هدر که یک تبادل HTTP معمولی را تقلید می‌کنند. |
### mKCP — `kcpSettings`
| فیلد | پیش‌فرض | معنی |
| ------------------ | ----------- | ---------------------------------------------------------------- |
| `mtu` | `1350` | بیشینه واحد انتقال، بر حسب بایت (576–1460). |
| `tti` | `20` | بازه زمانی انتقال، بر حسب میلی‌ثانیه (10–100). کمتر = پاسخگوتر، سربار بیشتر. |
| `uplinkCapacity` | `5` | بودجه پهنای باند آپلود، بر حسب **MB/s**. |
| `downlinkCapacity` | `20` | بودجه پهنای باند دانلود، بر حسب **MB/s**. |
| `cwndMultiplier` | `1` | ضریب پنجره ازدحام؛ برای فشار بیشتر روی لینک‌های خوب آن را بالا ببرید. |
| `maxSendingWindow` | `2097152` | کران بالای بسته‌های در حال پرواز. |
<Callout type="info">
mKCP نمی‌تواند TLS یا REALITY حمل کند. برای استتار آن، یک ماسک UDP از نوع
**FinalMask** اضافه کنید — ماسک `mkcp-legacy` همان مبهم‌سازی کلاسیک هدر را
بازتولید می‌کند که Xray قدیمی‌تر در `kcpSettings.header`/`seed` ذخیره می‌کرد
(آن فیلدها دیگر اینجا وجود ندارند).
</Callout>
### WebSocket — `wsSettings`
| فیلد | پیش‌فرض | معنی |
| --------------------- | ------- | ---------------------------------------------------------------- |
| `path` | `/` | مسیر درخواست — وقتی چند سرویس یک میزبان را به اشتراک می‌گذارند، بر اساس آن مسیریابی کنید. |
| `host` | _(none)_| بازنویسی هدر `Host` (پشت یک CDN مفید است). |
| `headers` | `{}` | هدرهای درخواست اضافی. |
| `heartbeatPeriod` | `0` | ثانیه‌های بین پینگ‌های keepalive؛ `0` آن‌ها را غیرفعال می‌کند. |
| `acceptProxyProtocol` | `false` | پذیرش پروتکل PROXY از یک بالادست. |
### gRPC — `grpcSettings`
| فیلد | پیش‌فرض | معنی |
| ------------- | ------- | --------------------------------------------------------- |
| `serviceName` | _(none)_| مسیر سرویس gRPC؛ مانند یک مسیر مخفی عمل می‌کند. |
| `authority` | _(none)_| بازنویسی شبه‌هدر `:authority`. |
| `multiMode` | `false` | مالتی‌پلکس چند جریان روی یک اتصال. |
### HTTPUpgrade — `httpupgradeSettings`
| فیلد | پیش‌فرض | معنی |
| --------------------- | ------- | --------------------------------------------- |
| `path` | `/` | مسیر درخواست. |
| `host` | _(none)_| بازنویسی هدر `Host`. |
| `headers` | `{}` | هدرهای درخواست اضافی. |
| `acceptProxyProtocol` | `false` | پذیرش پروتکل PROXY از یک بالادست. |
‏HTTPUpgrade یک `Upgrade` تک‌مرحله‌ای HTTP/1.1 بدون قاب‌بندی WebSocket است — هیچ
فیلد heartbeat ندارد.
### XHTTP — `xhttpSettings`
‏XHTTP (SplitHTTP) مجموعه فیلد بزرگی دارد؛ پنل پیش‌فرض‌های معقولی را پر می‌کند.
آن‌هایی که معمولاً سراغشان می‌روید:
| فیلد | پیش‌فرض | معنی |
| ---------------------- | ----------- | ---------------------------------------------------------------------- |
| `path` | `/` | مسیر درخواست. |
| `host` | _(none)_ | بازنویسی هدر `Host`. |
| `mode` | `auto` | `auto`، `packet-up`، `stream-up` یا `stream-one`. `packet-up` بیشترین سازگاری با CDN را دارد؛ `stream-*` تأخیر کمتری دارند. |
| `xPaddingBytes` | `100-1000` | بازه padding تصادفی که اندازه بسته‌ها را محو می‌کند. |
| `scMaxBufferedPosts` | `30` | بافر سمت سرور برای POST‌های آپلودشده. |
| `scStreamUpServerSecs` | `20-80` | پنجره stream-up سمت سرور (بازه با خط تیره). |
| `xmux` (`enableXmux`) | _(off)_ | مالتی‌پلکس اتصال — `maxConcurrency` `16-32`، `maxConnections` `6`، … برای همزمانی بالا روشن کنید. |
فیلدهای Session-ID (`sessionIDPlacement`، `sessionIDKey`، `sessionIDTable`،
`sessionIDLength`) و کلیدهای `scMin/MaxEachPostBytes` پیشرفته‌اند؛ آن‌ها را خالی
بگذارید مگر آنکه با یک بالادست مشخص هماهنگ می‌شوید.
### Hysteria — `hysteriaSettings`
تنها زمانی معتبر است که پروتکل **Hysteria2** باشد.
| فیلد | پیش‌فرض | معنی |
| ---------------- | ------- | ----------------------------------------------------------------------- |
| `version` | `2` | نسخه پروتکل Hysteria. |
| `auth` | _(none)_| رشته احراز هویت مشترک. |
| `udpIdleTimeout` | `60` | ثانیه (2–600) پیش از حذف نشست‌های بی‌کار UDP. |
| `masquerade` | — | استتار به‌عنوان یک سرور HTTP/3: `type` با مقدار `proxy`/`file`/`string` و `url`/`dir`/`content`، به‌علاوه `headers` و `statusCode`. |
## FinalMask — مبهم‌سازی لایه پایانی
**FinalMask** ترافیک را **پس از** لایه‌های انتقال و امنیت می‌پیچد، بنابراین می‌تواند
انتقال‌هایی را که TLS حمل نمی‌کنند (مانند mKCP) استتار کند یا پوسته‌ای دوم روی TLS
بیفزاید. ماسک‌ها برای هر جهت پیکربندی می‌شوند:
- **ماسک‌های TCP** — `fragment`، `sudoku`، `header-custom`.
- **ماسک‌های UDP** — `salamander`، `mkcp-legacy`، `header-custom`، `xdns`، `xicmp`،
`noise`، `sudoku`، `realm`. (`mkcp-legacy` همان مبهم‌سازی قدیمی هدر mKCP را
بازتولید می‌کند.)
- **پارامترهای QUIC** — کنترل ازدحام (`reno`، `bbr`، `brutal`، `force-brutal`)،
نرخ‌های آپلود/دانلود Brutal، `udpHop` (چرخاندن پورت QUIC در یک بازه برای دور زدن
مسدودسازی پورت)، و تنظیم پنجره دریافت.
‏FinalMask جایگزین مبهم‌سازی `header`/`seed` به‌ازای هر انتقال می‌شود که بیلدهای
قدیمی‌تر Xray نمایش می‌دادند.
## sockopt — گزینه‌های سطح پایین سوکت
‏`sockopt` در کنار هر انتقالی سوار می‌شود و سوکت زیرین را تنظیم می‌کند. مفیدترین
فیلدها:
| فیلد | پیش‌فرض | معنی |
| --------------------- | ------- | ---------------------------------------------------------------- |
| `tcpFastOpen` | `false` | فعال‌سازی TCP Fast Open. |
| `tcpcongestion` | `bbr` | کنترل ازدحام: `bbr`، `cubic` یا `reno`. |
| `tproxy` | `off` | حالت پراکسی شفاف: `off`، `redirect` یا `tproxy`. |
| `domainStrategy` | `AsIs` | نحوه تفکیک نشانی‌ها (`UseIP`، `ForceIPv4`، …). |
| `dialerProxy` | _(none)_| زنجیر کردن شماره‌گیری این outbound از طریق یک تگ outbound دیگر. |
| `interface` | _(none)_| اتصال به یک رابط شبکه مشخص. |
| `mark` | `0` | SO_MARK برای مسیریابی سیاستی (`0` = تنظیم‌نشده). |
فیلدهای عددی که روی `0` رها شوند روی سیم حذف می‌شوند تا Xray پیش‌فرض‌های سیستم‌عامل
را حفظ کند. ورودی‌های پیشرفته (`happyEyeballs`، `customSockopt[]`، تایمرهای
keepalive) برای موارد خاص در دسترس‌اند.
## امنیت
لایه امنیتی یکی از **`none`**، **`tls`** یا **`reality`** است، با این
قواعد واجد شرایط بودن:
| امنیت | انتقال‌های واجد شرایط | پروتکل‌های واجد شرایط |
| ----------- | -------------------------------------------- | --------------------------------------------------- |
| **TLS** | `tcp`، `ws`، `grpc`، `httpupgrade`، `xhttp` | VLESS، VMess، Trojan، Shadowsocks (Hysteria2 همیشه TLS است) |
| **REALITY** | `tcp`، `grpc`، `xhttp` | VLESS، Trojan |
mKCP و Hysteria لایه TLS/REALITY جداگانه‌ای نمی‌گیرند — mKCP به‌صورت متن ساده اجرا
می‌شود (با FinalMask استتارش کنید)، و Hysteria به‌طور ذاتی QUIC/TLS است. REALITY
سرور شما را به‌عنوان یک سایت واقعی TLS استتار می‌کند و به هیچ گواهی نیازی ندارد — به
[REALITY](/docs/config/reality) مراجعه کنید.
## جریان XTLS-Vision
جریان `xtls-rprx-vision` سریع و مقاوم در برابر DPI است. این جریان برای
**VLESS** در یکی از این دو حالت در دسترس است:
- انتقال، **TCP** خام با امنیت **TLS** یا **REALITY** باشد (XTLS-Vision
کلاسیک)، یا
- انتقال، **XHTTP** با رمزنگاری VLESS فعال باشد (به ادامه مراجعه کنید).
جریان را روی **کلاینت** VLESS تنظیم کنید، نه روی inbound. با Vision کلاسیک روی
TCP، پنل می‌تواند پس از آنکه یک کلاینت از جریان استفاده کرد، یک **Vision seed** نیز
ارائه دهد.
## رمزنگاری VLESS (ML-KEM)
‏VLESS از **رمزنگاری** پساکوانتومی (ML-KEM / `mlkem768x25519`) پشتیبانی می‌کند که در
‏`decryption` مربوط به inbound (سمت سرور) و `encryption` کلاینت‌ها (برای تولید
لینک) ذخیره می‌شود. وقتی فعال باشد، جریان Vision را روی XHTTP باز می‌کند. کلیدها
را از تنظیمات VLESS در پنل تولید کنید.
## رمزهای Shadowsocks
‏inbound‌های Shadowsocks هم از رمزهای کلاسیک و هم از **Shadowsocks-2022**
پشتیبانی می‌کنند (نام روش‌هایی که با `2022-blake3-` آغاز می‌شوند). بیشتر رمزها چندکاربره هستند؛
‏`2022-blake3-chacha20-poly1305` تک‌کاربره است.
<Callout type="info">
انتقال‌ها و امنیت باید در هر دو سر یکسان باشند. لینک اشتراک کلاینت آن‌ها را
کدگذاری می‌کند (`type=ws`، `security=reality`، `flow=xtls-rprx-vision`، …) —
هر لینکی را با [بازرس لینک اشتراک](/docs/config/share-links) رمزگشایی کنید.
</Callout>