VLESS — mihomo
mihomo поддерживает VLESS с обеих сторон. Исходящие прокси находятся в верхнеуровневом массиве proxies (по одному объекту на сервер). Входящие — в массиве listeners. Имена полей исходящих следуют соглашению тегов proxy:, входящих слушателей — соглашению inbound:.
Исходящий
Запись в proxies: с type: vless. Структура встраивает BasicOption (общие для всех исходящих поля: interface-name, routing-mark, ip-version, dialer-proxy, mptcp, …), описанный на странице «Прокси».
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (required) | <string> | Уникальное имя прокси, используемое в остальной части YAML (proxy-groups, rules). |
server | string | (required) | <host> | Имя хоста или IP вышестоящего сервера. |
port | int | (required) | <port> | Порт вышестоящего сервера. |
uuid | string | (required) | <UUID> | UUID пользователя, принимаемый сервером. |
flow | string | (empty) | | xtls-rprx-vision | Алгоритм flow. Пустое значение — обычный VLESS; `xtls-rprx-vision` включает Vision (требует TLS или REALITY). |
tls | bool | false | true | false | Обернуть поток в TLS. Обязательно для `xtls-rprx-vision`. |
alpn | []string | [] | h2 | http/1.1 | Список ALPN, предлагаемый во время TLS-рукопожатия. |
udp | bool | false | true | false | Разрешить ретрансляцию UDP-пакетов через этот исходящий. |
packet-addr | bool | false | true | false | Использовать старую кодировку UDP packet-addr вместо xudp. |
xudp | bool | false | true | false | Использовать кодировку xudp для UDP-пакетов (современный вариант по умолчанию). Взаимоисключимо с packet-addr. |
packet-encoding | string | (use udp/xudp flags) | packetaddr | xudp | Явный селектор кодировки пакетов; при установке имеет приоритет над булевыми флагами. |
encryption | string | (unset) | none | mlkem768x25519plus.<...> | Необязательный набор шифрования VLESS. `none` (или не задано) — классический режим. |
network | string | tcp | tcp | ws | http | h2 | grpc | xhttp | Нижележащий транспорт. Когда значение отлично от tcp, требуется соответствующий блок `*-opts`. |
ech-opts | ECHOptions | (disabled) | ECHOptions | Конфигурация Encrypted Client Hello; см. страницу ECH. |
shadow-tls-opts | ShadowTLSOptions | (disabled) | ShadowTLSOptions | Блок маскировки Shadow-TLS (`{ password, version }`). На каждый прокси можно включить только один блок TLS-маскировки. |
restls-opts | RestlsOptions | (disabled) | RestlsOptions | Блок маскировки Restls (`{ password, version-hint, restls-script }`). На каждый прокси можно включить только один блок TLS-маскировки. |
jls-opts | JLSOptions | (disabled) | JLSOptions | Блок маскировки JLS (`{ username, password }`). На каждый прокси можно включить только один блок TLS-маскировки. |
reality-opts | RealityOptions | (disabled) | RealityOptions | Конфигурация REALITY. Требует `tls: true`. |
http-opts | HTTPOptions | (unset) | HTTPOptions | Настройки для `network: http` (маскировка под HTTP/1.1). |
h2-opts | HTTP2Options | (unset) | HTTP2Options | Настройки для `network: h2`. |
grpc-opts | GrpcOptions | (unset) | GrpcOptions | Настройки для `network: grpc`. |
ws-opts | WSOptions | (unset) | WSOptions | Настройки для `network: ws`. |
xhttp-opts | XHTTPOptions | (unset) | XHTTPOptions | Настройки для `network: xhttp` (XTLS HTTP-фрейминг). |
ws-headers | map[string]string | (unset) | {<header>: <value>} | Устаревшая карта заголовков для WS — предпочитайте поле `headers` внутри `ws-opts`. |
skip-cert-verify | bool | false | true | false | Отключить проверку TLS-сертификата сервера. Только для тестирования. |
name-cert-verify | string | (unset) | <hostname> | Проверять сертификат сервера по этому имени хоста вместо SNI. |
fingerprint | string | (unset) | <SHA256 hex> | Закрепить TLS-сертификат сервера за этим отпечатком SHA-256. |
certificate | string | (unset) | <PEM file path> | Клиентский сертификат (mTLS). |
private-key | string | (unset) | <key file path> | Закрытый ключ, соответствующий `certificate`. |
servername | string | (unset) | <SNI> | Переопределить TLS SNI, отправляемый при рукопожатии. |
client-fingerprint | string | (global) | chrome | firefox | safari | ios | edge | random | randomized | Отпечаток client-hello uTLS. Откатывается к `global-client-fingerprint`. |
Исходный код: adapter/outbound/vless.go:57-90 · зафиксировано на v1.19.29 (e26714a)
Входящий
Запись в listeners: с type: vless. Встраивает BaseOption (общие поля слушателя: listen, port).
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []VlessUser | (required) | <VlessUser array> | Принимаемые клиенты. |
decryption | string | (unset) | none | mlkem768x25519plus.<...> | Режим шифрования, ожидаемый входящим. `none` или отсутствие значения — принимается обычный VLESS. |
ws-path | string | (unset) | /<path> | Путь WebSocket, обслуживаемый входящим. |
xhttp-config | XHTTPConfig | (unset) | XHTTPConfig | Настройки транспорта XHTTP; обязательны, когда клиенты подключаются по xhttp. |
grpc-service-name | string | (unset) | <service name> | Имя gRPC-сервиса, обслуживаемого входящим. |
certificate | string | (unset) | <PEM file path> | Серверный TLS-сертификат (или PEM прямо в конфигурации). |
private-key | string | (unset) | <key file path> | Закрытый TLS-ключ, соответствующий `certificate`. |
client-auth-type | string | (none) | no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-cert | Режим аутентификации клиента mTLS. |
client-auth-cert | string | (unset) | <PEM file path> | Набор CA, принимаемых как корневые для клиентов. |
ech-key | string | (unset) | <ECH config> | Конфигурационный материал Encrypted Client Hello. |
allow-insecure | bool | false | true | false | Пропустить проверку клиентского TLS-сертификата на слушателе (только для тестирования). |
shadow-tls | ShadowTLS | (disabled) | ShadowTLS | Серверный блок маскировки Shadow-TLS (`{ enable, version, password, users, handshake, ... }`). |
res-tls | ResTLS | (disabled) | ResTLS | Серверный блок маскировки Restls (`{ enable, dest, password, ... }`); неаутентифицированные клиенты ретранслируются на `dest`. |
jls-config | JLSConfig | (disabled) | JLSConfig | Серверный блок маскировки JLS (`{ enable, users, sni, dest, ... }`); неаутентифицированные клиенты ретранслируются на `dest`. |
reality-config | RealityConfig | (disabled) | RealityConfig | Серверная конфигурация REALITY; см. страницу REALITY. |
mux-option | MuxOption | (disabled) | MuxOption | Настройки мультиплексирования, общие с sing-style mux. |
Исходный код: listener/inbound/vless.go:12-30 · зафиксировано на v1.19.29 (e26714a)
users[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
username | string | (unset) | <string> | Отображаемое имя пользователя, используется в статистике и журналах. |
uuid | string | (required) | <UUID> | UUID пользователя. |
flow | string | (empty) | | xtls-rprx-vision | Алгоритм flow для конкретного пользователя. |
Исходный код: listener/inbound/vless.go:32-36 · зафиксировано на v1.19.29 (e26714a)
Примеры
Исходящий — обычный VLESS поверх WebSocket с TLS:
proxies:
- name: vless-ws
type: vless
server: example.com
port: 443
uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
network: ws
tls: true
udp: true
servername: example.com
ws-opts:
path: /vl
headers:
Host: example.comИсходящий — REALITY + XTLS Vision:
proxies:
- name: vless-reality
type: vless
server: example.com
port: 443
uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
flow: xtls-rprx-vision
tls: true
udp: true
xudp: true
servername: www.cloudflare.com
client-fingerprint: chrome
reality-opts:
public-key: <reality public key>
short-id: <short id>Входящий в listeners:
listeners:
- name: vless-in
type: vless
listen: 0.0.0.0
port: 443
users:
- username: alice
uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
flow: xtls-rprx-vision
certificate: /etc/mihomo/server.crt
private-key: /etc/mihomo/server.key
reality-config:
enable: true
dest: www.cloudflare.com:443
short-id: ['', <short id>]Примечания
- mihomo принимает два механизма выбора кодировки UDP на исходящем: устаревшие булевы
udp,packet-addr,xudpи современный селекторpacket-encoding: xudp|packetaddr. Когда селектор задан, булевы флаги игнорируются. client-fingerprint— специфичная для mihomo настройка: переопределение uTLS-отпечатка на уровне отдельного прокси. То же значение можно задать глобально черезglobal-client-fingerprint.mux-optionвходящего — это мультиплексирование в стиле sing, совместимое с multiplex-клиентами sing-box; это не тот же сетевой формат, что у mux в Xray.reality-configна входящем принимает серверный набор REALITY (закрытый ключ, цель dest, список short-id). Парный исходящий на другом конце используетreality-optsс публичной половиной ключа.shadow-tls-opts,restls-opts,jls-optsиreality-opts— взаимоисключающие режимы TLS-маскировки: включайте не более одного. Входящие аналогиshadow-tls,res-tlsиjls-configтакже взаимоисключающи.
Сравнение с другими ядрами
- Xray хранит пользователей входящего в
clients[]сid(UUID), поддерживает более богатую цепочкуfallbacksи управляет шифрованием через поляdecryption/encryption, которые обязаны быть заданы. См. VLESS — Xray-core. - sing-box хранит пользователей входящего в
users[]сuuidи использует встроенные блокиtls/transport/multiplex, общие для всех типов входящих. См. VLESS — sing-box. - mihomo помещает транспорт, TLS, REALITY, ECH и выбор кодировки UDP прямо в объект прокси — отдельного блока
streamSettings/tls/transportнет.
Исходный код: adapter/outbound/vless.go:57-90 · v1.19.29 (e26714a)
