mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-02 19:25:05 +03:00
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:
@@ -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>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "پیکربندی",
|
||||
"icon": "Settings",
|
||||
"pages": [
|
||||
"panel",
|
||||
"ssl-certificates",
|
||||
"inbounds",
|
||||
"reality",
|
||||
"transports",
|
||||
"clients",
|
||||
"subscription",
|
||||
"share-links"
|
||||
]
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user