Clash 的核心优势在于其强大的路由机制,而规则(Rule)是这一机制的灵魂。很多用户在使用代理工具时,发现部分应用依然直连、部分应用无法解析域名,或者国内访问速度变慢,通常不是因为节点本身的问题,而是本地规则配置不够精确。
本文重点解决 Clash 规则配置中的逻辑误区与常见故障。我们将深入解析规则文件的结构、优先级判定机制,以及如何通过正确的语法实现“国内直连、国外代理”或更精细的应用分流。掌握这些配置逻辑,能显著提升网络体验的稳定性。
规则文件的基本结构与加载逻辑
Clash 的规则并非单一字符串,而是一个按顺序执行的列表。理解这一加载顺序是配置成功的前提。在 Clash 的配置文件(通常为 YAML 格式)中,`rules` 字段位于顶层,其内部包含一系列规则条目。
规则的优先级判定
Clash 采用“自上而下,首次匹配”的原则。这意味着:
• 顺序至关重要:第一条规则优先于第二条,第二条优先于第三条,以此类推。
• 匹配即停止:一旦流量特征命中某条规则,Clash 就会立即执行该规则指定的策略(如 `DIRECT` 或 `PROXY`),并忽略后续所有规则。
• 兜底规则:通常需要在列表末尾设置一条兜底规则(如 `MATCH, PROXY`),确保所有未被前面规则覆盖的流量都能被正确处理。
规则行的标准语法
每条规则通常由三个部分组成,用逗号分隔:
`类型, 匹配内容, 策略`
* 类型(Type):决定如何匹配流量。常见的类型包括 `DOMAIN`(域名)、`IP-CIDR`(IP地址段)、`DOMAIN-SUFFIX`(域名后缀)、`GEOIP`(地理位置IP段)等。
* 匹配内容(Pattern):具体的域名、IP地址或地理位置代码。
* 策略(Policy):命中后的处理方式。常用策略包括 `DIRECT`(直连)、`PROXY`(走代理)、`REJECT`(拒绝连接)等。
例如,`DOMAIN-SUFFIX, baidu.com, DIRECT` 表示所有以 `baidu.com` 结尾的域名请求,直接走本地网络,不走代理。
🔥 推荐:适合 Clash 用户的稳定节点方案
如果你正在使用 Clash,建议优先选择订阅更新稳定、节点延迟较低、规则配置清晰的方案,避免免费节点失效和速度波动。
核心规则类型详解与适用场景
不同的流量类型需要不同的匹配规则。混淆规则类型是导致连接失败或泄露的主要原因。以下是几种最常用且关键的规则类型及其正确用法。
1. DOMAIN 与 DOMAIN-SUFFIX 的区别
这是最容易混淆的两个类型。
* DOMAIN:精确匹配完整域名。
* 示例:`DOMAIN, www.google.com, PROXY`
* 适用场景:仅针对某个特定域名生效。
* 注意:如果网站使用了 CDN 或子域名(如 `api.google.com`),`DOMAIN, www.google.com` 将无法匹配,导致代理失败。
* DOMAIN-SUFFIX:匹配域名后缀。
* 示例:`DOMAIN-SUFFIX, google.com, PROXY`
* 适用场景:匹配该域名下的所有子域名。这是最常用的高效规则类型。
* 注意:避免使用过于宽泛的后缀。例如,`DOMAIN-SUFFIX, com, PROXY` 会导致所有 `.com` 网站都走代理,极大降低国内访问速度并增加延迟。
2. IP-CIDR 与 GEOIP 的协同使用
* IP-CIDR:基于 IP 地址段的匹配。
* 示例:`IP-CIDR, 192.168.1.0/24, DIRECT`
* 适用场景:针对特定服务器 IP 进行直连或代理。
* 注意:Clash 在处理 `IP-CIDR` 时,如果未指定 `no-resolve` 参数,会尝试解析该 IP 对应的域名。对于纯 IP 流量(如某些 P2P 应用或 UDP 流量),建议添加 `, no-resolve` 后缀,以避免 DNS 解析冲突。
* GEOIP:基于地理位置数据库的 IP 匹配。
* 示例:`GEOIP, CN, DIRECT`
* 适用场景:快速将所有中国 IP 流量直连,无需手动维护庞大的 IP 段列表。
* 注意:GEOIP 规则依赖于本地更新的 GeoIP 数据库。如果数据库过期,可能导致部分国内 IP 被误判为国外,从而走代理,增加延迟。建议定期更新订阅或手动刷新数据库。
3. RULE-SET 的模块化应用
对于大型规则集,将规则拆分为多个文件并使用 `RULE-SET` 引用是更专业的做法。
* 配置方式:
“`yaml
rule-providers:
domestic:
type: http
url: “”
interval: 86400
path: ./rules/domestic.yaml
rules:
• RULE-SET, domestic, DIRECT
“`
* 优势:便于维护,只需更新远程规则文件,无需修改主配置文件。
* 劣势:增加了一次 HTTP 请求,若远程链接失效,可能导致规则加载不完整。
常见配置错误与故障排查
即使理解了语法,配置过程中仍常出现“明明写了直连,却走了代理”或“明明写了代理,却连不上”的问题。以下是排查顺序和常见原因。
故障一:国内网站访问缓慢或偶尔卡顿
可能原因:
• GEOIP 数据库过期:部分国内 IP 段未被正确识别,导致走了境外代理节点。
• 规则顺序错误:代理规则排在了直连规则之前。例如,先写了 `DOMAIN-SUFFIX, google.com, PROXY`,后写了 `DOMAIN-SUFFIX, google.cn, DIRECT`。如果请求的是 `google.cn`,由于 `google.com` 的后缀匹配逻辑在某些实现中可能产生歧义(取决于具体客户端实现),或者更常见的是,直连规则被代理规则提前拦截。
• DNS 污染或解析错误:客户端 DNS 设置不当,导致国内域名解析到了境外 IP。
解决步骤:
• 检查 `GEOIP, CN, DIRECT` 是否位于 `PROXY` 规则之前。
• 确保所有国内常用域名(如 `baidu.com`, `taobao.com`, `weixin.qq.com` 等)都有明确的 `DIRECT` 规则,且位于代理规则之前。
• 更新 Clash 的 GeoIP 数据库。
• 检查 DNS 设置,建议启用 `fake-ip` 或 `redir-host` 模式,并配置可靠的国内 DNS 服务器(如 `223.5.5.5`)。
故障二:特定应用无法连接或解析失败
可能原因:
• UDP 流量未处理:Clash 默认主要处理 TCP 流量。DNS 查询和部分游戏/视频会议使用 UDP。如果规则中只写了 `DOMAIN` 或 `IP-CIDR`,未处理 UDP,可能导致连接超时。
• IPv6 流量未拦截:如果本地网络启用了 IPv6,而规则中只配置了 IPv4(`IP-CIDR` 而非 `IP-CIDR6`),IPv6 流量可能直连失败或泄露。
• 规则类型不匹配:使用 `DOMAIN` 匹配了 IP 流量,或使用 `IP-CIDR` 匹配了域名流量。
解决步骤:
• 在配置文件中添加 `enhanced-mode: fake-ip` 以优化 DNS 处理。
• 添加 UDP 相关的规则,如 `UDP, 53, DIRECT`(DNS)或 `UDP, 0, PROXY`(视需求而定,但需谨慎,部分 UDP 直连更快)。
• 检查是否添加了 `IP-CIDR6` 规则以处理 IPv6 流量,例如 `IP-CIDR6, ::/0, DIRECT`。
故障三:规则修改后未生效
可能原因:
• 缓存问题:部分客户端缓存了旧规则。
• 语法错误:YAML 格式对缩进和符号极其敏感,一个空格错误或冒号缺失都会导致整个规则块加载失败,从而回退到默认规则。
• 策略组未关联:规则中指定的策略(如 `PROXY`)在 `proxy-groups` 中不存在。
解决步骤:
• 重启 Clash 客户端或重载配置。
• 使用在线 YAML 校验器检查配置文件语法。
• 确认 `proxy-groups` 中定义的组名与 `rules` 中引用的策略名完全一致(区分大小写)。
如何构建高效的规则列表
一个高效的规则列表应该遵循“精确优先、广泛兜底”的原则。以下是构建逻辑的建议:
1. 优先处理高频且易混淆的域名
不要依赖 GEOIP 覆盖所有国内流量。对于国内访问量大、对延迟敏感的服务,应手动添加精确的 `DOMAIN` 或 `DOMAIN-SUFFIX` 规则。
* 示例顺序:
“`yaml
rules:
# 1. 精确匹配国内核心服务,确保最低延迟
• DOMAIN-SUFFIX, baidu.com, DIRECT
• DOMAIN-SUFFIX, taobao.com, DIRECT
• DOMAIN-SUFFIX, qq.com, DIRECT
# 2. 处理国内 IP,兜底剩余国内流量
• GEOIP, CN, DIRECT
# 3. 处理特定需要代理的国外服务
• DOMAIN-SUFFIX, google.com, PROXY
• DOMAIN-SUFFIX, youtube.com, PROXY
# 4. 最后兜底,所有未匹配流量走代理(或根据需求改为 DIRECT)
• MATCH, PROXY
“`
2. 避免规则冗余与冲突
* 去重:检查是否有重复的域名规则,保留优先级更高的一条。
* 合并:将多个相同的策略规则合并。例如,如果有 10 条 `DOMAIN-SUFFIX, xxx.com, DIRECT`,可以确认是否真的需要分开写,有时使用 `RULE-SET` 更清晰。
* 冲突检测:确保没有 `DOMAIN-SUFFIX, example.com, DIRECT` 和 `DOMAIN-SUFFIX, example.com, PROXY` 同时存在,后者永远不会生效。
3. 定期维护与测试
* 更新规则库:如果使用了 `RULE-SET`,确保更新频率合理(如每天一次)。
* 功能测试:配置完成后,分别测试:
* 国内网站(如百度、知乎)是否直连(Ping 值低)。
* 国外网站(如 Google、GitHub)是否走代理。
* 特定应用(如微信、银行 App)是否按预期工作(通常应直连)。
* DNS 泄露检查:使用在线 DNS 泄露检测工具,确认 DNS 请求未通过代理节点发出。
高级技巧:Fake-IP 与 DNS 优化
Clash 的 DNS 模块与规则紧密相关。错误的 DNS 配置会导致规则失效,即使规则本身正确。
启用 Fake-IP 模式
在 `dns` 字段中设置:
“`yaml
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
• “+.lan”
• “+.local”
• localhost.ptlogin2.qq.com
“`
优势:
* 速度快:Fake-IP 将域名直接映射到虚拟 IP,无需真实 DNS 查询即可匹配规则,极大降低延迟。
* 防泄露:所有 DNS 请求都经过 Clash 处理,避免 DNS 泄露。
注意事项:
* `fake-ip-filter` 中的域名将直接直连,不走代理。确保其中包含所有需要直连的国内域名,否则可能因无法解析而失败。
* 某些老旧应用可能不支持 Fake-IP,如遇兼容性问题,可切换回 `redir-host` 模式。
配置国内 DNS
在 `dns` 字段中添加 `nameserver` 和 `fallback`:
“`yaml
nameserver:
•
•
fallback:
• tcp://223.5.5.5
• tcp://119.29.29.29
“`
* `nameserver`:优先使用的 DNS,通常为国内 DoH/DoT 服务器,速度快且安全。
* `fallback`:当 `nameserver` 无法解析时(如解析国外域名),使用的备用 DNS。注意,fallback 中的 DNS 不应包含敏感信息,且应确保其能解析国外域名。
总结
Clash 规则设置并非简单的“复制粘贴”,而是一个需要理解流量走向、匹配逻辑和优先级关系的系统工程。
* 核心原则:顺序决定优先级,精确优于宽泛,直连优先于代理。
* 关键步骤:正确配置 `DOMAIN-SUFFIX` 和 `GEOIP` 以区分国内外流量,启用 `fake-ip` 优化 DNS,并确保策略组名称一致。
* 排查要点:遇到连接问题时,首先检查规则顺序、DNS 设置和 GeoIP 数据库版本。
通过精细化的规则配置,你可以获得更稳定、更快速、更安全的网络体验。建议定期回顾和优化自己的规则列表,以适应不断变化的网络环境和服务商策略。