a colorful toy on a table

家庭网络多网关架构那篇文章讲了整体架构,但规则怎么写没有细说。这篇单独讲 mihomo 的分流规则,从语法基础到实用配置模板,逐步拆解。

规则的基本概念

mihomo 的流量分流通过 rules 字段控制,每条规则的格式:

规则类型,匹配值,策略组

比如:

rules:
  - DOMAIN-SUFFIX,google.com,代理
  - IP-CIDR,192.168.0.0/16,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,代理          # 兜底规则,匹配所有剩余流量

规则按顺序匹配,第一条命中即执行,后面的不再判断。 顺序非常重要。

规则类型详解

域名类规则

# 精确匹配域名
- DOMAIN,www.google.com,代理

# 匹配域名及其所有子域名(最常用)
- DOMAIN-SUFFIX,google.com,代理
# 覆盖:google.com / mail.google.com / api.google.com

# 域名关键词(性能较差,少用)
- DOMAIN-KEYWORD,google,代理
# 匹配任何包含 "google" 的域名

# 正则表达式(最灵活,但最慢)
- DOMAIN-REGEX,^.*\.google\.com$,代理

优先级建议: DOMAIN > DOMAIN-SUFFIX > DOMAIN-KEYWORD

越精确的规则放越前面,性能更好,也避免误匹配。

IP 类规则

# IPv4 CIDR
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT

# IPv6 CIDR
- IP-CIDR6,::1/128,DIRECT

# 注意:IP-CIDR 会触发 DNS 解析,对纯域名规则之前的流量有性能影响
# 建议加 no-resolve 后缀,跳过 DNS 解析直接匹配连接 IP
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve

GeoIP 规则

根据 IP 所属国家分流:

# 中国大陆 IP 直连
- GEOIP,CN,DIRECT

# 私有 IP 直连
- GEOIP,PRIVATE,DIRECT,no-resolve

GeoIP 数据库来自 MaxMind,mihomo 会自动更新。精度不是 100%,但对大多数场景足够。

进程规则(仅桌面客户端)

按发起请求的进程名分流:

# 特定应用走代理
- PROCESS-NAME,curl,代理
- PROCESS-NAME,wget,代理

# 开发工具直连
- PROCESS-NAME,node,DIRECT

端口规则

# 特定目标端口
- DST-PORT,80,DIRECT
- DST-PORT,443,代理

# 端口范围
- DST-PORT,3000-3999,DIRECT

兜底规则

# MATCH 必须放在最后,匹配所有未命中规则的流量
- MATCH,代理

规则集(Rule Providers)

手动写每个域名不现实,mihomo 支持引入外部规则集:

rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400   # 每天更新一次

  direct:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400

  proxy:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400

  gfw:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400

  cn-cidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400

rules:
  - RULE-SET,reject,REJECT         # 广告/恶意域名拦截
  - RULE-SET,direct,DIRECT         # 已知直连域名
  - RULE-SET,proxy,代理            # 已知需要代理的域名
  - RULE-SET,gfw,代理              # GFW 屏蔽域名
  - RULE-SET,cn-cidr,DIRECT        # 国内 IP 段
  - GEOIP,CN,DIRECT
  - MATCH,代理

Loyalsoldier/clash-rules 是目前维护最好的规则集,覆盖全面,定期更新。

完整配置模板

以下是我实际使用的配置结构,适合多节点 + 精细分流场景:

# ── 代理节点 ──
proxies:
  - name: "DMIT-HK-Reality"
    type: vless
    server: 43.x.x.x
    port: 443
    uuid: 你的UUID
    flow: xtls-rprx-vision
    reality-opts:
      public-key: 你的公钥
    servername: www.apple.com
    client-fingerprint: chrome
    tls: true

  - name: "DMIT-HK-Hysteria2"
    type: hysteria2
    server: 43.x.x.x
    port: 443
    password: 你的密码
    sni: bing.com
    skip-cert-verify: true

  - name: "DMIT-US"
    type: vless
    # ... 美国节点配置

# ── 策略组 ──
proxy-groups:
  # 主用香港节点(自动选速度最快的)
  - name: "香港"
    type: url-test
    url: http://www.gstatic.com/generate_204
    interval: 60
    tolerance: 50
    proxies:
      - DMIT-HK-Reality
      - DMIT-HK-Hysteria2

  # 备用美国
  - name: "美国"
    type: url-test
    interval: 60
    proxies:
      - DMIT-US

  # 自动故障切换
  - name: "代理"
    type: fallback
    url: http://www.gstatic.com/generate_204
    interval: 30
    proxies:
      - 香港
      - 美国

  # 手动选择(用于特殊场景)
  - name: "手动"
    type: select
    proxies:
      - DMIT-HK-Reality
      - DMIT-HK-Hysteria2
      - DMIT-US
      - DIRECT

  # 流媒体专用(用原生 IP 解锁)
  - name: "流媒体"
    type: select
    proxies:
      - DMIT-HK-Reality
      - DMIT-US

  # AI 工具(需要特定地区 IP)
  - name: "AI工具"
    type: select
    proxies:
      - DMIT-US
      - DMIT-HK-Reality

# ── 规则集引入 ──
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400
  direct:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400
  proxy:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400
  cn-cidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400

# ── 分流规则 ──
rules:
  # 广告拦截
  - RULE-SET,reject,REJECT

  # 私有 IP 直连
  - GEOIP,PRIVATE,DIRECT,no-resolve

  # AI 工具走美国节点
  - DOMAIN-SUFFIX,openai.com,AI工具
  - DOMAIN-SUFFIX,anthropic.com,AI工具
  - DOMAIN-SUFFIX,claude.ai,AI工具
  - DOMAIN-KEYWORD,openai,AI工具

  # 流媒体
  - DOMAIN-SUFFIX,netflix.com,流媒体
  - DOMAIN-SUFFIX,nflxvideo.net,流媒体
  - DOMAIN-SUFFIX,spotify.com,流媒体
  - DOMAIN-SUFFIX,disneyplus.com,流媒体

  # 国内直连规则集
  - RULE-SET,direct,DIRECT

  # 代理规则集
  - RULE-SET,proxy,代理

  # 国内 IP 直连
  - RULE-SET,cn-cidr,DIRECT,no-resolve
  - GEOIP,CN,DIRECT

  # 兜底走代理
  - MATCH,代理

DNS 配置(防止 DNS 泄露)

规则配了但 DNS 没配好,会导致真实 IP 泄露或者规则不生效:

dns:
  enable: true
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip         # 或 redir-host,fake-ip 更推荐
  fake-ip-range: 198.18.0.0/15
  fake-ip-filter:                # 这些域名不走 fake-ip
    - '*.lan'
    - localhost.ptlogin2.qq.com

  nameserver:
    - 223.5.5.5         # 阿里(国内查询)
    - 119.29.29.29      # 腾讯

  fallback:             # 国外域名走这里
    - https://1.1.1.1/dns-over-https
    - https://8.8.8.8/dns-over-https

  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

调试技巧

查看规则命中情况

mihomo 提供 REST API,可以查看流量被哪条规则命中:

# 查看连接列表(包含匹配的规则)
curl http://127.0.0.1:9090/connections

在 Yacd / MetaCubeX 等 Dashboard 里更直观,可以实时看到每条连接走的是哪个节点、命中了哪条规则。

测试特定域名的走向

# 用 mihomo 的 HTTP 代理测试
curl -x http://127.0.0.1:7890 https://www.google.com -I
curl -x http://127.0.0.1:7890 https://www.baidu.com -I

延伸阅读:


📷 封面图 · Flux Schnell AI 生成 · panshi.io 品牌风格