mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-05 12:45:00 +03:00
814cda3fb4
Bump xtls/xray-core to 50231eaf (v26.7.11) and the three binary pins (DockerInit.sh, release.yml x2) in lockstep. Adapt the panel to the upstream changes: - Shadowsocks "none"/"plain" and VMess "none"/"zero" were removed from the core. A migration rewrites stored none/plain SS methods to a supported cipher and none/zero VMess security to "auto" (on both the clients column and inbound settings JSON); the SS build-time heal does the same so a row injected after boot cannot brick startup. The removed values are dropped from every frontend option list, schema and adapter, and coerced to "auto" at the Go link/sub/Clash emit sites and both link importers. Fix the CipherType_NONE sentinel that no longer compiles. - Unencrypted vless/trojan outbounds to a public address are now refused by the core. Validate outbounds through the vendored config loader when saving the xray template and when storing/merging outbound subscriptions, so one such outbound cannot keep the core from starting. - New TCP finalmask type "xmc" (Minecraft mimicry): add it to the sub link allowlist, the frontend enum and the FinalMask form (hostname, usernames, required password), and document it. - streamSettings gained a "method" alias for "network"; canonicalize it to "network" at inbound save time and in the form adapters/schema so a method-keyed config keeps its transport. - New root "env" config key is passed through xray.Config, compared in Equals, and forces a restart in the hot diff. - REALITY now defaults minClientVer to 26.3.27; update the form placeholder.
208 lines
18 KiB
Plaintext
208 lines
18 KiB
Plaintext
---
|
||
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. Каждый
|
||
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**. |
|
||
|
||
<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`. |
|
||
|
||
## FinalMask — обфускация на позднем уровне
|
||
|
||
**FinalMask** оборачивает трафик **после** уровней транспорта и безопасности,
|
||
поэтому он может замаскировать транспорты, не несущие TLS (например, mKCP), или
|
||
добавить вторую оболочку поверх TLS. Маски настраиваются по направлениям:
|
||
|
||
- **TCP-маски** — `fragment`, `sudoku`, `header-custom`, `xmc` (маскирует поток
|
||
под трафик протокола Minecraft; требуется пароль, имя хоста и имена игроков
|
||
опциональны).
|
||
- **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` | _(нет)_ | Пропускать набор этого 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), либо
|
||
- транспорт — это **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>
|