Files
3x-ui/docs/content/docs/ru/operations/outbounds-routing.mdx
T
MHSanaei b6c859f5b9 feat(xray): edit Lua DNS and routing scripts
xray-core 26.10.10 can hand DNS and routing to Lua: dns.script and
routing.script name a .lua file (absolute, or found next to the Xray
binary) that defines HandleDNSQuery / HandleRoute, and a DNS server's id
is how a DNS script picks it. The keys round-tripped through the JSON
template but had no field.

- DNS: a Lua Script field, and an ID field in the server modal;
- Basics: a Routing Script field beside the routing strategy;
- Routing: a warning above the rules while a script is set, since the
  core then routes only through the script and skips every rule, the
  panel's api rule included.

The descriptions say the script must still send the api inbound to the
api outbound, and that Xray will not start if the file is missing. An
empty field drops the key, because the core rejects an empty path.
2026-10-11 15:37:20 +02:00

211 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Исходящие соединения и маршрутизация
description: Управляйте исходящим трафиком в 3x-ui — WARP, NordVPN, PIA WireGuard, подписки на исходящие соединения (пулы серверов), правила маршрутизации и балансировщики нагрузки.
icon: Route
---
Inbound-соединения принимают клиентов; **outbound-соединения** определяют, куда
дальше пойдёт их трафик. 3x-ui может направлять трафик через Cloudflare WARP,
NordVPN, Private Internet Access (WireGuard) или произвольные пулы
исходящих соединений, импортированные из подписки,
а также выбирать между ними с помощью правил маршрутизации и балансировщиков.
## Редактирование исходящих соединений и маршрутизации
Outbound-соединения, правила маршрутизации, балансировщики, DNS и логирование —
всё это находится в **конфигурации Xray** (шаблоне конфигурации, который вы
редактируете в разделе Xray Settings). Отдельного интерфейса для каждого правила
нет — вы редактируете JSON, а панель перезагружает Xray. Панель также предлагает
**тест связности исходящего соединения** и **тест маршрута** (запрос к
работающему ядру о том, какое исходящее соединение будет использовано для
заданного назначения).
## Построение исходящего соединения
Каждое исходящее соединение — это JSON-объект, состоящий не более чем из четырёх
частей: **`tag`** (на него ссылаются правила маршрутизации и балансировщики),
**`protocol`**, специфичные для протокола **`settings`** и — для прокси-протоколов —
**`streamSettings`**, которые должны совпадать с транспортом и безопасностью
удалённого inbound-соединения. Почти всегда присутствуют два исходящих соединения:
- **`freedom`** отправляет трафик напрямую к его назначению — исходящее соединение
по умолчанию. При необходимости задайте `domainStrategy` (например, `UseIP`),
чтобы управлять разрешением имён хостов.
- **`blackhole`** отбрасывает трафик. Направляйте сюда нежелательные назначения
(реклама, торренты).
```json title="freedom + blackhole"
{
"outbounds": [
{ "tag": "direct", "protocol": "freedom", "settings": {} },
{ "tag": "block", "protocol": "blackhole", "settings": {} }
]
}
```
Прокси-исходящее соединение (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 автоматически
заполнит ключи соединения, адреса, зарезервированные байты и конечную точку пира.
</Step>
<Step>
### (Опционально) автоматическая ротация IP
Задайте интервал обновления WARP (в **днях**) для периодической ротации IP-адреса
WARP. Также можно применить бесплатную лицензию.
</Step>
</Steps>
Направьте нужный трафик (например, определённые домены) на исходящее соединение
`warp` с помощью правила маршрутизации.
## NordVPN
3x-ui может получать учётные данные NordVPN (NordLynx/WireGuard) из токена доступа
(или принимать приватный ключ напрямую) и выводить список стран/серверов, чтобы вы
могли построить outbound-соединение NordVPN. Откройте
**Xray → Исходящие → Ещё → NordVPN**, войдите или сохраните приватный ключ,
выберите сервер и добавьте исходящее. Можно добавить несколько серверов; каждый
hostname получает уникальный тег `nord-<hostname>` и не может быть добавлен дважды.
**Reset** в строке сохраняет сервер, тег, peer и ссылки маршрутизации, но обновляет
встроенный приватный ключ из текущих сохранённых учётных данных NordVPN. Выход
очищает только сохранённые учётные данные. Существующие исходящие продолжают
использовать встроенные ключи; удаляйте ненужные NordVPN-исходящие в общем списке.
## PIA WireGuard
3x-ui может войти с именем пользователя и паролем PIA, показать
страны/регионы/серверы из подписанного списка и собрать WireGuard-исходящее.
Откройте **Xray → Исходящие → Ещё → PIA**, войдите, выберите сервер и добавьте
исходящее. Можно добавить несколько серверов (по одному исходящему на hostname).
Тег: `pia-<region>-<server>` (например `pia-us-east-useast1`). Добавление или
**Reset** в строке регистрирует ключ через PIA `/addKey`. Один и тот же hostname
нельзя добавить дважды. Выход очищает только сохранённый токен; удаляйте
исходящие в списке исходящих. Reset и удаление не отзывают WireGuard-peer
в аккаунте PIA.
Пароль не сохраняется. Токен PIA API хранится с той же настройкой
`NODE_TOKEN_ENCRYPTION`, что и токены API узлов. Если убрать старый
`XUI_NODE_TOKEN_KEY` без повторного входа в PIA, Add/Reset не будут
работать, пока вы не войдёте снова. `allowedIPs` только
`0.0.0.0/0`.
## Подписки на исходящие соединения (пулы серверов)
**Подписка на исходящие соединения** импортирует удалённую подписку со
ссылками-share и внедряет её серверы в качестве **исходящих соединений** в
работающую конфигурацию Xray — не затрагивая ваш сохранённый шаблон. Это
рекомендуемый способ подписаться на *пул* серверов.
| Поле | По умолчанию | Значение |
| ---------------- | ------------ | -------------------------------------------------------------- |
| `url` | — | URL удалённой подписки (с защитой от SSRF). |
| `tagPrefix` | auto | Префикс для генерируемых тегов исходящих соединений (например, `hk-`); пусто = `subN-`. |
| `updateInterval` | `600` | Интервал обновления в **секундах**. |
| `prepend` | `false` | Размещать эти исходящие соединения перед вашими ручными. |
| `priority` | `0` | Порядок слияния (меньшие значения первыми). |
Импортированные исходящие соединения получают **стабильные теги**: один и тот же
сервер сохраняет один и тот же тег между обновлениями, поэтому селекторы
маршрутизации/балансировщиков по точному тегу остаются привязанными — в то время
как селекторы по префиксу/шаблону (например, `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" }
]
}
}
```
### Lua-скрипты
Xray 26.10.10 умеет передавать маршрутизацию и DNS в Lua. **Основное → Скрипт
маршрутизации** принимает путь к файлу `.lua` с функцией `HandleRoute` (абсолютный
или относительно папки `bin` Xray); **DNS → Lua-скрипт** — файл с функцией
`HandleDNSQuery`, а **ID** DNS-сервера — имя, по которому такой скрипт его выбирает.
<Callout type="warn">
Скрипт маршрутизации заменяет **все** правила маршрутизации, включая собственное
правило `api` панели. Направляйте в скрипте входящий `api` на исходящий `api`,
иначе остановятся статистика трафика и применение изменений клиентов на лету. Xray не
запустится, если файл отсутствует или не загружается.
</Callout>
## Балансировщики
**Балансировщик** группирует исходящие соединения по **селектору** (префиксы
тегов, включая wildcard-пулы из подписок на исходящие соединения) и распределяет
или перенаправляет трафик по ним при сбоях с помощью **стратегии**:
| Стратегия | Выбирает… | Нужен монитор |
| ------------- | ----------------------------------------------- | ------------------------ |
| `random` | случайного участника на каждое подключение | нет |
| `roundRobin` | участников по очереди | нет |
| `leastPing` | участника с наименьшей задержкой | **`observatory`** |
| `leastLoad` | наиболее стабильного участника по измеренной нагрузке | **`burstObservatory`** |
Ссылайтесь на балансировщик из правила через `balancerTag`. `leastPing` и
`leastLoad` требуют монитора состояния, который Xray размещает на **верхнем
уровне** конфигурации (`observatory` / `burstObservatory`, **не** внутри
`routing`). Панель может сообщать статус балансировщика и **переопределять**
балансировщик на конкретное исходящее соединение для тестирования.
Постройте блок маршрутизации — правила, балансировщики и соответствующий
observatory — здесь:
<RoutingBuilder />
<Callout type="warn">
Исходящие соединения, обращающиеся к внешним сервисам, получаются с защитой от
SSRF — по умолчанию частные/внутренние адреса блокируются, если вы явно не
разрешите их для каждого источника.
</Callout>