Skip to content

VMess — sing-box

sing-box 同时实现 VMess 两端。它仍接受基于 alter_id 的旧 MD5-AEAD 模式(兼容旧客户端有用),并新增了两个需要两端一致的开关 —— global_paddingauthenticated_length

入站

type: "vmess" 入站:

字段类型默认值允许值描述
users[]VMessUser[]<VMessUser array>可接受的用户列表。
multiplex*InboundMultiplexOptions(disabled)InboundMultiplexOptions服务端多路复用(smux / yamux / h2mux)。
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptions可选的 V2Ray 风格传输层包装(ws、http、grpc、quic、hysteria)。

源码: option/vmess.go:3-9 · 锚定版本 v1.13.11 (553cfa1)

该结构体内嵌 ListenOptions(监听地址、端口、嗅探等)与 InboundTLSOptionsContainer(TLS 凭据)。两者为所有入站共享,分别 见入站页与 TLS 页。

users[]

字段类型默认值允许值描述
namestring(unset)<string>统计与日志中使用的显示名。
uuidstring(required)<UUID>用户 UUID。
alterIdint00 | <int>旧式 MD5-AEAD 兼容。现代仅 AEAD 模式保持 0;非零值会启用已弃用的 MD5 流式加密,部分对端会拒绝。

源码: option/vmess.go:11-15 · 锚定版本 v1.13.11 (553cfa1)

出站

type: "vmess" 出站:

字段类型默认值允许值描述
uuidstring(required)<UUID>上游服务器接受的用户 UUID。
securitystringautoauto | none | zero | aes-128-gcm | chacha20-poly1305 | aes-128-ctr对称加密。`auto` 在带 AES-NI 的 x86 上选 AES-GCM,其他平台选 ChaCha20。
alter_idint00 | <int>旧式 MD5-AEAD 模式。这里使用 snake_case(Xray 用 `alterId`)。
global_paddingboolfalsetrue | false把所有写入填充到统一长度,阻碍基于长度的指纹识别。两端必须一致。
authenticated_lengthboolfalsetrue | false使用实验性的 authenticated-length 帧。两端必须一致。
networkNetworkList(tcp+udp)tcp | udp | 限定为仅 TCP 或仅 UDP。空值同时启用两者。
packet_encodingstring(unset)packetaddr | xudpVMess 流中承载 UDP 包的编码方式。
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptions客户端多路复用(必须与服务端一致)。
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsV2Ray 风格传输层包装。

源码: option/vmess.go:17-30 · 锚定版本 v1.13.11 (553cfa1)

同时内嵌 DialerOptionsServerOptionsserverserver_port) 与 OutboundTLSOptionsContainertls)。

示例

入站:

json
{
  "inbounds": [
    {
      "type": "vmess",
      "tag": "vmess-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        { "name": "alice", "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf", "alterId": 0 }
      ],
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      }
    }
  ]
}

走 WebSocket + TLS 的出站:

json
{
  "outbounds": [
    {
      "type": "vmess",
      "tag": "proxy",
      "server": "example.com",
      "server_port": 443,
      "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf",
      "security": "auto",
      "alter_id": 0,
      "global_padding": true,
      "authenticated_length": true,
      "packet_encoding": "xudp",
      "tls": { "enabled": true, "server_name": "example.com" },
      "transport": { "type": "ws", "path": "/vm" }
    }
  ]
}

说明

  • 入站用户键为 alterId(camelCase),出站选项为 alter_id (snake_case)—— 这是上游配置历史遗留的怪异之处。两者都默认 为 0,非零值都会启用旧的 MD5 模式。
  • global_paddingauthenticated_length 是 sing-box 在原始 V2Ray 规范上的新增项。两端 必须同时启用;混用会导致连接静默 失败。
  • 不同于 Xray,sing-box 在加载 VMess 时不会打印弃用警告 —— 它把 该协议视为稳定。

跨内核说明

  • Xray 完全去掉了无 AEAD 的旧模式;没有 alterId 字段,运行时 会打印推荐改用 VLESS 的弃用横幅。参见 VMess — Xray-core
  • mihomo 使用 cipher 替代 security(Xray 与 sing-box 都用 security),保留 alterId(camelCase),并以 kebab-case 暴露 相同的 global-padding / authenticated-length 开关。参见 VMess — mihomo

源码: option/vmess.go:3-30 · v1.13.11 (553cfa1)

由 Argsment 出品的 Core Tutorial