第 5 章:智能分流规则系统 (Rule System)

首页 > Maoge 技术手册 > 第 5 章:智能分流规则系统 (Rule System)

第 5 章:智能分流规则系统 (Rule System)

规则系统是整个代理引擎的大脑。它根据每一个请求的目标域名、目标 IP、端口、网络协议以及发起进程,决定数据包该直连、走代理还是直接丢弃。

一、 规则匹配第一准则:自上而下,命中即止

核心执行准则: 规则列表严格按照从第一行到最后一行的顺序线性求值。一旦某个网络请求命中了某一行规则,引擎将立即采纳该规则所指定的策略,并终止对后续所有规则的匹配判定。

因此,规则的编写必须遵循「特殊规则在前,宽泛规则在后」的顺序。例如针对具体的反广告规则或特定主机名规则应当置于顶部,而大范围的 GEOIP,CN 与最后的 FINAL 兜底规则必须置于末尾。

二、 规则类型全览与语法说明

规则类型 语法示例 匹配逻辑与行为
DOMAIN DOMAIN,api.apple.com,DIRECT 完整域名完全匹配。只有目标主机名严格一致时才命中。
DOMAIN-SUFFIX DOMAIN-SUFFIX,google.com,Proxy 域名后缀匹配。匹配 google.com 自身及其所有子域名(如 mail.google.com)。
DOMAIN-KEYWORD DOMAIN-KEYWORD,netflix,Streaming 关键字模糊包含匹配。目标域名中包含该子串即命中。
DOMAIN-SET DOMAIN-SET,https://rules.com/ad.txt,REJECT 引用外部纯文本文件列表,单文件可承载数十万条域名,以极高内存效率并发判定。
IP-CIDR IP-CIDR,192.168.0.0/16,DIRECT,no-resolve 目标 IPv4 子网段掩码匹配。
IP-CIDR6 IP-CIDR6,2001:db8::/32,DIRECT,no-resolve 目标 IPv6 子网段匹配。
GEOIP GEOIP,CN,DIRECT 基于 MaxMind GeoIP 离线数据库判断目标 IP 的国家归属。
PROCESS-NAME PROCESS-NAME,curl,DIRECT 精准根据发起请求的 macOS 宿主应用程序或二进制文件名进行匹配。
DEST-PORT DEST-PORT,22,DIRECT 按请求的目标服务端口(如 SSH 的 22 端口、DNS 的 53 端口)进行匹配。
FINAL FINAL,Proxy 最终兜底规则。当上述所有规则均未命中时的唯一默认策略。每个配置文件末尾必须且只能有一个 FINAL 规则。

三、 深度解析:为何必须关注 no-resolve 修饰符?

避免 DNS 泄漏与请求卡顿的关键: 在 IP-CIDR 和 GEOIP 规则后,强烈建议根据需要显式添加 no-resolve 参数。

当一个应用发起基于域名的 HTTP 请求(例如访问 https://x.com)时:

  • 若规则未带 no-resolve:引擎在比对到 GEOIP,CN 时,发现手里只有域名没有 IP,便会被迫在本地立刻发起一次 DNS 解析请求以获得该域名的真实 IP,随后再判定 IP 是否在境内。这不仅会导致本地 DNS 泄漏,更会使境外域名的首次连接产生额外几百毫秒的阻塞延迟。
  • 若规则带有 no-resolve:对于纯域名发起的连接请求,引擎将直接跳过该条 IP 规则,继续向下匹配后续的域名规则或最终的 FINAL。只有直接通过 IP 地址发起的直连请求(如直接访问 http://1.1.1.1),才会触发该条规则的比对。