Skip to content

VLESS — Xray-core

VLESS 是 Xray 的无状态旗舰协议。协议本身没有对称加密层,机密性与完整 性由外层 TLS / REALITY 提供。握手会携带用户的 UUID 与一小段 "addons" 块(其中最重要的是 flow 算法)。

入站

"protocol": "vless" 入站的 settings

字段类型默认值允许值描述
users[]json.RawMessage<user object array> | …入站账户列表;对象形状与 `clients` 相同。`users` 是近期 Xray 引入的较新名称,与 `clients` 一并接受。
clients[]json.RawMessage(required)<user object array>可接受的用户列表。每个条目至少携带 `id`(UUID),可选 `email`、`level`、`flow`、`testseed`、`reverse`。入站 client 上设置 `encryption` 会被拒绝。
decryptionstring(required)none | mlkem768x25519plus.<mode>.<seconds>.<keys>必须显式设置。`none` 是经典的 VLESS 无加密模式;以 mlkem 开头的字符串启用新的后量子加密 —— 格式见下文「说明」。
fallbacks[]*VLessInboundFallback[]<VLessInboundFallback array>TLS-with-VLESS 握手不像 VLESS(例如杂入的 HTTPS 请求)时使用的备用目标。与非 `none` 的 `decryption` 互斥。
flowstring(empty) | xtls-rprx-vision未自行指定 flow 的客户端使用的默认 flow。`xtls-rprx-vision` 启用 XTLS Vision;空值表示不启用 flow。
testseed[]uint32[]<uint32 array>供加密套件确定性测试模式使用的种子值,几乎总是省略。

源码: infra/conf/vless.go:33-40 · 锚定版本 v26.6.1 (94ffd50)

clients[] —— 用户对象

用户对象会被 JSON 解码到 protobuf 背后的 vless.Account 结构体。 常用字段如下:

字段类型默认值允许值描述
idstring (UUID)必填<UUID>客户端 UUID。规范 8-4-4-4-12 形式或去掉横线的 hex。
emailstring""<string>统计 / 日志输出中使用的标签。
leveluint320<level>policy.levels 中查找。
flowstring继承 flow""xtls-rprx-vision单用户的 flow 覆盖。
testseed[]uint32继承单用户的测试种子覆盖。
encryptionstring禁止入站 client 上 不允许 设置。
reverse{tag,sniffing?}(未设置)VLessReverseConfig把该用户绑定到反向代理标签。入站 reverse 块内不允许 sniffing

fallbacks[]

字段类型默认值允许值描述
namestring(unset)<TLS server name>匹配传入的 TLS SNI;空值匹配任意。
alpnstring(unset)h2 | http/1.1 | 匹配协商出的 ALPN;空值匹配任意。
pathstring(unset)/<path>代理时使用的 HTTP 路径前缀。非空时必须以 `/` 开头。
typestring(auto)tcp | unix | serve后端协议。省略时由 `dest` 推断:数字端口或 host:port → tcp;绝对路径或 @ 开头 → unix;`serve-ws-none` → serve。
destjson.RawMessage(required)<host:port> | <port> | <unix path>握手转发的目的地。纯整数会被当作 localhost 上的端口。
xveruint6400 | 1 | 2转发连接前置的 PROXY 协议版本,0 关闭。

源码: infra/conf/vless.go:24-31 · 锚定版本 v26.6.1 (94ffd50)

当传入连接的 首个字节 不像 VLESS 时,会按声明顺序在 fallback 链上 匹配。字段顺序很重要:匹配按 (name, alpn, path) 三元组进行,命中第 一条即停。dest 的解析参见 infra/conf/vless.go:149-200

出站

"protocol": "vless" 出站的 settings

字段类型默认值允许值描述
address*Address(unset)<host>简化形式 —— 服务器主机名或 IP。设置后内部自动构造 `vnext`,顶层 `id`、`flow` 等会被直接读取。
portuint16(required with address)<port>服务器端口(简化形式)。
leveluint320<uint32>用户等级(简化形式)—— 用于查找策略表。
emailstring(unset)<string>统计中显示的用户标识。
idstring(required with address)<UUID>用户 UUID(简化形式)。规范形式与去横线 hex 都接受。
flowstring(empty) | xtls-rprx-vision | xtls-rprx-vision-udp443flow 算法。
seedstring(unset)<string>加密种子(保留字段)。当前会被解析但不生效 —— 为前向兼容预留。
encryptionstring(required)none | mlkem768x25519plus.<mode>.<rtt>.<keys>必须设为 `none` 或 mlkem 加密字符串。其他取值都会被拒绝。
reverse*VLessReverseConfig(unset)VLessReverseConfig可选:把出站绑定到反向代理标签。
testpreuint320<uint32>确定性测试模式的预测试计数。
testseed[]uint32[]<uint32 array>确定性测试模式的种子值。
vnext[]*VLessOutboundVnext(use simplified shape)[{address,port,users:[user]}]完整形式 —— 必须 **恰好** 一个服务器 **一** 个用户。多端点请使用多个出站加路由负载均衡器。

源码: infra/conf/vless.go:245-258 · 锚定版本 v26.6.1 (94ffd50)

简化形式 vs. vnext

出站接受 要么 简化的顶层形式(addressportidflow ……),要么 完整的 vnext 形式 —— 二者不能同时存在。简化形式 在内部会被改写成单条 vnext 数组(infra/conf/vless.go:251-259)。 完整形式必须 恰好 包含 个服务器 个用户;多端点 场景请使用多个 VLESS 出站配合路由负载均衡器。

示例

最小入站,单用户启用 XTLS Vision:

json
{
  "inbounds": [
    {
      "tag": "vless-in",
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          { "id": "a3482e88-686a-4a58-8126-99c9df64b7bf", "flow": "xtls-rprx-vision" }
        ],
        "decryption": "none"
      },
      "streamSettings": { "network": "tcp", "security": "tls" }
    }
  ]
}

简化出站:

json
{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "address": "example.com",
        "port": 443,
        "id": "a3482e88-686a-4a58-8126-99c9df64b7bf",
        "flow": "xtls-rprx-vision",
        "encryption": "none"
      },
      "streamSettings": { "network": "tcp", "security": "reality", "realitySettings": { /* ... */ } }
    }
  ]
}

说明

  • decryptionencryption 必填。缺失会产生错误 please add/set "decryption":"none" to every settingsinfra/conf/vless.go:140)或对应的出站错误。
  • 基于 mlkem 的加密字符串由 Build 中的内联闭包解析(入站 infra/conf/vless.go:95-137,出站 321-357)。格式: mlkem768x25519plus.<mode>.<seconds-or-rtt>.<keys-and-padding>, 其中 mode 取 native / xorpub / random;seconds 形如 <from><from>-<to>(入站)或 1rtt / 0rtt(出站);keys 为 base64-url-safe 的 32 字节或 1184 字节值,短字符串用作 padding。
  • 当前源码接受的 flow 值仅有 xtls-rprx-vision,出站额外接受 -udp443 后缀。
  • fallbacks 不能与非 nonedecryption 并存 (infra/conf/vless.go:145-147)。
  • fallbacks[].xver > 2 会被拒绝。只接受 PROXY 协议 v0 / v1 / v2。

跨内核说明

  • sing-box 使用 users[].uuid 替代 Xray 的 clients[].id,并用 users[].name 替代 email。参见 VLESS — sing-box
  • mihomo 的 YAML 只有单一出站形式(不存在入站 / 出站不对称); 用户 UUID 存放在 proxy 对象本身,而不是 clients 数组里。参见 VLESS — mihomo

源码: infra/conf/vless.go:24-258 · v26.6.1 (94ffd50)

由 Argsment 出品的 Core Tutorial