Files
3x-ui/docs/content/docs/fa/operations/outbounds-routing.mdx
T
Masterain f9cfd87cb2 feat(nord): support multi-server NordLynx outbounds (#6311)
* feat(nord): support multi-server NordLynx outbounds

* fix(nord): address verified PR review findings

Tighten the NordVPN multi-outbound implementation and its regression
coverage based on the verified review feedback.

- remove the redundant Xray validation test that duplicated the base
  branch and did not exercise multiple outbounds
- make NordModal tests wait for server loading and assert the modal close
  callback, duplicate-server state, and endpoint behavior
- add coverage for resolving the NordLynx public key from technology
  metadata instead of a numeric technology ID
- use a real httptest server for Nord integration tests through an
  injectable API base URL
- represent the All Cities sentinel consistently as null and reset it
  when a country changes

The existing NordVPN API contracts and persisted outbound schema remain
unchanged.
2026-09-02 20:20:10 +02:00

182 lines
13 KiB
Plaintext

---
title: خروجی‌ها و مسیریابی
description: مدیریت ترافیک خروجی در 3x-ui — خروجی‌های WARP، NordVPN، WireGuard PIA، اشتراک‌های خروجی (مجموعه سرورها)، قواعد مسیریابی و متعادل‌کننده‌های بار.
icon: Route
---
ورودی‌ها کلاینت‌ها را می‌پذیرند؛ **خروجی‌ها** تعیین می‌کنند ترافیک آن‌ها در ادامه به کجا برود.
3x-ui می‌تواند ترافیک را از طریق Cloudflare WARP، NordVPN، Private Internet Access
(خروجی WireGuard) یا مجموعه‌های خروجی دلخواه
وارد‌شده از یک اشتراک مسیریابی کند و با قواعد مسیریابی و متعادل‌کننده‌ها میان آن‌ها
انتخاب نماید.
## ویرایش خروجی‌ها و مسیریابی
خروجی‌ها، قواعد مسیریابی، متعادل‌کننده‌ها، DNS و ثبت رویداد همگی در **پیکربندی Xray**
قرار دارند (همان قالب پیکربندی که زیر Xray Settings ویرایش می‌کنید). رابط کاربری جداگانه‌ای
برای هر قاعده وجود ندارد — شما JSON را ویرایش می‌کنید و پنل Xray را بارگذاری مجدد می‌کند. پنل
همچنین یک **آزمون اتصال‌پذیری خروجی** و یک **آزمون مسیر** ارائه می‌دهد (از هسته در حال اجرا
بپرسید که برای یک مقصد مشخص از کدام خروجی استفاده خواهد شد).
## ساخت یک خروجی
هر خروجی یک شیء JSON است با حداکثر چهار بخش: یک **`tag`** (که قواعد مسیریابی و
متعادل‌کننده‌ها به آن ارجاع می‌دهند)، یک **`protocol`**، **`settings`** مخصوص پروتکل،
و — برای پروتکل‌های proxy — **`streamSettings`** که باید با انتقال و امنیت ورودی راه دور
مطابقت داشته باشد. دو خروجی تقریباً همیشه حضور دارند:
- **`freedom`** ترافیک را مستقیماً به مقصدش می‌فرستد — خروجی پیش‌فرض.
به‌صورت اختیاری می‌توانید یک `domainStrategy` (مثلاً `UseIP`) تنظیم کنید تا نحوه تفکیک نام‌های میزبان را کنترل کنید.
- **`blackhole`** ترافیک را دور می‌اندازد. مقصدهای ناخواسته (تبلیغات، تورنت‌ها) را به اینجا هدایت کنید.
```json title="freedom + blackhole"
{
"outbounds": [
{ "tag": "direct", "protocol": "freedom", "settings": {} },
{ "tag": "block", "protocol": "blackhole", "settings": {} }
]
}
```
یک خروجی **proxy** (VLESS، VMess، Trojan، Shadowsocks) به سرور دیگری ارسال می‌کند —
که برای زنجیره‌کردن یا فرستادن ترافیک منتخب به خارج مفید است. به شکل‌های سیمی که 3x-ui
استفاده می‌کند توجه کنید: **VLESS شکل تخت است** (`address`/`port`/`id`/`flow`/
`encryption`)، **VMess از `settings.vnext[]` استفاده می‌کند**، و **Trojan/Shadowsocks از
`settings.servers[]` استفاده می‌کنند**. مقدار `streamSettings` باید با
[انتقال و امنیت](/docs/config/transports) مقصد همخوانی داشته باشد.
هر خروجی را در زیر سرهم کنید و JSON را در **Xray Settings → Outbounds** بچسبانید:
<OutboundGenerator />
## Cloudflare WARP
WARP به سرور شما امکان می‌دهد ترافیک خود را از طریق شبکه Cloudflare خارج کند. 3x-ui می‌تواند
یک حساب WARP برای شما ثبت کند و آن را به یک خروجی WireGuard با برچسب **`warp`** متصل نماید:
<Steps>
<Step>
### افزودن یک خروجی با برچسب `warp`
یک خروجی WireGuard با برچسب `warp` در پیکربندی Xray خود بسازید.
</Step>
<Step>
### ثبت WARP
از کنترل‌های WARP در پنل، یک حساب ثبت کنید. 3x-ui کلیدها، نشانی‌ها، بایت‌های رزروشده و نقطه
انتهایی peer مربوط به خروجی را به‌صورت خودکار پر می‌کند.
</Step>
<Step>
### (اختیاری) چرخش خودکار IP
یک بازه به‌روزرسانی WARP (بر حسب **روز**) تنظیم کنید تا IP مربوط به WARP به‌صورت دوره‌ای چرخش
یابد. یک لایسنس رایگان نیز می‌تواند اعمال شود.
</Step>
</Steps>
ترافیک موردنظر خود (برای مثال دامنه‌های خاص) را با یک قاعده مسیریابی به خروجی `warp` هدایت
کنید.
## NordVPN
3x-ui می‌تواند اعتبارنامه‌های NordVPN (NordLynx/WireGuard) را از یک توکن دسترسی دریافت کند (یا
یک کلید خصوصی را مستقیماً بپذیرد) و کشورها/سرورها را فهرست کند تا بتوانید یک خروجی NordVPN
بسازید. از **Xray → خروجی‌ها → بیشتر → NordVPN** وارد شوید یا کلید خصوصی را ذخیره کنید،
سرور را انتخاب کنید و خروجی را بیفزایید. می‌توان چند سرور افزود؛ هر hostname برچسب یکتای
`nord-<hostname>` دارد و نمی‌توان آن را دو بار افزود.
**Reset** در هر ردیف، سرور، برچسب، peer و ارجاع‌های مسیریابی را نگه می‌دارد و فقط کلید خصوصی
درون خروجی را از اعتبارنامهٔ ذخیره‌شدهٔ فعلی تازه می‌کند. خروج فقط اعتبارنامهٔ ذخیره‌شده را پاک
می‌کند و خروجی‌های موجود همچنان از کلید درون خود استفاده می‌کنند. خروجی‌های بلااستفادهٔ NordVPN
را از فهرست خروجی‌ها حذف کنید.
## خروجی WireGuard PIA
3x-ui می‌تواند با نام کاربری و رمز عبور PIA وارد شود، کشورها/منطقه‌ها/سرورها را
از فهرست امضاشده نشان دهد و یک خروجی WireGuard بسازد. از
**Xray → خروجی‌ها → بیشتر → PIA** وارد شوید، سرور را انتخاب کنید و خروجی را
اضافه کنید. می‌توان چند سرور افزود (هر hostname یک خروجی). برچسب
`pia-<region>-<server>` است (مثلاً `pia-us-east-useast1`). افزودن یا **Reset**
در هر ردیف کلید را با `/addKey` ثبت می‌کند. یک hostname را نمی‌توان دو بار
افزود. خروج فقط توکن ذخیره‌شده را پاک می‌کند؛ حذف خروجی از فهرست خروجی‌ها.
Reset یا حذف، peer مربوط به WireGuard را در حساب PIA باطل نمی‌کند.
گذرواژه ذخیره نمی‌شود. توکن API مربوط به PIA با همان تنظیم
`NODE_TOKEN_ENCRYPTION` گره‌ها ذخیره می‌شود. اگر کلید قدیمی
`XUI_NODE_TOKEN_KEY` را بدون ورود دوباره به PIA کنار بگذارید، Add/Reset
تا ورود مجدد شکست می‌خورد. `allowedIPs` فقط
`0.0.0.0/0` است.
## اشتراک‌های خروجی (مجموعه سرورها)
یک **اشتراک خروجی** یک اشتراک share-link از راه دور را وارد می‌کند و سرورهای آن را به‌عنوان
**خروجی** به پیکربندی در حال اجرای Xray تزریق می‌کند — بدون دست‌زدن به قالب ذخیره‌شده شما. این
روش توصیه‌شده برای اشتراک در یک *مجموعه* از سرورهاست.
| فیلد | پیش‌فرض | معنا |
| ---------------- | ------- | -------------------------------------------------------------- |
| `url` | — | نشانی اشتراک از راه دور (محافظت‌شده در برابر SSRF). |
| `tagPrefix` | auto | پیشوند برچسب‌های خروجی تولیدشده (مثلاً `hk-`)؛ خالی = `subN-`. |
| `updateInterval` | `600` | بازه تازه‌سازی بر حسب **ثانیه**. |
| `prepend` | `false` | این خروجی‌ها را پیش از خروجی‌های دستی شما قرار می‌دهد. |
| `priority` | `0` | ترتیب ادغام (مقدار کمتر، زودتر). |
خروجی‌های وارد‌شده **برچسب‌های پایدار** می‌گیرند: همان سرور در طول تازه‌سازی‌ها همان برچسب را
حفظ می‌کند، بنابراین انتخاب‌گرهای مسیریابی/متعادل‌کننده مبتنی بر برچسب دقیق پایدار می‌مانند —
در حالی که انتخاب‌گرهای پیشوندی/wildcard (مثلاً `hk-*`) با تغییر مجموعه، به‌صورت خودکار سرورهای
جدید را در بر می‌گیرند. طرح‌های پیوند پشتیبانی‌شده: `vmess`، `vless`، `trojan`، `ss`،
`hysteria2` (`hy2`) و `wireguard` (`wg`). پنل اشتراک‌های فعال را روی یک زمان‌سنج تازه می‌کند و
هنگام تغییر چیزی، Xray را بارگذاری مجدد می‌کند.
## قواعد مسیریابی
**قواعد مسیریابی** تعیین می‌کنند هر اتصال از کدام خروجی (یا متعادل‌کننده) استفاده کند. هر
قاعده یک تطبیق‌دهنده از نوع `field` است: هر یک از `domain`، `ip`، `port`، `network`،
`protocol`، `inboundTag`، `sourceIP`، … را تنظیم کنید و آن را به یک **`outboundTag`** یا یک
**`balancerTag`** اشاره دهید. قواعد **از بالا به پایین — نخستین تطبیق برنده است** ارزیابی می‌شوند، بنابراین
قواعد خاص را بالای قواعد عمومی قرار دهید.
```json title="route ads to blackhole, private IPs direct"
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{ "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" },
{ "type": "field", "ip": ["geoip:private"], "outboundTag": "direct" }
]
}
}
```
## متعادل‌کننده‌ها
یک **متعادل‌کننده** خروجی‌ها را با یک **انتخاب‌گر** (پیشوندهای برچسب، از جمله مجموعه‌های
wildcard حاصل از اشتراک‌های خروجی) گروه‌بندی می‌کند و ترافیک را با یک **استراتژی** میان آن‌ها
توزیع یا در صورت خرابی منتقل می‌کند:
| استراتژی | انتخاب می‌کند… | به مانیتور نیاز دارد |
| ------------- | ----------------------------------------------- | ------------------------ |
| `random` | یک عضو تصادفی برای هر اتصال | خیر |
| `roundRobin` | اعضا به‌صورت چرخشی | خیر |
| `leastPing` | عضو با کمترین تأخیر | **`observatory`** |
| `leastLoad` | پایدارترین عضو بر اساس بار نمونه‌برداری‌شده | **`burstObservatory`** |
از یک قاعده با `balancerTag` به یک متعادل‌کننده ارجاع دهید. `leastPing` و `leastLoad`
به یک مانیتور سلامت نیاز دارند که Xray آن را در **سطح بالای** پیکربندی قرار می‌دهد
(`observatory` / `burstObservatory`، **نه** درون `routing`). پنل می‌تواند وضعیت
متعادل‌کننده را گزارش کند و برای آزمایش یک متعادل‌کننده را به یک خروجی مشخص **بازنویسی** کند.
بلوک مسیریابی — قواعد، متعادل‌کننده‌ها و observatory متناظر — را در اینجا بسازید:
<RoutingBuilder />
<Callout type="warn">
خروجی‌هایی که به سرویس‌های خارجی دسترسی می‌یابند با محافظت SSRF واکشی می‌شوند — به‌صورت
پیش‌فرض نشانی‌های خصوصی/داخلی مسدود هستند مگر آنکه به‌طور صریح آن‌ها را به‌ازای هر منبع مجاز
کنید.
</Callout>