RULES · ENGINEERING

Clash GEOIP 分流规则配置

GEOIP 规则分流示意图

🌏 运维工单统计:fake-ip 环境下 GEOIP 误判导致「漏分流」占 60% 以上。本文记录生产验证的规则优先级模板——GEOSITE 合并 80% SUFFIX 后规则 P99 从 210µs 降至 140µs(基准见 三内核压测),并给出 rule-providers 热更新零中断与 MATCH 兜底排查 checklist。

Clash 规则链匹配流程

规则匹配顺序:自上而下,首匹配生效

mihomo 按 rules 数组顺序逐条测试,命中即停止。常见误区是把 GEOIP,CN,DIRECT 放在 GEOSITE 海外媒体规则之前,导致国内 CDN 节点误判。推荐骨架:

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,direct,DIRECT
  - RULE-SET,proxy,PROXY
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,PROXY

rule-providers 热更新零中断

HTTP 行为

配置 behavior: classical 的 YAML 规则集,interval: 86400 每日拉取。mihomo 在后台下载至临时文件,校验后原子替换,现有连接不受影响。若 CDN 返回 ETag,仅 304 时不重写。

手动触发

curl -X PUT -H "Authorization: Bearer $SECRET" \
  http://127.0.0.1:9090/providers/rules/loyalsoldier

API 安全见 External Controller 加固文

GEOSITE vs DOMAIN-SUFFIX 性能权衡

GEOSITE 类别(如 geolocation-!cn)在 DAT 索引中一次命中,适合大类分流。DOMAIN-SUFFIX 适合精确后缀(.githubusercontent.com)。DOMAIN-KEYWORD 因子串匹配开销大,应控制在 50 条以内或改用 RULE-SET 预编译。

基准测试 中,12 万条 SUFFIX 使 P99 达 210µs;将 80% 合并为 GEOSITE 后 P99 降至 140µs。

GEOIP 与 no-resolve 修饰符

当 DNS 返回 fake-ip(198.18.0.0/16)时,对 IP 做 GEOIP 查询会得到错误国家。对依赖 IP 的规则务必加 ,no-resolve 或确保规则仅用于域名阶段。TUN 模式下 dns-hijackfake-ip-filter 需包含内网段:

dns:
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - 'localhost.ptlogin2.qq.com'

TUN 完整配置参考 macOS TUN 排障

MATCH 兜底陷阱

MATCH,PROXY 必须位于最后一条。若误写为 MATCH,DIRECT,所有未命中流量直连,造成「规则失效」假象。调试技巧:临时将 MATCH 指向 REJECT 并观察日志,确认是否有流量滑至兜底。

私有域名与分流例外

企业内网域名应写入 direct rule-set,置于 GEOIP 之前:

# custom-direct.yaml
payload:
  - DOMAIN-SUFFIX,corp.internal
  - DOMAIN-SUFFIX,svc.cluster.local

Android 端同步此规则集见 CMFA 部署文

与出站协议的衔接

规则决定「走哪组代理」,协议性能决定「组内节点谁快」。弱网环境建议在 PROXY 组使用 url-test 并筛选 Hysteria2 节点,参见 QUIC 协议文

检查清单

配置模板起点:下载页最小 config · 返回 资讯目录