规则分流不生效怎么办?国内网站也走了代理
开了代理后国内网站变慢、明明该直连的流量却走了代理、或该走代理的没走?这是分流规则问题。本文讲清规则模式与全局模式,并给出分流不生效的排查。
结论:分流不生效,先确认模式是「规则」而不是「全局」;然后到「连接」面板看出问题的那个域名命中了哪条规则——这一步比猜快十倍。走错了就加一条你自己的规则,写在「订阅覆写」里而不是订阅文件里,否则下次更新订阅就被刷掉。
规则是怎么匹配的
Clash 系客户端的规则从上到下逐条匹配,命中第一条就停,最后一条 MATCH 是兜底。一份典型订阅的规则长这样:
DOMAIN-SUFFIX,openai.com,PROXY
GEOSITE,cn,DIRECT
GEOIP,CN,DIRECT
MATCH,PROXY
所以两类「不生效」的原因是对称的:该走代理的走了直连,是它在前面被 GEOSITE,cn 之类的直连规则先匹配到了;该直连的走了代理,是前面没有任何规则匹配它、掉到了兜底的 MATCH,PROXY。
看命中,别猜
Clash Verge Rev 侧栏「连接」,访问出问题的网站,找到它那一行,右侧「规则」列写着命中的规则和出口(如 GEOSITE(cn) → DIRECT)。Shadowrocket 在「首页 → 最近请求」里点一条能看到命中规则。看到之后就知道该加什么了。
临时验证也可以切一次全局:全局下能开、规则下不能 → 确定是规则把它判成了直连。
加自己的规则,且不被订阅刷掉
Clash Verge Rev:「订阅」页 → 该订阅右键或「全局扩展配置」→ 在 Merge(覆写)里的 prepend-rules 加上你的规则,它会被插到订阅规则的最前面:
prepend-rules:
- DOMAIN-SUFFIX,example.com,PROXY
写在覆写里的规则在每次更新订阅后自动重新叠加。直接编辑订阅文件的做法看起来也能用,但机场一更新就全没了——「更新订阅后分流乱了」十有八九是这个原因。Shadowrocket 在「配置 → 规则」里加的规则同样独立于订阅,不会被刷。
规则对了还是不对:DNS 和 IP
按域名写的规则(DOMAIN-SUFFIX、GEOSITE)只对走域名的连接有效。直接连 IP 的软件(Telegram、部分游戏)需要 IP-CIDR 或 GEOIP 规则,见Telegram 或特定 App 连不上。另外在 TUN 模式下如果 DNS 用的是 redir-host 而不是 fake-ip,客户端看到的可能是解析后的 IP、域名规则匹配不上,把 DNS 模式改成 fake-ip 就正常了。
国内变慢这一种专门写在开了代理国内网站变慢;连得上但个别网站打不开见连接正常网页打不开。客户端配置见 Clash Verge Rev 教程与 Shadowrocket 教程;同类问题见网络问题排查 · 连不上 / 打不开。
常见问题
为什么开了代理国内网站变慢?
多为误用了「全局」模式,国内流量也绕到海外节点。切回「规则」模式,国内直连、国外走代理即可恢复。
某网站该走代理却没走?
它命中了直连规则。在客户端日志里看该域名命中的规则,把它加入代理规则组即可。
更新订阅后分流乱了?
机场订阅内置的规则被更新覆盖了自定义部分。用覆写 / 本地规则叠加的方式保留自定义,避免被订阅刷掉。