transports.mdx 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. ---
  2. title: Транспорты и безопасность
  3. description: Все транспорты, которые предоставляет 3x-ui — TCP, mKCP, WebSocket, gRPC, HTTPUpgrade, XHTTP, Hysteria, XDRIVE, MASQUE — с их настройками, а также обфускация FinalMask, sockopt, TLS/REALITY, XTLS-Vision и шифрование VLESS.
  4. icon: Network
  5. ---
  6. **Транспорт** определяет, как пакеты переносятся между клиентом и сервером,
  7. уровень **безопасности** определяет, как они шифруются и маскируются, а
  8. **FinalMask** может обфусцировать всё, что остаётся. Панель предлагает только
  9. допустимые комбинации; на этой странице перечислены настройки каждого транспорта
  10. и правила, которые применяет панель.
  11. ## Транспорты
  12. Выберите транспорт (поле `network` у inbound) в форме inbound/outbound. Каждый
  13. network записывает свой собственный ключ настроек на проводе (`tcpSettings`,
  14. `kcpSettings`, …).
  15. | Транспорт | Ключ настроек | Когда использовать |
  16. | --------------- | --------------------- | ---------------------------------------------------------------------- |
  17. | **TCP (Raw)** | `tcpSettings` | Минимальные накладные расходы. Основа для REALITY + XTLS-Vision и фолбэков; опциональная HTTP/1.1-камуфляжная маскировка заголовка. |
  18. | **mKCP** | `kcpSettings` | Надёжный протокол поверх **UDP** — обменивает пропускную способность на меньшую задержку на каналах с потерями. Не несёт TLS/REALITY. |
  19. | **WebSocket** | `wsSettings` | Работает через CDN и HTTP-реверс-прокси; очень совместимый. |
  20. | **gRPC** | `grpcSettings` | На базе HTTP/2; хорошо мультиплексируется и чисто проксируется через Nginx. |
  21. | **HTTPUpgrade** | `httpupgradeSettings` | Дружественный к CDN апгрейд HTTP/1.1 `Upgrade`; легче полноценного WebSocket. |
  22. | **XHTTP** | `xhttpSettings` | Современный HTTP-транспорт с мультиплексированием потоков; дружественный к CDN и совместимый с REALITY. |
  23. | **Hysteria** | `hysteriaSettings` | Транспорт на базе QUIC — только для протокола **Hysteria2**. |
  24. | **XDRIVE** | `xdriveSettings` | Туннелирует поток через файлы в общем облачном хранилище (Google Drive, локальная папка или любой HTTP API хранилища). |
  25. | **MASQUE** | `masqueSettings` | CONNECT-IP поверх HTTP/3 или HTTP/2 — только для протокола **MASQUE**. См. [MASQUE](/docs/config/masque). |
  26. <Callout type="info">
  27. Inbound-соединения **WireGuard** и **Tunnel** (dokodemo-door) не предоставляют
  28. селектор транспорта — их поток несёт только security/sockopt. Прежние панели
  29. также предоставляли «сырой» транспорт **HTTP/2 (`http`)**; он был вытеснен
  30. **XHTTP** и больше недоступен для выбора.
  31. </Callout>
  32. ### TCP (Raw) — `tcpSettings`
  33. | Поле | По умолчанию | Значение |
  34. | ------------------------------ | ------- | ----------------------------------------------------------------------- |
  35. | `acceptProxyProtocol` | `false` | Принимать PROXY-протокол от вышестоящего прокси, чтобы сохранить реальный IP клиента. |
  36. | `header.type` | `none` | `none` или `http` для камуфляжа под HTTP/1.1. |
  37. | `header.request` / `response` | — | При `type: http`: метод, путь, версия и карта заголовков, имитирующие обычный обмен HTTP. |
  38. ### mKCP — `kcpSettings`
  39. | Поле | По умолчанию | Значение |
  40. | ------------------ | ----------- | ---------------------------------------------------------------- |
  41. | `mtu` | `1350` | Максимальный размер передаваемого блока, в байтах (576–1460). |
  42. | `tti` | `20` | Интервал времени передачи, в мс (10–100). Меньше = отзывчивее, но больше накладных расходов. |
  43. | `uplinkCapacity` | `5` | Бюджет пропускной способности на отдачу, в **МБ/с**. |
  44. | `downlinkCapacity` | `20` | Бюджет пропускной способности на приём, в **МБ/с**. |
  45. | `cwndMultiplier` | `1` | Множитель окна перегрузки; повышайте, чтобы сильнее нагружать хорошие каналы. |
  46. | `maxSendingWindow` | `2097152` | Верхний предел числа пакетов «в пути». |
  47. <Callout type="info">
  48. mKCP не может нести TLS или REALITY. Чтобы замаскировать его, добавьте
  49. UDP-маску **FinalMask** — маска `mkcp-legacy` воспроизводит классическую
  50. обфускацию заголовка, которую старые версии Xray хранили в
  51. `kcpSettings.header`/`seed` (этих полей здесь больше нет).
  52. </Callout>
  53. ### WebSocket — `wsSettings`
  54. | Поле | По умолчанию | Значение |
  55. | --------------------- | ------- | ---------------------------------------------------------------- |
  56. | `path` | `/` | Путь запроса — маршрутизируйте по нему, когда несколько сервисов делят один хост. |
  57. | `host` | _(нет)_ | Переопределение заголовка `Host` (полезно за CDN). |
  58. | `headers` | `{}` | Дополнительные заголовки запроса. |
  59. | `heartbeatPeriod` | `0` | Секунды между keepalive-пингами; `0` отключает их. |
  60. | `acceptProxyProtocol` | `false` | Принимать PROXY-протокол от вышестоящего прокси. |
  61. ### gRPC — `grpcSettings`
  62. | Поле | По умолчанию | Значение |
  63. | ------------- | ------- | --------------------------------------------------------- |
  64. | `serviceName` | _(нет)_ | Путь gRPC-сервиса; работает как секретный маршрут. |
  65. | `authority` | _(нет)_ | Переопределение псевдозаголовка `:authority`. |
  66. | `multiMode` | `false` | Мультиплексировать несколько потоков по одному соединению. |
  67. ### HTTPUpgrade — `httpupgradeSettings`
  68. | Поле | По умолчанию | Значение |
  69. | --------------------- | ------- | --------------------------------------------- |
  70. | `path` | `/` | Путь запроса. |
  71. | `host` | _(нет)_ | Переопределение заголовка `Host`. |
  72. | `headers` | `{}` | Дополнительные заголовки запроса. |
  73. | `acceptProxyProtocol` | `false` | Принимать PROXY-протокол от вышестоящего прокси. |
  74. HTTPUpgrade — это одноразовый HTTP/1.1 `Upgrade` без фреймирования WebSocket,
  75. поэтому поля heartbeat нет.
  76. ### XHTTP — `xhttpSettings`
  77. У XHTTP (SplitHTTP) большой набор полей; панель заполняет разумные значения по
  78. умолчанию. Те, что вы обычно будете трогать:
  79. | Поле | По умолчанию | Значение |
  80. | ---------------------- | ----------- | ---------------------------------------------------------------------- |
  81. | `path` | `/` | Путь запроса. |
  82. | `host` | _(нет)_ | Переопределение заголовка `Host`. |
  83. | `mode` | `auto` | `auto`, `packet-up`, `stream-up` или `stream-one`. `packet-up` наиболее совместим с CDN; `stream-*` имеют меньшую задержку. |
  84. | `xPaddingBytes` | `100-1000` | Диапазон случайного паддинга, размывающего размеры пакетов. |
  85. | `scMaxBufferedPosts` | `30` | Серверный буфер для загружаемых POST-запросов. |
  86. | `scStreamUpServerSecs` | `20-80` | Окно сервера в режиме stream-up (диапазон через дефис). |
  87. | `xmux` (`enableXmux`) | _(выкл.)_ | Мультиплексирование соединений — `maxConcurrency` `16-32`, `maxConnections` `6`, … Включайте при высокой конкурентности. |
  88. Поля Session-ID (`sessionIDPlacement`, `sessionIDKey`, `sessionIDTable`,
  89. `sessionIDLength`) и параметры `scMin/MaxEachPostBytes` — продвинутые; оставьте
  90. их пустыми, если только вы не подстраиваетесь под конкретный upstream.
  91. ### Hysteria — `hysteriaSettings`
  92. Допустимо, только когда протокол — **Hysteria2**.
  93. | Поле | По умолчанию | Значение |
  94. | ---------------- | ------- | ----------------------------------------------------------------------- |
  95. | `version` | `2` | Версия протокола Hysteria. |
  96. | `auth` | _(нет)_ | Общая строка аутентификации. |
  97. | `udpIdleTimeout` | `60` | Секунды (2–600) до сброса простаивающих UDP-сессий. |
  98. | `masquerade` | — | Маскировка под HTTP/3-сервер: `type` `proxy`/`file`/`string` с `url`/`dir`/`content`, а также `headers` и `statusCode`. |
  99. ### XDRIVE — `xdriveSettings`
  100. XDRIVE передаёт поток файлами в папке, доступной обеим сторонам: сервер опрашивает эту
  101. папку, а не принимает соединения на своём порту. Обе стороны должны использовать
  102. **одинаковые** сервис, папку и секреты, поэтому JSON-подписка передаёт их каждому
  103. клиенту; для XDRIVE-инбаундов не создаются ссылки и записи Clash.
  104. | Поле | По умолчанию | Значение |
  105. | -------------- | -------------- | -------- |
  106. | `service` | `Google Drive` | `Google Drive`, `local` (папка на диске) или `template` (любой HTTP API хранилища). |
  107. | `remoteFolder` | — | Папка с файлами сессий. |
  108. | `secrets` | — | Google Drive: ровно три значения — ClientID, ClientSecret, RefreshToken, в этом порядке. Template: значения, доступные как `{secret0}`, `{secret1}`, …. |
  109. | `template` | — | Только для template: операции `auth`, `put`, `get`, `list` и `delete` API хранилища. |
  110. | тонкая настройка | значения ядра | `segmentBytes` (512 KiB), `flushIntervalMs` (20), `pollIntervalMs`/`maxPollIntervalMs` (50/500), `eagerWindowMs` (2000), `holeTimeoutMs` (30000), `sessionTtlSeconds` (300), `concurrency` (8). |
  111. Необязательные **адрес/порт фронтинга** (`address`/`port` на уровне stream) — домен-фронт,
  112. через который идёт подключение к API хранилища; в TLS по-прежнему указывается хост API.
  113. У XDRIVE нет собственного уровня TLS/REALITY — его трафик это HTTPS самого API хранилища.
  114. На исходящем безопасность **TLS** задаёт это HTTPS-подключение: API хранилища видит его
  115. SNI, отпечаток uTLS и ALPN.
  116. ## FinalMask — обфускация на позднем уровне
  117. **FinalMask** оборачивает трафик **после** уровней транспорта и безопасности,
  118. поэтому он может замаскировать транспорты, не несущие TLS (например, mKCP), или
  119. добавить вторую оболочку поверх TLS. Маски настраиваются по направлениям:
  120. - **TCP-маски** — `fragment`, `sudoku`, `header-custom`, `xmc` (маскирует поток
  121. под трафик протокола Minecraft; требуется пароль, имя хоста и имена игроков
  122. опциональны).
  123. - **UDP-маски** — `salamander`, `mkcp-legacy`, `header-custom`, `xdns`, `xicmp`,
  124. `noise`, `sudoku`, `realm`, а также только клиентская `udphop`. (`mkcp-legacy`
  125. воспроизводит старую обфускацию заголовка mKCP; `udphop` меняет удалённый порт —
  126. и при желании удалённый IP — по интервалу или для каждого соединения, чтобы
  127. обходить блокировку портов.)
  128. - **Параметры QUIC** — управление перегрузкой (`reno`, `bbr`, `brutal`,
  129. `force-brutal`), скорости отдачи/приёма Brutal и настройка окна приёма. На
  130. инбаунде **UDP Hop** задаёт диапазон портов, который объявляется клиентам
  131. (`mport` в ссылке и маска `udphop` в JSON-подписке); сам сервер слушает свой
  132. порт. Начиная с Xray 26.9.9 клиент меняет порт только через маску `udphop`,
  133. поэтому панель преобразует старый клиентский `quicParams.udpHop` в неё.
  134. FinalMask заменяет обфускацию `header`/`seed` на уровне отдельного транспорта,
  135. которую предоставляли старые сборки Xray.
  136. ## sockopt — низкоуровневые опции сокета
  137. `sockopt` идёт вместе с любым транспортом и настраивает низлежащий сокет. Самые
  138. полезные поля:
  139. | Поле | По умолчанию | Значение |
  140. | --------------------- | ------- | ---------------------------------------------------------------- |
  141. | `tcpFastOpen` | `false` | Включить TCP Fast Open. |
  142. | `tcpcongestion` | `bbr` | Управление перегрузкой: `bbr`, `cubic` или `reno`. |
  143. | `tproxy` | `off` | Режим прозрачного прокси: `off`, `redirect` или `tproxy`. |
  144. | `domainStrategy` | `AsIs` | Как разрешаются адреса (`UseIP`, `ForceIPv4`, …). |
  145. | `dialerProxy` | _(нет)_ | Пропускать набор этого outbound через другой outbound по тегу. |
  146. | `interface` | _(нет)_ | Привязка к конкретному сетевому интерфейсу. |
  147. | `mark` | `0` | SO_MARK для policy routing (`0` = не задано). |
  148. Числовые поля, оставленные равными `0`, опускаются на проводе, поэтому Xray
  149. сохраняет умолчания ОС. Продвинутые записи (`happyEyeballs`, `customSockopt[]`,
  150. таймеры keepalive) доступны для особых случаев.
  151. ## Безопасность
  152. Уровень безопасности — это одно из значений **`none`**, **`tls`** или
  153. **`reality`**, со следующими правилами совместимости:
  154. | Безопасность | Допустимые транспорты | Допустимые протоколы |
  155. | ----------- | -------------------------------------------- | --------------------------------------------------- |
  156. | **TLS** | `tcp`, `ws`, `grpc`, `httpupgrade`, `xhttp` | VLESS, VMess, Trojan, Shadowsocks (Hysteria2 всегда TLS) |
  157. | **REALITY** | `tcp`, `grpc`, `xhttp` | VLESS, Trojan |
  158. mKCP и Hysteria не используют отдельный уровень TLS/REALITY — mKCP работает в
  159. открытом виде (обфусцируйте его с помощью FinalMask), а Hysteria по своей природе
  160. использует QUIC/TLS. REALITY маскирует ваш сервер под настоящий TLS-сайт и не
  161. требует сертификата — см. [REALITY](/docs/config/reality).
  162. ## Поток XTLS-Vision
  163. Поток `xtls-rprx-vision` быстрый и устойчивый к DPI. Он доступен для **VLESS**,
  164. когда выполнено одно из условий:
  165. - транспорт — это «сырой» **TCP** с безопасностью **TLS** или **REALITY**
  166. (классический XTLS-Vision), либо
  167. - включено шифрование VLESS, на любом транспорте (см. ниже).
  168. Поток задаётся на **клиенте** VLESS, а не на inbound. При классическом Vision
  169. поверх TCP панель также может предложить **Vision seed** после того, как клиент
  170. начнёт использовать этот поток.
  171. ## Шифрование VLESS (ML-KEM)
  172. VLESS поддерживает постквантовое **шифрование** (ML-KEM / `mlkem768x25519`),
  173. которое хранится в поле `decryption` у inbound (сервер) и в поле `encryption` у
  174. клиентов (для генерации ссылок). Когда оно включено, становится доступен поток
  175. Vision на любом транспорте. Сгенерируйте ключи в настройках VLESS на панели.
  176. ## Шифры Shadowsocks
  177. Inbound-соединения Shadowsocks поддерживают как классические шифры, так и
  178. **Shadowsocks-2022** (имена методов, начинающиеся с `2022-blake3-`). Метод
  179. `2022-blake3-chacha20-poly1305` для inbound не предлагается: Xray-core
  180. поддерживает его только без пользователей, а у каждого inbound панели есть
  181. клиенты. В outbound его по-прежнему можно использовать.
  182. <Callout type="info">
  183. Транспорты и безопасность должны совпадать на обоих концах. Ссылка на
  184. подключение, которую использует клиент, кодирует их (`type=ws`,
  185. `security=reality`, `flow=xtls-rprx-vision`, …) — декодируйте любую ссылку с
  186. помощью [инспектора ссылок на подключение](/docs/config/share-links).
  187. </Callout>