规则分流是客户端把每个请求拿去和一份有序的规则列表逐条比对,命中第一条就按它指定的方式处理:直连、走某个策略组,或者拒绝。国内站点直连、国外站点走代理,就是靠这份列表实现的。规则集会随时间过期,所以需要更新,顺序则决定谁优先。
规则分流,指的是客户端用一份写好的规则,去判断每一个请求“该直接出去,还是该走代理”。你能一边打开国内视频网站不绕路、一边访问海外服务走代理,靠的就是它。这件事看起来像魔法,其实只是“按名单办事”:名单怎么写、谁排前面、名单是不是最新的,决定了分流是否准确。这篇把原理拆开讲,并教你在分流出错时怎么一步步验证。
规则分流是什么:一份有序的名单
可以把它想成门口的保安拿着一本名册:来一个人,他从第一页开始逐条对照,对上哪一条就按那条的指示放行或带走,后面的页就不翻了。客户端处理请求同理:
- 取出请求的特征,比如目标域名、目标 IP、发起请求的程序;
- 从规则列表的第一条开始逐条比对;
- 命中某一条,就按这条指定的处理方式办:直连、交给某个策略组,或者拒绝;
- 如果前面都没命中,最后一条兜底规则会接手。
“第一条命中即停止”这个特点非常关键,后面讲顺序时会用到。分流之后具体用哪个节点,是策略组的事,见 策略组是什么。
分流规则按什么来匹配
一条分流规则通常由“匹配类型、匹配内容、处理方式”三部分组成。常见的匹配类型如下,具体支持情况以内核文档为准:
| 匹配依据 | 判断的是什么 | 适合的场景 |
|---|---|---|
| 域名 | 目标网站的域名,可以精确,也可以匹配后缀或关键词 | 最常用,大多数网站都能靠域名区分 |
| IP 段 | 目标服务器的 IP 地址范围 | 域名不好区分、直接访问 IP 的情况 |
| 进程名 | 发起请求的程序 | 让某个软件固定直连或固定走代理 |
| 地理归属 | 目标 IP 属于哪个地区 | 做“国内直连”这类粗粒度分流 |
| 兜底 | 前面都没命中的全部请求 | 作为最后一条,决定默认怎么办 |
多数用户不需要自己写这些,订阅里通常自带了一份规则,其中还会引用若干“规则集”。
规则集:为什么要更新
规则集是把成千上万个域名或 IP 段整理成一份列表,让规则只需要写一行引用。它的好处是方便统一维护,坏处是它会“过期”:新网站不断出现,旧地址不断更换,一份很久没更新的规则集,会漏掉不少新条目。
漏掉的后果有两种:
- 该直连的被当成其他流量,走了代理,国内网站变慢、白白消耗机场流量;
- 该走代理的没被识别,直接走了直连,于是打不开。
所以要留意规则集有没有自动更新的设置,更新周期不必太短,但也别几个月不动。想看更完整的规则模式说明,读 Clash 规则模式怎么选。
规则顺序:为什么靠前的优先
下面用一个假设的例子演示顺序的作用,规则内容是举例:
| 顺序 | 规则(举例) | 处理 |
|---|---|---|
| 1 | 某个具体的视频网站域名 | 走“视频”策略组 |
| 2 | 某类视频网站的通用后缀 | 走“视频”策略组 |
| 3 | 国内常见网站 | 直连 |
| 4 | 兜底 | 走“默认”策略组 |
如果把第 3 条放到最前面,而它又恰好把那个视频网站也覆盖了,那么第 1 条就永远不会生效。所以经验是:越具体的越靠前,越宽泛的越靠后,兜底永远在最后。
国内外分流,和 TUN、DNS 是什么关系
分流只负责“怎么处理进来的请求”,至于有多少请求能进来,是另外两件事决定的:
- **系统代理与 TUN 模式。**它们决定哪些程序的流量会交给客户端,详见 TUN 模式是什么意思;
- **DNS。**域名解析的结果和位置,会影响规则按域名还是按 IP 命中,也关系到是否泄露访问记录,见 DNS 泄露是什么。
把三者的分工记清楚:系统代理和 TUN 管“进来多少”,规则管“进来之后去哪”,DNS 管“域名解析成什么”。分流出问题时,要逐层排查,而不是只盯着规则。
订阅更新之后,规则分流为什么会“回到从前”
很多人辛辛苦苦改了几条规则,订阅一更新,修改就不见了。原因很简单:订阅更新会用服务商提供的新配置整体替换旧文件,你手动改在文件里的内容自然被覆盖。比较稳妥的做法是:
- 不直接改订阅生成的配置文件,而是使用客户端的覆写或扩展配置功能,把自己的规则放在单独的地方;
- 覆写里的规则通常能在订阅更新之后继续生效,同时不影响服务商后续对节点的调整;
- 改完之后,到连接日志里确认新规则确实被命中,而不是只看配置文件里有没有那几行字;
- 如果长期需要一批自定义的国内外分流条目,把它们整理成自己的规则集,更新起来更省事。
这样处理,规则分流就既能跟上服务商的变化,也保留了你自己的偏好。
怎么验证分流有没有生效
不要凭感觉,按下面几步查:
- **先看模式。**确认当前是规则模式,而不是全局或直连;
- **看连接日志。**多数客户端能显示每个请求命中了哪条规则、用了哪个策略组;
- **对比出口。**打开一个能显示出口位置的页面,国外服务应显示节点所在地区,国内服务应显示你本地的出口;
- **看流量。**规则模式下,国内网站不应当明显消耗机场流量;
- **隔离变量。**把可疑网站单独用全局模式访问一次,能打开,说明问题多半在规则覆盖,而不是节点。
遇到“开了代理后国内网站变慢”,对照这几步基本能定位。
常见的误解
- **“规则越多越准确。”**规则多只会增加维护负担,关键是顺序和规则集的新鲜度;
- **“订阅自带的规则一定是对的。”**质量取决于服务商的配置,爱梯子无法替任何一份订阅担保;
- **“改了规则文件就行。”**订阅更新可能覆盖你的改动,需要用客户端提供的覆写功能;
- **“分流出错一定是机场的问题。”**多数时候是模式、规则集或 DNS 的问题。
下一步:先弄懂,再动手调
如果你只是日常使用,保持规则模式、定期更新规则集,就足够了。想进一步理解策略组如何接力,读 策略组是什么;想挑一家支持 Clash 订阅的机场,可以用 选机场向导 筛选,再翻 机场推荐榜 核对资料;导入订阅的具体步骤,见 Clash 订阅怎么导入。
- 本文讲原理和排错思路,不提供规则文件,也无法判断某份订阅自带规则的质量。
- 规则的具体语法与匹配类型以内核官方文档为准,不同内核版本支持的类型可能不同。
- 分流是否准确还取决于 DNS 与规则集更新情况,本文只列出需要核对的几处,不替你诊断具体网络。
资料里明确写了支持 Clash 的几家
把 Clash 写进客户端栏的品牌很少。没写不等于不能用,多数机场都能给 Clash 格式的订阅,只是档案里找不到可以核对的说法。
看 Clash 上手手册 → 数据来自机场档案,价格以官网结账页为准。
本文引用的官方来源
这篇的几个常见问题
规则分流和全局模式有什么区别?
全局模式不看规则,所有流量都交给你选的节点;规则分流则对每个请求逐条匹配,该直连的直连,该走代理的才走代理。日常上网用规则分流,国内网站更快也不消耗机场流量,全局模式多用于临时排查。
规则集是什么,为什么要更新?
规则集是把大量域名或 IP 段整理成的一份列表,可以被规则引用,便于统一维护。网站和地址会不断变化,旧的规则集可能漏掉新出现的域名,导致该直连的走了代理或相反,所以需要定期更新。更新方式取决于客户端和订阅的配置。
规则的顺序真的有那么重要吗?
重要。客户端从上往下匹配,命中第一条就停止,后面的规则不再看。如果一条宽泛的规则排在具体规则前面,具体规则就永远没机会生效。通常把更具体的规则放前面,兜底规则放最后。
为什么有的网站明明是国内的,却走了代理?
常见原因有:规则集没更新、该域名没被任何直连规则覆盖、DNS 解析结果让匹配结果不同,或者当前其实处于全局模式。先确认模式,再更新规则集,最后检查 DNS 相关设置。