Маршрутизация — mihomo
Движок маршрутизации mihomo — это список компактных однострочных строк-правил под верхнеуровневым ключом rules:. Каждое правило имеет вид:
<TYPE>,<payload>,<target>[,no-resolve][,src]Правила вычисляются в порядке объявления; побеждает первое совпавшее. Цель — это имя прокси, имя группы прокси либо одно из встроенных имён DIRECT / REJECT / COMPATIBLE.
Типы правил
mihomo определяет более 30 типов правил. Наиболее употребимые:
Сопоставление по назначению
| Тип | Полезная нагрузка | Пример |
|---|---|---|
DOMAIN | точный домен | DOMAIN,example.com,proxy |
DOMAIN-SUFFIX | совпадение по суффиксу (любой поддомен) | DOMAIN-SUFFIX,example.com,proxy |
DOMAIN-KEYWORD | подстрока в любой метке домена | DOMAIN-KEYWORD,google,proxy |
DOMAIN-REGEX | регулярное выражение RE2 по полному домену | DOMAIN-REGEX,^([a-z]+)\.cdn\.example$,proxy |
DOMAIN-WILDCARD | шаблон с * (а + совпадает с одной меткой) | DOMAIN-WILDCARD,*.example.com,proxy |
GEOSITE | категория из geosite.dat / MaxMind | GEOSITE,category-ads,REJECT |
GEOIP | категория из geoip.dat / MaxMind | GEOIP,CN,DIRECT |
IP-CIDR | совпадение по CIDR | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve |
IP-SUFFIX | совпадение по младшим битам IP | IP-SUFFIX,::1/128,DIRECT |
IP-ASN | ASN из MaxMind | IP-ASN,13335,proxy |
Сопоставление по источнику
| Тип | Полезная нагрузка | Пример |
|---|---|---|
SRC-IP-CIDR | CIDR источника | SRC-IP-CIDR,192.168.1.0/24,DIRECT |
SRC-IP-SUFFIX | IP-суффикс источника | SRC-IP-SUFFIX,::1/128,DIRECT |
SRC-GEOIP | GeoIP-категория источника | SRC-GEOIP,CN,DIRECT |
SRC-IP-ASN | ASN источника | SRC-IP-ASN,4134,DIRECT |
SRC-PORT | диапазон портов источника | SRC-PORT,53,DNS |
IN-PORT | порт входящего слушателя | IN-PORT,8388,DIRECT |
IN-USER | пользователь аутентификации входящего | IN-USER,alice,proxy |
IN-NAME | имя входящего слушателя | IN-NAME,vless-in,proxy |
IN-TYPE | тип входящего слушателя | IN-TYPE,SOCKS5,proxy |
Сопоставление по соединению
| Тип | Полезная нагрузка | Пример |
|---|---|---|
DST-PORT | порт назначения (один, диапазон, список) | DST-PORT,443,proxy |
NETWORK | tcp или udp | NETWORK,udp,proxy-udp |
DSCP | значение DSCP | DSCP,46,proxy-priority |
UID | локальный ID пользователя (Linux/macOS) | UID,1000,proxy |
Сопоставление по процессу
| Тип | Полезная нагрузка | Пример |
|---|---|---|
PROCESS-NAME | базовое имя процесса | PROCESS-NAME,curl,proxy |
PROCESS-PATH | абсолютный путь | PROCESS-PATH,/usr/bin/curl,proxy |
PROCESS-NAME-REGEX / PROCESS-PATH-REGEX | регулярное выражение | PROCESS-NAME-REGEX,^chrome.*$,proxy |
PROCESS-NAME-WILDCARD / PROCESS-PATH-WILDCARD | шаблон | PROCESS-NAME-WILDCARD,fire*,proxy |
Наборы и комбинаторы
| Тип | Полезная нагрузка | Пример |
|---|---|---|
RULE-SET | имя набора правил (объявляется в rule-providers) | RULE-SET,gfw,proxy |
SUB-RULE | именованное подправило (объявляется в sub-rules) | SUB-RULE,(NETWORK,udp),sub-udp |
AND / OR / NOT | логические комбинаторы | AND,((DOMAIN-SUFFIX,com),(IP-CIDR,1.0.0.0/8)),proxy |
MATCH | безусловное умолчание | MATCH,proxy |
Модификаторы
После цели допускаются два опциональных модификатора через запятую:
no-resolve— для правил IP/GEOIP: не разрешать домен назначения в IP ради сопоставления. Ускоряет правило ценой точности.src— для правил IP-суффикса: сопоставлять IP источника вместо IP назначения.
rule-providers
Верхнеуровневый rule-providers: объявляет именованные источники правил, на которые вы ссылаетесь из правил RULE-SET. Два типа доставки и три формата:
rule-providers:
geosite-cn:
type: http
behavior: domain # 'domain', 'ipcidr', or 'classical'
format: mrs # 'yaml', 'text', or 'mrs' (binary)
url: https://example.com/geosite-cn.mrs
interval: 86400 # refresh interval in seconds
path: ./rule-providers/geosite-cn.mrs
proxy: DIRECT # outbound used for the download
local-block:
type: file
behavior: classical
format: yaml
path: ./rule-providers/block.yamlПоведения (behavior):
domain— по одному домену на строку. Быстро.ipcidr— по одному CIDR на строку.classical— полные строки правил mihomo (всё, кроме цели). Медленнее, но максимально гибко.
sub-rules
Верхнеуровневый sub-rules: объявляет именованные списки подправил, которые можно вызывать через SUB-RULE. Полезно для вложенной логики правил без её дублирования.
sub-rules:
sub-udp:
- GEOIP,CN,DIRECT
- MATCH,udp-proxy
rules:
- SUB-RULE,(NETWORK,udp),sub-udp
- MATCH,proxyПримеры
Классическая маршрутизация с обходом CN:
rules:
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,proxyРазделение по процессам:
rules:
- PROCESS-NAME,curl,DIRECT
- PROCESS-NAME-WILDCARD,fire*,proxy
- MATCH,DIRECTЛогические комбинаторы:
rules:
- AND,((NETWORK,udp),(DST-PORT,443)),quic-proxy
- OR,((DOMAIN-SUFFIX,onion),(GEOSITE,private)),tor
- NOT,((GEOIP,CN)),proxy
- MATCH,DIRECTИспользование rule-providers через правило RULE-SET:
rule-providers:
gfw:
type: http
behavior: domain
format: mrs
url: https://example.com/gfw.mrs
interval: 86400
path: ./providers/gfw.mrs
rules:
- RULE-SET,gfw,proxy
- MATCH,DIRECTПримечания
- Правила вычисляются по порядку. Ставьте IP-правила с модификатором
no-resolveближе к началу списка, чтобы не делать по одному DNS-запросу на соединение для заведомо локального трафика. - Типы правил
GEOSITE/GEOIPчитают изgeoip.dat/Country.mmdbиgeosite.dat. Переопределения URL живут в верхнеуровневом блокеgeox-url. - Синтаксис комбинаторов (
AND,(<rule>,<rule>),target) заключает каждое вложенное правило в круглые скобки. Вложенные правила не содержат цели — действует цель внешнего комбинатора. - Правила
RULE-SETигнорируют модификаторыno-resolve/srcна внешнем правиле; вместо этого задавайте эти свойства в самом объявлении поставщика правил. - У mihomo нет поля
final. Для поведения «поймать всё» используйтеMATCH,<target>в концеrules:.
Сравнение с другими ядрами
- Xray-core использует структурированные JSON-правила с полями по каждому критерию и полиморфной формой сопоставления. Компактной строковой формы нет. См. Маршрутизация — Xray-core.
- sing-box тоже использует структурированные правила, но с явными перечислениями
action(route / direct / bypass / reject / hijack-dns / sniff / resolve) и отдельным блокомrule_setдля именованных списков правил. См. Маршрутизация — sing-box.
