一条规则拆开就是三段
规则永远是类型、匹配值、策略,中间用逗号隔开。DOMAIN-SUFFIX,github.com,PROXY 读作「域名结尾是 github.com 的,交给 PROXY 这个策略组」。
值得记的类型分三类。按域名的有 DOMAIN(完全相等)、DOMAIN-SUFFIX(结尾匹配)、DOMAIN-KEYWORD(包含匹配);按地址的有 IP-CIDR 和 GEOIP;还有 PROCESS-NAME,它比对的是发起连接的程序。
策略名写错,整份配置起不来
第三段只能填配置里已存在的策略组名,或者 DIRECT、REJECT。
写在哪,订阅更新之后才还在
- 1
改订阅下载的那份是白做工
订阅拉下来的配置是缓存,下一次更新整份覆盖,你加的每一行都跟着消失。这个坑几乎每个人都踩过一次。
- 2
写进扩展配置的 prepend-rules
在订阅的编辑菜单里打开扩展配置(Merge 文件),建一个
prepend-rules区块,把你的规则列在下面。每次生成最终配置时,Clash Verge 都会把这几行插到订阅自带规则前面。 - 3
位置就是优先级
prepend-rules里越靠上的越早生效。你的规则得压在机场那些很宽的分组规则上面,否则会被它们先接走。写在列表最后没有意义,垫底的MATCH之后任何一行都读不到。
三个最容易写歪的地方
DOMAIN-SUFFIX 匹配的是名称结尾,写 example.com 会把子域名一起收进来,通常这正是你要的。DOMAIN-KEYWORD 是包含匹配,像 google 这种短关键词一写下去,所有含这串字的域名都被收走。IP 类规则还有个不直觉的地方:请求带的是域名时,得先解析成地址才比对得了,而这次查询本身可能已经走错路。
- 改完去「规则」页搜这个域名,确认第一个命中的是你新加那条
- 日志里出现 yaml 解析失败,多半是缩进或者少了一个逗号
- 改动之前建立的连接不会重新匹配,断掉重连再看
常见问题
规则加上去了,流量还是走原来的路,从哪查起?
先确认配置真的重载了,日志页最上面应该看得到重新加载的记录,有报错就先解决报错。再去规则页搜这个域名,看命中的是不是你写的那条,不是就说明上面有更早的规则接走了。最后看连接页的 Chains 那一栏。
PROCESS-NAME 在 Windows 和 macOS 上分别填什么?
Windows 填带扩展名的可执行文件名,比如 chrome.exe;macOS 和 Linux 填不带扩展名的二进制名,比如 curl。要和进程列表里显示的完全一致,包括大小写。内核还得读得到进程信息,权限不够时这类规则什么都匹配不到。