Clash Verge Rev 部分网站无法访问的规则排查
节点测速全绿,订阅正常更新,大部分网站打开流畅,唯独某几个站点要么转圈、要么直接报连接错误。关掉代理用直连反而能开。这种“部分站点阵亡”的现象,问题极少出在节点本身,而是 Mihomo 内核在规则匹配的某一环把该走代理的流量判成了直连,或者把该直连的流量塞进了代理组。Clash Verge Rev 部分网站无法访问的排查,核心就一件事:确认那个打不开的域名,在规则列表里到底命中了哪一行,以及那一行为什么会被它命中。

01. 用连接页和日志锁定“命中错误”还是“没有命中”
遇到 Clash Verge Rev 部分网站无法访问,先不要急着改 YAML。打开 Clash Verge Rev 左侧菜单的“连接”页面,在浏览器里访问那个打不开的网站,观察连接页是否出现了对应的记录。
如果连接页完全没有新记录,说明流量根本没进入 Mihomo。系统代理没接管到这个应用,或者 TUN 没覆盖到,问题不在规则层。如果出现了记录,看右侧的“规则”列写的是什么。显示 DIRECT 但网站需要代理,是直连规则过宽或规则集误收录;显示某个代理组但仍然打不开,才需要检查节点和 DNS。
把日志级别临时切到 debug,复现一次访问,在日志里搜索目标域名。正常应该看到类似 match DomainSuffix(example.com) using Proxy 或 match RuleSet(xxx) using DIRECT 的行。如果日志里只有 IP 没有域名,说明 DNS 解析在进入规则引擎之前就出了问题,或者浏览器自己的 DoH 绕过了 Mihomo,排查方向要转到 DNS 层。
| 现象 | 更可能的位置 | 先看什么 |
|---|---|---|
| 连接页无记录 | 系统代理/TUN 未接管 | 代理开关与应用兼容性 |
| 命中 DIRECT 但期望代理 | 直连规则过宽或顺序错 | 命中规则的类型与规则集名 |
| 命中代理组仍失败 | 节点或 DNS | 换节点、查 dns 日志 |
| 日志只有 IP 无域名 | DNS 未进入 Mihomo | DoH、fake-ip、TUN |
02. 规则顺序:MATCH 和宽泛规则不能挡在前面
Mihomo 的规则匹配是从上往下、命中即止。MATCH 没有任何条件,放在列表中间或顶部,它后面的所有规则都形同虚设。MATCH 挡在前面是 Clash Verge Rev 部分网站无法访问最常见的原因之一,一个典型错误写法是:
rules:
- MATCH,Proxy
- DOMAIN-SUFFIX,example.com,DIRECT
example.com 永远没有机会命中第二条规则,因为第一行已经把所有流量都兜走了。同理,GEOIP,CN,DIRECT 如果出现在具体的域名规则之前,某些被 GEOIP 判定为中国 IP 的国外站点(CDN 或误判)会被提前直连,表现就是部分网站无法访问。
检查当前配置中 MATCH 的位置,它必须放在最后。GEOIP 和宽泛的 RULE-SET 也应该在具体的 DOMAIN、DOMAIN-SUFFIX 之后。如果你通过 Merge 或 Script 覆写规则,注意覆写是追加还是替换——某些旧版配置写法中的 prepend-rules 已被移除,追加的规则如果排在原有 MATCH 之后,同样不会生效。
03. rule-provider 没加载,RULE-SET 等于空转
很多订阅依赖 rule-providers 来管理规则集,主配置里只写 RULE-SET,provider-name,Proxy。如果 provider 本身没有成功加载,这条规则不会命中任何东西,流量会滑到后面的 MATCH 或其他兜底规则上。
判断 provider 是否正常,看日志里有没有加载报错。常见问题包括:远程 URL 返回的是 HTML 错误页而不是规则原文、behavior 声明与文件内容不匹配(比如把域名列表标成了 ipcidr)、path 指向的本地缓存文件没有写入权限。
如果你在覆写文件中自定义了 rule-providers,而订阅本身也带了同名的 provider,两者的行为取决于合并方式。有用户报告过自己重写的 provider 规则被追加在机场原有规则之后,而不是完全替换,导致预期中的规则集实际上并没有接管流量。排查时可以直接看日志中 match RuleSet 后面括号里的名称是不是你期望的那个,如果名称对但规则没生效,去检查该 provider 对应的本地缓存文件内容是否为空或格式错误。
04. DIRECT 规则过宽:该代理的域名被提前放行
部分网站无法访问,但连接页显示命中了 DIRECT。常见的原因不是规则写错了,而是规则写得太宽了。
DOMAIN-KEYWORD 是最容易误伤的规则类型。为了直连某个国内服务而添加的关键词,可能恰好出现在某个国外站点的域名里。GEOIP,CN,DIRECT 在 CDN 场景下也会误判:一个使用国内 CDN 节点的国外网站,其解析出的 IP 归属地显示为中国,流量被直连,但该 CDN 节点可能并不承载完整内容,或者该站点本身需要代理才能完整加载。
排查方法是看 debug 日志中具体命中的规则名称。如果是 DomainKeyword(xxx) 或 GeoIP(CN),把该域名单独加一条 DOMAIN-SUFFIX,目标域名,Proxy 放在这些宽泛规则之前,测试是否恢复。如果恢复了,就确认是误伤,再回头收窄那条宽泛规则的匹配范围。
05. DNS 解析失败与规则无关的“假规则问题”
有些“网站打不开”看起来像规则问题,实际上流量根本没走到规则判断那一步。日志里出现 dns resolve failed: couldn't find ip 或 [TCP] dial DIRECT 后连接超时,说明域名解析失败了。DNS 解析失败会伪装成 Clash Verge Rev 部分网站无法访问的规则问题,但它的修改位置在 DNS 段而不是 rules 段。
一种常见场景是 direct-nameserver 没有正确配置。走 DIRECT 的域名需要本地解析,如果 nameserver 指向的 DoH 在国内直连不可达(比如 1.1.1.1 被 reset),直连域名的解析就会失败,表现为“该直连的网站打不开”。而代理域名正常,因为节点在远端完成了 DNS 解析,Clash 本地不参与。
验证方法:在日志中搜该域名的 DNS 查询记录。如果解析请求发出后没有返回结果或报错,问题在 DNS 而非规则。修复方向是给 direct-nameserver 配置一个国内可达的 DNS(如 223.5.5.5),或者在 nameserver-policy 中为 geosite:cn 单独指定解析路径。浏览器自己的 DoH 同样会造成“日志里没有该域名”的情况,排查时先关闭浏览器安全 DNS 确认。
如果以上几步都排查过仍未解决,可以到 FAQ 页面 搜索日志中的完整规则命中信息,或者参考 Merge 与 Script 指南 确认覆写规则的正确位置与合并逻辑。