mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-06 22:08:16 +03:00
177 lines
19 KiB
Markdown
177 lines
19 KiB
Markdown
# Конфигурация транспорта
|
|
|
|
Конфигурация транспорта определяет, как текущий экземпляр Xray взаимодействует с другой стороной. Этой стороной может быть как другой узел Xray, так и любой обычный публичный адрес назначения.
|
|
|
|
Она описывает часть ниже самого прокси-протокола: способ переноса потока, защиту транспорта и дополнительные низкоуровневые настройки.
|
|
|
|
Эти три группы относятся к разным уровням и в определенных пределах могут комбинироваться:
|
|
|
|
- Способы передачи определяют, как именно переносится поток данных, например через RAW, WebSocket, gRPC, Hysteria и другие.
|
|
- Безопасность транспорта определяет механизм защиты, например TLS или REALITY.
|
|
- Дополнительные настройки управляют низкоуровневым сетевым поведением и финальной маскировкой трафика.
|
|
|
|
Часть параметров транспорта напрямую влияет на способ установления соединения с удаленной стороной. Для параметров, которые требуют согласования, обе стороны обычно должны использовать совместимые настройки. Например, если одна сторона использует WebSocket, другая тоже должна использовать WebSocket, иначе соединение не будет установлено.
|
|
|
|
Для прямых исходящих соединений, таких как [Freedom](./outbounds/freedom.md), другой стороной обычно является любой обычный публичный адрес назначения, например сайт Amazon или серверы WeChat. В этом случае конфигурация транспорта не требует согласования с другой стороной и, как правило, почти не может использоваться для этого; вместо этого она управляет поведением локального исходящего соединения. В таком сценарии доступен только `sockopt`.
|
|
|
|
## StreamSettingsObject
|
|
|
|
`StreamSettingsObject` соответствует полю `streamSettings` в [`InboundObject`](./inbound.md) или [`OutboundObject`](./outbound.md). Каждый inbound или outbound может иметь собственную конфигурацию транспорта.
|
|
|
|
```json
|
|
{
|
|
// пример для outbound, аналогично применимо к inbound
|
|
"outbounds": [
|
|
{
|
|
// ...
|
|
// [!code focus:18]
|
|
"streamSettings": {
|
|
// Способы передачи
|
|
"method": "raw",
|
|
"rawSettings": {},
|
|
"xhttpSettings": {},
|
|
"kcpSettings": {},
|
|
"grpcSettings": {},
|
|
"wsSettings": {},
|
|
"httpupgradeSettings": {},
|
|
"hysteriaSettings": {},
|
|
// Безопасность транспорта
|
|
"security": "none",
|
|
"realitySettings": {},
|
|
"tlsSettings": {},
|
|
// Дополнительные настройки
|
|
"finalmask": {},
|
|
"sockopt": {}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Способы передачи
|
|
|
|
> `method`: "raw" | "xhttp" | "mkcp" | "grpc" | "websocket" | "httpupgrade" | "hysteria"
|
|
|
|
Способ передачи, используемый потоком данных. Значение по умолчанию — `raw`.
|
|
|
|
> `rawSettings`: [RawObject](./transports/raw.md)
|
|
|
|
Настройки RAW для потока данных. Действуют только когда `method` равно `raw`.
|
|
|
|
> `xhttpSettings`: [XHTTPObject](./transports/xhttp.md)
|
|
|
|
Настройки XHTTP для потока данных. Действуют только когда `method` равно `xhttp`.
|
|
|
|
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
|
|
|
|
Настройки mKCP для потока данных. Действуют только когда `method` равно `mkcp`.
|
|
|
|
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
|
|
|
|
Настройки gRPC для потока данных. Действуют только когда `method` равно `grpc`.
|
|
|
|
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
|
|
|
|
Настройки WebSocket для потока данных. Действуют только когда `method` равно `websocket`.
|
|
|
|
> `httpupgradeSettings`: [HTTPUpgradeObject](./transports/httpupgrade.md)
|
|
|
|
Настройки HTTPUpgrade для потока данных. Действуют только когда `method` равно `httpupgrade`.
|
|
|
|
> `hysteriaSettings`: [HysteriaObject](./transports/hysteria.md)
|
|
|
|
Настройки Hysteria для потока данных. Действуют только когда `method` равно `hysteria`.
|
|
|
|
### Безопасность транспорта
|
|
|
|
> `security`: "none" | "reality" | "tls"
|
|
|
|
Включать ли защиту транспорта. Поддерживаются следующие значения:
|
|
|
|
- `"none"` означает, что защита отключена (значение по умолчанию)
|
|
- `"reality"` означает использование REALITY
|
|
- `"tls"` означает использование [TLS](https://ru.wikipedia.org/wiki/Протокол_защиты_транспортного_уровня)
|
|
|
|
> `realitySettings`: [RealityObject](./transports/reality.md)
|
|
|
|
Настройки REALITY. REALITY — это модификация TLS, которая использует внешний вид и характеристики рукопожатия целевого сайта как маскировку.
|
|
|
|
Действуют только когда `security` равно `reality`.
|
|
REALITY можно использовать только вместе с транспортами `RAW`, `XHTTP` и `gRPC`.
|
|
|
|
::: tip
|
|
REALITY сейчас является одной из самых сильных схем защиты транспорта, а снаружи такой трафик выглядит максимально похоже на обычный веб-трафик. В сочетании с подходящим режимом XTLS Vision можно также получить прирост производительности в несколько раз или даже больше чем в десять раз.
|
|
:::
|
|
|
|
> `tlsSettings`: [TLSObject](./transports/tls.md)
|
|
|
|
Настройки TLS. Реализация TLS предоставляется Go. В обычных условиях переговоры обычно приходят к TLS 1.3. DTLS не поддерживается.
|
|
|
|
Действуют только когда `security` равно `tls`.
|
|
Поддерживается использование вместе с транспортами `RAW`, `XHTTP`, `mKCP`, `gRPC`, `WebSocket`, `HTTPUpgrade` и `Hysteria`.
|
|
|
|
### Дополнительные настройки
|
|
|
|
> `finalmask`: [FinalMaskObject](./transports/finalmask.md)
|
|
|
|
Настройки FinalMask для финальной маскировки трафика.
|
|
|
|
> `sockopt`: [SockoptObject](./transports/sockopt.md)
|
|
|
|
Настройки низкоуровневого сетевого поведения.
|
|
|
|
## Краткая таблица совместимости транспорта
|
|
|
|
Для входящих и исходящих подключений способ передачи и безопасность транспорта настраиваются через `streamSettings`. В реальной конфигурации прокси-протокол, способ передачи и безопасность транспорта должны быть совместимы друг с другом.
|
|
|
|
### Входящие/исходящие протоколы и способы передачи
|
|
|
|
Эта таблица соответствует сочетанию `protocol + streamSettings.method`.
|
|
|
|
| | `raw` | `xhttp` | `grpc` | `websocket` | `httpupgrade` | `mkcp` | `hysteria` |
|
|
| --------------------------------------------------------------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- |
|
|
| `http` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
|
|
| `socks` <sup><a href="#protocol-transport-note-1">[1]</a></sup> | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно |
|
|
| `shadowsocks` <sup><a href="#protocol-transport-note-1">[1]</a></sup> | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно |
|
|
| `vmess` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
|
|
| `vless` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
|
|
| `trojan` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
|
|
| `hysteria` | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Поддерживается |
|
|
| `wireguard` | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо |
|
|
|
|
<small id="protocol-transport-note-1">[1] Если XUDP не включен для Socks или Shadowsocks, UDP-трафик использует собственный UDP-маршрут протокола и обходит настроенный способ передачи; на TCP-трафик это ограничение не распространяется. См. [XUDP](./outbound.md#muxobject).</small><br>
|
|
|
|
### Способы передачи и безопасность транспорта
|
|
|
|
Эта таблица соответствует сочетанию `streamSettings.method + streamSettings.security`.
|
|
|
|
| | `none` | `tls` | `reality` |
|
|
| ------------- | ----------------- | -------------- | ----------------- |
|
|
| `raw` | Поддерживается | Поддерживается | Поддерживается |
|
|
| `xhttp` | Поддерживается | Поддерживается | Поддерживается |
|
|
| `grpc` | Поддерживается | Поддерживается | Поддерживается |
|
|
| `websocket` | Поддерживается | Поддерживается | Не поддерживается |
|
|
| `httpupgrade` | Поддерживается | Поддерживается | Не поддерживается |
|
|
| `mkcp` | Поддерживается | Поддерживается | Не поддерживается |
|
|
| `hysteria` | Не поддерживается | Обязательно | Не поддерживается |
|
|
|
|
### Входящие/исходящие протоколы и безопасность транспорта
|
|
|
|
Эта таблица соответствует сочетанию `protocol + streamSettings.security`.
|
|
|
|
| | `none` | `tls` | `reality` | Безопасность на уровне протокола |
|
|
| ------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
|
|
| `http` | Поддерживается | Поддерживается | Поддерживается | Нет |
|
|
| `socks` | Поддерживается | Ограниченно <sup><a href="#protocol-security-note-1">[1]</a></sup> | Ограниченно <sup><a href="#protocol-security-note-1">[1]</a></sup> | Нет |
|
|
| `shadowsocks` | Поддерживается | Ограниченно <sup><a href="#protocol-security-note-1">[1]</a></sup> | Ограниченно <sup><a href="#protocol-security-note-1">[1]</a></sup> | Шифрование и целостность полезной нагрузки <sup><a href="#protocol-security-note-2">[2]</a></sup> |
|
|
| `vmess` | Поддерживается | Поддерживается | Поддерживается | Аутентификация рукопожатия и шифрование полезной нагрузки <sup><a href="#protocol-security-note-2">[2]</a></sup> |
|
|
| `vless` | Ограниченно <sup><a href="#protocol-security-note-3">[3]</a></sup> | Поддерживается | Поддерживается | Опциональное Encryption <sup><a href="#protocol-security-note-4">[4]</a></sup> |
|
|
| `trojan` | Ограниченно <sup><a href="#protocol-security-note-3">[3]</a></sup> | Поддерживается | Поддерживается | Только аутентификация |
|
|
| `hysteria` | Не поддерживается | Обязательно | Не поддерживается | Нет (зависит от TLS) |
|
|
| `wireguard` | Неприменимо | Неприменимо | Неприменимо | Зашифрованный туннель <sup><a href="#protocol-security-note-2">[2]</a></sup> |
|
|
|
|
<small id="protocol-security-note-1">[1] Если XUDP не включен для Socks или Shadowsocks, UDP-трафик использует собственный UDP-маршрут протокола и обходит настроенный TLS или REALITY; на TCP-трафик это ограничение не распространяется. См. [XUDP](./outbound.md#muxobject).</small><br>
|
|
<small id="protocol-security-note-2">[2] Shadowsocks и VMess защищают полезную нагрузку, но не обеспечивают прямую секретность уровня TLS 1.3, а их трафик по-прежнему поддается классификации. Криптография WireGuard достаточно надежна, но характерный и неизменный UDP-профиль легко распознать и заблокировать. Ни один из этих трех протоколов не создает видимость обычного HTTPS-трафика, которую обеспечивают TLS/REALITY, поэтому они не подходят для прямого обхода блокировок.</small><br>
|
|
<small id="protocol-security-note-3">[3] Когда `streamSettings.security` имеет значение `none`, VLESS (без включенного Encryption) и Trojan могут подключаться только к адресам частной сети.</small><br>
|
|
<small id="protocol-security-note-4">[4] VLESS Encryption является опциональным и по умолчанию отключен (`encryption: "none"`). После включения он позволяет подключаться к публичным сетевым адресам, даже если `streamSettings.security` имеет значение `none`. Он защищает полезную нагрузку VLESS, но не создает видимость обычного HTTPS-трафика как TLS/REALITY, поэтому не подходит для прямого обхода блокировок.</small>
|