分流规则怎么写?让国内直连、国外走代理
分流规则是一份自上而下逐条匹配、命中即停的清单,每条规则指定某类流量走直连、拒绝或某个策略组。实现国内直连、国外走代理,通常靠域名规则、地理位置规则和最后的兜底规则配合;自己加的规则要放在订阅规则之前。
分流规则怎么写?先给结论:它是一份自上而下逐条匹配、命中即停的清单,每条规则写明“某类流量交给谁”,交给直连、拒绝,或者交给某个策略组。让国内直连、国外走代理,通常靠三种东西配合:按域名匹配的规则、按地理位置匹配的规则,以及最后一条兜底。读懂顺序和类型,你就能看懂机场配置里的规则,也能自己加几条。
分流规则是什么:一张自上而下的匹配清单
开了代理以后,每个网络请求都要有一个去处。分流就是替每条连接决定去处:这个直接连,那个走节点,另一个干脆拒绝。词典里有简短的解释:分流和直连。
规则就是把“什么样的流量”和“去哪里”配成一对写下来,再排成一排。内核拿到一条连接,从第一条开始比对,命中就按那一条走,不再往下看。这套机制只在Clash 规则模式下起作用,全局模式和直连模式会绕过规则,这一点要先分清。
分流规则的价值在于:
- 国内网站走本地宽带,不绕海外,也不消耗节点流量。
- 国外网站按需走节点,不同类型的服务可以交给不同的策略组。
- 局域网地址、内网服务不会被误送出去。
- 广告或不想要的域名可以直接拒绝。
规则的基本写法和匹配顺序
在 Mihomo 系配置里,规则写在 rules 下,每条是一行逗号分隔的文本。基本格式是:类型、匹配内容、去向,有些规则末尾还可以跟附加选项。下面是只展示结构的示意,域名用占位,不是推荐:
rules:
- DOMAIN,www.example.com,DIRECT
- DOMAIN-SUFFIX,example.com,代理选择
- DOMAIN-KEYWORD,example,代理选择
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- RULE-SET,my-rules,代理选择
- MATCH,代理选择
这几行里藏着三条要记住的规则:
- 自上而下,命中即停。 请求访问 www.example.com 时,第一行就命中,直接走直连,后面第二行虽然也能匹配到它,但已经没机会了。
- 去向可以是三类东西。
DIRECT是直连,REJECT是拒绝,其余写策略组的名字,策略组的内容见策略组怎么用。 - MATCH 要放在最后。 它匹配一切,放在中间就会让它后面的规则全部失效。
策略组的名字必须和 proxy-groups 里的名字一字不差,包括空格和大小写,写错会导致配置加载失败或者规则不生效。完整的字段说明以 Mihomo 官方文档 为准。
常见规则类型怎么选
下表只列最常用的几类,类型的完整列表和新增类型以官方文档为准:
| 规则类型 | 匹配什么 | 适合的场景 | 注意事项 |
|---|---|---|---|
| DOMAIN | 完整域名,必须一模一样 | 只想管某一个具体地址 | 子域名不会命中 |
| DOMAIN-SUFFIX | 域名后缀,该域名及其所有子域名 | 最常用,管一个网站的全部地址 | 写成 example.com,不要带前面的点 |
| DOMAIN-KEYWORD | 域名里包含某个关键词 | 一类命名相似的域名 | 容易误伤,关键词别太短 |
| IP-CIDR | 一段 IP 地址 | 局域网、内网、已知的地址段 | 通常配合 no-resolve |
| GEOIP | 目标 IP 所属的国家或地区 | 按地理位置粗分国内外,常作补充 | 依赖地理数据库,数据库过旧会有偏差 |
| RULE-SET | 引用一个规则集 | 批量的域名或地址 | 取决于规则集的内容和更新 |
| MATCH | 一切未命中的流量 | 作为最后一条兜底 | 必须放在最后 |
选择的思路是:能用 DOMAIN-SUFFIX 就不用 DOMAIN-KEYWORD,范围越精确,越不容易误伤。
GEOIP 要多说一句。判断国家需要目标 IP,而用户请求的往往是域名,所以内核可能要先解析一下域名。这会牵涉到 DNS 的行为,以及解析结果是否可信,这部分放在 Clash DNS 怎么设置 里讲,这里只要知道:把 GEOIP 放在偏后的位置,让域名规则先行,通常更稳妥。
怎么实现国内直连:两种分流思路
同样是让国内直连、国外走代理,有两种相反的设计思路,区别在最后那条 MATCH 指向哪里:
| 对比项 | 国内直连为主,其余走代理 | 国外代理为主,其余走直连 |
|---|---|---|
| 最后一条 MATCH | 指向代理 | 指向直连 |
| 规则里列的是 | 国内域名和地址(直连) | 需要代理的国外域名(走代理) |
| 优点 | 新出现的国外网站默认就能打开,不容易漏 | 国内网站默认直连,几乎不会绕路 |
| 缺点 | 没收录的国内小站会被带去走代理,可能变慢 | 没收录的国外网站默认直连,可能打不开 |
| 常见于 | 多数机场下发的配置 | 手写的精简配置 |
如果你是:
- 刚导入订阅、想直接用的人: 用订阅自带的规则,一般属于第一种。遇到个别国内站变慢,再往前加一条直连规则,见开了梯子国内网站变慢。
- 想把国内体验做到干净的人: 可以考虑第二种,但要接受偶尔有国外站需要手动补规则。
- 不确定的人: 先用第一种,因为“漏了一个国外站”比“多绕了一个国内站”更难察觉原因。
规则集是什么,什么时候用
自己一条条写域名不现实,国内常用的域名成千上万。规则集就是把这些规则存成一份清单,由客户端定时下载并引用。在配置里,它通常有两部分:一处定义规则集的来源,一处在规则里引用它。下面是示意,字段含义以官方文档为准:
rule-providers:
my-rules:
type: http
behavior: domain
url: "https://rules.example.com/my-rules.txt"
path: ./ruleset/my-rules.yaml
interval: 86400
rules:
- RULE-SET,my-rules,DIRECT
用规则集要注意三件事:
- 它决定的是走向,不是内容。 规则集不能读取你访问的页面,但维护者可以随时改动清单,影响分流结果。
- 来源要可信。 优先用订阅或客户端已经带好的,不要随手引用来路不明的链接。
- 有刷新周期。 清单不是实时的,新网站不在里面时,用你自己的规则补上。
这里不推荐任何具体的第三方规则集,需要的话去客户端自带的选项或官方文档里找。
怎么加自己的规则,又不被订阅更新覆盖
很多人踩过这个坑:直接打开订阅生成的配置文件,在里面加了规则,结果更新一次订阅就全没了。原因是更新订阅会用服务器返回的内容整体替换本地配置。
正确的思路是不改订阅本身,而是在它之外另存一份你的补充,由客户端每次更新后自动合并。很多 Clash 系客户端提供这类功能,名称有“覆写”“合并”“扩展配置”等,叫法和写法因客户端而异。部分客户端的合并配置支持类似下面的写法,字段名请以你的客户端文档为准:
prepend-rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- DOMAIN-SUFFIX,example.org,代理选择
操作步骤是:
- 在客户端里找到覆写或合并配置的入口,新建一份。
- 把你的规则写进去,并且放在订阅规则的前面。因为订阅通常以 MATCH 收尾,如果你的规则追加在最后,永远轮不到它。
- 保存并启用,然后更新一次订阅。
- 到连接页面核对规则是否生效。
不同客户端的入口和写法,可以看Clash Party 使用教程里关于覆写的部分。订阅的基本用法见订阅链接怎么用。
怎么确认分流规则已经生效,写错了怎么查
写完规则不要凭感觉判断,用下面的步骤核对:
- 确认模式是规则模式。 全局和直连模式不看规则。
- 访问一个被你规则覆盖的网站。 打开客户端的连接页面,找到它的连接。
- 看命中的规则和出口。 连接记录里一般会显示命中了哪条规则,以及最终走的是直连还是哪个节点。命中的就是你写的那条,说明生效。
- 没命中就看顺序。 如果命中的是更靠前的另一条,说明有更宽的规则抢先了,把你的规则往前挪。
- 断开旧连接再试。 已有的长连接不会因为改了规则立刻重建。
常见的写错点和修法:
| 问题 | 表现 | 修法 |
|---|---|---|
| 策略组名字写错 | 配置加载失败,或规则不生效 | 和 proxy-groups 里的名字逐字核对 |
| 宽规则放在窄规则前面 | 窄规则永远命中不了 | 调换顺序,窄的在上 |
| MATCH 放在中间 | 它后面的规则全部失效 | 把 MATCH 移到最后 |
| 域名带了多余字符 | 规则不命中 | DOMAIN-SUFFIX 写 example.com,不加前面的点和空格 |
| 直接改订阅配置 | 更新后规则消失 | 改用覆写或合并 |
| GEOIP 位置太靠前 | 个别域名被误判 | 让域名规则先于 GEOIP |
下一步:先看懂现成的,再加你自己的
- 先打开客户端,找到现在使用的规则,从上到下读一遍,对照上面的类型表,能认出每一条的意思。
- 遇到国内网站慢或个别网站走错,用连接页面定位,然后加一条前置规则,排查思路见开了梯子国内网站变慢。
- 想让某类服务固定走某个节点,去建一个策略组再引用它,见策略组怎么用。
- 还没有订阅,先到梯子推荐筛选候选,再用下载中心挑一个支持覆写的 Clash 系客户端。
这篇没有覆盖的
- 规则字段的完整写法和新增类型以 Mihomo 官方文档为准,本文只讲常用部分。
- 各客户端的覆写或合并功能的写法不同,本文只讲思路,具体字段以客户端文档为准。
- 本文不推荐任何具体的第三方规则集,也不判断某个网站应该走哪条线路。
资料里明确写了支持 Clash 的机场
把 Clash 写进“客户端支持”的品牌目前很少。没写不等于不能用,多数机场都提供 Clash 格式订阅,只是资料里没有可核对的说明。
本文引用的官方来源
- Mihomo(Clash Meta)文档(wiki.metacubex.one)
以上链接均为官方页面,选梯子在 2026-10-08 核对过;个别网站会拦截自动化访问,用浏览器直接打开即可。平台规则可能随时调整,以官方页面当前内容为准。
分流规则常见问题
分流规则是从上往下匹配还是从下往上?
从上往下。内核按顺序逐条检查,命中的第一条规则就决定这条连接的去向,后面的规则不再看。所以范围小、需要优先的规则要放在上面,范围大的放在下面,最后一条用兜底规则收尾。
国内网站走了代理变慢,怎么加一条规则让它直连?
先在客户端的连接页面确认这个网站的域名,再加一条按域名后缀匹配、指向直连的规则,放在配置规则的靠前位置。注意要放在会误命中它的那条规则之前,否则不会生效。加完后重新访问,到连接页面核对命中情况。
规则集和自己写规则有什么区别?
规则集是别人维护好的一批规则,客户端定时下载并引用,一条引用就能覆盖成千上万个域名或地址。自己写的规则适合少量、临时的调整。两者可以配合:大批量的交给规则集,个人例外写在自己的规则里并放到前面。
订阅更新之后,我手动加的规则没了,怎么办?
因为更新订阅会用服务器返回的内容覆盖本地配置,直接改配置文件的内容会丢。正确做法是使用客户端的覆写或合并功能,把你的规则单独保存,每次更新订阅后由客户端自动合并进去。具体写法看你所用客户端的文档。
GEOIP 规则里的 no-resolve 是什么意思?
对基于 IP 的规则,如果请求的是域名,内核默认可能会先解析出 IP 再判断。no-resolve 表示不要为此去解析域名,只匹配已经是 IP 的请求。常用于局域网地址规则,可以减少多余的 DNS 查询。具体行为以官方文档为准。
接着读
- 使用教程 · Clash 规则模式、全局模式、直连模式怎么选
- 使用教程 · 策略组怎么用?自动选择、故障转移与手动选节点
- 术语 · 分流是什么意思
- 术语 · 直连是什么意思
- 故障排查 · 开了梯子国内网站变慢?分流没生效的修法
- 使用教程 · Clash DNS 怎么设置?fake-ip 与 redir-host
- 使用教程 · OpenClash 使用教程:路由器上导入订阅与模式选择