From 0bb039887532b359c145284f5cccec7be7511e9b Mon Sep 17 00:00:00 2001
From: Meow <197331664+Meo597@users.noreply.github.com>
Date: Tue, 7 Jul 2026 19:44:37 +0800
Subject: [PATCH] Xray-core: Forbid unencrypted outbounds on public Internet
for VLESS and Trojan; Remove "none/zero/plain" for VMess and Shadowsocks
---
docs/config/inbounds/shadowsocks.md | 5 --
docs/config/inbounds/trojan.md | 8 ++--
docs/config/inbounds/vless.md | 4 ++
docs/config/outbounds/shadowsocks.md | 5 --
docs/config/outbounds/trojan.md | 8 ++--
docs/config/outbounds/vless.md | 4 ++
docs/config/outbounds/vmess.md | 6 +--
docs/config/transport.md | 61 ++++++++++++++++++++++++-
docs/en/config/inbounds/shadowsocks.md | 5 --
docs/en/config/inbounds/trojan.md | 8 ++--
docs/en/config/inbounds/vless.md | 4 ++
docs/en/config/outbounds/shadowsocks.md | 5 --
docs/en/config/outbounds/trojan.md | 8 ++--
docs/en/config/outbounds/vless.md | 4 ++
docs/en/config/outbounds/vmess.md | 6 +--
docs/en/config/transport.md | 61 ++++++++++++++++++++++++-
docs/ru/config/inbounds/shadowsocks.md | 5 --
docs/ru/config/inbounds/trojan.md | 8 ++--
docs/ru/config/inbounds/vless.md | 4 ++
docs/ru/config/outbounds/shadowsocks.md | 5 --
docs/ru/config/outbounds/trojan.md | 8 ++--
docs/ru/config/outbounds/vless.md | 4 ++
docs/ru/config/outbounds/vmess.md | 6 +--
docs/ru/config/transport.md | 61 ++++++++++++++++++++++++-
24 files changed, 228 insertions(+), 75 deletions(-)
diff --git a/docs/config/inbounds/shadowsocks.md b/docs/config/inbounds/shadowsocks.md
index c555e4a8..226b5ef0 100644
--- a/docs/config/inbounds/shadowsocks.md
+++ b/docs/config/inbounds/shadowsocks.md
@@ -14,7 +14,6 @@
- aes-128-gcm
- chacha20-poly1305 或称 chacha20-ietf-poly1305
- xchacha20-poly1305 或称 xchacha20-ietf-poly1305
- - none 或 plain
Shadowsocks 2022 新协议格式提升了性能并带有完整的重放保护,解决了旧协议的以下安全问题:
@@ -23,10 +22,6 @@ Shadowsocks 2022 新协议格式提升了性能并带有完整的重放保护,
- 没有 UDP 重放保护
- 可用于主动探测的 TCP 行为
-::: danger
-"none" 不加密方式下流量将明文传输。为确保安全性, 不要在公共网络上使用。
-:::
-
## InboundConfigurationObject
`InboundConfigurationObject` 对应 [`InboundObject`](../inbound.md) 中的 `settings` 项。
diff --git a/docs/config/inbounds/trojan.md b/docs/config/inbounds/trojan.md
index 65485b19..ff59d304 100644
--- a/docs/config/inbounds/trojan.md
+++ b/docs/config/inbounds/trojan.md
@@ -2,10 +2,6 @@
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议
-::: danger
-Trojan 被设计工作在正确配置的加密 TLS 隧道
-:::
-
## InboundConfigurationObject
`InboundConfigurationObject` 对应 [`InboundObject`](../inbound.md) 中的 `settings` 项。
@@ -36,6 +32,10 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道
}
```
+::: warning
+Trojan 必须配合传输安全 [TLS](https://xtls.github.io/config/transports/tls.html) 使用;只有当对端是 private 地址(如私有 IP、私有域名)且链路处于受信网络中时,才允许使用 `streamSettings.security: "none"`。公网环境中还要求启用 Mux;否则一旦内层载荷本身也是 TLS,就会形成 TiT,很容易被检测([PoC](https://github.com/XTLS/Trojan-killer))。
+:::
+
> `users`: \[ [UserObject](#userobject) \]
一个数组,代表一组服务端认可的用户.
diff --git a/docs/config/inbounds/vless.md b/docs/config/inbounds/vless.md
index 1a05b758..02406282 100644
--- a/docs/config/inbounds/vless.md
+++ b/docs/config/inbounds/vless.md
@@ -37,6 +37,10 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
}
```
+::: warning
+VLESS 必须配合传输安全层使用;只有当对端是 private 地址(如私有 IP、私有域名)且链路处于受信网络中,或者已启用 `VLESS Encryption` 时,才允许使用 `streamSettings.security: "none"`。
+:::
+
> `users`: \[ [UserObject](#userobject) \]
一个数组,代表一组服务端认可的用户。
diff --git a/docs/config/outbounds/shadowsocks.md b/docs/config/outbounds/shadowsocks.md
index 4ee67638..db7a414a 100644
--- a/docs/config/outbounds/shadowsocks.md
+++ b/docs/config/outbounds/shadowsocks.md
@@ -14,7 +14,6 @@
- aes-128-gcm
- chacha20-poly1305 或称 chacha20-ietf-poly1305
- xchacha20-poly1305 或称 xchacha20-ietf-poly1305
- - none 或 plain
Shadowsocks 2022 新协议格式提升了性能并带有完整的重放保护,解决了旧协议的以下安全问题:
@@ -23,10 +22,6 @@ Shadowsocks 2022 新协议格式提升了性能并带有完整的重放保护,
- 没有 UDP 重放保护
- 可用于主动探测的 TCP 行为
-::: danger
-"none" 不加密方式下流量将明文传输。为确保安全性, 不要在公共网络上使用。
-:::
-
## OutboundConfigurationObject
`OutboundConfigurationObject` 对应 [`OutboundObject`](../outbound.md) 中的 `settings` 项。
diff --git a/docs/config/outbounds/trojan.md b/docs/config/outbounds/trojan.md
index f556b4bf..948e8148 100644
--- a/docs/config/outbounds/trojan.md
+++ b/docs/config/outbounds/trojan.md
@@ -2,10 +2,6 @@
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议
-::: danger
-Trojan 被设计工作在正确配置的加密 TLS 隧道
-:::
-
## OutboundConfigurationObject
`OutboundConfigurationObject` 对应 [`OutboundObject`](../outbound.md) 中的 `settings` 项。
@@ -29,6 +25,10 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道
}
```
+::: warning
+Trojan 必须配合传输安全 [TLS](https://xtls.github.io/config/transports/tls.html) 使用;只有当对端是 private 地址(如私有 IP、私有域名)且链路处于受信网络中时,才允许使用 `streamSettings.security: "none"`。公网环境中还要求启用 Mux;否则一旦内层载荷本身也是 TLS,就会形成 TiT,很容易被检测([PoC](https://github.com/XTLS/Trojan-killer))。
+:::
+
> `address`: address
服务端地址,支持 IPv4、IPv6 和域名。必填。
diff --git a/docs/config/outbounds/vless.md b/docs/config/outbounds/vless.md
index c1334508..70fa0da5 100644
--- a/docs/config/outbounds/vless.md
+++ b/docs/config/outbounds/vless.md
@@ -29,6 +29,10 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
}
```
+::: warning
+VLESS 必须配合传输安全层使用;只有当对端是 private 地址(如私有 IP、私有域名)且链路处于受信网络中,或者已启用 `VLESS Encryption` 时,才允许使用 `streamSettings.security: "none"`。
+:::
+
> `address`: address
服务端地址,指向服务端,支持域名、IPv4、IPv6。
diff --git a/docs/config/outbounds/vmess.md b/docs/config/outbounds/vmess.md
index d8c9a92f..b9c2937b 100644
--- a/docs/config/outbounds/vmess.md
+++ b/docs/config/outbounds/vmess.md
@@ -57,17 +57,13 @@ Vmess 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是
level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
-> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
+> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto"
加密方式,客户端将使用配置的加密方式发送数据,服务器端自动识别,无需配置。
- `"aes-128-gcm"`:使用 AES-128-GCM 算法
- `"chacha20-poly1305"`:使用 Chacha20-Poly1305 算法
- `"auto"`:默认值,自动选择(运行框架为 AMD64、ARM64 或 s390x 时为 aes-128-gcm 加密方式,其他情况则为 Chacha20-Poly1305 加密方式)
-- `"none"`:不加密,保持vmess消息结构
-- `"zero"`:不加密,数据流直接拷贝(类似vless)
-
-不推荐在未开启 TLS 加密并强制校验证书的情况下使用 `"none"` `"zero"` 伪加密方式。无论使用哪种加密方式, VMess 的包头都会受到加密和认证的保护。
注意,auto 只是判断客户端的 AES 硬件加速支持状态,如果服务端没有 AES 硬件加速支持,仍然需要手动设置到 chacha20-poly1305, 这非常重要,因为 Chacha20-Poly1305 在支持 AES 加速的平台上比 AES-128-GCM 耗时多了约 48% 但是在不支持 AES 加速的平台上, AES-128-GCM 的耗时将比 Chacha20-Poly1305 高出 2000% 以上。
diff --git a/docs/config/transport.md b/docs/config/transport.md
index a8f36f50..758eb8cc 100644
--- a/docs/config/transport.md
+++ b/docs/config/transport.md
@@ -48,6 +48,8 @@
}
```
+### 传输方式
+
> `network`: "raw" | "xhttp" | "mkcp" | "grpc" | "websocket" | "httpupgrade" | "hysteria"
数据流所使用的传输方式类型,默认值为 `raw`。
@@ -80,7 +82,7 @@
数据流的 Hysteria 配置,仅当 `network` 为 `hysteria` 时有效。
----
+### 传输安全
> `security`: "none" | "reality" | "tls"
@@ -109,7 +111,7 @@ TLS 配置。TLS 由 Golang 提供,通常情况下 TLS 协商的结果为使
仅当 `security` 为 `tls` 时有效。
支持与 `RAW`、`XHTTP`、`mKCP`、`gRPC`、`WebSocket`、`HTTPUpgrade`、`Hysteria` 传输方式组合使用。
----
+### 附加配置
> `finalmask`: [FinalMaskObject](./transports/finalmask.md)
@@ -118,3 +120,58 @@ FinalMask 配置,用于对流量进行最终的伪装。
> `sockopt`: [SockoptObject](./transports/sockopt.md)
底层网络行为相关配置。
+
+## 传输组合速查表
+
+出入站都可以通过 `streamSettings` 配置传输方式与传输安全。实际配置时,代理协议、传输方式和传输安全需要彼此兼容。
+
+### 出入站协议与传输方式
+
+此表对应 `protocol + streamSettings.network`。
+
+| | `raw` | `xhttp` | `grpc` | `websocket` | `httpupgrade` | `mkcp` | `hysteria` |
+| --------------------------------------------------------------------- | ------ | ------- | ------ | ----------- | ------------- | ------ | ---------- |
+| `http` | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
+| `socks` [1] | 受限 | 受限 | 受限 | 受限 | 受限 | 受限 | 受限 |
+| `shadowsocks` [1] | 受限 | 受限 | 受限 | 受限 | 受限 | 受限 | 受限 |
+| `vmess` | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
+| `vless` | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
+| `trojan` | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
+| `hysteria` | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 支持 |
+| `wireguard` | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
+
+[1] Socks 和 Shadowsocks 未启用 [XUDP](./outbound.md#muxobject) 时,UDP 流量会改走协议原生的 UDP 路径,从而绕过已配置的传输方式;TCP 流量不受此限制。
+
+### 传输方式与传输安全
+
+此表对应 `streamSettings.network + streamSettings.security`。
+
+| | `none` | `tls` | `reality` |
+| ------------- | ------ | ----- | --------- |
+| `raw` | 支持 | 支持 | 支持 |
+| `xhttp` | 支持 | 支持 | 支持 |
+| `grpc` | 支持 | 支持 | 支持 |
+| `websocket` | 支持 | 支持 | 不支持 |
+| `httpupgrade` | 支持 | 支持 | 不支持 |
+| `mkcp` | 支持 | 支持 | 不支持 |
+| `hysteria` | 不支持 | 必须 | 不支持 |
+
+### 出入站协议与传输安全
+
+此表对应 `protocol + streamSettings.security`。
+
+| | `none` | `tls` | `reality` | 协议层安全机制 |
+| ------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------- |
+| `http` | 支持 | 支持 | 支持 | 无 |
+| `socks` | 支持 | 受限 [1] | 受限 [1] | 无 |
+| `shadowsocks` | 支持 | 受限 [1] | 受限 [1] | 载荷加密与完整性 [2] |
+| `vmess` | 支持 | 支持 | 支持 | 握手认证与载荷加密 [2] |
+| `vless` | 受限 [3] | 支持 | 支持 | 可选的 Encryption [4] |
+| `trojan` | 受限 [3] | 支持 | 支持 | 仅有身份认证 |
+| `hysteria` | 不支持 | 必须 | 不支持 | 无(依赖 TLS) |
+| `wireguard` | 不适用 | 不适用 | 不适用 | 加密隧道 [2] |
+
+[1] Socks 和 Shadowsocks 未启用 [XUDP](./outbound.md#muxobject) 时,UDP 流量会改走协议原生的 UDP 路径,从而绕过已配置的 TLS 或 REALITY;TCP 流量不受此限制。
+[2] Shadowsocks 和 VMess 能保护载荷,但缺少 TLS 1.3 式的前向保密,流量外观也可被分类。WireGuard 的密码学足够强,但固定的 UDP 特征容易被识别和封锁。三者都不具备 TLS/REALITY 提供的正常 HTTPS 外观,因此不适合直接用于过墙。
+[3] 当 `streamSettings.security` 为 `none` 时,VLESS(未启用 Encryption)和 Trojan 仅允许连接私网地址。
+[4] VLESS Encryption 是可选的,默认关闭(`encryption: "none"`)。启用后,即使 `streamSettings.security` 为 `none` 也可以连接公网地址;它能保护 VLESS 载荷,但不能提供 TLS/REALITY 的正常 HTTPS 外观,因此不适合直接用于过墙。
diff --git a/docs/en/config/inbounds/shadowsocks.md b/docs/en/config/inbounds/shadowsocks.md
index 4e7a2c59..a7c9fe9d 100644
--- a/docs/en/config/inbounds/shadowsocks.md
+++ b/docs/en/config/inbounds/shadowsocks.md
@@ -14,7 +14,6 @@ Current compatibility is as follows:
- aes-128-gcm
- chacha20-poly1305 (or chacha20-ietf-poly1305)
- xchacha20-poly1305 (or xchacha20-ietf-poly1305)
- - none (or plain)
The Shadowsocks 2022 new protocol format improves performance and includes complete replay protection, resolving the following security issues of the old protocol:
@@ -23,10 +22,6 @@ The Shadowsocks 2022 new protocol format improves performance and includes compl
- No UDP replay protection
- TCP behavior that can be used for active probing
-::: danger
-Under the "none" encryption method, traffic will be transmitted in plain text. To ensure security, do not use it on public networks.
-:::
-
## InboundConfigurationObject
`InboundConfigurationObject` corresponds to the `settings` item in [`InboundObject`](../inbound.md).
diff --git a/docs/en/config/inbounds/trojan.md b/docs/en/config/inbounds/trojan.md
index fb337975..9b101f26 100644
--- a/docs/en/config/inbounds/trojan.md
+++ b/docs/en/config/inbounds/trojan.md
@@ -2,10 +2,6 @@
[Trojan](https://trojan-gfw.github.io/trojan/protocol) protocol.
-::: danger
-Trojan is designed to work over correctly configured encrypted TLS tunnels.
-:::
-
## InboundConfigurationObject
`InboundConfigurationObject` corresponds to the `settings` item in [`InboundObject`](../inbound.md).
@@ -36,6 +32,10 @@ Trojan is designed to work over correctly configured encrypted TLS tunnels.
}
```
+::: warning
+Trojan must be used with transport-security [TLS](https://xtls.github.io/config/transports/tls.html); using `streamSettings.security: "none"` is only allowed when the peer is a private address (such as a private IP address or private domain name) and the link itself is trusted. In public environments, Mux is also required; otherwise, once the inner payload is itself TLS, it becomes TiT and can be easily detected ([PoC](https://github.com/XTLS/Trojan-killer)).
+:::
+
> `users`: \[ [UserObject](#userobject) \]
An array representing a group of users accepted by the server.
diff --git a/docs/en/config/inbounds/vless.md b/docs/en/config/inbounds/vless.md
index c92d2958..d1fc3190 100644
--- a/docs/en/config/inbounds/vless.md
+++ b/docs/en/config/inbounds/vless.md
@@ -37,6 +37,10 @@ Unlike [VMess](./vmess.md), VLESS does not depend on system time. The authentica
}
```
+::: warning
+VLESS must be used with an outer transport-security layer unless the peer is a private address (such as a private IP address or private domain name) and the link itself is trusted, or `VLESS Encryption` is enabled. In those cases, `streamSettings.security: "none"` is allowed.
+:::
+
> `users`: \[ [UserObject](#userobject) \]
An array representing a group of users approved by the server.
diff --git a/docs/en/config/outbounds/shadowsocks.md b/docs/en/config/outbounds/shadowsocks.md
index a7fb36d8..d33ad9e8 100644
--- a/docs/en/config/outbounds/shadowsocks.md
+++ b/docs/en/config/outbounds/shadowsocks.md
@@ -14,7 +14,6 @@ Current compatibility is as follows:
- aes-128-gcm
- chacha20-poly1305 (or chacha20-ietf-poly1305)
- xchacha20-poly1305 (or xchacha20-ietf-poly1305)
- - none (or plain)
The Shadowsocks 2022 new protocol format improves performance and includes complete replay protection, resolving the following security issues of the old protocol:
@@ -23,10 +22,6 @@ The Shadowsocks 2022 new protocol format improves performance and includes compl
- No UDP replay protection
- TCP behavior that can be used for active probing
-::: danger
-Under the "none" encryption method, traffic will be transmitted in plain text. To ensure security, do not use it on public networks.
-:::
-
## OutboundConfigurationObject
`OutboundConfigurationObject` corresponds to the `settings` item in [`OutboundObject`](../outbound.md).
diff --git a/docs/en/config/outbounds/trojan.md b/docs/en/config/outbounds/trojan.md
index 797b0937..2ab509cc 100644
--- a/docs/en/config/outbounds/trojan.md
+++ b/docs/en/config/outbounds/trojan.md
@@ -2,10 +2,6 @@
[Trojan](https://trojan-gfw.github.io/trojan/protocol) protocol.
-::: danger
-Trojan is designed to work over a correctly configured encrypted TLS tunnel.
-:::
-
## OutboundConfigurationObject
`OutboundConfigurationObject` corresponds to the `settings` item in [`OutboundObject`](../outbound.md).
@@ -29,6 +25,10 @@ Trojan is designed to work over a correctly configured encrypted TLS tunnel.
}
```
+::: warning
+Trojan must be used with transport-security [TLS](https://xtls.github.io/config/transports/tls.html); using `streamSettings.security: "none"` is only allowed when the peer is a private address (such as a private IP address or private domain name) and the link itself is trusted. In public environments, Mux is also required; otherwise, once the inner payload is itself TLS, it becomes TiT and can be easily detected ([PoC](https://github.com/XTLS/Trojan-killer)).
+:::
+
> `address`: address
Server address. Supports IPv4, IPv6, and domain names. Required.
diff --git a/docs/en/config/outbounds/vless.md b/docs/en/config/outbounds/vless.md
index 1348cf6a..3e9f85ad 100644
--- a/docs/en/config/outbounds/vless.md
+++ b/docs/en/config/outbounds/vless.md
@@ -29,6 +29,10 @@ Unlike [VMess](./vmess.md), VLESS does not depend on system time. The authentica
}
```
+::: warning
+VLESS must be used with an outer transport-security layer unless the peer is a private address (such as a private IP address or private domain name) and the link itself is trusted, or `VLESS Encryption` is enabled. In those cases, `streamSettings.security: "none"` is allowed.
+:::
+
> `address`: address
Server address, points to the server. Supports domain names, IPv4, and IPv6.
diff --git a/docs/en/config/outbounds/vmess.md b/docs/en/config/outbounds/vmess.md
index 0f5bc636..7d0a1db7 100644
--- a/docs/en/config/outbounds/vmess.md
+++ b/docs/en/config/outbounds/vmess.md
@@ -57,17 +57,13 @@ User level. The connection will use the [local policy](../policy.md#levelpolicyo
The value of `level` corresponds to the value of `level` in [policy](../policy.md#policyobject). If not specified, the default is 0.
-> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
+> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto"
Encryption method. The client will use the configured encryption method to send data, and the server will automatically identify it without configuration.
- `"aes-128-gcm"`: Use AES-128-GCM algorithm.
- `"chacha20-poly1305"`: Use Chacha20-Poly1305 algorithm.
- `"auto"`: Default value. Automatically selected (uses aes-128-gcm encryption when the running framework is AMD64, ARM64, or s390x; uses Chacha20-Poly1305 encryption in other cases).
-- `"none"`: No encryption, maintains the VMess message structure.
-- `"zero"`: No encryption, direct stream copy (similar to VLESS).
-
-It is not recommended to use `"none"` or `"zero"` pseudo-encryption methods without enabling TLS encryption and enforcing certificate verification. Regardless of the encryption method used, the VMess packet header is protected by encryption and authentication.
Note: `"auto"` only determines the AES hardware acceleration support status of the _client_. If the _server_ does not support AES hardware acceleration, you still need to manually set it to `chacha20-poly1305`. This is very important because Chacha20-Poly1305 takes about 48% more time than AES-128-GCM on platforms supporting AES acceleration, but on platforms _without_ AES acceleration, AES-128-GCM takes over 2000% more time than Chacha20-Poly1305.
diff --git a/docs/en/config/transport.md b/docs/en/config/transport.md
index 62c92b4c..a4ba2257 100644
--- a/docs/en/config/transport.md
+++ b/docs/en/config/transport.md
@@ -48,6 +48,8 @@ For direct outbounds such as [Freedom](./outbounds/freedom.md), the peer is usua
}
```
+### Transport Methods
+
> `network`: "raw" | "xhttp" | "mkcp" | "grpc" | "websocket" | "httpupgrade" | "hysteria"
Transport method used by the data stream. The default value is `raw`.
@@ -80,7 +82,7 @@ HTTPUpgrade configuration for the data stream. Only valid when `network` is `htt
Hysteria configuration for the data stream. Only valid when `network` is `hysteria`.
----
+### Transport Security
> `security`: "none" | "reality" | "tls"
@@ -108,7 +110,7 @@ TLS configuration. TLS is provided by Go. In normal cases the negotiation result
Only valid when `security` is `tls`.
It supports use with the `RAW`, `XHTTP`, `mKCP`, `gRPC`, `WebSocket`, `HTTPUpgrade`, and `Hysteria` transport methods.
----
+### Additional Configuration
> `finalmask`: [FinalMaskObject](./transports/finalmask.md)
@@ -117,3 +119,58 @@ FinalMask configuration, used for the final stage of traffic obfuscation.
> `sockopt`: [SockoptObject](./transports/sockopt.md)
Configuration related to low-level network behavior.
+
+## Transport Compatibility Quick Reference
+
+Both inbounds and outbounds can configure transport methods and transport security through `streamSettings`. In actual configurations, the proxy protocol, transport method, and transport security must be compatible with one another.
+
+### Inbound/Outbound Protocols and Transport Methods
+
+This table corresponds to `protocol + streamSettings.network`.
+
+| | `raw` | `xhttp` | `grpc` | `websocket` | `httpupgrade` | `mkcp` | `hysteria` |
+| --------------------------------------------------------------------- | --------- | --------- | --------- | ----------- | ------------- | --------- | ---------- |
+| `http` | Supported | Supported | Supported | Supported | Supported | Supported | Supported |
+| `socks` [1] | Limited | Limited | Limited | Limited | Limited | Limited | Limited |
+| `shadowsocks` [1] | Limited | Limited | Limited | Limited | Limited | Limited | Limited |
+| `vmess` | Supported | Supported | Supported | Supported | Supported | Supported | Supported |
+| `vless` | Supported | Supported | Supported | Supported | Supported | Supported | Supported |
+| `trojan` | Supported | Supported | Supported | Supported | Supported | Supported | Supported |
+| `hysteria` | N/A | N/A | N/A | N/A | N/A | N/A | Supported |
+| `wireguard` | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
+
+[1] When XUDP is not enabled for Socks or Shadowsocks, UDP traffic uses the protocol's native UDP path and bypasses the configured transport method; TCP traffic is not subject to this limitation. See [XUDP](./outbound.md#muxobject).
+
+### Transport Methods and Transport Security
+
+This table corresponds to `streamSettings.network + streamSettings.security`.
+
+| | `none` | `tls` | `reality` |
+| ------------- | ------------- | --------- | ------------- |
+| `raw` | Supported | Supported | Supported |
+| `xhttp` | Supported | Supported | Supported |
+| `grpc` | Supported | Supported | Supported |
+| `websocket` | Supported | Supported | Not supported |
+| `httpupgrade` | Supported | Supported | Not supported |
+| `mkcp` | Supported | Supported | Not supported |
+| `hysteria` | Not supported | Required | Not supported |
+
+### Inbound/Outbound Protocols and Transport Security
+
+This table corresponds to `protocol + streamSettings.security`.
+
+| | `none` | `tls` | `reality` | Protocol-layer security |
+| ------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| `http` | Supported | Supported | Supported | None |
+| `socks` | Supported | Limited [1] | Limited [1] | None |
+| `shadowsocks` | Supported | Limited [1] | Limited [1] | Payload encryption and integrity [2] |
+| `vmess` | Supported | Supported | Supported | Handshake authentication and payload encryption [2] |
+| `vless` | Limited [3] | Supported | Supported | Optional Encryption [4] |
+| `trojan` | Limited [3] | Supported | Supported | Authentication only |
+| `hysteria` | Not supported | Required | Not supported | None (relies on TLS) |
+| `wireguard` | N/A | N/A | N/A | Encrypted tunnel [2] |
+
+[1] When XUDP is not enabled for Socks or Shadowsocks, UDP traffic uses the protocol's native UDP path and bypasses the configured TLS or REALITY; TCP traffic is not subject to this limitation. See [XUDP](./outbound.md#muxobject).
+[2] Shadowsocks and VMess protect the payload, but lack TLS 1.3-style forward secrecy, and their traffic patterns can still be classified. WireGuard uses sufficiently strong cryptography, but its fixed UDP signature is easy to identify and block. None of the three provides the ordinary HTTPS appearance offered by TLS/REALITY, so they are unsuitable for direct censorship circumvention.
+[3] When `streamSettings.security` is `none`, VLESS (without Encryption enabled) and Trojan can connect only to private network addresses.
+[4] VLESS Encryption is optional and disabled by default (`encryption: "none"`). When enabled, it allows connections to public network addresses even if `streamSettings.security` is `none`. It protects the VLESS payload but does not provide the ordinary HTTPS appearance of TLS/REALITY, so it is unsuitable for direct censorship circumvention.
diff --git a/docs/ru/config/inbounds/shadowsocks.md b/docs/ru/config/inbounds/shadowsocks.md
index f58a8f79..51cb52dc 100644
--- a/docs/ru/config/inbounds/shadowsocks.md
+++ b/docs/ru/config/inbounds/shadowsocks.md
@@ -14,7 +14,6 @@
- aes-128-gcm
- chacha20-poly1305 или chacha20-ietf-poly1305
- xchacha20-poly1305 или xchacha20-ietf-poly1305
- - none или plain
Новый формат протокола Shadowsocks 2022 повышает производительность и обеспечивает полноценную защиту от повторов, устраняя следующие проблемы безопасности старого протокола:
@@ -23,10 +22,6 @@
- Отсутствие защиты от повторов для UDP
- Поведение TCP, которое может использоваться для активного зондирования
-::: danger
-При использовании метода шифрования "none" трафик передается в открытом виде. В целях безопасности не используйте этот метод в публичных сетях.
-:::
-
## InboundConfigurationObject
`InboundConfigurationObject` соответствует элементу `settings` в [`InboundObject`](../inbound.md).
diff --git a/docs/ru/config/inbounds/trojan.md b/docs/ru/config/inbounds/trojan.md
index f7cbd84d..baaedf34 100644
--- a/docs/ru/config/inbounds/trojan.md
+++ b/docs/ru/config/inbounds/trojan.md
@@ -2,10 +2,6 @@
Протокол [Trojan](https://trojan-gfw.github.io/trojan/protocol).
-::: danger
-Trojan предназначен для работы в правильно настроенном зашифрованном TLS-туннеле.
-:::
-
## InboundConfigurationObject
`InboundConfigurationObject` соответствует элементу `settings` в [`InboundObject`](../inbound.md).
@@ -36,6 +32,10 @@ Trojan предназначен для работы в правильно нас
}
```
+::: warning
+Trojan должен использоваться с транспортной защитой [TLS](https://xtls.github.io/config/transports/tls.html); использовать `streamSettings.security: "none"` допустимо только тогда, когда адрес другой стороны является private-адресом (например, частным IP-адресом или частным доменным именем) и сам канал находится в доверенной сети. В публичных средах также требуется Mux; иначе, если внутренняя полезная нагрузка сама является TLS, это превращается в TiT и легко обнаруживается ([PoC](https://github.com/XTLS/Trojan-killer)).
+:::
+
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий группу пользователей, одобренных сервером.
diff --git a/docs/ru/config/inbounds/vless.md b/docs/ru/config/inbounds/vless.md
index b9b0f2da..c2fe204a 100644
--- a/docs/ru/config/inbounds/vless.md
+++ b/docs/ru/config/inbounds/vless.md
@@ -37,6 +37,10 @@ VLESS - это легкий транспортный протокол без с
}
```
+::: warning
+VLESS должен использоваться с внешним уровнем транспортной защиты; `streamSettings.security: "none"` допустимо только тогда, когда адрес другой стороны является private-адресом (например, частным IP-адресом или частным доменным именем) и сам канал находится в доверенной сети, либо при включенном `VLESS Encryption`.
+:::
+
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий группу пользователей, одобренных сервером.
diff --git a/docs/ru/config/outbounds/shadowsocks.md b/docs/ru/config/outbounds/shadowsocks.md
index 066a46de..886afe9b 100644
--- a/docs/ru/config/outbounds/shadowsocks.md
+++ b/docs/ru/config/outbounds/shadowsocks.md
@@ -14,7 +14,6 @@
- aes-128-gcm
- chacha20-poly1305 или chacha20-ietf-poly1305
- xchacha20-poly1305 или xchacha20-ietf-poly1305
- - none или plain
Новый формат протокола Shadowsocks 2022 повышает производительность и обеспечивает полную защиту от повторов, решая следующие проблемы безопасности старого протокола:
@@ -23,10 +22,6 @@
- Отсутствие защиты от повторов UDP
- Поведение TCP, которое можно использовать для активного зондирования
-::: danger
-При использовании метода шифрования "none" трафик передается в открытом виде. В целях безопасности не используйте этот метод в общедоступных сетях.
-:::
-
## OutboundConfigurationObject
`OutboundConfigurationObject` соответствует элементу `settings` в [`OutboundObject`](../outbound.md).
diff --git a/docs/ru/config/outbounds/trojan.md b/docs/ru/config/outbounds/trojan.md
index 7c590ce8..34e8e27d 100644
--- a/docs/ru/config/outbounds/trojan.md
+++ b/docs/ru/config/outbounds/trojan.md
@@ -2,10 +2,6 @@
Протокол [Trojan](https://trojan-gfw.github.io/trojan/protocol).
-::: danger
-Trojan предназначен для работы в правильно настроенном зашифрованном TLS-туннеле.
-:::
-
## OutboundConfigurationObject
`OutboundConfigurationObject` соответствует элементу `settings` в [`OutboundObject`](../outbound.md).
@@ -29,6 +25,10 @@ Trojan предназначен для работы в правильно нас
}
```
+::: warning
+Trojan должен использоваться с транспортной защитой [TLS](https://xtls.github.io/config/transports/tls.html); использовать `streamSettings.security: "none"` допустимо только тогда, когда адрес другой стороны является private-адресом (например, частным IP-адресом или частным доменным именем) и сам канал находится в доверенной сети. В публичных средах также требуется Mux; иначе, если внутренняя полезная нагрузка сама является TLS, это превращается в TiT и легко обнаруживается ([PoC](https://github.com/XTLS/Trojan-killer)).
+:::
+
> `address`: address
Адрес сервера, поддерживаются IPv4, IPv6 и доменные имена. Обязательный параметр.
diff --git a/docs/ru/config/outbounds/vless.md b/docs/ru/config/outbounds/vless.md
index 7bf6cf7c..6dfe2932 100644
--- a/docs/ru/config/outbounds/vless.md
+++ b/docs/ru/config/outbounds/vless.md
@@ -29,6 +29,10 @@ VLESS - это легкий транспортный протокол без с
}
```
+::: warning
+VLESS должен использоваться с внешним уровнем транспортной защиты; `streamSettings.security: "none"` допустимо только тогда, когда адрес другой стороны является private-адресом (например, частным IP-адресом или частным доменным именем) и сам канал находится в доверенной сети, либо при включенном `VLESS Encryption`.
+:::
+
> `address`: address
Адрес сервера, указывающий на сервер, поддерживаются доменные имена, IPv4 и IPv6.
diff --git a/docs/ru/config/outbounds/vmess.md b/docs/ru/config/outbounds/vmess.md
index 84bd798d..1b8cbea8 100644
--- a/docs/ru/config/outbounds/vmess.md
+++ b/docs/ru/config/outbounds/vmess.md
@@ -57,17 +57,13 @@ VMess полагается на системное время. Убедитес
Значение level соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.
-> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
+> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto"
Метод шифрования. Клиент будет отправлять данные с использованием настроенного метода шифрования, сервер автоматически распознает его, настройка на сервере не требуется.
- `"aes-128-gcm"`: Использовать алгоритм `AES-128-GCM`.
- `"chacha20-poly1305"`: Использовать алгоритм `Chacha20-Poly1305`.
- `"auto"`: Значение по умолчанию. Автоматический выбор (для архитектур `AMD64`, `ARM64` или `s390x` будет выбран метод шифрования `aes-128-gcm`, в остальных случаях — `Chacha20-Poly1305`).
-- `"none"`: Без шифрования, сохраняется структура сообщения `VMess`.
-- `"zero"`: Без шифрования, поток данных копируется напрямую (аналогично `VLESS`).
-
-Не рекомендуется использовать псевдошифрование `"none"` или `"zero"` без включенного `TLS` шифрования и принудительной проверки сертификата. Независимо от выбранного метода шифрования, заголовки пакетов `VMess` всегда защищены шифрованием и аутентификацией.
Обратите внимание, что `auto` определяет поддержку аппаратного ускорения `AES` только на стороне клиента. Если сервер не поддерживает аппаратное ускорение `AES`, необходимо вручную установить `"chacha20-poly1305"`. Это очень важно, поскольку `Chacha20-Poly1305` на платформах с поддержкой ускорения `AES` работает примерно на 48% медленнее, чем `AES-128-GCM`, однако на платформах без аппаратного ускорения `AES`, `AES-128-GCM` будет работать более чем на 2000% медленнее, чем `Chacha20-Poly1305`.
diff --git a/docs/ru/config/transport.md b/docs/ru/config/transport.md
index 2ccc9b68..c440d1b2 100644
--- a/docs/ru/config/transport.md
+++ b/docs/ru/config/transport.md
@@ -48,6 +48,8 @@
}
```
+### Способы передачи
+
> `network`: "raw" | "xhttp" | "mkcp" | "grpc" | "websocket" | "httpupgrade" | "hysteria"
Способ передачи, используемый потоком данных. Значение по умолчанию — `raw`.
@@ -80,7 +82,7 @@
Настройки Hysteria для потока данных. Действуют только когда `network` равно `hysteria`.
----
+### Безопасность транспорта
> `security`: "none" | "reality" | "tls"
@@ -108,7 +110,7 @@ REALITY сейчас является одной из самых сильных
Действуют только когда `security` равно `tls`.
Поддерживается использование вместе с транспортами `RAW`, `XHTTP`, `mKCP`, `gRPC`, `WebSocket`, `HTTPUpgrade` и `Hysteria`.
----
+### Дополнительные настройки
> `finalmask`: [FinalMaskObject](./transports/finalmask.md)
@@ -117,3 +119,58 @@ REALITY сейчас является одной из самых сильных
> `sockopt`: [SockoptObject](./transports/sockopt.md)
Настройки низкоуровневого сетевого поведения.
+
+## Краткая таблица совместимости транспорта
+
+Для входящих и исходящих подключений способ передачи и безопасность транспорта настраиваются через `streamSettings`. В реальной конфигурации прокси-протокол, способ передачи и безопасность транспорта должны быть совместимы друг с другом.
+
+### Входящие/исходящие протоколы и способы передачи
+
+Эта таблица соответствует сочетанию `protocol + streamSettings.network`.
+
+| | `raw` | `xhttp` | `grpc` | `websocket` | `httpupgrade` | `mkcp` | `hysteria` |
+| --------------------------------------------------------------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- |
+| `http` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
+| `socks` [1] | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно |
+| `shadowsocks` [1] | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно | Ограниченно |
+| `vmess` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
+| `vless` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
+| `trojan` | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
+| `hysteria` | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Поддерживается |
+| `wireguard` | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо | Неприменимо |
+
+[1] Если XUDP не включен для Socks или Shadowsocks, UDP-трафик использует собственный UDP-маршрут протокола и обходит настроенный способ передачи; на TCP-трафик это ограничение не распространяется. См. [XUDP](./outbound.md#muxobject).
+
+### Способы передачи и безопасность транспорта
+
+Эта таблица соответствует сочетанию `streamSettings.network + streamSettings.security`.
+
+| | `none` | `tls` | `reality` |
+| ------------- | ----------------- | -------------- | ----------------- |
+| `raw` | Поддерживается | Поддерживается | Поддерживается |
+| `xhttp` | Поддерживается | Поддерживается | Поддерживается |
+| `grpc` | Поддерживается | Поддерживается | Поддерживается |
+| `websocket` | Поддерживается | Поддерживается | Не поддерживается |
+| `httpupgrade` | Поддерживается | Поддерживается | Не поддерживается |
+| `mkcp` | Поддерживается | Поддерживается | Не поддерживается |
+| `hysteria` | Не поддерживается | Обязательно | Не поддерживается |
+
+### Входящие/исходящие протоколы и безопасность транспорта
+
+Эта таблица соответствует сочетанию `protocol + streamSettings.security`.
+
+| | `none` | `tls` | `reality` | Безопасность на уровне протокола |
+| ------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
+| `http` | Поддерживается | Поддерживается | Поддерживается | Нет |
+| `socks` | Поддерживается | Ограниченно [1] | Ограниченно [1] | Нет |
+| `shadowsocks` | Поддерживается | Ограниченно [1] | Ограниченно [1] | Шифрование и целостность полезной нагрузки [2] |
+| `vmess` | Поддерживается | Поддерживается | Поддерживается | Аутентификация рукопожатия и шифрование полезной нагрузки [2] |
+| `vless` | Ограниченно [3] | Поддерживается | Поддерживается | Опциональное Encryption [4] |
+| `trojan` | Ограниченно [3] | Поддерживается | Поддерживается | Только аутентификация |
+| `hysteria` | Не поддерживается | Обязательно | Не поддерживается | Нет (зависит от TLS) |
+| `wireguard` | Неприменимо | Неприменимо | Неприменимо | Зашифрованный туннель [2] |
+
+[1] Если XUDP не включен для Socks или Shadowsocks, UDP-трафик использует собственный UDP-маршрут протокола и обходит настроенный TLS или REALITY; на TCP-трафик это ограничение не распространяется. См. [XUDP](./outbound.md#muxobject).
+[2] Shadowsocks и VMess защищают полезную нагрузку, но не обеспечивают прямую секретность уровня TLS 1.3, а их трафик по-прежнему поддается классификации. Криптография WireGuard достаточно надежна, но характерный и неизменный UDP-профиль легко распознать и заблокировать. Ни один из этих трех протоколов не создает видимость обычного HTTPS-трафика, которую обеспечивают TLS/REALITY, поэтому они не подходят для прямого обхода блокировок.
+[3] Когда `streamSettings.security` имеет значение `none`, VLESS (без включенного Encryption) и Trojan могут подключаться только к адресам частной сети.
+[4] VLESS Encryption является опциональным и по умолчанию отключен (`encryption: "none"`). После включения он позволяет подключаться к публичным сетевым адресам, даже если `streamSettings.security` имеет значение `none`. Он защищает полезную нагрузку VLESS, но не создает видимость обычного HTTPS-трафика как TLS/REALITY, поэтому не подходит для прямого обхода блокировок.