mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-07 06:18:10 +03:00
Xray-core: Forbid unencrypted outbounds on public Internet for VLESS and Trojan; Remove "none/zero/plain" for VMess and Shadowsocks
This commit is contained in:
@@ -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` 项。
|
||||
|
||||
@@ -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) \]
|
||||
|
||||
一个数组,代表一组服务端认可的用户.
|
||||
|
||||
@@ -37,6 +37,10 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
|
||||
}
|
||||
```
|
||||
|
||||
::: warning
|
||||
VLESS 必须配合传输安全层使用;只有当对端是 private 地址(如私有 IP、私有域名)且链路处于受信网络中,或者已启用 `VLESS Encryption` 时,才允许使用 `streamSettings.security: "none"`。
|
||||
:::
|
||||
|
||||
> `users`: \[ [UserObject](#userobject) \]
|
||||
|
||||
一个数组,代表一组服务端认可的用户。
|
||||
|
||||
@@ -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` 项。
|
||||
|
||||
@@ -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 和域名。必填。
|
||||
|
||||
@@ -29,6 +29,10 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
|
||||
}
|
||||
```
|
||||
|
||||
::: warning
|
||||
VLESS 必须配合传输安全层使用;只有当对端是 private 地址(如私有 IP、私有域名)且链路处于受信网络中,或者已启用 `VLESS Encryption` 时,才允许使用 `streamSettings.security: "none"`。
|
||||
:::
|
||||
|
||||
> `address`: address
|
||||
|
||||
服务端地址,指向服务端,支持域名、IPv4、IPv6。
|
||||
|
||||
@@ -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% 以上。
|
||||
|
||||
|
||||
@@ -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` <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] Socks 和 Shadowsocks 未启用 [XUDP](./outbound.md#muxobject) 时,UDP 流量会改走协议原生的 UDP 路径,从而绕过已配置的传输方式;TCP 流量不受此限制。</small><br>
|
||||
|
||||
### 传输方式与传输安全
|
||||
|
||||
此表对应 `streamSettings.network + 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] Socks 和 Shadowsocks 未启用 [XUDP](./outbound.md#muxobject) 时,UDP 流量会改走协议原生的 UDP 路径,从而绕过已配置的 TLS 或 REALITY;TCP 流量不受此限制。</small><br>
|
||||
<small id="protocol-security-note-2">[2] Shadowsocks 和 VMess 能保护载荷,但缺少 TLS 1.3 式的前向保密,流量外观也可被分类。WireGuard 的密码学足够强,但固定的 UDP 特征容易被识别和封锁。三者都不具备 TLS/REALITY 提供的正常 HTTPS 外观,因此不适合直接用于过墙。</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 载荷,但不能提供 TLS/REALITY 的正常 HTTPS 外观,因此不适合直接用于过墙。</small>
|
||||
|
||||
Reference in New Issue
Block a user