前言

目前各个平台的代理软件的格式各不相同,各个服务厂商通常会提供给我们各个软件的订阅链接,但一些比较小的厂商提供的链接有限,或者提供的分流策略组不符合我们的预期,这个时候我们可以通过转换工具转换成我们所用软件的链接格式,或者使用自己修改的策略组实现更加灵活的分流。

准备工作

部署自己的前后端通常需要自己的域名,部分项目使用 Vercel 托管也可,因此最好准备:

  • VPS一台
  • 两个解析的域名,二级域名即可

项目一:subconverter & sub-web

subconvertersub-web 是最常用的项目,目前后端仍在更新,并且支持了最新的协议转换。

项目地址:

前端:sub-web

后端:subconverter

一键脚本安装

网上找到的一键脚本:

1
2
3
4
# ubuntu
apt-get install -y wget && wget -O install.sh https://cdn.mxlong.com/install/subweb/install.sh && chmod +x ./install.sh && ./install.sh
# centos
yum install -y wget && wget -O install.sh https://cdn.mxlong.com/install/subweb/install.sh && chmod +x ./install.sh && ./install.sh

脚本中的后端并不是原作者的后端,如有需要可以自行更换脚本中的下载地址。

手动安装

后端搭建

首先解析一个域名用作后端访问,这里以 backend.domain.com 为例,实际以自己的域名为准。

连接VPS后,下载并解压后端程序,可以使用如下命令,也可以使用宝塔面板,下载程序后解压。

1
2
3
cd /opt # 这里是程序安装目录,可以自行更换
wget https://github.com/tindy2013/subconverter/releases/download/v0.9.0/subconverter_linux64.tar.gz
tar -zxvf subconverter_linux64.tar.gz

完成以后在 /opt 文件夹下会出现 subconverter文件夹,出现如下结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 .
 ├── subconverter
 │   ├── base
 │   ├── cache
 │   ├── config
 │   ├── generate.ini
 │   ├── gistconf.ini
 │   ├── pref.example.ini
 │   ├── pref.example.toml
 │   ├── pref.example.yml
 │   ├── pref.toml
 │   ├── profiles
 │   ├── rules
 │   ├── snippets
 │   └── subconverter
 └── subconverter_linux64.tar.gz
 

修改相关配置参数,找到文件:/opt/subconverter/pref.toml,修改下面两个参数:

1
2
api_access_token = "密码可以随意更改,也不用记住"  # 大概在第7行
managed_config_prefix = "https://backend.domain.com" # 改成解析的后端域名,大概在第149行

这里需要注意以下两点:

  • 配置文件按照 pref.toml pref.yml pref.ini 的顺序加载。

  • 第一次解压程序后会发现只有pref.example.toml 文件,这时候可以在程序所在目录 /opt/subconverter 手动运行一下程序:./subconverter,文件就会出现。 接下来创建开机自启服务,在终端窗口输入如下命令,全部粘贴回车即可

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat > /etc/systemd/system/sub.service <<EOF
[Unit]
Description=Subconverter
After=network.target
 
[Service]
Type=simple
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=65535
ExecStart=/opt/subconverter/subconverter
Restart=on-failure
RestartSec=10
 
[Install]
WantedBy=multi-user.target
EOF

如果修改了后端的运行目录,上边命令中第 12 行运行位置也要相应更改。

设置开机自启:

1
2
3
4
systemctl enable sub # 开机自启
systemctl start sub # 启动
systemctl restart sub # 重启
systemctl status sub # 查看运行状态

到这里后端地址是 http://127.0.0.1:25500/sub?,由于上边修改了 managed_config_prefix,这时候我们需要反向代理。以后端域名新建一个站点,以宝塔为例,新建站点后打开设置,点击 反向代理,设置如下内容

https://pic.imgdb.cn/item/62f5bb0716f2c2beb1f69f76.png

保存后添加 SSL访问,至此后端搭建完成。

前端搭建

首先新建一个前端站点目录,无需数据库,新建后配置好 SSL,这里以 web.domain.com 为例。

前端项目需要用到 NodeYarn ,因此首先安装:

1
2
3
4
5
6
apt update && apt upgrade
apt install nodejs
apt install yarn
# 完成后使用如下命令查看是否安装成功
node -v
yarn --version

下载 sub-web。默认下载到当前目录/root,下载的位置可以自行选择,可以下载到前端站点目录中下(首先进入/web.domain.com后再执行如下命令)

1
2
git clone https://github.com/CareyWang/sub-web.git
cd sub-web

安装依赖

1
yarn install

修改后端配置及策略组文件。找到/root/sub-web/src/views/Subconverter.vue 文件,打开后在258行找到如下内容并修改,即将本地地址修改为后端地址,也可以添加多个后端地址。

1
2
- backendOptions: [{ value: "http://127.0.0.1:25500/sub?" }]
+ backendOptions: [{ value: "https://backend.domain.com/sub?" }]

随后在下边的 remoteConfig 后修改策略组配置地址,可以根据文件的格式添加,这里给出 ACL4SSR规则配置,remoteConfig[后回车复制即可。

  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
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
 {
             label: "ACL4SSR",
             options: [
               {
                 label: "ACL4SSR_Online 默认版 分组比较全 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online.ini"
               },
               {
                 label: "ACL4SSR_Online_AdblockPlus 更多去广告 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_AdblockPlus.ini"
               },
               {
                 label: "ACL4SSR_Online_NoAuto 无自动测速 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoAuto.ini"
               },
               {
                 label: "ACL4SSR_Online_NoReject 无广告拦截规则 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoReject.ini"
               },
               {
                 label: "ACL4SSR_Online_Mini 精简版 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini.ini"
               },
               {
                 label: "ACL4SSR_Online_Mini_AdblockPlus.ini 精简版 更多去广告 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_AdblockPlus.ini"
               },
               {
                 label: "ACL4SSR_Online_Mini_NoAuto.ini 精简版 不带自动测速 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_NoAuto.ini"
               },
               {
                 label: "ACL4SSR_Online_Mini_Fallback.ini 精简版 带故障转移 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_Fallback.ini"
               },
               {
                 label: "ACL4SSR_Online_Mini_MultiMode.ini 精简版 自动测速、故障转移、负载均衡 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_MultiMode.ini"
               },
               {
                 label: "ACL4SSR_Online_Full 全分组 重度用户使用 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full.ini"
               },
               {
                 label: "ACL4SSR_Online_Full_NoAuto.ini 全分组 无自动测速 重度用户使用 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_NoAuto.ini"
               },
               {
                 label: "ACL4SSR_Online_Full_AdblockPlus 全分组 重度用户使用 更多去广告 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_AdblockPlus.ini"
               },
               {
                 label: "ACL4SSR_Online_Full_Netflix 全分组 重度用户使用 奈飞全量 (与Github同步)",
                 value:
                   "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_Netflix.ini"
               },
               {
                 label: "ACL4SSR 本地 默认版 分组比较全",
                 value: "config/ACL4SSR.ini"
               },
               {
                 label: "ACL4SSR_Mini 本地 精简版",
                 value: "config/ACL4SSR_Mini.ini"
               },
               {
                 label: "ACL4SSR_Mini_NoAuto.ini 本地 精简版+无自动测速",
                 value: "config/ACL4SSR_Mini_NoAuto.ini"
               },
               {
                 label: "ACL4SSR_Mini_Fallback.ini 本地 精简版+fallback",
                 value: "config/ACL4SSR_Mini_Fallback.ini"
               },
               {
                 label: "ACL4SSR_BackCN 本地 回国",
                 value: "config/ACL4SSR_BackCN.ini"
               },
               {
                 label: "ACL4SSR_NoApple 本地 无苹果分流",
                 value: "config/ACL4SSR_NoApple.ini"
               },
               {
                 label: "ACL4SSR_NoAuto 本地 无自动测速 ",
                 value: "config/ACL4SSR_NoAuto.ini"
               },
               {
                 label: "ACL4SSR_NoAuto_NoApple 本地 无自动测速&无苹果分流",
                 value: "config/ACL4SSR_NoAuto_NoApple.ini"
               },
               {
                 label: "ACL4SSR_NoMicrosoft 本地 无微软分流",
                 value: "config/ACL4SSR_NoMicrosoft.ini"
               },
               {
                 label: "ACL4SSR_WithGFW 本地 GFW列表",
                 value: "config/ACL4SSR_WithGFW.ini"
               }
             ]
           },

最后执行如下命令可打包网站:

1
yarn build

完成后会在 /root/sub-web/文件夹下生成一个 dist目录,这个目录就是网站的全部内容,可以将里面所有内容复制到前端站点的目录,如果是将前端下载到了站点目录而不是根目录,可以在宝塔面板中设置网站的运行目录,选择为 /dist即可。

https://pic.imgdb.cn/item/62f5c5af16f2c2beb1146e2d.png

如需要修改前端的配置,如加入更多的策略组配置文件,修改 /root/sub-web/src/views/Subconverter.vue 文件后,再在 /root/sub-web 目录下执行 yarn build 命令,随后再把 /dist 目录下内容替换到网站目录。

至此前后端都已搭建完毕,打开前端地址即可正常使用。

项目二:subweb

这个项目是一个前后端加短链的 Docker 整合版,相比较原项目前后端,有如下优点:

  • Docker Compose 部署十分方便
  • 前端界面美观
  • 远程配置和自定义后端选择框比较明显

项目地址:

部署

同样部署两个网站,并配置好证书,一个用作短链,一个用作订阅转换前后端,如果不需要短链服务,一个二级域名即可。

然后使用 docker compose 直接部署:

1
2
cd ~ && mkdir subconverter && cd subconverter
wget https://raw.githubusercontent.com/stilleshan/dockerfiles/main/sub/docker-compose.yml

将下载的 compose文件中第 16 行的域名改为自己的短链,然后运行:

1
2
cd /root/subconverter
docker-compose up -d

完成后文件夹下会多出两个文件夹,/data & /conf,在 conf/config.js文件中修改对应的地址:

1
2
3
apiUrl: 'http://web.sub.com', # 订阅转换
shortUrl: 'https://a.com', # 短链
# 13行的短链地址也要更换

💡 如果不需要短链服务,只需要在 compose 文件中删除第 12-32 行,将默认使用作者短链接,也可以修改 conf/config.js 使用其他短链接服务。

反向代理

订阅转换前后端的反向代理目标 url

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 订阅转换前后端的目标url
http://127.0.0.1:18080
# 短链反向代理配置(可直接添加到配置文件):
        location / {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8002;

        add_header 'Access-Control-Allow-Origin' '*';

        proxy_set_header  Host                $http_host;
        proxy_set_header  X-Real-IP           $remote_addr;
        proxy_set_header  X-Forwarded-Ssl     on;
        proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto   $scheme;
        proxy_set_header  X-Frame-Options     SAMEORIGIN;

        client_max_body_size        100m;
        client_body_buffer_size     128k;
    }

项目三:sub2clash

这个项目主要是将其他格式转换成 clash 订阅,有如下特点:

  • 可以方便地添加最新协议节点
  • 可以灵活添加国家和地区分组
  • 可以添加自定义规则
  • 可以使用自定义短链接

项目地址:

sub2clash

部署

1
2
3
mkdir -p /opt/sub2clash && cd /opt/sub2clash
wget https://raw.githubusercontent.com/nitezs/sub2clash/main/docker-compose.yml
docker-compose up -d

可以自己修改 docker compose 的环境变量,可修改参数如下:

变量名说明默认值
PORT端口8011
META_TEMPLATE默认 meta 模板文件名template_meta.yaml
CLASH_TEMPLATE默认 clash 模板文件名template_clash.yaml
REQUEST_RETRY_TIMESGet 请求重试次数3
REQUEST_MAX_FILE_SIZEGet 请求订阅文件最大大小(byte)1048576
CACHE_EXPIRE订阅缓存时间(秒)300
LOG_LEVEL日志等级,可选值 debug,info,warn,errorinfo
SHORT_LINK_LENGTH短链长度6

模板

模板的设置可以参考默认,也可以自行设置:

  • <all> 为添加所有节点
  • <countries> 为添加所有国家策略组
  • <地区二位字母代码> 为添加指定地区所有节点,例如 <hk> 将添加所有香港节点

meta 配置也可以参考内核文档的推荐配置:虚空终端GEOSITE目录可以参考 v2fly/domain-list-community

项目四:SubConv

Python 实现的开源 Clash 订阅转换,与 subconverter 相同,接受各种格式的原始订阅,也支持多个订阅。但是使用了 proxy-providerrule-provider 特性实现了任意系统上节点和规则的自动更新。为了解决无法访问 GitHub 上的规则集的问题,项目默认开启了对规则集的代理。同时,由于使用 Python 实现,这个项目非常容易运行在 Serverless 服务,例如 Vercel 上。

项目地址:

部署

1
2
3
cd ~ && mkdir /opt/subconv && cd /opt/subconv
wget https://raw.githubusercontent.com/SubConv/SubConv/main/docker-compose.yml
docker-compose up -d

也可以使用 Vercel 部署,成本更低,并且部署也方便,Fork 原项目后在 Vercel 新建项目导入即可,如有需要可以修改配置文件 config.yaml

这个项目主要是方便自建用户统一管理节点地址,并生成唯一的链接,同时也支持添加自定义配置,只是添加起来并不是那么方便,此外项目占用较大。

项目地址:

sublink

部署

同样使用 docker-compose,完成后再反向代理,地址为 http://127.0.0.1:8000

1
2
3
cd /opt && mkdir sublink && cd sublink
wget https://raw.githubusercontent.com/jaaksii/sublink/master/docker-compose.yml
docker-compose up -d

参考