Clash 设置代理规则:从 Rule 模式到命中验证
简答:Clash 设置代理规则的关键不是只添加一行 YAML,而是同时确认三件事:客户端处于 Rule 模式、规则顺序正确、规则最后指向真实存在的策略组。最快做法是先把更具体的规则放在前面,再用连接记录检查命中的规则和出口;若完全没有命中记录,先排查系统代理、TUN 或客户端是否真正接管了流量。
定义:Clash 代理规则是根据域名、IP 地址段、进程、端口或其他条件,把连接交给代理策略、直连或拒绝处理的分流规则。
先试这一步:用 Rule 模式和最小规则验证
本文是一篇第三方使用指南,不代表 Clash 或任何客户端官方。以 Mihomo 兼容配置为例,先不要一次加入大量规则:打开客户端的代理或配置页面,将运行模式切换为 Rule Mode,中文界面通常显示为“规则”;Global Mode 是“全局”,Direct Mode 是“直连”。Clash Verge Rev 的界面源码使用了 Rule Mode、Global Mode 和 Direct Mode 这些名称,具体显示仍以你安装的客户端界面为准。Clash Verge Rev 界面字段
| 现象 | 优先检查 | 判断方法 |
|---|---|---|
| 所有请求都直连 | 是否误用了 Direct Mode | 切回 Rule Mode,再观察连接记录 |
| 规则显示命中但出口不对 | 规则顺序或策略组名称 | 检查更具体的规则是否在更宽泛规则上方 |
| 完全没有连接记录 | 系统代理、TUN 或应用自身代理 | 先确认流量是否进入 Clash,再改规则 |
| 局域网手机或电视不受规则影响 | allow-lan 与局域网访问地址 | 确认监听地址、端口和防火墙允许局域网访问 |
规则模式只决定已经进入内核的连接如何分流;系统代理决定部分桌面应用是否把流量交给客户端,TUN 则是通过虚拟网卡接管更多系统流量。不要把“开启 TUN”等同于“已经启用规则”。
Clash 规则的基本结构:目标、条件与策略组
一条常见规则由三部分组成:规则类型、匹配内容、处理目标。例如:
DOMAIN-SUFFIX,example.com,Proxy
- DOMAIN-SUFFIX:匹配域名后缀,例如
example.com可以匹配主域名及其子域名。 - example.com:需要匹配的域名或其他条件。
- Proxy:命中后交给名为 Proxy 的代理策略组;这个名称必须在
proxy-groups中真实存在。
常用类型可以这样理解:DOMAIN 匹配完整域名;DOMAIN-SUFFIX 匹配域名后缀;DOMAIN-KEYWORD 按域名关键词匹配;IP-CIDR 和 IP-CIDR6 匹配 IP 地址段,其中 IP-CIDR6 是 IPv6 规则类型;GEOIP 按目标 IP 的国家或地区代码匹配;PROCESS-NAME 按进程名匹配,在 Android 上还可用于匹配应用包名。mihomo 路由规则类型与优先级说明
RULE-SET 用于引用规则集,使用时还要配置对应的 rule-providers;MATCH 是无条件兜底规则,通常放在最后。mihomo rule-providers 内容格式
规则并不等于节点。规则右侧写的是策略组名称,而不是随意写一个节点别名。若配置里没有名为 Proxy 的策略组,可能出现配置校验失败、无法加载或命中后无法正常选择出口的情况。
可直接修改的 YAML 示例:具体规则必须排在前面
下面示例只演示规则关系,节点信息和订阅地址留空;请把 Proxy、Direct 换成你配置中实际存在的策略组名称。关键原则是:规则从上到下匹配,第一条符合条件的规则会停止继续向下匹配,因此更具体的规则必须写在更宽泛的规则上方。mihomo 规则优先级说明
mode: rule
allow-lan: false
proxy-groups:
- name: Proxy
type: select
proxies:
- DIRECT
- name: Direct
type: select
proxies:
- DIRECT
rules:
- DOMAIN-SUFFIX,ads.example.com,REJECT
- DOMAIN,login.example.com,Direct
- DOMAIN-SUFFIX,example.com,Proxy
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,Proxy这里的第一条规则先拒绝 ads.example.com,然后才让其他 example.com 子域名进入 Proxy。若把 DOMAIN-SUFFIX,example.com,Proxy 放到拒绝规则前面,广告域名会先命中宽泛规则,后面的 REJECT 就不会生效。
如果只想让某个完整域名直连,用 DOMAIN;如果想覆盖主域名及子域名,用 DOMAIN-SUFFIX;如果只是临时测试某一类域名,才考虑 DOMAIN-KEYWORD,因为关键词范围可能比预期更宽。局域网地址通常用 IP-CIDR 或 IP-CIDR6 放在较靠前位置,避免被后面的通用代理规则接管。
按网站、应用和局域网设备设置分流
指定网站走代理或直连
网站分流优先从域名规则开始。假如只处理一个站点,可以使用:
rules:
- DOMAIN,service.example,Proxy
- DOMAIN-SUFFIX,example.cn,DIRECT
- MATCH,Proxy如果一个网站还会调用多个关联域名,仅添加首页域名可能不够,需要在连接记录中查看实际请求的域名,再逐条确认是否应加入规则。不要仅凭浏览器地址栏判断全部请求。
指定应用或进程走代理
支持进程识别的内核可以使用 PROCESS-NAME,例如:
rules:
- PROCESS-NAME,example.exe,Proxy
- PROCESS-NAME,example-helper.exe,Proxy
- MATCH,DIRECT进程名规则受操作系统、客户端权限、TUN 接管方式和内核设置影响,并不是所有应用都能稳定识别。Android 场景还可能使用应用包名;Windows、macOS 和 Linux 则应先确认客户端能看到对应进程,再判断规则是否匹配。若连接记录中进程字段为空,先不要急着改规则,先检查客户端的进程识别或 TUN 状态。
让手机、电视等局域网设备使用电脑上的 Clash
这类场景至少需要同时满足:电脑端允许局域网访问、客户端监听的地址不是只限本机、局域网设备填写了正确的 HTTP 或 SOCKS 端口,并且系统防火墙允许该端口。配置示例中的 allow-lan: true 只是允许局域网访问的开关,不会自动替你配置手机或电视端的代理,也不会改变规则顺序。若只在本机使用,建议保持关闭,减少不必要的局域网暴露。
Clash Verge Rev 中修改规则与验证命中结果
如果你使用 Clash Verge Rev,先在配置文件列表中选中目标配置,再寻找“编辑规则”或类似入口;项目文档说明可以通过配置文件的编辑规则入口添加自定义规则,并且这种编辑方式用于避免普通订阅更新直接抹掉规则。Clash Verge 自定义规则配置说明
- 备份当前配置,记录原来的策略组名称。
- 确认运行模式为“规则”,不要在“全局”或“直连”模式下判断规则是否生效。
- 先只加入一条容易验证的
DOMAIN或DOMAIN-SUFFIX规则。 - 重新加载配置,打开连接记录或 Connections 页面。
- 访问目标网站,查看连接的规则类型、匹配内容和实际出口。
- 确认后再逐步加入 IP、GEOIP、进程或 RULE-SET 规则,每次只改一个变量。
如果远程订阅更新后自定义规则消失,不要直接把本地修改写回远程地址;应使用客户端提供的规则编辑、覆写或扩展配置机制,并在更新后重新检查规则顺序。不同版本的界面入口可能调整,以实际客户端显示为准。
规则不生效:按“未进入、未匹配、出口错误”三类排查
第一类:流量没有进入 Clash。检查系统代理是否开启、浏览器或应用是否使用了自己的代理、TUN 是否获得系统授权。Windows 检查客户端服务模式和系统代理;macOS 检查网络扩展或 VPN 授权;Linux 检查运行权限、路由和防火墙;Android 或 iOS 重新授权 VPN 后再测试。若连接页面完全没有新增请求,先解决接管问题,不要继续堆规则。
第二类:已经进入但没有匹配。检查域名是否写错,DOMAIN 与 DOMAIN-SUFFIX 是否混用,规则是否被前面的宽泛规则抢先命中,以及是否忘记在末尾放 MATCH。可以先暂时删除其他规则,只保留一条测试规则,确认它能命中后再恢复配置。
第三类:匹配正确但出口不对。检查规则右侧的策略组名称是否真实存在,并确认策略组当前选择的节点或出口。若规则指向 Proxy,配置中却只有 代理 或其他名称,规则本身即使命中也不能按预期工作。
开启日志时,优先把日志级别调整为 info 或更详细级别,并使用客户端日志页面;命令行内核可以前台运行并观察输出。若使用 systemd 服务,检查 systemctl status 和 journalctl -u 的服务日志。JSON/YAML 语法错误与 unknown field 要分开处理:前者先定位缩进、冒号、引号和行号;后者说明字段名称可能不被当前内核支持,应对照对应版本的官方字段文档,不要把相近字段名直接替换。
TUN 配置不要把不存在或未经核对的字段写进去。mihomo 文档公开的常见字段包括 dns-hijack、stack、auto-route 和 auto-detect-interface;DNS 劫持示例可写为 dns-hijack: [any:53],具体取值和平台限制应以字段文档为准。mihomo TUN 字段说明
若问题表现为连接超时、拒绝或 TLS 握手失败,还要区分本地端口错误和出站链路错误:先用浏览器或连接页面确认本地监听端口,再在同一策略组下只更换一个节点做对照。不要用 ping 判断代理 DNS 是否正常;可以用 nslookup 对比解析结果,再结合连接页面判断请求是否真的走过代理。遇到本地端口或残留代理配置,可参照代理连接超时排查步骤;若是规则顺序冲突,参照Clash Verge Rev 规则冲突定位方法。
一份提交前自查清单
- 当前运行模式是 Rule,而不是 Global 或 Direct。
- 更具体的域名规则写在更宽泛的后缀规则之前。
- IPv4 网段使用
IP-CIDR,IPv6 网段使用IP-CIDR6。 - 规则右侧的策略组名称与
proxy-groups完全一致。 - 末尾有明确的
MATCH兜底规则。 - 局域网设备场景已确认
allow-lan、监听地址、端口和防火墙。 - 修改后通过连接记录确认了规则类型、匹配内容和实际出口。
- 远程订阅更新后重新检查了本地规则是否仍然存在。
- 遇到 TUN 问题时,按平台重新检查授权、服务、权限和防火墙,而不是只改规则。
如果你还需要检查 macOS 上系统代理和应用代理的覆盖范围,可以继续阅读macOS 系统代理与应用代理区别;如果要让 Android 或路由器上的其他设备使用电脑代理,可参考Android 路由器代理设置步骤。
常见问题
Clash 设置了规则,为什么所有网站还是直连?
先看运行模式是否是 Rule。Global Mode 和 Direct Mode 不会按 rules 列表进行日常分流;切换到 Rule 后,再打开连接记录确认请求是否进入 Clash。如果连接记录仍为空,继续检查系统代理、应用自带代理或 TUN 授权。
DOMAIN 和 DOMAIN-SUFFIX 应该怎么选?
只匹配一个完整域名时使用 DOMAIN,例如 DOMAIN,login.example.com,Direct;需要同时覆盖主域名和子域名时使用 DOMAIN-SUFFIX,例如 DOMAIN-SUFFIX,example.com,Proxy。若不确定实际请求域名,先在连接记录中观察,再决定是否添加规则。
为什么我写了 REJECT,广告域名仍然没有被拒绝?
最常见原因是 REJECT 规则排在更宽泛的 DOMAIN-SUFFIX 规则后面。规则从上到下匹配,第一条命中后停止,因此应把更具体的 ads.example.com 规则放在 example.com 规则之前,同时确认当前模式为 Rule。
allow-lan 开启后,手机或电视仍然不能使用电脑上的 Clash,怎么办?
allow-lan 只是允许局域网访问,还要确认客户端监听地址、HTTP 或 SOCKS 端口、电脑防火墙以及手机或电视填写的代理类型和端口。若本机连接正常而局域网设备无连接记录,优先检查监听地址和防火墙;若有记录但出口错误,再检查规则和策略组。
规则修改后,远程订阅更新又恢复原样怎么办?
不要直接把远程订阅内容当作本地长期编辑文件。使用客户端提供的编辑规则、覆写或扩展配置机制,并在订阅更新后重新加载和验证连接记录。不同客户端的入口可能不同,应以当前界面和对应文档为准。
TUN 模式和 Rule、Global、Direct 是一回事吗?
不是。TUN 主要负责通过虚拟网卡接管流量,Rule、Global、Direct 是内核处理已接管连接的运行模式。开启 TUN 后仍需选择 Rule 才会按规则分流;TUN 的 DNS 处理应使用当前内核文档中支持的字段,例如 dns-hijack,而不要套用未经核对的字段名。