Files
3x-ui/docs/content/docs/ru/config/transports.mdx
T
MHSanaei c5e1e54c75 fix(xray): keep XDRIVE storage and Vision flow within what xray-core runs
xray-core opens an XDRIVE stream's storage only when the inbound starts
listening, so a Google Drive inbound saved with the form's defaults (no
folder, no secrets), a local one without a folder, or a template one
whose template xray cannot use stopped xray and every other inbound with
it. validateXDriveStorage applies the core's storage rules at save, on
inbound add/update and on the xray template's inbounds and outbounds:
the service must be local, Google Drive or template; local and Google
Drive need a remoteFolder; Google Drive needs its three non-empty
secrets; a template must pass newTemplateStorage's checks (put, get,
list and delete urls, and a list namesRegex with one capture group).

A VLESS client kept its xtls-rprx-vision flow when its inbound moved to
a transport that cannot carry it, and GetXrayConfig only honoured
DisableFlow, so the server demanded Vision there and refused every
client. GetXrayConfig and the outbound form now apply the Vision gate,
and that gate now follows the core in the backend, the subscription
service and the frontend: TLS/REALITY on raw TCP, or VLESS encryption on
any transport (xray runs Vision inside encryption.CommonConn whatever
the transport, not only on XHTTP). The outbound modal passes the VLESS
encryption into the gate and gates Mux on the effective flow.
2026-10-12 00:49:11 +02:00

237 lines
21 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 — TCP, mKCP, WebSocket, gRPC, HTTPUpgrade, XHTTP, Hysteria, XDRIVE, MASQUE — с их настройками, а также обфускация FinalMask, sockopt, TLS/REALITY, XTLS-Vision и шифрование VLESS.
icon: Network
---
**Транспорт** определяет, как пакеты переносятся между клиентом и сервером,
уровень **безопасности** определяет, как они шифруются и маскируются, а
**FinalMask** может обфусцировать всё, что остаётся. Панель предлагает только
допустимые комбинации; на этой странице перечислены настройки каждого транспорта
и правила, которые применяет панель.
## Транспорты
Выберите транспорт (поле `network` у inbound) в форме inbound/outbound. Каждый
network записывает свой собственный ключ настроек на проводе (`tcpSettings`,
`kcpSettings`, …).
| Транспорт | Ключ настроек | Когда использовать |
| --------------- | --------------------- | ---------------------------------------------------------------------- |
| **TCP (Raw)** | `tcpSettings` | Минимальные накладные расходы. Основа для REALITY + XTLS-Vision и фолбэков; опциональная HTTP/1.1-камуфляжная маскировка заголовка. |
| **mKCP** | `kcpSettings` | Надёжный протокол поверх **UDP** — обменивает пропускную способность на меньшую задержку на каналах с потерями. Не несёт TLS/REALITY. |
| **WebSocket** | `wsSettings` | Работает через CDN и HTTP-реверс-прокси; очень совместимый. |
| **gRPC** | `grpcSettings` | На базе HTTP/2; хорошо мультиплексируется и чисто проксируется через Nginx. |
| **HTTPUpgrade** | `httpupgradeSettings` | Дружественный к CDN апгрейд HTTP/1.1 `Upgrade`; легче полноценного WebSocket. |
| **XHTTP** | `xhttpSettings` | Современный HTTP-транспорт с мультиплексированием потоков; дружественный к CDN и совместимый с REALITY. |
| **Hysteria** | `hysteriaSettings` | Транспорт на базе QUIC — только для протокола **Hysteria2**. |
| **XDRIVE** | `xdriveSettings` | Туннелирует поток через файлы в общем облачном хранилище (Google Drive, локальная папка или любой HTTP API хранилища). |
| **MASQUE** | `masqueSettings` | CONNECT-IP поверх HTTP/3 или HTTP/2 — только для протокола **MASQUE**. См. [MASQUE](/docs/config/masque). |
<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` | Бюджет пропускной способности на отдачу, в **МБ/с**. |
| `downlinkCapacity` | `20` | Бюджет пропускной способности на приём, в **МБ/с**. |
| `cwndMultiplier` | `1` | Множитель окна перегрузки; повышайте, чтобы сильнее нагружать хорошие каналы. |
| `maxSendingWindow` | `2097152` | Верхний предел числа пакетов «в пути». |
<Callout type="info">
mKCP не может нести TLS или REALITY. Чтобы замаскировать его, добавьте
UDP-маску **FinalMask** — маска `mkcp-legacy` воспроизводит классическую
обфускацию заголовка, которую старые версии Xray хранили в
`kcpSettings.header`/`seed` (этих полей здесь больше нет).
</Callout>
### WebSocket — `wsSettings`
| Поле | По умолчанию | Значение |
| --------------------- | ------- | ---------------------------------------------------------------- |
| `path` | `/` | Путь запроса — маршрутизируйте по нему, когда несколько сервисов делят один хост. |
| `host` | _(нет)_ | Переопределение заголовка `Host` (полезно за CDN). |
| `headers` | `{}` | Дополнительные заголовки запроса. |
| `heartbeatPeriod` | `0` | Секунды между keepalive-пингами; `0` отключает их. |
| `acceptProxyProtocol` | `false` | Принимать PROXY-протокол от вышестоящего прокси. |
### gRPC — `grpcSettings`
| Поле | По умолчанию | Значение |
| ------------- | ------- | --------------------------------------------------------- |
| `serviceName` | _(нет)_ | Путь gRPC-сервиса; работает как секретный маршрут. |
| `authority` | _(нет)_ | Переопределение псевдозаголовка `:authority`. |
| `multiMode` | `false` | Мультиплексировать несколько потоков по одному соединению. |
### HTTPUpgrade — `httpupgradeSettings`
| Поле | По умолчанию | Значение |
| --------------------- | ------- | --------------------------------------------- |
| `path` | `/` | Путь запроса. |
| `host` | _(нет)_ | Переопределение заголовка `Host`. |
| `headers` | `{}` | Дополнительные заголовки запроса. |
| `acceptProxyProtocol` | `false` | Принимать PROXY-протокол от вышестоящего прокси. |
HTTPUpgrade — это одноразовый HTTP/1.1 `Upgrade` без фреймирования WebSocket,
поэтому поля heartbeat нет.
### XHTTP — `xhttpSettings`
У XHTTP (SplitHTTP) большой набор полей; панель заполняет разумные значения по
умолчанию. Те, что вы обычно будете трогать:
| Поле | По умолчанию | Значение |
| ---------------------- | ----------- | ---------------------------------------------------------------------- |
| `path` | `/` | Путь запроса. |
| `host` | _(нет)_ | Переопределение заголовка `Host`. |
| `mode` | `auto` | `auto`, `packet-up`, `stream-up` или `stream-one`. `packet-up` наиболее совместим с CDN; `stream-*` имеют меньшую задержку. |
| `xPaddingBytes` | `100-1000` | Диапазон случайного паддинга, размывающего размеры пакетов. |
| `scMaxBufferedPosts` | `30` | Серверный буфер для загружаемых POST-запросов. |
| `scStreamUpServerSecs` | `20-80` | Окно сервера в режиме stream-up (диапазон через дефис). |
| `xmux` (`enableXmux`) | _(выкл.)_ | Мультиплексирование соединений — `maxConcurrency` `16-32`, `maxConnections` `6`, … Включайте при высокой конкурентности. |
Поля Session-ID (`sessionIDPlacement`, `sessionIDKey`, `sessionIDTable`,
`sessionIDLength`) и параметры `scMin/MaxEachPostBytes` — продвинутые; оставьте
их пустыми, если только вы не подстраиваетесь под конкретный upstream.
### Hysteria — `hysteriaSettings`
Допустимо, только когда протокол — **Hysteria2**.
| Поле | По умолчанию | Значение |
| ---------------- | ------- | ----------------------------------------------------------------------- |
| `version` | `2` | Версия протокола Hysteria. |
| `auth` | _(нет)_ | Общая строка аутентификации. |
| `udpIdleTimeout` | `60` | Секунды (2–600) до сброса простаивающих UDP-сессий. |
| `masquerade` | — | Маскировка под HTTP/3-сервер: `type` `proxy`/`file`/`string` с `url`/`dir`/`content`, а также `headers` и `statusCode`. |
### XDRIVE — `xdriveSettings`
XDRIVE передаёт поток файлами в папке, доступной обеим сторонам: сервер опрашивает эту
папку, а не принимает соединения на своём порту. Обе стороны должны использовать
**одинаковые** сервис, папку и секреты, поэтому JSON-подписка передаёт их каждому
клиенту; для XDRIVE-инбаундов не создаются ссылки и записи Clash.
| Поле | По умолчанию | Значение |
| -------------- | -------------- | -------- |
| `service` | `Google Drive` | `Google Drive`, `local` (папка на диске) или `template` (любой HTTP API хранилища). |
| `remoteFolder` | — | Папка с файлами сессий. |
| `secrets` | — | Google Drive: ровно три значения — ClientID, ClientSecret, RefreshToken, в этом порядке. Template: значения, доступные как `{secret0}`, `{secret1}`, …. |
| `template` | — | Только для template: операции `auth`, `put`, `get`, `list` и `delete` API хранилища. |
| тонкая настройка | значения ядра | `segmentBytes` (512 KiB), `flushIntervalMs` (20), `pollIntervalMs`/`maxPollIntervalMs` (50/500), `eagerWindowMs` (2000), `holeTimeoutMs` (30000), `sessionTtlSeconds` (300), `concurrency` (8). |
Необязательные **адрес/порт фронтинга** (`address`/`port` на уровне stream) — домен-фронт,
через который идёт подключение к API хранилища; в TLS по-прежнему указывается хост API.
У XDRIVE нет собственного уровня TLS/REALITY — его трафик это HTTPS самого API хранилища.
На исходящем безопасность **TLS** задаёт это HTTPS-подключение: API хранилища видит его
SNI, отпечаток uTLS и ALPN.
## FinalMask — обфускация на позднем уровне
**FinalMask** оборачивает трафик **после** уровней транспорта и безопасности,
поэтому он может замаскировать транспорты, не несущие TLS (например, mKCP), или
добавить вторую оболочку поверх TLS. Маски настраиваются по направлениям:
- **TCP-маски** — `fragment`, `sudoku`, `header-custom`, `xmc` (маскирует поток
под трафик протокола Minecraft; требуется пароль, имя хоста и имена игроков
опциональны).
- **UDP-маски** — `salamander`, `mkcp-legacy`, `header-custom`, `xdns`, `xicmp`,
`noise`, `sudoku`, `realm`, а также только клиентская `udphop`. (`mkcp-legacy`
воспроизводит старую обфускацию заголовка mKCP; `udphop` меняет удалённый порт —
и при желании удалённый IP — по интервалу или для каждого соединения, чтобы
обходить блокировку портов.)
- **Параметры QUIC** — управление перегрузкой (`reno`, `bbr`, `brutal`,
`force-brutal`), скорости отдачи/приёма Brutal и настройка окна приёма. На
инбаунде **UDP Hop** задаёт диапазон портов, который объявляется клиентам
(`mport` в ссылке и маска `udphop` в JSON-подписке); сам сервер слушает свой
порт. Начиная с Xray 26.9.9 клиент меняет порт только через маску `udphop`,
поэтому панель преобразует старый клиентский `quicParams.udpHop` в неё.
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` | _(нет)_ | Пропускать набор этого outbound через другой outbound по тегу. |
| `interface` | _(нет)_ | Привязка к конкретному сетевому интерфейсу. |
| `mark` | `0` | SO_MARK для policy routing (`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), либо
- включено шифрование VLESS, на любом транспорте (см. ниже).
Поток задаётся на **клиенте** VLESS, а не на inbound. При классическом Vision
поверх TCP панель также может предложить **Vision seed** после того, как клиент
начнёт использовать этот поток.
## Шифрование VLESS (ML-KEM)
VLESS поддерживает постквантовое **шифрование** (ML-KEM / `mlkem768x25519`),
которое хранится в поле `decryption` у inbound (сервер) и в поле `encryption` у
клиентов (для генерации ссылок). Когда оно включено, становится доступен поток
Vision на любом транспорте. Сгенерируйте ключи в настройках VLESS на панели.
## Шифры Shadowsocks
Inbound-соединения Shadowsocks поддерживают как классические шифры, так и
**Shadowsocks-2022** (имена методов, начинающиеся с `2022-blake3-`). Метод
`2022-blake3-chacha20-poly1305` для inbound не предлагается: Xray-core
поддерживает его только без пользователей, а у каждого inbound панели есть
клиенты. В outbound его по-прежнему можно использовать.
<Callout type="info">
Транспорты и безопасность должны совпадать на обоих концах. Ссылка на
подключение, которую использует клиент, кодирует их (`type=ws`,
`security=reality`, `flow=xtls-rprx-vision`, …) — декодируйте любую ссылку с
помощью [инспектора ссылок на подключение](/docs/config/share-links).
</Callout>