虽然相关的作者都已经陆陆续续删库,但不可否认的是,ClashX Pro依然是MacOS上代理客户端的首选。网上下载安装程序时需要注意,区分ClashX和ClashX Pro,前者使用的是开源的Clash内核,后者使用的是Clash Premium闭源内核。相比之下Pro的功能更加强大,特别是它支持RULE-SET语法,是管理多订阅必不可少的。
鉴于工作和日常的需要,代理必不可少,同时出于这一需求的特殊,我很少在同一个代理商购买长期服务,多数是只买一个月或者一个季度,若是好用到期后继续续费,若是不好用,直接换下一家,甚至中途商家跑路,损失也不惨重,可以接受。是以,手里经常同时存在多个代理。
网上可以查到常用的管理方案是,自建一个节点聚合服务,在这个服务里管理多订阅节点,然后生成一个新的订阅地址,所有需要的地方,订阅这个地址。这种方式的特点是十分便捷,尤其是多设备的场景,若有变动,只需修改聚合服务即可。但是,显然的是,这里需要一个自建的服务,对于我来说,这就是个门槛。
今天偶然看了看clash的配置文件,发现也可以将多订阅放到本地聚合,几经验证后,这条路能跑通,在此记录一下。
1. clash配置文件结构
clash配置文件使用yaml的格式,按照我的理解,将其分为里两大部分,一个是静态配置部分,一个是动态配置部分。
1 | mixed-port: 7890 |
静态配置部分如上,不同的服务订阅大差不差,基本都是这个样子,细小的差别也不会影响使用,我采用的就是如上的配置,主要配置就是dns,如果禁用自带的dns,将enable设置为false,那么就可忽略其选项。
动态配置部分是围绕代理节点和规则这两个展开的。代理部分的配置是所有可用的节点,而规则部分则是访问不同地址时需要采用什么规则,走代理、走直接连接,还是拒绝访问,按需配置。结合clash的语法规则,我们需要配置4个选项,
- proxy-providers
- proxy-groups
- rules-providers
- rules
proxy-providers中是所有订阅地址提供的所有可用的节点,而proxy-groups则是我们如何管理/分组这些节点,比如将所有美国的节点分到一个组里,按照测速排序,使用延迟最低的,这是种常用的分组模式。
rules-providers则是提供了所有的域名规则、IP规则、域名分组、IP分组、进程分组,等等,而rules则将上面的proxy-groups和这些规则关联到一起。比如,出于风控需要,我们将所有ChatGPT相关的域名、IP分到一组,然后将其和上面的美国节点关联,形成一条规则,也就是说,每当请求规则里的ChatGPT的域名/IP时,都会走美国的节点,诸如此类,我们可以灵活配置各种规则。
以上是笼统的介绍,接下来将逐一详细说明。
2. proxy-providers
简单来说,一个provider对应一个订阅链接,而订阅链接的实质主要就是一个或者多个节点信息,所以,一个provider对应一组节点。节点的来源支持两种形式:URL和本地yaml文件。使用URL时,会通过URL将配置文件下载到本地,然后再从配置文件中获取节点信息,如此看到,两种方式的差别并不大。
1 | proxy-providers: |
http类型的配置项如上,provider1是这组节点的名字,其中的url则是服务商提供的订阅地址,path则是下载下来的配置文件保存到的本地路径,interval表示每隔3600秒更新一次这个配置文件到本地,health check是用来测试节点延迟的,一般用谷歌的这个地址,也有用其他地址的,按需配置就好。
这里有一点需要注意,当在浏览器直接访问订阅地址,返回的内容是base64转换过的内容时,clash是解析不了的,这个时候只需要在订阅地址末尾加上&flag=clash
,即可返回yaml格式的配置文件。
1 | proxy-providers: |
file类型与http类型类似,区别在于少了请求的url和间隔,前提是path指定的配置文件需要存在,否则会报错。
不管以上哪种类型,path的相对路径就是clash配置文件所在的目录,通过clash菜单可直接打开。此外,对于yaml配置文件,只会使用其中proxies的值,而不关心是否有其他配置项。
如果都是订阅链接,那么都用http类型就好,每个服务商的订阅地址对应一个provider,有几个就配置几个,名字不可重复。
3. proxy-groups
首先需要说明一点,一个group中可能会包含多个节点,同一时刻的流量只能走组内的一个节点,至于使用哪个节点,有两种模式:手动选择和自动选择。
手动选择模式,需要我们自己勾选使用的节点,选中之后不会自动改变,而自动模式则是根据延迟测速排序,自动选中最快的节点,测速会按照配置的间隔持续执行,每次测速结束后,都会更新选中的节点。
我的配置大概长这个样子,配置了3个订阅地址,yunti、yiyuan和shadow,每个订阅设置了一个手动选择模式的组,yunti-select、yiyuan-select和shadow-select,select组中包含了对应订阅的所有节点。
此外,针对较为好用的yunti订阅,我又将其按照地区单独建了几个自动的组,yunti-sg-auto、yunti-us-auto、yunti-jp-auto,等,其中,yunti-sg-auto中包含yunti订阅下所有在新加坡的节点,且该组为自动选择模式,始终选中最快的节点,其他组同理。
在规则模式下,所有需要走代理的流量都会走PROXY组,而PROXY组的流量又会走我选中的组,平常多数时候都会选中一个auto的组,如有特殊需要,比如某个订阅的全部节点都挂了(这可能是常有的事),这个时候切换到其他订阅的select组,临时过渡,等到恢复再次切换回来。
配置如下,
1 | proxy-groups: |
这里配置的顺序,就是在clash菜单栏显示的顺序。name是节点组的名字,不可重复,type是节点组的类型,正如上面所说,有select和url-test两种模式,use表示对上面配置的proxy provider的引用,如果不加过滤则是引用所有节点,就像select类型的节点组,filter则是通过正则表达式过滤了一下,表示这个节点组只需要provider中名字符合过滤条件的节点,proxies则是流量转发的代理,DIRECT和REJECT是clash内置的两种模式,直接连接和拒绝连接,也可将流量转发至节点组,所以将下面配置的自动和手动的所有节点组,都添加到了PROXY组中,供其选择。
4. rules-providers
上面的proxy providers提供的是节点,这里的rules providers提供的是域名、IP,也可以是进程名称,等。同样,rules provider也支持两种模式,一种是远程的http模式,一种是本地的file模式。
根据需要,我们可以创建多个provider,例如将所有谷歌相关的域名聚集到一个provider中,也可以将所有广告的域名聚集到一个provider中,由于一些域名集合的名单在不断更新,所以,我们常将动态的规则集合使用http模式,而固定不变的规则集合使用file模式。
而那些远程的规则集合,多数都不需要自己维护,那些有些互联网精神的人在热心维护着这些规则,如果没有特殊需求,我们就可以在这些大树下面好乘凉。如果还有额外的需求也没关系,再添加新的规则集合就可以了。这些规则网上有着不少,搜一搜就能出来不少,没有什么好与不好的标准,根据自己的需要找到合适的就是最好的。文末会贴上我在用的。
1 | rule-providers: |
如上,两种模式分别配置了一个,file本地配置是我自己的特殊需求,而http配置则是别人总结的需要拒绝访问的一些域名。这里的yaml配置文件,只会使用其中的payload选项的值,而不关心其他配置。例如我配置的profile-reject.yaml内容如下:
1 | payload: |
前文提到过,我为了禁止nsurlsessiond进程偷跑流量,针对它请求的域名做了一些处理,而adobe则是因为我装的破解版的PS总是访问这两个域名,来对我做出一些干扰,所以一同禁止掉了。
5. rules
所谓rules,就是将前面已经配置好的proxy group和rules provider关联起来。比如我自己写的profile-reject的域名集合,当产生这些域名的访问请求时,我希望clash可以拒绝掉,那么就如下配置即可,
1 | rules: |
语法很清晰,RULE-SET表明这是一条规则的集合,因为有多个域名,后面的profile-reject则是上面配置的rules provider的名字,结尾的REJECT则是对这些域名的操作。我的完整配置如下:
1 | rules: |
除了RULE-SET语法,还有DOMAIN语法,用来匹配完整域名,DOMAIN-SUFFIX语法来匹配域名后缀,GEOIP匹配IP的所在地理位置。上面提到过,clash在规则模式下,所有的流量都会走到PROXY这个proxy group,原因就在此,因为rules配置的除了DIRECT、REJECT就是PROXY,这种配置的特点是,针对所有规则内的域名、IP,要么直接连接,要么拒绝连接,要么走PROXY代理。
如果一个请求进来,所有的规则都没有命中,也就是漏网之鱼,那么就会走到最后一行,MATCH规则,这里配置的PROXY,意思是,所有规则外的请求,都走PROXY代理,这种模式安全性高,避免暴露自己的IP,但是会消耗更多的代理流量。如果没有过高的这方面要求,也可以配置成MATCH,DIRECT,使其直接连接。甚至,还可以为MATCH专门建一个proxy group供其使用
参考链接
- 规则集合
- ClashX使用入门
- rules-provider介绍