Skip to content

VMess — sing-box

sing-box реализует обе стороны VMess. Он по-прежнему принимает устаревший режим MD5-AEAD на основе alter_id (полезно для совместимости со старыми клиентами) и добавляет два более новых переключателя — global_padding и authenticated_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.15 (3708fa1)

Структура встраивает ListenOptions (адрес прослушивания, порт, сниффинг, …) и InboundTLSOptionsContainer (материал TLS). Оба блока общие для всех входящих и описаны на страницах Входящие и TLS.

users[]

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(unset)<string>Отображаемое имя, используемое в статистике и журналах.
uuidstring(required)<UUID>UUID пользователя.
alterIdint00 | <int>Совместимость с устаревшим режимом MD5-AEAD. Оставьте 0 для современного режима «только AEAD»; ненулевое значение включает устаревший потоковый шифр MD5 и отклоняется некоторыми пирами.

Исходный код: option/vmess.go:11-15 · зафиксировано на v1.13.15 (3708fa1)

Исходящий

Исходящий type: "vmess":

ПолеТипПо умолчаниюДопустимые значенияОписание
uuidstring(required)<UUID>UUID пользователя, принимаемый вышестоящим сервером.
securitystringautoauto | none | zero | aes-128-gcm | chacha20-poly1305 | aes-128-ctrСимметричный шифр. `auto` выбирает AES-GCM на x86 с AES-NI и ChaCha20 в остальных случаях.
alter_idint00 | <int>Устаревший режим MD5-AEAD. Здесь имя в snake_case (Xray использует `alterId`).
global_paddingboolfalsetrue | falseДополнять все записи до одинаковой длины, чтобы затруднить фингерпринтинг по длинам. Должно совпадать с серверной стороной.
authenticated_lengthboolfalsetrue | falseИспользовать экспериментальное кадрирование с аутентифицированной длиной. Должно совпадать с серверной стороной.
networkNetworkList(tcp+udp)tcp | udp | Ограничить только TCP или только UDP. Пустое значение включает оба.
packet_encodingstring(unset)packetaddr | xudpКодирование UDP-пакетов, передаваемых через поток VMess.
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptionsКлиентское мультиплексирование (должно совпадать с сервером).
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsТранспортная обёртка в стиле V2Ray.

Исходный код: option/vmess.go:17-30 · зафиксировано на v1.13.15 (3708fa1)

Также встраивает DialerOptions, ServerOptions (server, server_port) и OutboundTLSOptionsContainer (tls).

Примеры

Входящий:

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_padding и authenticated_length — дополнения sing-box поверх исходной спецификации V2Ray. Их должны включить обе стороны; рассинхронизация приводит к молчаливому сбою соединения.
  • В отличие от Xray, sing-box не печатает предупреждение об устаревании при загрузке VMess — протокол считается стабильным.

Сравнение с другими ядрами

  • Xray полностью отбрасывает устаревший режим без AEAD: поля alterId нет, а рантайм печатает баннер об устаревании, подталкивающий пользователей к VLESS. См. VMess — Xray-core.
  • mihomo использует имя поля cipher (там, где Xray и sing-box используют security), сохраняет alterId (camelCase) и предоставляет те же переключатели global-padding / authenticated-length в kebab-case. См. VMess — mihomo.

Исходный код: option/vmess.go:3-30 · v1.13.15 (3708fa1)

Core Tutorial от Argsment