From 092edc0f939e840b59023b97baf638cf3943b2c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Sun, 19 Oct 2025 05:51:32 +0000 Subject: [PATCH] VLESS: Add VLESS encryption --- docs/config/inbounds/vless.md | 25 +++++++++++++++++-------- docs/config/outbounds/vless.md | 23 ++++++++++++++++------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/docs/config/inbounds/vless.md b/docs/config/inbounds/vless.md index 22090515..d70cb6a1 100644 --- a/docs/config/inbounds/vless.md +++ b/docs/config/inbounds/vless.md @@ -1,9 +1,5 @@ # VLESS(XTLS Vision Seed) -::: danger -目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。 -::: - VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 Xray 客户端和服务器之间的桥梁。 与 [VMess](./vmess.md) 不同,VLESS 不依赖于系统时间,认证方式同样为 UUID。 @@ -38,11 +34,24 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部 > `decryption`: "none" -现阶段需要填 `"none"`,不能留空。 -若未正确设置 decryption 的值,使用 Xray 或 -test 时会收到错误信息。 +[VLESS 加密](https://github.com/XTLS/Xray-core/pull/5067)设置。不能留空,禁用需显式设置为 `"none"`. -注意这里是 decryption,和 clients 同级。 -decryption 和 vmess 协议的 encryption 的位置不同,是因为若套一层约定加密,服务端需要先解密才能知道是哪个用户。 +推荐大多数用户使用 ./xray vlessenc 自动生成该字段确保编写不会出错。下方详细配置仅推荐高级用户阅读。 + +其格式为一串字段由 `.` 连接的详细配置。 如 `mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U`. 本文档将用点分开的单独部分称之为一个块 + +- 第1个块为握手方式,目前有且仅有 `mlkem768x25519plus`. 要求服务端与客户端一致 +- 第2个块为加密方式,可选 `native`/`xorpub`/`random`, 分别对应: 原始格式数据包/原始格式+混淆公钥部分/全随机数(类似 VMESS/Shadows socks)。要求服务端与客户端一致 +- 第3个块为会话恢复票据有效时间。格式为 `600s` 或 `100-500s`. 前者将在该时长和该时长的一半之间随机一个时间(如 `600s`=`300-600s`),后者则手动指定随即范围 + +往后为 padding, 连接建立后服务端发送一些垃圾数据用以混淆长度特征,无需与客户端相同(出站的相同部分为客户端向服务端方向发送的 padding),属于可变长部分,格式为 `padding.delay.padding`+`(.delay.padding)`*n(可插入多个 padding, 要求两个 padding 块之间必须包含一个 delay 块) 比如可以写一个超长的 `padding.delay.padding.delay.padding.delay.padding.delay.padding.delay.padding` + +-`padding` 格式为 `probability-min-max` 如 `100-111-1111` 含义为 100% 发送一个长度 111~1111 的padding. +-`delay` 格式同样为 `probability-min-max` 如 `75-0-111` 含义为 75% 的概率等待 0~111 毫秒 + +第一个 padding 块存在特殊要求,要求概率为 100% 且最小长度大于 0. 若不存在任何 padding, 核心自动使用 `100-111-1111.75-0-111.50-0-3333` 作为 padding 设置。 + +最后一个块会被核心识别为认证客户端使用的参数,可用 `./xray x25519`(使用 PrivateKey 部分) 或 `./xray mlkem768`(使用 Seed 部分) 生成,要求与客户端对应。`mlkem768` 属于后量子算法,可以防止(未来)客户端参数泄露后被量子计算机破解出私钥并冒充服务端。该参数仅用于验证,握手过程无论如何都是后量子安全的,现有的加密数据无法被未来出现的量子计算机破解。 > `fallbacks`: \[ [FallbackObject](../features/fallback.md) \] diff --git a/docs/config/outbounds/vless.md b/docs/config/outbounds/vless.md index 5bcd17f8..55f15d74 100644 --- a/docs/config/outbounds/vless.md +++ b/docs/config/outbounds/vless.md @@ -1,9 +1,5 @@ # VLESS(XTLS Vision Seed) -::: danger -目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。 -::: - VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 Xray 客户端和服务器之间的桥梁。 与 [VMess](./vmess.md) 不同,VLESS 不依赖于系统时间,认证方式同样为 UUID。 @@ -89,11 +85,24 @@ VLESS 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是 > `encryption`: "none" -需要填 `"none"`,不能留空。 +[VLESS 加密](https://github.com/XTLS/Xray-core/pull/5067)设置。不能留空,禁用需显式设置为 `"none"`. -该要求是为了提醒使用者没有加密,也为了以后出加密方式时,防止使用者填错属性名或填错位置导致裸奔。 +推荐大多数用户使用 ./xray vlessenc 自动生成该字段确保编写不会出错。下方详细配置仅推荐高级用户阅读。 -若未正确设置 encryption 的值,使用 Xray 或 -test 时会收到错误信息。 +其格式为一串字段由 `.` 连接的详细配置。 如 `mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U`. 本文档将用点分开的单独部分称之为一个块 + +- 第1个块为握手方式,目前有且仅有 `mlkem768x25519plus`. 要求服务端与客户端一致 +- 第2个块为加密方式,可选 `native`/`xorpub`/`random`, 分别对应: 原始格式数据包/原始格式+混淆公钥部分/全随机数(类似 VMESS/Shadows socks)。要求服务端与客户端一致 +- 第3个块为是否会话恢复。选择 `0rtt` 将跟随服务端设置尝试使用先前生成的票据跳过握手快速连接(可被服务端手动禁用),选择 `1rtt` 将强制执行 1RTT 的握手过程。此处与服务端设置含义不同,详见 VLESS 入站 `decryption` 设置。 + +往后为 padding, 连接建立后客户端发送一些垃圾数据用以混淆长度特征,无需与服务端相同(入站的相同部分为服务端向客户端方向发送的 padding),属于可变长部分,格式为 `padding.delay.padding`+`(.delay.padding)`*n(可插入多个 padding, 要求两个 padding 块之间必须包含一个 delay 块) 比如可以写一个超长的 `padding.delay.padding.delay.padding.delay.padding.delay.padding.delay.padding` + +-`padding` 格式为 `probability-min-max` 如 `100-111-1111` 含义为 100% 发送一个长度 111~1111 的padding. +-`delay` 格式同样为 `probability-min-max` 如 `75-0-111` 含义为 75% 的概率等待 0~111 毫秒 + +第一个 padding 块存在特殊要求,要求概率为 100% 且最小长度大于 0. 若不存在任何 padding, 核心自动使用 `100-111-1111.75-0-111.50-0-3333` 作为 padding 设置。 + +最后一个块会被核心识别为认证服务端使用的参数,可用 `./xray x25519`(使用 Password 部分) 或 `./xray mlkem768`(使用 Client 部分) 生成,要求与服务端对应。`mlkem768` 属于后量子算法,可以防止(未来)客户端参数泄露后被量子计算机破解出私钥并冒充服务端。该参数仅用于验证,握手过程无论如何都是后量子安全的,现有的加密数据无法被未来出现的量子计算机破解。 > `flow`: string