Clash 规则冲突导致无法连接怎么办?按命中规则逐步修复
简答:先切换全局或直连模式做对照,再在连接记录查看实际命中规则、策略组和报错;确认是规则冲突后,把具体域名规则移到 MATCH 前并逐条恢复,通常无需重装客户端即可定位。
定义:Clash 规则冲突,是指同一请求可能符合多条规则,但因从上到下优先匹配、策略组引用或规则集配置问题,最终被 DIRECT、REJECT 或错误节点处理。
先做这一步:用三种模式确认是不是规则问题
本文是第三方使用指南,Clash 客户端、内核和配置文件不是同一层,菜单名称也可能随版本变化。先不要同时修改 DNS、TUN、节点和规则,否则很难判断真正原因。
| 测试方式 | 操作 | 结果如何判断 |
|---|---|---|
| 规则模式 | 保持当前配置,访问同一个打不开的域名 | 记录实际命中的规则、策略组和错误信息 |
| 全局模式 | 选择一个已知可用的代理策略组或节点 | 全局可用而规则模式不可用,优先检查规则顺序和策略组 |
| 直连模式 | 暂时不经过代理访问普通网站或局域网服务 | 直连也失败,问题可能在本地网络、DNS、系统代理或节点之外 |
在 Clash Verge Rev 中,项目文档说明可以右键订阅配置文件并选择“编辑规则”,自定义规则应放在前置位置以获得更高优先级;具体入口请以你安装的版本为准。Clash Verge 自定义规则配置文档
看连接记录:先确定请求到底命中了什么
打开客户端的连接记录或 Connections 页面,找到刚刚复现的域名,重点记录四项:目标域名、命中规则、最终策略组或节点、错误类型。不要只看首页的“运行中”或“已连接”,这类状态不能单独证明某个请求已经成功。
- 命中 DIRECT:请求被安排直连。如果该域名必须经代理访问,先检查是否有更宽泛的 GEOIP、GEOSITE 或 RULE-SET 提前匹配。
- 命中 REJECT:请求被规则主动阻断。先临时禁用对应的广告、跟踪或自定义阻断规则,再重新发起一次新连接。
- 命中错误策略组:检查策略组名称是否仍存在,规则里引用的名称是否与 proxy-groups 中的名称完全一致。
- connection refused、timeout 或 dial error:规则可能已经匹配成功,但节点、端口、DNS、TUN 路由或本地网络仍可能有问题,不要继续盲目改规则。
如果需要查看本机日志,Clash Verge Rev 的项目说明列出了应用数据目录、logs 和 service-logs 目录;日志或配置可能包含域名、节点地址和订阅令牌,分享前应先删去敏感内容。Clash Verge Rev 本地数据与日志说明
规则顺序冲突:MATCH、GEOIP 和宽泛规则最容易挡住自定义规则
mihomo 的路由规则按从上到下匹配,顶部规则优先级更高;MATCH 会匹配所有没有被前面规则处理的请求,因此通常应放在最后。mihomo Route Rules 文档
| 错误写法或现象 | 为什么会冲突 | 建议调整 |
|---|---|---|
| 自定义域名规则放在 MATCH 后 | MATCH 已经匹配全部请求,后面的规则不会再执行 | 把自定义 DOMAIN、DOMAIN-SUFFIX 或 RULE-SET 移到 MATCH 前 |
| GEOIP、GEOSITE 或大型 RULE-SET 放在具体域名前 | 宽泛规则可能先把请求送到 DIRECT 或其他策略组 | 具体域名规则放前面,宽泛分类规则放后面 |
| 同一域名同时出现在 DIRECT 和 REJECT 规则中 | 最终结果取决于哪条规则更靠前,容易误以为规则随机 | 保留一条明确规则,并在连接记录中复测 |
| 规则命中代理组,但代理组名称已改名 | 规则引用与策略组配置不一致,可能导致配置加载失败或无法选择节点 | 逐字核对规则末尾的策略名和 proxy-groups 的 name |
可以先用一个最小化顺序做验证,确认具体规则确实能命中,再逐步加回其他规则:
DOMAIN-SUFFIX,example.com,PROXYGEOSITE,cn,DIRECTMATCH,PROXY
上面的 PROXY 只是示例策略组名称,必须替换为配置中真实存在的组名;不要直接照抄不存在的名称。
rule-providers 重复、为空或格式不兼容时怎么查
规则提供者不是规则本身,而是通过 RULE-SET 被主配置引用的外部或本地规则集合。mihomo 文档要求提供者名称不能重复,并区分 http、file、inline 类型,同时还要匹配 domain、ipcidr 或 classical 行为和对应格式。mihomo rule-providers 配置文档
- 打开规则提供者页面,确认更新状态不是失败、超时或文件为空。
- 核对
RULE-SET使用的名称,例如RULE-SET,work,PROXY中的work,必须与rule-providers下的名称一致。 - 检查提供者的
behavior与文件内容:纯域名、IP 段和完整经典规则不能混用。 - 如果订阅更新后自定义规则消失,检查是否编辑了订阅覆写或前置规则,而不是直接修改每次更新都会被替换的原始内容。
- 保存后重新加载配置,再关闭旧连接并重新访问目标域名,避免把旧连接结果当作新规则结果。
假如只要禁用某个规则提供者,连接就恢复,说明问题集中在该规则集、其引用关系或更新内容;先保留备份,再逐个启用其他提供者。
策略组、配置语法和节点问题:不要全部归因于规则冲突
| 现象 | 优先检查 | 暂时不要做 |
|---|---|---|
| 全局模式可用,规则模式失败 | 规则顺序、DIRECT、REJECT、RULE-SET 和策略组引用 | 先不要重装客户端或修改 DNS |
| 全局模式也超时 | 节点状态、节点端口、网络、DNS 和系统时间 | 不要继续堆叠更多规则 |
| 只有 TUN 模式失败 | TUN 路由、系统权限、DNS 劫持和其他 VPN 或安全软件 | 不要把所有 TUN 错误当成规则冲突 |
| 配置加载失败或策略组消失 | YAML 缩进、组名引用、字段拼写和客户端内核兼容性 | 不要直接覆盖原配置 |
恢复时采用低风险顺序:先导出或复制当前配置;再关闭 TUN、其他代理工具和浏览器代理扩展;切换全局模式测试;禁用最近新增的自定义规则或规则提供者;重新加载配置;最后每次只恢复一组规则。这样能保留一个可回滚版本。
如果错误日志明确指向 YAML 解析、策略组不存在或字段不兼容,先修复配置语法;如果日志显示节点连接超时或拒绝,则应转向节点和网络排查。规则文档也说明,UDP 请求在节点不支持 UDP 时可能继续向下匹配,因此单个 UDP 应用失败不一定代表规则顺序冲突。mihomo 路由规则与 UDP 匹配说明
最后核对:用一份清单确认修复结果
- 已备份原配置,且没有把订阅令牌、密码或完整节点信息发到公开页面。
- 已关闭 TUN、其他 VPN、代理扩展或加速器做单变量测试。
- 已分别测试规则、全局和直连模式。
- 已在连接记录中确认目标域名、命中规则、策略组、节点和错误类型。
- 具体域名规则位于宽泛规则和 MATCH 前方。
- DIRECT、REJECT、RULE-SET 与代理组名称符合预期。
- rule-providers 的名称、类型、行为、格式和更新状态正常。
- 修改后已重新加载配置,并用新连接复测,而不是只刷新旧页面。
如果完成这些检查后,规则模式和全局模式仍然都失败,下一步应转向 DNS、监听端口、节点连通性、系统代理或 TUN 路由,而不是继续增加规则。
截至 2026 年 10 月 26 日,本文依据已检索到的客户端项目文档和 mihomo 配置文档整理;字段和菜单可能随客户端或内核版本变化,涉及具体版本时应以对应项目文档为准。
常见问题
Clash 显示已连接,但网站打不开,一定是规则冲突吗?
不一定。先切换全局模式和直连模式做对照,再查看连接记录。如果全局模式可用而规则模式失败,才优先检查规则顺序、DIRECT、REJECT、RULE-SET 和策略组;如果全局模式也超时,应检查节点、DNS、监听端口或本地网络。
Clash 规则应该放在 MATCH 前面吗?
应该。路由规则按从上到下匹配,MATCH 会匹配所有未被前面规则处理的请求,因此具体域名规则、需要优先处理的 RULE-SET 通常应放在 MATCH 前。
为什么我写了 DOMAIN 规则,却还是命中 DIRECT?
常见原因是更早的 GEOIP、GEOSITE、RULE-SET 或其他宽泛规则先匹配,也可能是自定义规则没有加载到当前配置。请在连接记录确认实际命中项,再把具体域名规则放到相关宽泛规则之前并重新加载。
规则命中 REJECT 后,怎么确认是不是它导致无法连接?
在连接记录中确认目标域名和命中规则,然后临时禁用对应的 REJECT 规则或规则提供者,重新建立连接测试。若恢复,保留备份后缩小阻断范围,不要直接删除全部规则。
改完规则后仍然打不开,需要清理 DNS 或 Fake-IP 吗?
不应一开始就清理。先确认新连接已命中预期规则,并测试全局模式;如果规则命中正确但仍出现解析、超时或 TUN 相关错误,再单独排查 DNS、Fake-IP、系统代理和 TUN 路由。