mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-23 06:15:01 +03:00
61b129d5b3
Bump xtls/xray-core to 1b1647cd9ddf (v26.10.21) and move the three binary pins (DockerInit.sh, both release.yml fetches) in lockstep. The v26.10.10 release was pulled upstream, so the old pins already 404. XDRIVE (#7182): the core now runs XDRIVE only for VLESS inside VLESS encryption, with no flow, and an outbound only over Mux; it refuses the whole config otherwise. The panel offers XDRIVE only for VLESS, refuses to save an inbound without decryption, never emits a client flow on an XDRIVE stream (config, JSON subscription, forms), and turns Mux on when an outbound picks XDRIVE. An inbound or template outbound stored before the upgrade that the core would refuse is left out of the generated config with a warning, so it no longer stops every other inbound. The service "Google Drive" is now "google-drive" (old name read as a deprecated alias); saves, the schema and both form adapters store the new name. XDRIVE and MASQUE gain a client xmux; both schemas keep it instead of stripping it on an inbound save. Lua scripts (#7124, #7136): the core refuses a routing script beside rules or domainStrategy, and a dns script beside the fallback/parallel switches or a domain-scoped server. The panel always keeps its api routing rule, so a template save now refuses any routing script and a dns script in a refused combination, and a stored one is dropped from the generated config so the core still starts. Noise masks gain a Lua script that the loader compiles inside Build: the in-process build (template save check, hot add) now resolves a relative script the way the xray child does, beside the xray binary, instead of failing it. The mask editor gets a Script field that replaces the noise list. XDNS (#7140): a resolver takes https:// DoH addresses with worker, tlsConfig and quicConfig. The mask editor registered only addrs, so a save dropped the rest; it now edits all four. Finalmask filter (#7206): a new TCP/UDP mask screens an inbound's source IPs. The inbound mask editor offers it with its allow and block lists; it is a no-op on a dialer and an older client core refuses the type, so the share link and JSON subscription drop it like the Go link already does.
249 lines
22 KiB
Plaintext
249 lines
22 KiB
Plaintext
---
|
||
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.
|
||
|
||
Начиная с Xray 26.10.17 XDRIVE передаёт только **VLESS** внутри **шифрования VLESS** и
|
||
без flow: инбаунду нужно значение `decryption`, исходящему — `encryption` и включённый
|
||
Mux. Панель предлагает XDRIVE только для VLESS, не сохраняет инбаунд без `decryption` и
|
||
не включает в работающую конфигурацию инбаунд, сохранённый до обновления.
|
||
|
||
| Поле | По умолчанию | Значение |
|
||
| -------------- | -------------- | -------- |
|
||
| `service` | `google-drive` | `google-drive`, `local` (папка на диске) или `template` (любой HTTP API хранилища). Старое написание `Google Drive` по-прежнему читается. |
|
||
| `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; требуется пароль, имя хоста и имена игроков
|
||
опциональны), а также только инбаундная `filter`.
|
||
- **UDP-маски** — `salamander`, `mkcp-legacy`, `header-custom`, `xdns`, `xicmp`,
|
||
`noise`, `sudoku`, `realm`, а также только клиентская `udphop` и только инбаундная
|
||
`filter`. (`mkcp-legacy`
|
||
воспроизводит старую обфускацию заголовка mKCP; `udphop` меняет удалённый порт —
|
||
и при желании удалённый IP — по интервалу или для каждого соединения, чтобы
|
||
обходить блокировку портов.)
|
||
- **Параметры QUIC** — управление перегрузкой (`reno`, `bbr`, `brutal`,
|
||
`force-brutal`), скорости отдачи/приёма Brutal и настройка окна приёма. На
|
||
инбаунде **UDP Hop** задаёт диапазон портов, который объявляется клиентам
|
||
(`mport` в ссылке и маска `udphop` в JSON-подписке); сам сервер слушает свой
|
||
порт. Начиная с Xray 26.9.9 клиент меняет порт только через маску `udphop`,
|
||
поэтому панель преобразует старый клиентский `quicParams.udpHop` в неё.
|
||
|
||
`filter` (Xray 26.10.21) отбрасывает соединения инбаунда по IP источника:
|
||
`allowedSourceIPs` пропускает только перечисленные источники, `blockedSourceIPs`
|
||
отбрасывает свои, а совпадение с блок-листом имеет приоритет. Оба принимают CIDR или
|
||
записи `geoip:`. Ссылки и JSON-подписки её не содержат, ведь она действует только на
|
||
слушающей стороне.
|
||
|
||
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>
|