博客 进阶配置 约 10 分钟

Clash 规则路由实战指南

规则路由是 Clash 最核心的能力。本文从基础语法到高级技巧,带你掌握精确控制每一条流量走向的方法。


规则路由的意义

Clash 的规则路由(Rule-based Routing)是其区别于简单代理工具的核心能力。一个精心配置的规则集,能让 Clash 像一个智能交通管理系统:访问 B 站、淘宝、微信直接走国内线路,全速访问,零延迟;访问 Google、YouTube、GitHub 自动切换到代理节点,无感穿越;访问广告和追踪域名直接拦截,不消耗流量也不占用延迟。

在没有规则路由的时代,用户只能选「开代理」或「关代理」两种状态,要么国内网站变慢,要么境外网站无法访问。规则路由让两者完美兼得,这也是为什么精通规则配置是 Clash 进阶用户的必备技能。

Clash.Meta(Mihomo)内核对规则系统进行了大幅增强,新增了 RULE-SETDOMAIN-REGEXNETWORK 等新规则类型,并支持了社区维护的超大规则集(如 Loyalsoldier 的 clash-rules),让规则的表达能力和维护效率都大幅提升。

规则语法基础

在 Clash 配置文件(YAML 格式)中,rules 字段是一个有序列表。每条规则的格式为:

YAML
类型,匹配值,目标策略组[,no-resolve]

规则从上到下顺序匹配,第一条匹配的规则生效,后续规则不再检查。这意味着规则的顺序至关重要:特殊规则放前面,通用规则放后面。一个典型的规则文件结构如下:

YAML
rules:
  # 1. 局域网和特殊地址直连
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve

  # 2. 广告拦截(放在前面优先匹配)
  - RULE-SET,reject,REJECT

  # 3. 代理域名
  - RULE-SET,proxy,Proxy

  # 4. 国内域名直连
  - RULE-SET,direct,DIRECT
  - GEOIP,CN,DIRECT

  # 5. 兜底规则(必须放最后)
  - MATCH,Proxy

最后一条 MATCH 是必须存在的兜底规则,所有未被前面规则命中的流量都会落到这里。一般设置为走代理,确保没有规则覆盖的未知域名也能访问境外服务。

常用规则类型

DOMAIN 完全匹配域名,不匹配子域名。DOMAIN,google.com,Proxy 只匹配 google.com,不会匹配 www.google.com

DOMAIN-SUFFIX 匹配域名及其所有子域名,是最常用的域名规则类型。DOMAIN-SUFFIX,google.com,Proxy 同时匹配 google.comwww.google.commail.google.com 等。

DOMAIN-KEYWORD 只要域名中包含指定关键词就匹配,是一把双刃剑——方便但容易误伤。DOMAIN-KEYWORD,google,Proxy 会匹配 google.com,也会匹配 googledrive.com 甚至 somegooglestuff.net,使用时要谨慎。

IP-CIDR 匹配目标 IP 地址段。通常用于内网地址直连(如 192.168.0.0/16)或特定服务的 IP 范围。IP-CIDR 规则默认会先解析域名为 IP,如果不希望触发 DNS 解析(例如在 Fake-IP 模式下),需要在末尾加 no-resolve

GEOIP 根据目标 IP 的地理位置数据库判断归属国家。GEOIP,CN,DIRECT 是几乎所有 Clash 配置文件中都会出现的规则,将所有国内 IP 直连,避免国内服务走代理。Mihomo 内核使用 Maxmind GeoIP 或 GeoSite 数据库,可以自动更新。

RULE-SET 引用外部规则集文件(或内联规则集),是管理大量规则的推荐方式,详见下一节。

MATCH 无条件匹配所有流量,只能放在规则列表最末尾作为兜底规则使用。

策略组与规则的关系

规则中的「目标策略组」是 Clash 配置文件 proxy-groups 字段定义的策略组名称,或者内置的 DIRECT(直连)、REJECT(拦截)关键词。

策略组的作用是将多个节点聚合在一起,并定义选节点的策略:

select 类型允许用户手动选择节点或子策略组,适合作为顶层的「节点选择」策略组。规则命中后流量走哪个节点,取决于用户的当前选择。

url-test 类型自动测速并选择延迟最低的节点,适合作为「自动选择」策略组。配置参数 url(测速地址)、interval(测速间隔秒数)和 tolerance(切换容忍毫秒数)控制其行为。

fallback 类型按节点顺序选择,首个可用节点生效;当前节点失效后自动切换到下一个,类似故障转移。适合对稳定性要求高的场景。

load-balance 类型将流量在多个节点之间负载均衡,适合提升并发下载速度的场景。

规则和策略组的组合,让你能精细控制「什么流量走哪种策略」:视频流量走「流媒体专用」策略组(选在对应地区解锁的节点),下载流量走「下载优化」策略组(选带宽大的节点),普通浏览走「自动选择」策略组(选延迟低的节点)。

Rule-Set 规则集

手动维护几百条域名规则既繁琐又容易过时。RULE-SET 允许你引用一个外部文件或 URL 作为规则集,将规则的维护工作外包给社区项目。

最广泛使用的社区规则集是 Loyalsoldier 维护的 clash-rules 项目,提供了 reject(广告拦截)、proxy(代理域名)、direct(直连域名)等多个分类规则集,每天自动更新,收录数万条规则,覆盖率和准确率远超手工维护。

在配置文件中引用方式如下:

YAML
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400   # 每天更新一次
  proxy:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,proxy,Proxy
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

Mihomo 内核在首次启动时会下载这些规则集文件到本地缓存,之后每隔 interval 秒自动更新。即使断网也能使用缓存的规则集,不影响正常使用。

自定义规则实战

机场提供的订阅配置通常已经包含了合理的规则集,但你可能需要为特定场景添加自定义规则。Clash Plus(Mihomo)支持在 GUI 的「Override(覆写)」功能中添加规则,或通过「Mixin」机制合并自定义配置,无需修改原始订阅文件。

场景一:将某个 App 强制走直连。如果某个国内应用因为规则集覆盖不足而意外走了代理,可以手动加一条 DOMAIN-SUFFIX 规则指向 DIRECT,并放在规则列表的前面(优先级更高):

YAML(prepend-rules 覆写语法)
prepend-rules:
  - DOMAIN-SUFFIX,example-cn-app.com,DIRECT
  - DOMAIN-SUFFIX,example-cdn.cn,DIRECT

场景二:为流媒体指定特定节点。Netflix 的解锁与节点所在地区强相关,需要专门的解锁节点。可以创建一个专用策略组,然后为 Netflix 相关域名指向这个策略组:

YAML
prepend-proxy-groups:
  - name: "Netflix 专线"
    type: select
    proxies:
      - 美国 Netflix 解锁节点 1
      - 美国 Netflix 解锁节点 2

prepend-rules:
  - DOMAIN-SUFFIX,netflix.com,Netflix 专线
  - DOMAIN-SUFFIX,nflxvideo.net,Netflix 专线
  - DOMAIN-SUFFIX,nflximg.net,Netflix 专线

场景三:拦截特定广告域名。如果发现某个广告域名没有被规则集覆盖,直接添加 REJECT 规则:

YAML
prepend-rules:
  - DOMAIN-SUFFIX,specific-ad-domain.com,REJECT

调试与排错

当某个网站无法访问或走错了路由时,「Connections(连接)」页面是你的调试利器。打开 Clash Plus 的连接日志,重新触发一次那个网站的请求,观察日志中该连接命中的规则(Rule 列)和走向(Chain 列)。大多数时候,一眼就能看出问题所在:是命中了错误的规则,还是节点本身连接失败。

如果某个域名出现在「直连」的流量里但应该走代理,在「Override」配置中手动添加 DOMAIN-SUFFIX 规则指向代理策略组即可修复。如果某个本应直连的国内网站走了代理,则添加指向 DIRECT 的规则。

Clash Plus 的 Web 控制面板(默认 http://127.0.0.1:9090/ui)提供了比桌面 GUI 更详细的连接日志和规则测试功能,是深度调试规则的推荐工具。
Clash

想进一步了解 DNS 和隐私保护?

规则路由配合 Fake-IP DNS,才能做到真正无泄漏的分流。下一篇文章详细讲解这个话题。