Skip to content

VLESS — mihomo

mihomo поддерживает VLESS с обеих сторон. Исходящие прокси находятся в верхнеуровневом массиве proxies (по одному объекту на сервер). Входящие — в массиве listeners. Имена полей исходящих следуют соглашению тегов proxy:, входящих слушателей — соглашению inbound:.

Исходящий

Запись в proxies: с type: vless. Структура встраивает BasicOption (общие для всех исходящих поля: interface-name, routing-mark, ip-version, dialer-proxy, mptcp, …), описанный на странице «Прокси».

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(required)<string>Уникальное имя прокси, используемое в остальной части YAML (proxy-groups, rules).
serverstring(required)<host>Имя хоста или IP вышестоящего сервера.
portint(required)<port>Порт вышестоящего сервера.
uuidstring(required)<UUID>UUID пользователя, принимаемый сервером.
flowstring(empty) | xtls-rprx-visionАлгоритм flow. Пустое значение — обычный VLESS; `xtls-rprx-vision` включает Vision (требует TLS или REALITY).
tlsboolfalsetrue | falseОбернуть поток в TLS. Обязательно для `xtls-rprx-vision`.
alpn[]string[]h2 | http/1.1Список ALPN, предлагаемый во время TLS-рукопожатия.
udpboolfalsetrue | falseРазрешить ретрансляцию UDP-пакетов через этот исходящий.
packet-addrboolfalsetrue | falseИспользовать старую кодировку UDP packet-addr вместо xudp.
xudpboolfalsetrue | falseИспользовать кодировку xudp для UDP-пакетов (современный вариант по умолчанию). Взаимоисключимо с packet-addr.
packet-encodingstring(use udp/xudp flags)packetaddr | xudpЯвный селектор кодировки пакетов; при установке имеет приоритет над булевыми флагами.
encryptionstring(unset)none | mlkem768x25519plus.<...>Необязательный набор шифрования VLESS. `none` (или не задано) — классический режим.
networkstringtcptcp | ws | http | h2 | grpc | xhttpНижележащий транспорт. Когда значение отлично от tcp, требуется соответствующий блок `*-opts`.
ech-optsECHOptions(disabled)ECHOptionsКонфигурация Encrypted Client Hello; см. страницу ECH.
shadow-tls-optsShadowTLSOptions(disabled)ShadowTLSOptionsБлок маскировки Shadow-TLS (`{ password, version }`). На каждый прокси можно включить только один блок TLS-маскировки.
restls-optsRestlsOptions(disabled)RestlsOptionsБлок маскировки Restls (`{ password, version-hint, restls-script }`). На каждый прокси можно включить только один блок TLS-маскировки.
jls-optsJLSOptions(disabled)JLSOptionsБлок маскировки JLS (`{ username, password }`). На каждый прокси можно включить только один блок TLS-маскировки.
reality-optsRealityOptions(disabled)RealityOptionsКонфигурация REALITY. Требует `tls: true`.
http-optsHTTPOptions(unset)HTTPOptionsНастройки для `network: http` (маскировка под HTTP/1.1).
h2-optsHTTP2Options(unset)HTTP2OptionsНастройки для `network: h2`.
grpc-optsGrpcOptions(unset)GrpcOptionsНастройки для `network: grpc`.
ws-optsWSOptions(unset)WSOptionsНастройки для `network: ws`.
xhttp-optsXHTTPOptions(unset)XHTTPOptionsНастройки для `network: xhttp` (XTLS HTTP-фрейминг).
ws-headersmap[string]string(unset){<header>: <value>}Устаревшая карта заголовков для WS — предпочитайте поле `headers` внутри `ws-opts`.
skip-cert-verifyboolfalsetrue | falseОтключить проверку TLS-сертификата сервера. Только для тестирования.
name-cert-verifystring(unset)<hostname>Проверять сертификат сервера по этому имени хоста вместо SNI.
fingerprintstring(unset)<SHA256 hex>Закрепить TLS-сертификат сервера за этим отпечатком SHA-256.
certificatestring(unset)<PEM file path>Клиентский сертификат (mTLS).
private-keystring(unset)<key file path>Закрытый ключ, соответствующий `certificate`.
servernamestring(unset)<SNI>Переопределить TLS SNI, отправляемый при рукопожатии.
client-fingerprintstring(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>Принимаемые клиенты.
decryptionstring(unset)none | mlkem768x25519plus.<...>Режим шифрования, ожидаемый входящим. `none` или отсутствие значения — принимается обычный VLESS.
ws-pathstring(unset)/<path>Путь WebSocket, обслуживаемый входящим.
xhttp-configXHTTPConfig(unset)XHTTPConfigНастройки транспорта XHTTP; обязательны, когда клиенты подключаются по xhttp.
grpc-service-namestring(unset)<service name>Имя gRPC-сервиса, обслуживаемого входящим.
certificatestring(unset)<PEM file path>Серверный TLS-сертификат (или PEM прямо в конфигурации).
private-keystring(unset)<key file path>Закрытый TLS-ключ, соответствующий `certificate`.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certРежим аутентификации клиента mTLS.
client-auth-certstring(unset)<PEM file path>Набор CA, принимаемых как корневые для клиентов.
ech-keystring(unset)<ECH config>Конфигурационный материал Encrypted Client Hello.
allow-insecureboolfalsetrue | falseПропустить проверку клиентского TLS-сертификата на слушателе (только для тестирования).
shadow-tlsShadowTLS(disabled)ShadowTLSСерверный блок маскировки Shadow-TLS (`{ enable, version, password, users, handshake, ... }`).
res-tlsResTLS(disabled)ResTLSСерверный блок маскировки Restls (`{ enable, dest, password, ... }`); неаутентифицированные клиенты ретранслируются на `dest`.
jls-configJLSConfig(disabled)JLSConfigСерверный блок маскировки JLS (`{ enable, users, sni, dest, ... }`); неаутентифицированные клиенты ретранслируются на `dest`.
reality-configRealityConfig(disabled)RealityConfigСерверная конфигурация REALITY; см. страницу REALITY.
mux-optionMuxOption(disabled)MuxOptionНастройки мультиплексирования, общие с sing-style mux.

Исходный код: listener/inbound/vless.go:12-30 · зафиксировано на v1.19.29 (e26714a)

users[]

ПолеТипПо умолчаниюДопустимые значенияОписание
usernamestring(unset)<string>Отображаемое имя пользователя, используется в статистике и журналах.
uuidstring(required)<UUID>UUID пользователя.
flowstring(empty) | xtls-rprx-visionАлгоритм flow для конкретного пользователя.

Исходный код: listener/inbound/vless.go:32-36 · зафиксировано на v1.19.29 (e26714a)

Примеры

Исходящий — обычный VLESS поверх WebSocket с TLS:

yaml
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:

yaml
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:

yaml
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)

Core Tutorial от Argsment