Some checks failed
Published content check / validate (push) Failing after 3s
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
157 lines
26 KiB
Markdown
157 lines
26 KiB
Markdown
---
|
||
date: 2026-07-25
|
||
tags:
|
||
- clash
|
||
- mihomo
|
||
- протоколы
|
||
- маршрутизация
|
||
- dns
|
||
- tun
|
||
aliases:
|
||
- Возможности mihomo
|
||
- Протоколы mihomo
|
||
- Что умеет mihomo
|
||
- mihomo features
|
||
link: https://wiki.metacubex.one/
|
||
---
|
||
|
||
# 🚀 Возможности и протоколы mihomo: что ядро умеет в 2026 году
|
||
|
||
> [!info] О чём заметка
|
||
> Разбор актуальных возможностей ядра **mihomo** (бывший Clash.Meta) — какие протоколы оно поддерживает как клиент и как сервер, чем маскирует трафик, как устроены TUN, DNS-подсистема, сниффер и наборы правил. Что такое mihomo и откуда он взялся — в заметке [[Clash/02-mihomo|mihomo (Clash.Meta)]]; базовое устройство конфига Clash (порты, группы, правила, fake-ip) разобрано в [[Clash/01-clash-core|Ядре Clash]] и здесь не повторяется.
|
||
|
||
> [!warning] Списки функций устаревают быстрее заметок
|
||
> Ядро mihomo выпускает релизы с новыми протоколами раз в несколько недель, поэтому перечни ниже — срез на **25 июля 2026** (стабильная версия v1.19.29 от 18 июля 2026 и релизные заметки предшествующих версий). Перед настройкой сверяйтесь с [официальной документацией](https://wiki.metacubex.one/) и списком релизов: часть функций живёт только в ветке Alpha, часть требует свежей версии, а имена полей иногда меняются.
|
||
|
||
## TL;DR
|
||
|
||
- Как **клиент** mihomo умеет практически весь современный набор: Shadowsocks/SSR, VMess, [[xray/vless|VLESS]] (с [[xray/reality|REALITY]] и XTLS Vision), Trojan, [[Hysteria/00-overview|Hysteria и Hysteria2]], TUIC, WireGuard, ShadowTLS, Snell, SSH, AnyTLS, а в свежих версиях — ещё Tailscale, OpenVPN и реле GOST.
|
||
- Как **сервер** он поднимает `listeners` по большинству тех же протоколов — то есть работает входной точкой для других устройств, а не только исходящим клиентом.
|
||
- Маскировка: uTLS-отпечатки браузеров (`client-fingerprint`), REALITY, ShadowTLS, обфускации `restls` и `jls`, мультиплексирование через smux/h2mux, транспорты WebSocket, gRPC, HTTP/2 и XHTTP.
|
||
- Перехват трафика: TUN с тремя сетевыми стеками (`system`, `gvisor`, `mixed`), redir/TPROXY на Linux, авто-настройка маршрутов и правил.
|
||
- Правила стали заметно мощнее оригинала: логические `AND`/`OR`/`NOT`, `GEOSITE`, `IP-ASN`, `DOMAIN-REGEX`, подправила `sub-rules`, наборы правил в компактном бинарном формате `.mrs`.
|
||
- **Сниффер** восстанавливает домен из TLS SNI, HTTP Host и QUIC — благодаря ему доменные правила работают даже когда приложение подключается по «голому» IP.
|
||
|
||
## Протоколы: исходящие подключения
|
||
|
||
Полезно сразу разделить два слоя, которые в подписках часто перемешаны в одну строку. **Протокол** отвечает за то, как устроены сами данные внутри соединения (VLESS, Trojan, Shadowsocks). **Транспорт и маскировка** — за то, во что это соединение завёрнуто снаружи (TLS, WebSocket, gRPC, REALITY, обфускаторы). Одна и та же связка «протокол + транспорт» должна совпадать у клиента и сервера, иначе соединение не установится вовсе.
|
||
|
||
| Протокол | Особенности реализации в mihomo |
|
||
|---|---|
|
||
| [[protocols/shadowsocks\|Shadowsocks]] / SSR | Классика экосистемы; современные AEAD-шифры и методы редакции 2022, плагины обфускации, в свежих версиях — обфускация `jls` |
|
||
| [[protocols/vmess\|VMess]] | Наследие v2ray; поддерживает транспорты WS/gRPC/HTTP2 и мультиплекс, в релизах 2026 добавлены `mkcp` и `tlsmirror` |
|
||
| **VLESS** | Основной протокол современных подписок: работает с [[xray/reality|REALITY]], XTLS Vision и [[xray/xhttp|XHTTP]] (включая настройки переиспользования xmux) |
|
||
| [[protocols/trojan\|Trojan]] | Маскировка под обычный HTTPS; сочетается с WS/gRPC и обфускациями |
|
||
| **Hysteria / Hysteria2** | QUIC поверх UDP, устойчивость к потерям, обфускация и port hopping — сам протокол разобран в [[Hysteria/00-overview|обзоре Hysteria 2]] |
|
||
| [[protocols/tuic\|TUIC]] (v4/v5) | Ещё один QUIC-протокол с быстрым установлением UDP-сессий и режимами релея `native`/`quic` |
|
||
| WireGuard | Полноценный WG-клиент прямо в ядре — можно использовать как обычный outbound наравне с прокси |
|
||
| [[protocols/shadowtls\|ShadowTLS]] | Обёртка, прячущая произвольный протокол за настоящим TLS-рукопожатием с чужим доменом (учитывайте известные с 2025 года проблемы обнаружения v3) |
|
||
| Snell | Протокол из клиента Surge; в mihomo версии до v4, в свежих релизах — с поддержкой shadow-tls |
|
||
| SSH | Туннель через обычный SSH-сервер |
|
||
| [[protocols/anytls\|AnyTLS]] | Протокол 2025 года с акцентом на борьбу с детектом «TLS внутри TLS»; в mihomo поддерживается и как outbound, и как listener |
|
||
| Tailscale, OpenVPN, GOST | Добавлены в релизах середины 2026: подключение к сети Tailscale, клиент OpenVPN (включая `tls-crypt-v2`), реле в формате GOST |
|
||
|
||
Чего в mihomo нет — тоже стоит знать заранее: [[protocols/naiveproxy|NaiveProxy]] здесь не реализован, и подписку с ним придётся открывать другим ядром (см. [[Clash/08-vs-sing-box|сравнение ядер]]).
|
||
|
||
Проще говоря: mihomo перестал быть «клиентом Clash с парой протоколов» и превратился в универсальный комбайн — по широте набора он сопоставим с [[sing-box/sing-box-extended|sing-box]] и [[xray/project-x|Xray-core]], а по некоторым экзотическим позициям (OpenVPN, Tailscale, GOST в одном бинарнике) местами их обгоняет.
|
||
|
||
## Протоколы: входящие подключения (listeners)
|
||
|
||
Раздел `listeners` в конфиге — это серверная сторона. mihomo может слушать порт и принимать подключения по HTTP, SOCKS, смешанному порту, Shadowsocks, VMess, VLESS, Trojan, TUIC, Hysteria2, AnyTLS, WireGuard, а также в режимах прозрачного перехвата (`redir`, `tproxy`, `tun`).
|
||
|
||
Практический сценарий: mihomo стоит на домашнем роутере или на мини-ПК, принимает трафик всех устройств в квартире как обычный прокси-сервер и уводит его наружу через ваши узлы по общим правилам. Телефонам и телевизорам при этом не нужен собственный клиент — им достаточно указать шлюз. Второй сценарий — цепочка: mihomo на VPS принимает подключения по VLESS и передаёт их дальше, в другой выходной узел.
|
||
|
||
> [!note] Сервер на mihomo — это не то же самое, что панель управления
|
||
> Ядро умеет принимать соединения, но не занимается учётом пользователей, лимитами и биллингом. Если нужен многопользовательский сервер с выдачей подписок, для этого существуют панели поверх Xray (3x-ui, Marzban — упомянуты в [[xray/project-x|обзоре Project X]]) или управляющая подсистема форка [[sing-box/architecture|sing-box-extended]]. mihomo в роли сервера — это скорее шлюз для своих устройств, чем сервис для клиентов.
|
||
|
||
## Маскировка и транспорты
|
||
|
||
Задача маскировки — сделать так, чтобы DPI не отличал прокси-соединение от обычного веб-трафика. mihomo даёт несколько независимых слоёв, которые комбинируются.
|
||
|
||
**uTLS-отпечатки.** Глобальный параметр `client-fingerprint` (значения вида `chrome`, `firefox`, `safari`, `ios`, `random`) заставляет ядро повторять TLS-рукопожатие популярного браузера. Без этого у Go-программы получается собственный, легко узнаваемый почерк — по нему прокси-клиент вычисляется без всякой расшифровки трафика. Механика самого детекта по отпечатку рукопожатия разобрана в [[DPI/browser-ja4-fingerprint-block|заметке о JA4-отпечатках браузера]].
|
||
|
||
**REALITY.** Прикрытие настоящим чужим сайтом: клиент выполняет рукопожатие так, что стороннему наблюдателю оно неотличимо от обращения к реальному домену. Устройство протокола — в [[xray/reality|отдельной заметке про REALITY]]; со стороны mihomo это несколько полей в описании узла (`public-key`, `short-id`).
|
||
|
||
**ShadowTLS, restls, jls.** Три разных подхода к «спрятать протокол за TLS». ShadowTLS проксирует настоящее рукопожатие к чужому серверу и подменяет только полезную нагрузку. `restls` (в релизах 2026 добавлен для AnyTLS, VMess, VLESS и Trojan) и `jls` (для Shadowsocks) — обфускации, устойчивые к активному зондированию: наблюдатель, попытавшийся подключиться к вашему серверу «на пробу», получает поведение обычного сайта.
|
||
|
||
**Транспорты.** WebSocket, gRPC, HTTP/2, XHTTP и mKCP — способ упаковать протокол в привычный веб-трафик, чтобы он проходил через CDN и обратные прокси. Подробно про самый новый из них — в заметке [[xray/xhttp|XHTTP]].
|
||
|
||
**Мультиплексирование** (smux, h2mux, yamux) пропускает несколько логических соединений через одно физическое. Это уменьшает число TCP-рукопожатий и ускоряет открытие страниц, но у приёма есть цена: сотни запросов в одном длинном соединении — сами по себе статистически заметный паттерн, и на части сетей мультиплекс ухудшает выживаемость канала, а не улучшает её.
|
||
|
||
## Перехват трафика: TUN и прозрачные режимы
|
||
|
||
**TUN-режим** создаёт виртуальный сетевой интерфейс, на который система направляет весь трафик, — так mihomo работает как настоящий VPN, включая приложения, которые не умеют ходить через прокси. Раньше это была премиальная функция закрытого Clash Premium; в mihomo она открыта и штатна.
|
||
|
||
Ядро предлагает три сетевых стека, и выбор между ними — практическое решение, а не украшение:
|
||
|
||
- **`system`** — использовать стек операционной системы. Обычно быстрее и экономнее по CPU, но сильнее зависит от особенностей платформы.
|
||
- **`gvisor`** — пользовательский стек (userspace TCP/IP из проекта gVisor). Работает предсказуемо везде, полезен там, где системный стек конфликтует с другими VPN или с правилами файрвола; платит за это нагрузкой на процессор.
|
||
- **`mixed`** — TCP через системный стек, UDP через gVisor: компромисс, часто выручающий, когда UDP через `system` ведёт себя странно.
|
||
|
||
Дополнительно TUN умеет сам прописывать маршруты и правила (`auto-route`, `auto-detect-interface`) и настраивать разрешение имён так, чтобы DNS-запросы не утекали мимо туннеля.
|
||
|
||
На Linux остаются и «классические» варианты: `redir-port` и `tproxy-port` с перехватом через iptables/nftables — типовой способ поставить mihomo шлюзом для всей сети (тот же подход в мире Hysteria описан в [[Hysteria/tproxy|заметке про TPROXY]]).
|
||
|
||
## Сниффер: как ядро узнаёт домен
|
||
|
||
Проблема, ради которой сниффер существует, звучит так: при прозрачном перехвате приложение может подключиться сразу по IP-адресу — например, потому что резолвило домен само или получило адрес из своего кэша. Ядро видит только адрес, а правила написаны по доменам, и соединение уходит не туда, куда задумано.
|
||
|
||
**Сниффер** вскрывает начало соединения и достаёт имя хоста оттуда: из поля SNI в TLS-рукопожатии, из заголовка `Host` в открытом HTTP, из QUIC-рукопожатия. После этого соединение переоценивается правилами уже с известным доменом.
|
||
|
||
Проще говоря: сниффер — это способ применить доменные правила к трафику, который пришёл «безымянным». Он же чинит частый сценарий с fake-ip, когда приложение обошло подставной DNS-ответ. Обратная сторона — ядро разбирает начало каждого соединения, поэтому сниффер обычно ограничивают списком портов (443, 80) вместо «всего подряд».
|
||
|
||
## Правила: что добавилось сверх оригинала
|
||
|
||
Базовые типы правил (`DOMAIN`, `DOMAIN-SUFFIX`, `IP-CIDR`, `GEOIP`, `PROCESS-NAME`, `MATCH`) описаны в [[Clash/01-clash-core|заметке про ядро Clash]]. mihomo добавил к ним ощутимо больше выразительности:
|
||
|
||
- **`GEOSITE`** — правила по категориям доменов (реклама, стриминг, категория «китайские сайты» и т. п.) из готовых баз, а не по одному имени.
|
||
- **`IP-ASN`** — по номеру автономной системы: удобно, когда у сервиса десятки подсетей и они меняются.
|
||
- **`DOMAIN-REGEX`** — совпадение по регулярному выражению.
|
||
- **Логические правила `AND` / `OR` / `NOT`** — условия склеиваются: например, «домен из категории стриминга **и** запрос пришёл с адреса телевизора».
|
||
- **`NETWORK`, `IN-TYPE`, `IN-USER`, `IN-NAME`** — маршрутизация по типу трафика (TCP/UDP) и по тому, через какой входящий слушатель он пришёл. Это то, что делает mihomo пригодным для роли шлюза: трафик от разных устройств разводится по разным маршрутам.
|
||
- **`sub-rules`** — именованные наборы правил, к которым можно переходить из основного списка; конфиг перестаёт быть простынёй на тысячу строк.
|
||
- **`REMATCH-NAME`** и тип outbound `rematch` (добавлены в v1.19.28, июль 2026) — повторное применение правил к соединению после того, как о нём стало известно больше.
|
||
|
||
**Наборы правил (`rule-providers`)** подгружаются из файла или по URL и обновляются по расписанию. Поддерживаются три формата: `yaml`, `text` и **`mrs`** — компактный бинарный формат самого mihomo, который экономит память и время загрузки на больших списках (доступен для наборов с поведением `domain` и `ipcidr`; конвертация — командой `mihomo convert-ruleset`). Готовые наборы и геоданные команда публикует в репозитории **meta-rules-dat**.
|
||
|
||
## DNS-подсистема
|
||
|
||
DNS в mihomo — самостоятельная подсистема, а не одна строка с адресом сервера. Поверх режимов `fake-ip` и `redir-host` (разобраны в [[Clash/01-clash-core|базовой заметке]]) добавлены:
|
||
|
||
- **Шифрованные апстримы** — DNS-over-HTTPS, DNS-over-TLS и DNS-over-QUIC, в том числе с указанием, через какой прокси идти к самому DNS-серверу.
|
||
- **`nameserver-policy`** — какой сервер спрашивать для конкретных доменов или категорий: локальные имена уходят провайдерскому резолверу, всё остальное — шифрованному.
|
||
- **`proxy-server-nameserver`** — отдельный резолвер для доменов ваших прокси-серверов, чтобы не получилось замкнутого круга «чтобы подключиться к серверу, нужно разрешить его имя через этот же сервер».
|
||
- **`fake-ip-filter`** — исключения из подстановки адресов для приложений, которым нужен настоящий IP.
|
||
- **`hosts`** — локальные переопределения имён.
|
||
|
||
Смысл этой сложности практический: DNS — самый частый канал утечки. Если запросы уходят провайдеру в открытом виде, наблюдатель видит список посещаемых доменов, даже когда сам трафик надёжно зашифрован, а на части сетей ещё и получает возможность подменять ответы (пример того, к чему это приводит, — в [[DPI/google-dns-8888-block-july-2026|разборе блокировки публичных DNS]]).
|
||
|
||
## Группы и подписки
|
||
|
||
Помимо классических `select`, `url-test`, `fallback`, `load-balance` и `relay` (разобраны в [[Clash/01-clash-core|ядре Clash]]), mihomo добавил к группам механику, которая экономит ручную работу: фильтры `filter` и `exclude-filter` по имени узла (группа сама подхватывает из подписки только нужные страны), `default-selected` (какой узел активен при старте), `empty-fallback` (что делать, если группа опустела), настраиваемые таймауты проверок.
|
||
|
||
**`proxy-providers`** — подписки как отдельная сущность: URL, интервал обновления, health-check, фильтры и переопределения полей. Группы ссылаются на провайдер через `use`, поэтому смена продавца или добавление второй подписки не требуют переписывания правил.
|
||
|
||
> [!note] Группа `smart` — про неё спрашивают отдельно
|
||
> В сообществе обсуждают «умную» группу, которая выбирает узел не по одной задержке, а по предсказанию модели (LightGBM) с учётом типа трафика и истории успешных соединений. На июль 2026 такая группа известна прежде всего по **сторонним сборкам ядра** (например, сборкам в рамках проекта OpenClash) и веткам Alpha, а не как базовая функция стабильного mihomo. Прежде чем закладываться на неё, проверьте, есть ли тип `smart` в документации именно вашей сборки.
|
||
|
||
## Clash API и дашборды
|
||
|
||
Управляющий HTTP-API (см. раздел про `external-controller` в [[Clash/01-clash-core|ядре Clash]]) в mihomo расширен: добавлены ручки статистики памяти, отладочные эндпоинты, управление провайдерами правил и узлов. Официальный дашборд — **metacubexd**; из популярных сторонних — zashboard и наследники yacd. Всё это одинаково применимо и к ядру внутри графического клиента: большинство оболочек просто открывают тот же API у своего встроенного mihomo.
|
||
|
||
## 📚 См. также
|
||
|
||
- [[Clash/02-mihomo|mihomo (Clash.Meta)]] — история проекта, состояние и совместимость.
|
||
- [[Clash/01-clash-core|Ядро Clash]] — базовое устройство конфига, правила, группы, fake-ip, Clash API.
|
||
- [[Clash/07-clients|Клиенты на ядре Clash/mihomo]] — где всё это включается кнопками.
|
||
- [[Clash/08-vs-sing-box|mihomo против sing-box и Xray]] — как тот же набор функций устроен у соседей.
|
||
- [[protocols/00-overview|Обзор протоколов]] — карта: какой протокол какую задачу решает и какое ядро его поддерживает.
|
||
- [[xray/vless|Протокол VLESS]] и [[xray/reality|REALITY]] — устройство самых востребованных сегодня протокола и маскировки.
|
||
- [[Hysteria/00-overview|Hysteria 2]] — QUIC-альтернатива TCP-протоколам, поддерживаемая mihomo.
|
||
- 🔗 [wiki.metacubex.one](https://wiki.metacubex.one/) — документация по всем полям конфига.
|
||
- 🔗 [Релизы mihomo](https://github.com/MetaCubeX/mihomo/releases) — первоисточник по новым протоколам и функциям.
|
||
|
||
---
|
||
|
||
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
|
||
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Clash/06-features-protocols.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).
|