Транспорт — mihomo
mihomo распределяет параметры транспорта по блокам *-opts на каждой записи прокси. Консолидированной структуры транспорта нет: транспорт выбирается полем network прокси, и читается соответствующий блок параметров.
Селектор network
У каждого mihomo-прокси с поддержкой TLS есть поле network:. Значения:
| Значение | Смысл |
|---|---|
tcp (по умолчанию) | Чистый TCP; все блоки *-opts игнорируются. |
ws | WebSocket — читается ws-opts. |
http | Простая HTTP-маскировка (без upgrade) — читается http-opts. |
h2 | HTTP/2 — читается h2-opts. |
grpc | gRPC поверх HTTP/2 — читается grpc-opts. |
xhttp | HTTP-кадрирование XTLS (совместимо с Xray) — читается xhttp-opts. |
У ряда протоколов есть особенности (например, Trojan поддерживает только ws и grpc; VMess добавляет http и h2). Матрица документируется на странице каждого протокола.
ws-opts
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
path | string | / | /<path> | Путь WebSocket. Поддерживается query-параметр ранних данных `?ed=N`, совпадающий с конвенцией Xray. |
headers | map[string]string | {} | {<header>: <value>} | Дополнительные HTTP-заголовки в запросе upgrade. |
max-early-data | int | 0 | <bytes> | Максимум байтов ранних данных 0-RTT, буферизуемых до завершения WS-рукопожатия. |
early-data-header-name | string | (unset) | <header name> | Заголовок для передачи ранних данных в base64, когда сервер ожидает их под нестандартным именем. |
v2ray-http-upgrade | bool | false | true | false | Использовать транспорт V2Ray HTTP-upgrade вместо настоящего WebSocket — экономит накладные расходы на кадрирование после рукопожатия. |
v2ray-http-upgrade-fast-open | bool | false | true | false | Отправлять полезную нагрузку клиента вместе с самим запросом HTTP-upgrade, экономя один RTT. |
Исходный код: adapter/outbound/vmess.go:165-172 · зафиксировано на v1.19.29 (e26714a)
http-opts — HTTP-маскировка
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
method | string | GET | <HTTP method> | HTTP-метод, используемый маскирующим транспортом. |
path | []string | [/] | [/<path>] | Список путей для ротации. Клиент выбирает один на каждый запрос. |
headers | map[string][]string | {} | {<header>: [<value>]} | Отображение имени заголовка в список значений. Клиент выбирает одно значение на каждый запрос. |
Исходный код: adapter/outbound/vmess.go:145-149 · зафиксировано на v1.19.29 (e26714a)
h2-opts — HTTP/2
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
host | []string | [] | [<hostname>] | Список значений заголовка Host. Клиент случайно выбирает одно на каждый запрос. |
path | string | / | /<path> | HTTP-путь. |
Исходный код: adapter/outbound/vmess.go:151-154 · зафиксировано на v1.19.29 (e26714a)
grpc-opts
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
grpc-service-name | string | (required) | <service name> | Путь имени сервиса gRPC. |
grpc-user-agent | string | (unset) | <UA string> | Переопределить User-Agent gRPC-клиента. |
ping-interval | int | 0 | <seconds> | Интервал PING-кадров HTTP/2. 0 отключает. |
max-connections | int | 0 | <int> | Максимум одновременных gRPC-каналов (веер мультиплексирования). |
min-streams | int | 0 | <int> | Минимум потоков на канал, прежде чем выделяется новый канал. |
max-streams | int | 0 | <int> | Максимум потоков на канал. |
Исходный код: adapter/outbound/vmess.go:156-163 · зафиксировано на v1.19.29 (e26714a)
xhttp-opts
Блок XHTTP несёт 23 поля, совпадающих со SplitHTTP в Xray. Чаще всего используются path, host, mode, а также поля x-padding-* и поля сессий для шейпинга трафика. Настройки переиспользования лежат во вложенном подблоке reuse-settings; асимметричная конфигурация загрузки — в download-settings. Полная структура — на странице VLESS — mihomo (она общая для VLESS и остальных прокси с поддержкой XHTTP).
Примеры
WebSocket — типичная форма для VMess:
proxies:
- name: vmess-ws
type: vmess
server: example.com
port: 443
uuid: <UUID>
cipher: auto
network: ws
tls: true
servername: example.com
ws-opts:
path: /vm
headers:
Host: example.com
max-early-data: 2048
early-data-header-name: Sec-WebSocket-ProtocolgRPC + REALITY (VLESS):
proxies:
- name: vless-grpc-reality
type: vless
server: example.com
port: 443
uuid: <UUID>
flow: xtls-rprx-vision
tls: true
servername: www.cloudflare.com
client-fingerprint: chrome
network: grpc
reality-opts:
public-key: <base64>
short-id: <hex>
grpc-opts:
grpc-service-name: GunServiceV2Ray HTTP-upgrade (альтернатива WS, меньше нагрузка на CPU):
proxies:
- name: vmess-httpupgrade
type: vmess
server: example.com
port: 443
uuid: <UUID>
cipher: auto
network: ws
tls: true
servername: example.com
ws-opts:
path: /up
v2ray-http-upgrade: true
v2ray-http-upgrade-fast-open: trueПримечания
network: wsв mihomo покрывает и стандартный WebSocket, и транспорт HTTP-upgrade в стиле V2Ray (через переключательv2ray-http-upgradeвws-opts). Отдельного значенияnetwork: httpupgradeне существует.network: http— это устаревшая V2Ray HTTP-маскировка (чистый HTTP/1.1 с фиктивными методами). Не путайте сnetwork: h2(настоящий HTTP/2) иnetwork: xhttp(современное XTLS-кадрирование Xray).http-opts.pathиhttp-opts.headersрандомизируются на каждый запрос — mihomo выбирает по одному значению из каждого списка для каждого нового соединения.ws-opts.v2ray-http-upgrade-fast-openэкономит один RTT, отправляя полезную нагрузку клиента вместе с запросом upgrade. Серверы, буферизующие весь upgrade до ответа (некоторые балансировщики нагрузки), отклонят такой запрос; проверьте оба варианта перед развёртыванием.xhttp-opts— путь совместимости с Xray для клиентов, которым нужно общаться с серверами Xraynetwork: splithttp. Имена полей в точности совпадают со SplitHTTP в Xray (в kebab-case).
Сравнение с другими ядрами
- Xray-core использует
streamSettings.networkплюс блок*Settingsдля каждого транспорта. Есть варианты TCP с обфускацией заголовков, mKCP и SplitHTTP, которые mihomo под этими именами не предоставляет. См. Транспорт — Xray-core. - sing-box использует полиморфный блок
transport: { type, ... }, встроенный в каждый прокси. См. Транспорт — sing-box.
Исходный код: adapter/outbound/vmess.go:145-172 · v1.19.29 (e26714a)
