📚 本文是 科学上网完全指南(2026最新版) 系列教程之一。Clash 的完整入门(客户端选择、订阅导入、TUN 模式)见总览页。这篇只聊「规则」:怎么理解它的工作机制、怎么写自己的分流、怎么用现成规则集,最后有一份可以直接抄的模板。
Clash 和 VPN 最大的区别就是规则分流(自定义规则):每条流量先过一遍规则表,命中哪条就按哪条走。同样开一个网页,国内站点直连不占代理带宽,海外站点自动走代理,广告域名在规则层就被扔掉了。规则写得好不好,日常上网体感差别不小。
一、规则怎么工作:自上而下,先命中先赢
Clash 的 rules 是一个数组,内核从第一条开始逐条比对,第一条命中的规则生效,后面的不再看。所以规则顺序非常关键:
- 放在前面的规则优先级高。想强制某域名走代理,就把它放在宽松规则之前。
MATCH是兜底规则,匹配所有剩余流量,必须放在最后一行,否则它后面的规则永远没机会执行。- 太宽泛的规则放太前,会让后面的精细规则失效。比如把
GEOIP,CN,DIRECT放在最前面,那所有国内 IP 的流量(包括你想强制代理的)都会直连。
怎么确认流量到底命中了哪条规则?打开客户端的 Connections(连接) 面板,每一条连接都会显示它命中的规则名。规则排查基本就从这里看起。
二、规则类型全解
| 规则类型 | 匹配对象 | 示例 |
|---|---|---|
DOMAIN |
精确域名 | DOMAIN,example.com,PROXY |
DOMAIN-SUFFIX |
域名后缀(含子域名) | DOMAIN-SUFFIX,google.com,PROXY |
DOMAIN-KEYWORD |
域名包含关键词 | DOMAIN-KEYWORD,google,PROXY |
DOMAIN-REGEX |
域名正则匹配 | DOMAIN-REGEX,^.+\.googlevideo\.com$,PROXY |
IP-CIDR |
IP 段(IPv4) | IP-CIDR,192.168.0.0/16,DIRECT |
IP-CIDR6 |
IP 段(IPv6) | IP-CIDR6,2001:db8::/32,DIRECT |
SRC-IP-CIDR |
来源 IP 段 | SRC-IP-CIDR,192.168.1.0/24,DIRECT |
SRC-PORT |
来源端口 | SRC-PORT,7890,PROXY |
DEST-PORT |
目标端口 | DEST-PORT,443,PROXY |
PROCESS-NAME |
进程名 | PROCESS-NAME,chrome.exe,PROXY |
PROCESS-PATH |
进程完整路径 | PROCESS-PATH,/usr/bin/docker,DIRECT |
NETWORK |
网络类型 | NETWORK,udp,DIRECT |
GEOIP |
IP 归属地 | GEOIP,CN,DIRECT |
GEOSITE |
域名分类数据库 | GEOSITE,google,PROXY |
RULE-SET |
引用外部规则集 | RULE-SET,reject,REJECT |
MATCH |
兜底(匹配所有) | MATCH,PROXY |
AND / OR / NOT |
逻辑组合 | AND,((GEOSITE,youtube)),PROXY |
其中 PROCESS-NAME 和 PROCESS-PATH 需要开启 find-process-mode 才能生效(Mihomo 默认支持)。AND/OR/NOT 是 Mihomo 的增强逻辑规则,完整语法以 Mihomo 官方文档 为准,适合复杂场景,普通用户用到 GEOSITE + GEOIP + MATCH 三件套就够了。
三、GEOIP 和 GEOSITE:地区分流的两件套
GEOIP 按 IP 归属地匹配,一个典型用法:GEOIP,CN,DIRECT 让国内 IP 直连(访问百度、淘宝、银行等不走代理),GEOIP,private,DIRECT 让内网 IP 直连(访问路由器、NAS)。
GEOSITE 按域名分类数据库匹配,比 GEOIP 更精细。常用分类:
GEOSITE,cn— 国内网站域名集合,直连GEOSITE,google/GEOSITE,telegram— 特定服务域名集合,走代理GEOSITE,ads— 广告域名合集,REJECT 掉GEOSITE,category-games— 游戏平台域名
两者常搭配成一套”国内直连、国外代理”的标准分流:
rules:
- GEOSITE,cn,DIRECT # 国内域名直连
- GEOIP,CN,DIRECT # 国内 IP 直连
- GEOIP,private,DIRECT # 内网 IP 直连
- MATCH,PROXY # 其余全部走代理
geosite 和 geoip 的数据源在 Mihomo 里通过 geodata-mode 和 geox-url 配置,默认使用 MetaCubeX 维护的数据库,建议开启自动更新:
geodata-mode: true # true 用 .dat 格式,false 用 mmdb(更精准)
geo-auto-update: true
geo-update-interval: 24 # 每 24 小时自动更新
geox-url:
geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"
四、rule-providers:把规则放到配置文件外面
规则一多,配置就会变得又长又乱,而且订阅更新时容易丢。rule-providers 就是为这个场景准备的:规则可以放在外部文件或远程 URL,客户端定时拉取更新。
先声明规则源,再在 rules 里用 RULE-SET 引用:
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 # 24 小时更新一次
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,PROXY
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
几个要注意的点:
behavior有三种:domain(纯域名列表)、ipcidr(纯 IP 段列表)、classical(完整规则语法,一行一条规则)。从 URL 拉取公开规则集时,先看它的格式再选对应 behavior。type可以填http(远程)或file(本地文件)。本地规则文件写法:behavior 为 domain 时每行一个域名(+.openai.com表示包含子域名);classical 时每行一条完整规则。- 社区常用的现成规则集:Loyalsoldier/clash-rules(reject/proxy/direct,大多数订阅转换工具的默认来源)、MetaCubeX/meta-rules-dat(Mihomo 官方 GeoIP/GeoSite 数据库)。
五、三个常见场景
场景一:国内直连、国外代理(基础分流)
刚拿到订阅时的默认规则通常已经是这个效果。如果订阅的规则不合适,可以用第三节那套 GEOSITE,cn + GEOIP,CN + MATCH 兜底,简单可靠。
场景二:广告拦截
不想装额外软件,用规则就能挡掉大部分广告:
rules:
- RULE-SET,reject,REJECT # 现成广告域名名单
- GEOSITE,ads,REJECT # geosite 广告分类
- ...其他规则...
注意 REJECT 规则要放在代理规则之前,否则广告域名先被代理规则接走了。
场景三:特定服务走特定节点
让 ChatGPT、Netflix 这类服务走指定的节点组,而不是跟其他流量混在一起:
proxy-groups:
- name: "🤖 AI 服务"
type: select
proxies: ["节点A", "节点B", "🚀 节点选择"]
rules:
- GEOSITE,openai,🤖 AI 服务
- GEOSITE,netflix,🎬 流媒体
- GEOIP,CN,DIRECT
- MATCH,🚀 节点选择
这样 ChatGPT 固定走你选的 AI 节点,其他流量走自动选择,互不干扰。
六、在机场订阅上叠加自己的规则
机场订阅是托管配置,直接改的话,下次订阅自动更新就把改动冲掉了。推荐做法是叠加而不是修改:
- Clash Verge Rev:用「全局扩展配置」里的 Merge 功能,写一段要追加的 rules,客户端会把它合并到订阅配置上。这是最省事的方式。
- 其他客户端:看是否支持”本地配置覆盖”或”片段”功能;没有的话,可以把订阅转换后另存为本地配置再手动加规则,代价是失去自动更新。
叠加时记住一个原则:你的自定义例外要放在订阅原有规则的前面(Merge 的规则默认插在最前)。不然内网、支付这些必须直连的流量,可能被订阅自己的规则先接走了。
七、常见问题
Clash 自定义规则怎么添加?
编辑配置文件的 rules 段即可。每条规则一行,格式是”类型,匹配条件,去向”,例如 DOMAIN-SUFFIX,google.com,PROXY。规则自上而下匹配,第一条命中的生效,最后用 MATCH 兜底。不熟悉 YAML 的话,建议用 Clash Verge Rev 的全局扩展配置(Merge)或本地覆盖功能叠加规则,不要直接改订阅文件。
Clash 的 rule-provider 是什么?
rule-provider 是把规则放到配置文件外面的一种机制,可以引用本地文件或远程 URL(如 GitHub 上的规则集),并定时自动更新。它有三种 behavior:domain(域名列表)、ipcidr(IP 段列表)、classical(完整规则语法)。常用资源如 Loyalsoldier/clash-rules 的 reject、proxy、direct 规则集。
GEOIP 和 GEOSITE 有什么区别?
GEOIP 按 IP 归属地匹配,如 GEOIP,CN,DIRECT 让国内 IP 直连;GEOSITE 按域名分类数据库匹配,如 GEOSITE,google,PROXY 让 Google 域名走代理。GEOIP 管的是 IP 段,GEOSITE 管的是域名分类,两者常搭配使用:国内域名直连 + 国内 IP 直连 + 其余走代理。
Clash 怎么屏蔽广告?
用 REJECT 去向即可,例如 GEOSITE,ads,REJECT 或引用现成广告域名规则集 RULE-SET,reject,REJECT。Loyalsoldier/clash-rules 的 reject.txt 收录了常见广告和追踪域名,通过 rule-provider 拉取后自动更新,比手动维护名单省心得多。
机场订阅会被我自定义的规则覆盖吗?
不会。机场订阅是托管配置,定期自动拉取会覆盖你直接改的内容。推荐做法是用客户端的本地扩展功能(Clash Verge Rev 的全局扩展配置 / Merge)或订阅转换工具的规则叠加,把你的规则插在订阅规则之前,这样订阅更新后你的自定义规则依然生效。
规则不生效?先看这三个地方:
- 顺序。宽泛规则放在精细规则前面,后者永远轮不到。用 Connections 面板确认实际命中的规则。
- 名称。rules 里引用的策略组名称必须和 proxy-groups 定义完全一致,区分大小写,emoji 也要一样。
- 缩进。配置里不能用 Tab 缩进,冒号后面必须有空格。YAML 报错时第一反应检查缩进。
规则能防 DNS 泄露吗?
规则只负责分流,DNS 污染要靠 DNS 配置解决。如果开了 fake-ip 模式个别 App 出问题,可以把域名加进 fake-ip-filter。
规则集拉取失败怎么办?
rule-provider 的 URL 无法访问时,该规则集会被跳过,流量落到后面规则。检查网络连通性、URL 是否失效(GitHub 直连不稳可以换 jsdelivr CDN 镜像),或者换成 type: file 手动维护本地规则。
还想更精细?
Mihomo 还支持脚本规则(Script Rules)和子规则(Sub-Rules),可以在主规则命中后继续做二级分流,适合复杂路由场景,新手阶段用不上。
DIRECT / PROXY / REJECT 这些去向词、规则模式和全局模式的区别,在 Clash 机场专用名词解释字典 里都有。协议层面还不熟的话,先看 2026 Clash 机场各种协议差别介绍与选择指南。Clash 和 Mihomo 的关系见 Mihomo 是什么?Mihomo 和 Clash 有什么区别,需要接管全局流量再翻 Clash TUN 模式完全指南。