IP 检测台

规则模式、全局模式和直连模式的区别

Clash、Mihomo 一类代理客户端都有三种出站模式,它们回答的是同一个问题:一个连接该直连,还是交给代理节点。本文以 Mihomo 的配置为例,讲清三种模式怎么工作、规则怎样逐条匹配,以及怎么用分流检测验证。

更新于

三种模式各做什么

配置文件顶部的 mode 字段,和客户端界面上的“规则 / 全局 / 直连”开关,改的是同一个设置:

mode: rule   # 可选 rule、global、direct
  • 规则模式(rule):每个连接都拿去和 rules 列表比较,命中哪条就按哪条处理。国内网站直连,需要代理的网站走节点,日常使用应该停在这个模式。
  • 全局模式(global):跳过全部规则,所有连接都交给 GLOBAL 策略组里选中的出口,通常是某个节点。国内网站也要绕到境外再回来,速度变慢,还消耗节点流量。
  • 直连模式(direct):所有连接都不走代理。客户端仍在运行,但效果相当于暂时关掉了代理。

其他客户端的叫法不同,含义相近:Shadowrocket 的“全局路由”里,“配置”相当于规则模式,“代理”相当于全局模式;v2rayN 则在路由设置里用不同的预设规则实现同样的切换。

在中国大陆使用时,三种模式在分流检测首页的典型表现
模式国内网站海外网站谷歌首页结论
规则模式宽带 IP,直连由 MATCH 决定节点 IP,经代理分流正常
全局模式节点 IP节点 IP节点 IP所有流量都在走代理
直连模式宽带 IP宽带 IP连不上谷歌连不上

规则从上往下匹配,命中即停

规则模式的核心是 rules 列表。客户端拿到一个连接,从第一条开始逐条比较,第一条命中的规则决定结果,后面的规则不再看。所以顺序就是优先级:越具体的规则越要往前放,兜底的规则放最后。下面是一个精简但完整的例子:

proxy-groups:
  - name: 代理
    type: select
    proxies: [节点甲, 节点乙, DIRECT]   # 换成你自己配置里的节点名

rules:
  - DOMAIN-SUFFIX,local,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - GEOSITE,google,代理
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,代理

分流检测首页发出的三个请求,在这份规则里会停在不同的位置:

三个检测请求在规则列表中的停止位置 谷歌一栏的请求在第三条 GEOSITE,google 处命中并走代理;国内一栏的请求在 GEOSITE,cn 处命中直连,域名不在列表里时由 GEOIP,CN 接住;本站接口的请求一路落到最后的 MATCH。 谷歌线 国内线 海外线 DOMAIN-SUFFIX,localDIRECT IP-CIDR,192.168.0.0/16DIRECT GEOSITE,google代理 GEOSITE,cnDIRECT GEOIP,CNDIRECT MATCH代理
每条线停在命中的那一条规则上。国内线下方的点线和虚线圈表示 IPIP.net 的域名不在 cn 列表里时的去向:解析出国内 IP,被 GEOIP,CN 接住。
  • 谷歌一栏请求的是 appspot.com 下的地址,前两条不匹配,第三条 GEOSITE,google 命中,交给“代理”组。
  • 国内一栏请求 myip.ipip.net。它如果在 cn 域名列表里,就停在 GEOSITE,cn;不在的话,GEOIP,CN 会发现它解析出的 IP 在国内,同样直连。
  • 海外一栏请求本站自己的接口。本站域名不在任何常见列表里,解析出的 Cloudflare 地址也不在国内,一路落到最后的 MATCH。

顺序出错时的典型症状:把 MATCH 写在中间,它后面的规则全部失效;在前面加了一条宽泛的 DOMAIN-KEYWORD,google,DIRECT,谷歌就会被送去直连,首页显示“谷歌连不上”。

GEOSITE 和 GEOIP 有什么不同

两类地理规则的对比
GEOSITEGEOIP
匹配对象域名IP 地址
数据来源geosite 数据文件里的域名分类,如 cn、googlegeoip 数据文件里的 IP 段,如 CN、private
是否需要解析不需要,看域名就能判断目标是域名时要先做 DNS 解析,加 no-resolve 则直接跳过
适合做什么把已知网站归类接住列表里没有的国内网站,以及直接用 IP 发起的连接

GEOSITE 看域名,连接一建立就能判断;GEOIP 看 IP,如果连接的目标是域名,客户端得先解析出 IP 才能比较。因此常见的写法是 GEOSITE 在前,让大部分连接不经解析就分好;GEOIP,CN 在后,兜住列表里漏掉的国内网站。

IP 类规则末尾的 no-resolve 表示:目标是域名时,不要为了这一条去解析,直接看下一条。局域网网段的规则一般都这样写,免得每个连接都触发一次 DNS 查询。

geosite 和 geoip 数据文件需要定期更新。新出现的网站不在旧列表里,会落到 GEOIP 或 MATCH,分流结果可能和你预期的不一样。

MATCH 兜底决定没提到的网站怎么走

MATCH 不带任何条件,所有连接都能命中它,所以必须放在最后。它指向哪里,决定了整份配置的基本思路:

  • MATCH,代理:没被规则点名的流量都走代理,只有明确属于国内的网站直连。这种思路常被叫作“绕过大陆”或白名单。
  • MATCH,DIRECT:没被点名的流量都直连,只有列表里的网站走代理。这种思路常被叫作黑名单,基于 GFWList 的配置就是这样。

分流检测里的“海外网站”一栏就是用来观察 MATCH 的。本站域名不在常见的规则列表里,这一栏显示你的宽带 IP,说明 MATCH 指向直连;显示节点 IP,说明指向代理。两种都是正常的选择,没有对错,取决于你希望列表外的境外网站怎么走。

用分流检测验证

  1. 在客户端里切到规则模式,打开分流检测:国内一栏应为绿色的“直连”,谷歌一栏应为蓝色的“经代理”。
  2. 切到全局模式再测一次:三栏是同一个 IP,结论为“所有流量都在走代理”。看到这个结果,就知道该切回规则模式了。
  3. 修改规则后,看海外一栏是宽带 IP 还是节点 IP,确认 MATCH 的走向和你的意图一致。
  4. 如果客户端用的是系统代理而不是 TUN 模式,再做一次 WebRTC 检测,确认浏览器的 UDP 请求没有绕开代理。

每一种结论的具体含义,见检测结果怎么看。

相关文章