Clash 分流规则怎么配?让国内国外流量自动分开走
Clash分流规则配置完整教程,教你实现国内网站直连、国外代理走机场的高效智能分流。本文详细讲解DOMAINS、IP-CIDR、Rule-Set与Final默认规则的设置方法,帮您优化网络访问速度、降低节点延迟并节省机场流量,发挥稳定机场推荐的最佳性能。
刚开始用Clash的时候,我也是直接用“全局代理”模式,所有流量全部走代理。后来发现国内网站访问反而变慢,而且流量消耗特别快——国内网站本来直连就行,绕到境外节点再回来,纯属浪费。
分流规则就是解决这个问题的:让该走代理的流量走代理,该直连的流量直连,自动判断。配好之后,打开百度、bilibili直接本地访问,打开Google、YouTube自动走代理,完全无感切换。
分流规则的基本逻辑
Clash的规则模式(Rule Mode)会按照配置文件里的规则列表,从上到下逐条匹配每一个网络请求,匹配到了就执行对应动作(代理、直连),匹配不到就往下走,最后走到Final兜底规则。
一条规则通常长这样:
DOMAIN-SUFFIX,google.com,Proxy
意思是:如果访问的域名以google.com结尾(比如www.google.com、mail.google.com),就走Proxy策略组。
规则类型有很多种,常见的是:
DOMAIN:完整域名匹配DOMAIN-SUFFIX:域名后缀匹配DOMAIN-KEYWORD:域名包含关键词IP-CIDR:IP地址段匹配GEOIP:根据IP归属地匹配
一个典型的分流配置结构
大部分机场订阅下载下来的配置文件里都有规则部分,打开配置文件(YAML格式),能看到类似这样的结构:
rules:
- DOMAIN-SUFFIX,google.com,Proxy
- DOMAIN-SUFFIX,youtube.com,Proxy
- DOMAIN-SUFFIX,facebook.com,Proxy
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,bilibili.com,DIRECT
- GEOIP,CN,DIRECT
- MATCH,Proxy
这段规则的含义:
- Google、YouTube、Facebook走代理
- 百度、B站直连
- 如果目标IP是中国大陆的IP段(GEOIP,CN),直连
- 以上都不匹配,走代理(MATCH是兜底规则,相当于Final)
直连规则:国内流量不走代理
最简单粗暴的直连规则:用GEOIP,CN,DIRECT这一条。
这条规则的意思是,只要目标IP属于中国大陆IP段,一律直连。Clash内置了GEOIP数据库,可以自动判断IP归属地。
有了这一条,绝大部分国内网站(百度、淘宝、B站、微信服务器等等)都会直连,不走代理。
但有时候这条不够:比如某些国内网站的DNS解析被污染了,或者某些国内服务的域名没正确解析成国内IP,这时候单靠GEOIP还不够,需要配合域名规则:
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,163.com,DIRECT
.cn后缀的域名通常是国内网站,直连。其他常用的国内域名也可以加进去。
更完整的方式是引用规则集,下面会讲。
代理规则:境外服务走代理
同样的逻辑,把常用的境外域名列出来,让它们走代理:
- DOMAIN-SUFFIX,google.com,Proxy
- DOMAIN-SUFFIX,youtube.com,Proxy
- DOMAIN-SUFFIX,twitter.com,Proxy
- DOMAIN-SUFFIX,facebook.com,Proxy
- DOMAIN-SUFFIX,openai.com,Proxy
手动列举太麻烦,可以用规则集(Rule Provider),后面会说。
MATCH规则:兜底策略
规则列表最后通常有一条MATCH规则,这是兜底:
- MATCH,Proxy
意思是前面所有规则都没匹配到的流量,全部走Proxy。
有人喜欢设成MATCH,DIRECT,也就是默认直连,只有明确规则匹配到的才走代理。这两种策略各有利弊:
MATCH,Proxy:保守派做法,有可能被墙的流量都走代理,确保能访问,但可能会浪费流量。MATCH,DIRECT:激进派做法,默认直连,减少流量消耗,但碰到新的被墙网站需要手动补规则。
我个人习惯用MATCH,Proxy,因为国内常用的网站基本都能用GEOIP和域名规则覆盖到,剩下的默认走代理比较省心。
用规则集简化配置
手动维护几百条规则太累,可以用规则集(Rule Provider):
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
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,direct,DIRECT
- RULE-SET,proxy,Proxy
- GEOIP,CN,DIRECT
- MATCH,Proxy
这些规则集由社区维护(比如Loyalsoldier的规则),定期更新,覆盖了主流的广告域名、国内域名、国际域名。Clash会自动下载规则文件,按设定的时间间隔更新。
用规则集的好处是不用自己维护规则列表,规则更全面,而且自动更新。
DNS配置对分流的影响
分流规则要生效,DNS配置也很重要。
如果DNS配置不对,域名解析出来的IP是错的,分流规则也会失效。比如某个国内网站的DNS被污染,解析出境外IP,那GEOIP,CN,DIRECT规则就匹配不到,流量可能错误地走了代理。
在Clash配置里,DNS部分推荐这样配:
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- 1.1.1.1
- 8.8.8.8
enhanced-mode: fake-ip让Clash返回虚假IP,流量经过Clash后再进行真正的DNS解析,避免DNS污染。nameserver是国内DNS,fallback是境外DNS,Clash会根据规则选择合适的DNS服务器。
检查分流是否生效
配置完之后,怎么确认分流有没有生效?
在Clash的日志面板里可以看到每个请求匹配到的规则。访问百度,日志显示baidu.com -> DIRECT,说明直连了;访问Google,日志显示google.com -> Proxy,说明走代理了。
或者用测速工具:直连百度测一次速,走代理访问Google测一次速,如果延迟差距明显(国内直连延迟通常几十ms,走代理延迟100ms以上),说明分流生效了。
推荐阅读
常见问题:某些网站走错了
配好规则后,发现某个国内网站还是走了代理,或者某个国外网站没走代理,怎么办?
可以在规则列表最前面手动加一条规则:
rules:
- DOMAIN-SUFFIX,example.com,DIRECT # 手动指定这个域名直连
- RULE-SET,direct,DIRECT
- RULE-SET,proxy,Proxy
# ... 其他规则
规则是从上到下匹配的,越靠前优先级越高。如果某个网站需要特殊处理,手动加一条规则放在最前面就行。
分流配置一次搞定,后面就不用管了,国内国外流量自动分流,体验顺滑,流量也省了不少。用规则集省去手动维护的麻烦,是目前最省心的方案。