Clash 完全覆盖机场的分组及规则
2024-03-17 17:33:41

需求

机场通常会提供一个通用的配置,对于普通的用户来说一般没什么问题,但如果有特别的需求还是需要自己DIY,甚至彻底抛弃机场的配置,完全自主配置。

一般有以下几种解决方案:
1、surgio
在本机上使用,一个依赖 nodejs 的工具,在本机操作,根据模板生成出规则文件,自己再将规则文件上传至云服务器。需要懂一点 JavaScript 编程,文档还算写的比较详细。

2、subconverter
部署在服务器上,通过特定的URL订阅,在服务器上完成转换工作,完全靠配置文件,不需要懂编程,但是文档几乎是三言两语,很多配置细节不清不楚。

3、Parsers
Clash 自带的配置文件预处理功能,可惜的是它只在本机工作,当你有多个客户端需要设置时就不用考虑这个方案了。

4、Proxy Providers & Rule Providers
Clash 提供了 Proxy ProvidersRule Providers 功能。
看名字也能知道,一个提供代理服务器信息,一个提供规则信息。有了它俩就很容易配置自己的规则文件,也是本文采用的方案。

解决方案

本文采用 Clash 内置的Proxy ProvidersRule Providers功能来配置,先直接看一个简单的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
mode: rule
log-level: silent
external-controller: 0.0.0.0:9090
secret: ""

proxy-groups:
- name: Auto
type: url-test
use:
- mysub

proxy-providers:
mysub: -- 名字随便取,proxy-groups中会用到
type: http
path: ./profiles/mysub.yml
url: https://xxx.com/clash -- 机场订阅链接
health-check:
enable: true
interval: 600
url: http://www.gstatic.com/generate_204

rule-providers:
Custom:
type: http
behavior: domain
url: http://xxx.com/custom.txt
path: ./ruleset/custom.txt

Proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.txt

rules:
- RULE-SET,Custom,Auto
- RULE-SET,Proxy,Auto

这个配置文件相比原来老的方式,它没有了proxies字段,改由proxy-providers来提供代理服务器信息。

代理服务器供应者

1
2
3
4
5
6
7
8
9
10
proxy-providers:
mysub: -- 名字随便取,proxy-groups中会用到
type: http
path: ./profiles/mysub.yml -- 本地路径
url: https://xxx.com/clash -- 机场订阅链接
filter: 'HK|港' -- 筛选出香港的节点
health-check:
enable: true
interval: 600
url: http://www.gstatic.com/generate_204

此配置文件中定义了一个名为mysub的供应者,字段type表示用http方式获取,url表示机场的订阅地址,filter意味着筛选出名称中带有指定字符的节点。

health-check表示启用自动测速,interval表示测速周期,单位为秒。url表示测速地址。
clash 会将机场的配置文件下载至path所指示的位置。

自己的分组

这个和以前没什么变化,只是改用use来指定一个供应者

1
2
3
4
5
proxy-groups:
- name: Auto
type: url-test
use:
- mysub

这里定义了一个名为Auto的分组,typeurl-test意味着可以定期测速节点并切换至最快的节点。use指示使用哪个供应者提供的服务器节点,名字要和前面对应上。

配置规则供应者

rule-providersproxy-providers的写法非常相似,typeurlpath相信你也知道是做什么的了。主要说下behavior,它的值决定了规则文件是采用何种语法解析,一共有3种

  • classical
    1
    2
    3
    4
    payload:
    - '.blogger.com'
    - '*.*.microsoft.com'
    - 'books.itunes.apple.com'
  • ipcidr
    1
    2
    3
    payload:
    - '192.168.1.0/24'
    - '10.0.0.0.1/32'
  • classical
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    payload:
    - DOMAIN-SUFFIX,google.com
    - DOMAIN-KEYWORD,google
    - DOMAIN,ad.com
    - SRC-IP-CIDR,192.168.1.201/32
    - IP-CIDR,127.0.0.0/8
    - GEOIP,CN
    - DST-PORT,80
    - SRC-PORT,7777
    # MATCH is not necessary here
    由于规则也外置了,所以不需要像以前那样在配置文件中硬编码规则,比如
    1
    2
    rules:
    - DOMAIN-SUFFIX,google.com,Auto
    而应该用RULE-SET指示一个规则供应者
    1
    2
    3
    rules:
    - RULE-SET,Custom,Auto
    - RULE-SET,Proxy,Auto
    这里使用了开源的规则列表 clash-rules

部署配置文件

有服务器的可以放服务器,没有的可以考虑放在 github 这样的托管平台,不过要注意保护隐私,避免配置文件泄漏。

相关阅读

clash更新订阅时保留自己的规则
Clash配置rule-providers实现自由搭配及自动更新规则功能
Clash for Windows 中文手册
clash-rules