VMess — Xray-core
VMess — классический протокол V2Ray, работающий только с AEAD. Xray-core поддерживает только AEAD-вариант — режим MD5-AEAD на основе alterId не поддерживается. При запуске среда выполнения выводит уведомление об устаревании с рекомендацией шифрования VLESS (infra/conf/vmess.go:65, 124).
Входящий
settings для входящего с "protocol": "vmess":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []json.RawMessage | — | <user object array> | … | Список учётных записей входящего; та же форма объекта, что и у clients. Принимается любой из двух ключей. |
clients | []json.RawMessage | (required) | <user object array> | Список принимаемых пользователей. Каждая запись содержит поля учётной записи VMess (id, security, experiments) плюс общие пользовательские поля (email, level). |
default | *VMessDefaultConfig | (unset) | VMessDefaultConfig | Резервные настройки пользователя, применяемые, когда входящее соединение не совпало ни с одним настроенным клиентом. Сегодня существует только поле level. |
Исходный код: infra/conf/vmess.go:57-61 · зафиксировано на v26.9.9 (52a412d)
default
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
level | byte | 0 | <byte> | Уровень политики, применяемый к резервным пользователям. |
Исходный код: infra/conf/vmess.go:46-48 · зафиксировано на v26.9.9 (52a412d)
clients[] — объект пользователя
Каждая запись clients[] — это VMessAccount плюс общие пользовательские поля (email, level):
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
id | string | (required) | <UUID> | UUID пользователя. Каноническая форма 8-4-4-4-12 или hex без дефисов. При загрузке разбирается и приводится к канонической форме. |
security | string | auto | auto | aes-128-gcm | chacha20-poly1305 | Симметричный шифр полезной нагрузки VMess. auto выбирает AES-GCM на x86 с AES-NI и ChaCha20 в остальных случаях. Нераспознанные значения молча откатываются к auto. |
experiments | string | (unset) | <string> | Разделённые запятыми флаги экспериментов, передаваемые в протокол. В protobuf передаются как TestsEnabled. |
Исходный код: infra/conf/vmess.go:18-22 · зафиксировано на v26.9.9 (52a412d)
Исходящий
settings для исходящего с "protocol": "vmess":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (unset) | <host> | Упрощённая форма — имя хоста или IP сервера. Если задано, vnext строится внутренне. |
port | uint16 | (required with address) | <port> | Порт сервера (упрощённая форма). |
level | uint32 | 0 | <uint32> | Уровень пользователя (упрощённая форма). |
email | string | (unset) | <string> | Идентификатор пользователя, отображаемый в статистике. |
id | string | (required with address) | <UUID> | UUID пользователя (упрощённая форма). |
security | string | auto | auto | aes-128-gcm | chacha20-poly1305 | Тот же набор шифров, что и у клиентов входящего. |
experiments | string | (unset) | <string> | Флаги экспериментов, передаваемые серверу. |
vnext | []*VMessOutboundTarget | (use simplified shape) | [{address,port,users:[user]}] | Полная форма — должна содержать ровно один сервер с ровно одним пользователем. |
Исходный код: infra/conf/vmess.go:111-120 · зафиксировано на v26.9.9 (52a412d)
Упрощённая форма vs. vnext
Исходящий принимает либо упрощённую форму (address, port, id, security, ...), либо полную форму vnext. Упрощённая форма переписывается в массив vnext из одного элемента (infra/conf/vmess.go:127-135). Полная форма должна содержать ровно один сервер с ровно одним пользователем — для нескольких конечных точек используйте несколько исходящих VMess и балансировщик маршрутизации.
Примеры
Минимальный входящий:
{
"inbounds": [
{
"tag": "vmess-in",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vmess",
"settings": {
"clients": [
{ "id": "a3482e88-686a-4a58-8126-99c9df64b7bf", "email": "alice", "security": "auto" }
]
},
"streamSettings": { "network": "tcp", "security": "tls" }
}
]
}Упрощённый исходящий:
{
"outbounds": [
{
"tag": "vmess-out",
"protocol": "vmess",
"settings": {
"address": "example.com",
"port": 443,
"id": "a3482e88-686a-4a58-8126-99c9df64b7bf",
"security": "auto"
},
"streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "path": "/vm" } }
}
]
}Примечания
- VMess в Xray — только AEAD. В структуре конфигурации нет поля
alterId; уберите"alterId": <n>из конфигураций, написанных для V2Ray, — режим MD5-AEAD отклоняется в любом случае. security: "auto"— безопасное умолчание: AES-GCM на платформах с AES-NI, иначе ChaCha20-Poly1305. Неизвестные строкиsecurityмолча откатываются кauto(infra/conf/vmess.go:34-35).noneиzeroне являются распознаваемыми значениями безопасности — конфигурации с ними молча получаютauto.- Уведомление об устаревании («VMess (with no Forward Secrecy, etc.)») печатается при каждой загрузке входящего или исходящего VMess (
infra/conf/vmess.go:65, 124). Рекомендуемая замена — VLESS с новым шифрованиемmlkem768x25519plus.
Сравнение с другими ядрами
- sing-box использует
users[].uuidвместоclients[].idи предоставляет опцииalter_id(snake_case),global_paddingиauthenticated_length, которых в Xray нет. См. VMess — sing-box. - mihomo имеет единую форму объекта прокси, использует имя поля
cipherдля выбора шифра и выносит на исходящий переключатели кодирования UDP (xudp,packet-addr,packet-encoding). См. VMess — mihomo.
Исходный код: infra/conf/vmess.go:18-120 · v26.9.9 (52a412d)
