路由 — mihomo
mihomo 的路由引擎是顶层 rules: 键下的紧凑一行式 规则字符串 列表。每条规则形如:
<TYPE>,<payload>,<target>[,no-resolve][,src]规则按声明顺序求值;命中第一条即停。target 可以是代理名、代理组名, 或内置 DIRECT / REJECT / COMPATIBLE 之一。
规则类型
mihomo 定义 30+ 种规则类型。最常用的:
目的地匹配
| 类型 | 载荷 | 示例 |
|---|---|---|
DOMAIN | 精确域名 | DOMAIN,example.com,proxy |
DOMAIN-SUFFIX | 后缀匹配(任意子域) | DOMAIN-SUFFIX,example.com,proxy |
DOMAIN-KEYWORD | 任意 label 中包含子串 | DOMAIN-KEYWORD,google,proxy |
DOMAIN-REGEX | 对完整域名应用 RE2 正则 | DOMAIN-REGEX,^([a-z]+)\.cdn\.example$,proxy |
DOMAIN-WILDCARD | 含 * 的 glob(+ 匹配一个 label) | 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 | MaxMind 中的 ASN | IP-ASN,13335,proxy |
来源匹配
| 类型 | 载荷 | 示例 |
|---|---|---|
SRC-IP-CIDR | 来源 CIDR | SRC-IP-CIDR,192.168.1.0/24,DIRECT |
SRC-IP-SUFFIX | 来源 IP-suffix | 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 | 进程 basename | 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 | glob | PROCESS-NAME-WILDCARD,fire*,proxy |
集合与组合类型
| 类型 | 载荷 | 示例 |
|---|---|---|
RULE-SET | 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 |
修饰符
target 之后可选两个逗号分隔的修饰符:
no-resolve—— 对 IP / GEOIP 规则,不为匹配解析目的域名。规则更 快,但牺牲精度。src—— 对 IP-suffix 规则,匹配源 IP 而非目的 IP。
rule-providers
顶层 rule-providers: 声明命名的规则源,可被 RULE-SET 规则引用。 两种传输类型与三种格式:
yaml
rule-providers:
geosite-cn:
type: http
behavior: domain # 'domain'、'ipcidr' 或 'classical'
format: mrs # 'yaml'、'text' 或 'mrs'(二进制)
url: https://example.com/geosite-cn.mrs
interval: 86400 # 刷新间隔,秒
path: ./rule-providers/geosite-cn.mrs
proxy: DIRECT # 下载使用的出站
local-block:
type: file
behavior: classical
format: yaml
path: ./rule-providers/block.yamlbehavior:
domain—— 载荷为每行一个域名。最快。ipcidr—— 载荷为每行一个 CIDR。classical—— 载荷为完整 mihomo 规则字符串(除 target 外的部分)。 最慢但最灵活。
sub-rules
顶层 sub-rules: 声明命名的子规则列表,可由 SUB-RULE 调用。便于 嵌套规则逻辑而不复制。
yaml
sub-rules:
sub-udp:
- GEOIP,CN,DIRECT
- MATCH,udp-proxy
rules:
- SUB-RULE,(NETWORK,udp),sub-udp
- MATCH,proxy示例
经典的 CN 旁路路由:
yaml
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基于进程的分流:
yaml
rules:
- PROCESS-NAME,curl,DIRECT
- PROCESS-NAME-WILDCARD,fire*,proxy
- MATCH,DIRECT布尔组合:
yaml
rules:
- AND,((NETWORK,udp),(DST-PORT,443)),quic-proxy
- OR,((DOMAIN-SUFFIX,onion),(GEOSITE,private)),tor
- NOT,((GEOIP,CN)),proxy
- MATCH,DIRECT通过 RULE-SET 使用 rule-providers:
yaml
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说明
- 规则按顺序求值。把
no-resolve修饰符尽早放在 IP 规则上,避免 显然内网的流量每条连接都触发一次 DNS 查询。 GEOSITE/GEOIP规则从geoip.dat/Country.mmdb与geosite.dat读取。URL 覆盖位于顶层geox-url块。- 组合语法(
AND,(<rule>,<rule>),target)每个嵌套规则用括号包裹。 嵌套规则省略 target —— 外层组合的 target 生效。 RULE-SET规则会忽略外层规则上的no-resolve/src修饰符; 请把这些属性设在 rule-provider 声明本身上。- mihomo 没有
final字段。请在rules:末尾放一条MATCH,<target>作为兜底。
跨内核说明
- Xray-core 使用按字段的结构化 JSON 规则与多态匹配形态。没有 紧凑字符串形式。参见 Routing — Xray-core。
- sing-box 同样使用结构化规则,但带显式
action枚举 (route / direct / bypass / reject / hijack-dns / sniff / resolve), 并有独立的rule_set块承接命名规则列表。参见 Routing — sing-box。
