前言

Clash 是目前流行的网络分流软件,通过正确的配置规则可以实现对不同网站使用相应的节点进行访问,大大提高了日常使用的感受。目前大多数网络服务提供商也提供了相应的订阅链接,方便用户一键配置。

然而,如果使用者想要添加自动的特殊规则,或是在原有订阅的基础上新增自定义节点,服务商提供的订阅链接的作用就显得捉襟见肘了,这时通常需要手动编写 config.yml 配置文件来实现响应的需求。然而服务商的节点时常有变动,而每变动一次都需要我们重新更改配置文件,对我们的使用造成严重的不便。

这时就轮到 subconverter 出场了,用户可以通过 subconverter 实现对订阅的高度自定义配置,并能够将其转化为多个客户端的配置文件,使订阅更新时能够继续继续保持原有规则。总的来说,其特点如下:

  • 订阅格式转化:能够将订阅转为多个客户端的配置文件
  • API 模式:能够通过 API 模式搭建服务端
  • 订阅合并:可以合并多个订阅,亦可增加单独节点
  • 自定义规则:通过编辑配置文件,实现自定义分组与规则,做到一劳永逸

安装与使用

subconverter,

subconverter 的安装十分简单,前往作者 Github 的 Release 界面下载好对应平台的最新版本的二进制软件即可开始使用:

subconverter 官方文档使用方法介绍的十分详细,这里就不再赘述,只说明一下其支持的订阅转换类型:

类型 作为源类型 作为目标类型 参数
Clash clash
ClashR clashr
Quantumult (完整配置) quan
Quantumult X (完整配置) quanx
Loon loon
Mellow mellow
SS (SIP002) ss
SS (软件订阅) sssub
SSD ssd
SSR ssr
Surfboard surfboard
Surge 2 surge&ver=2
Surge 3 surge&ver=3
Surge 4 surge&ver=4
Trojan trojan
V2Ray v2ray
类 TG 代理的 HTTP/Socks 链接 × 仅支持 &url= 调用
Mixed × mixed
Auto × auto

配置修改

如前文所言,官方文档已经完美解释了了配置文件的作用,因此本节仅体现博主进行修改过的配置内容:

编写博客时 subconverter 版本为:v0.6.4

common 字段修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[common]

api_mode=true


api_access_token=1234567989asdfg


default_url=https://sub.me/getsub.php?service=5568&id=5598|https://sub1.me/getsub.php?service=5568&id=5598


enable_insert=true

insert_url=vmess://sadjslakjdlsakjdlksajdlsakjdklasjdlkasndknsakcjsalkjdklasjldjalksjdlasjdlasd=


default_external_config=https://external/pref.ini

rulesets 字段

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

enabled=true


overwrite_original_rules=false


update_ruleset_on_request=false








ruleset=🏴‍☠️ 独立代理,https:rule/duli.list
ruleset=🎯 强行直连,https:rule/zhilian.list
ruleset=⚔️ 专用代理,https:rule/zhuanyong.list
ruleset=DIRECT,https:rule/zhilian.list
ruleset=🐟 漏网之鱼,[]FINAL

ruleset=🍎 苹果服务,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Apple.list


ruleset=Domestic Services,clash-domain:https://ruleset.dev/clash_domestic_services_domains,86400



ruleset=🎯 全球直连,rules/NobyDa/Surge/Download.list


ruleset=🎯 全球直连,[]GEOIP,CN


ruleset=!!import:snippets/rulesets.txt

这里通过 ruleset 来实现对不同地址的规则制定,个人建议将相应的网址存储在 Github 页面上来维护,这样也方便服务的搬迁或者重装,格式如下:

1
2
3
4
# 匹配类型,域名
DOMAIN,apple.comscoreresearch.com
DOMAIN-SUFFIX,mzstatic.com
IP-CIDR,17.0.0.0/8,no-resolve

proxy_group 字段

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


custom_proxy_group=Group_Name`url-test|fallback|load-balance`Rule_1`Rule_2`...`test_url`interval[,timeout][,tolerance]
custom_proxy_group=Group_Name`select`Rule_1`Rule_2`...


custom_proxy_group=🍎 苹果服务`url-test`(美国|US)`http://www.gstatic.com/generate_204`300,5,100

custom_proxy_group=🇯🇵 日本延迟最低`url-test`(日|JP)`http://www.gstatic.com/generate_204`300,5

custom_proxy_group=负载均衡`load-balance`.*`http://www.gstatic.com/generate_204`300,,100

custom_proxy_group=🇯🇵 JP`select`沪日`日本`[]🇯🇵 日本延迟最低

custom_proxy_group=g1`select`!!GROUPID=0`!!INSERT=0

custom_proxy_group=g2`select`!!GROUPID=1

custom_proxy_group=g2`select`!!GROUPID=!2

custom_proxy_group=g2`select`!!GROUPID=3-5

custom_proxy_group=v2ray`select`!!GROUP=V2RayProvider

custom_proxy_group=g1hk`select`!!GROUPID=0!!(HGC|HKBN|PCCW|HKT|hk|港)



custom_proxy_group=🎏 JMS`select`!!GROUPID=1`[]🎏 JMS-AUTO
custom_proxy_group=🐟 漏网之鱼`select`[]🎏 JMS`[]⚖️ 负载均衡`[]🤖 自动测试`!!GROUPID=0
custom_proxy_group=⚔️ 专用代理`select`!!GROUPID=1
custom_proxy_group=⚖️ 负载均衡`load-balance`!!GROUPID=0`http://www.gstatic.com/generate_204`300,,100
custom_proxy_group=🤖 自动测试`url-test`!!GROUPID=0`http://www.gstatic.com/generate_204`300,5
custom_proxy_group = 🎏 JMS-AUTO`url-test`!!GROUPID=1`http://www.gstatic.com/generate_204`300,5
custom_proxy_group=🎯 强行直连`select`[]DIRECT
custom_proxy_group=🏴‍☠️ 独立代理`select`!!INSERT=1

外部配置相关

由于博主服务器经常瞎折腾,机器经常重装系统,因此我会尽量将配置文件剥离到外部使用,避免因机器原因造成的配置丢失。所谓外部配置即将前文 pref.ini 中规则和分组的配置信息另起一个文件写入其中,在使用时调用该配置文件,也可以设置 common 字段中的 default_external_config 实现默认调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

[custom]
ruleset=🏴‍☠️ 独立代理,https:rule/duli.list
ruleset=🎯 强行直连,https:rule/zhilian.list
ruleset=⚔️ 专用代理,https:rule/zhuanyong.list
ruleset=DIRECT,https:rule/zhilian.list
ruleset=🐟 漏网之鱼,[]FINAL
custom_proxy_group=🎏 JMS`select`!!GROUPID=1`[]🎏 JMS-AUTO
custom_proxy_group=🐟 漏网之鱼`select`[]🎏 JMS`[]⚖️ 负载均衡`[]🤖 自动测试`!!GROUPID=0
custom_proxy_group=⚔️ 专用代理`select`!!GROUPID=1
custom_proxy_group=⚖️ 负载均衡`load-balance`!!GROUPID=0`http://www.gstatic.com/generate_204`300,,100
custom_proxy_group=🤖 自动测试`url-test`!!GROUPID=0`http://www.gstatic.com/generate_204`300,5
custom_proxy_group = 🎏 JMS-AUTO`url-test`!!GROUPID=1`http://www.gstatic.com/generate_204`300,5
custom_proxy_group=🎯 强行直连`select`[]DIRECT
custom_proxy_group=🏴‍☠️ 独立代理`select`!!INSERT=1

高级应用

开机自启

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

vi /etc/systemd/system/subconverter.service

[Unit]
Description=A API For Subscription Convert
After=network.target

[Service]
Type=simple
ExecStart=/root/subconverter/subconverter
WorkingDirectory=/root/subconverter
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

systemctl enable subconverter
systemctl start subconverter

配置反向代理和 SSL 加密

如果你是在服务器端以 API 模式运行 subconverter 的,那么默认是通过 http://158.165.45.23/sub?target=clash&token=123456 的方式进行访问的,我在基于 Swizzin 打造客制化种子盒译文中也提到过,使用该方法访问既不美观,也不安全。因此本节将介绍如何对 subconverter 启用反向代理并配置 SSL 加密。

这里介绍两种反向代理的软件:nginxCaddy,nginx 功能更加强大切运行更快但是 Caddy 配置更加简单。博主建议如果你已配置了其他服务且想要整合 subconverter 则使用 nginx,如果是仅需运行 subconverter 则使用 Caddy 更加简单。

  1. 通过任意方法安装 nginx,如 Swizzin

  2. 编辑 nginx 配置文件,这里以 Swizzin 安装的 nginx 为例


    1
    2
    3
    4
    5
    6
    7

    vi /etc/nginx/apps/subconverter.conf

    location /subconverter/ {
    proxy_pass http://127.0.0.1:25500;
    }



    这里默认你已经通过 Swizzin 获取了 SSL 证书,接下来你即可通过 https://domain.com/subconverter/sub?target=clash&token=123456 的方法获取订阅了。如果你并未获取 SSL 证书,请参考:基于 Swizzin 打造客制化种子盒

    或者你也可以采取二级域名的方式配置反向代理:


    1
    2
    3
    4
    5
    6
    7
    8


    sudo apt update
    sudo apt install snapd
    sudo snap install core; sudo snap refresh core
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot
    sudo certbot certonly --webroot


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    sudo vi /etc/nginx/sites-enabled/default

    server {
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
    server_name clash.domain.com;
    location / {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:25500;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    }
    }


    sudo systemctl restart nginx

总结

本文介绍了如何通过 subconverter 合并、转换订阅并自定义相关规则,同时采用反向代理 + SSL 加密的方法确保访问的安全性。

本文并未安装网络上流行的前端页面,主要是由于该前端对于自用用户来说作用并不大,因此略过了前端的安装。

参考资料: