[Debian]代理客户端订阅转换服务 Subconverter 及其前端 Sub-web 的搭建及使用(更新于于:20230913)

更新说明:少量修正文内遗漏错误之处,正本内容基本未变。

上次总结里说要写一篇这个服务的搭建教程的,咕了一阵子总算是有动力来写了。=_=

开篇备注 1:Subconverter 是可以运行在本地的,但本人觉得除非你是单平台使用,否则还是需要在线上环境运行才能发挥出它的全部实力,所以后面的内容都以搭建线上环境为准来写。

开篇备注 2:由于博主本人的习惯,前后端程序默认都放置于/home/wwwroot/目录下。

一、Subconverter 和 Sub-web 的简单介绍

想要最直观的了解这个服务,请移步:

1.1 Subconverter

在开始正式的教程之前先跟大家说说 Subconverter 这个东西的用处,我相信国内的用户只要有用过代理的对于订阅链接或者代理规则之类的东西肯定不陌生,一般提供代理服务的商家为了方便用户都会提供方便用户导入代理客户端的节点订阅链接,或者提供一个同时包含有节点和代理规则的配置文件下载链接,普通用户的话照着人家给的教程使用是没什么问题的,但是对于我这种要求比较多的用户,默认提供的东西可能无法满足自己的需求,可商家给的东西你又不能随心所欲的修改,而这种时候 Subconverter 就能派上大用场了。

一般人使用代理的时候,会遇到这么两个问题:

  • 商家仅提供某种客户端的订阅链接或者配置文件,而我们自己有多平台多客户端使用的场景,这种情况只能自己手动添加配置(比如商家给的是 Surge 的配置文件,但是你用的是 SS/Clash/Quantumult 之类的)
  • 商家提供的配置文件中包含有默认的代理规则/策略,但是并不符合我们自己的需求,而商家也没有提供个性化定制的功能

而 Subconverter 呢正式能解决上面这些问题的东西,它能帮助我们做下面这样的事情:

  • 可以将各类代理客户端的配置文件转换成你使用的代理客户端所支持的配置文件,导入客户端之后和原配置文件一样也可以进行同步更新
  • 可以提取商家提供的配置文件或者订阅链接中的节点信息(支持多个),配合自己写的代理规则融合成一个新的独有的订阅链接,导入之后可以使用自己的代理规则且能保持节点和规则的同步更新
  • 可以将仅提供节点的订阅链接(比如 SS 的订阅链接)转换成同时带有节点和代理规则的新订阅链接,新链接可以支持多种代理客户端,且可以保持同步更新
  • 可以配置规则筛选输出的配置链接/订阅链接中所包含的节点,可以自定义规则对节点进行分组归类
  • 可以给节点名称添加上对应国家/地区的 emoji,在支持的代理客户端上会显示出该 emoji,方便用户进行节点选择

总的来说,利用 Subconverter 你可以自由的修改调整出符合你自己需求的订阅链接/配置链接,而且这个链接和商家提供的链接是一样能同步更新的,这就给了用户更多的自由,能 DIY 出很多种的玩法。

1.2 Sub-web

上面给大家说了下 Subconverter 的用处,接下来介绍 Sub-web 就简单多了,前面说的 Subconverter 好是好,但就是配置之类的基本上都是要自己看着文件修改的,而且在刚开始生成符合自己需求的订阅链接时可能会比较麻烦,因为还会涉及到参数的调整和 URL 编码之类的,这些都只能靠用户自己手动摸索操作,没有提供程序界面之类的让用户可以更加直观的进行修改,而 Sub-web 就是用来解决此问题的。Sub-web 其实是一个 Subconverter 的前端,虽然它本身不包含 Subconverter 的功能,但是在搭建好两者且在 Sub-web 中绑定好 Subconverter 的后端地址之后,我们就可以直接打开 Sub-web 的前端网页对 Subconverter 配置进行一定程度的修改,这样生成订阅链接/配置链接就方便了很多,日后订阅需要做修改也会简单一些。

好了废话不多说,还是通过后面的教程来了解它们吧!

二、Subconverter 的搭建

Subconverter 的搭建比较简单,因为开发者已经给我们弄好了,下载解压之后就可以直接运行了,因为我这里搭建的是线上服务,所以以防万一再给程序配置一下系统服务让它能保持运行状态就行。

2.1 下载程序并解压

先去开发者的 Github 项目里找到最新版的程序包:https://github.com/tindy2013/subconverter/releases

注意区分各个版本的区别,教程这里我使用的是 Debian 64 位系统,所以选择下载 subconverter_linux64.tar.gz 这个包,截至本文书写时的程序版本为 0.6.4,下面的下载命令便以此版本的包为例,以后有新版本了大家记得替换下链接。

找到想要的程序包之后,使用 wget 命令下载保存到本地,我这里就选择保存到/home/wwwroot/里了,然后直接解压就行了。

cd /home/wwwroot
wget https://github.com/tindy2013/subconverter/releases/download/v0.7.2/subconverter_linux64.tar.gz
tar -zxvf subconverter_linux64.tar.gz

2.2 初始配置

按照上面的教程弄好之后,先运行一下客户端:

cd /home/wwwroot/subconverter
./subconverter

首次运行的目的只是为了让程序生成一下配置文件(懒)。

运行完成之后,打开/home/wwwroot/subconverter/pref.toml 这个文件就能看到 Subconverter 的详细配置参数了。初次使用 Subconverter 对它的配置修改还不了解或者本身要求不高的话,是不需要修改太多配置文件里的内容的,唯一需要注意的就是 managed_config_prefix 这一项,因为涉及到规则文件,而我们搭建的是线上服务,所以请大家务必要修改成 Subconverter 后端实际使用的域名,比如 https://sub.example.com。

举例:

;Address prefix for MANAGED-CONFIG info, without the trailing "/".
;This address will also be used for generating /getruleset, /qx-rewrite, /qx-script addresses.
managed_config_prefix=https://sub.example.com

对于 Subconverter 配置文件其它项的意义及修改方法,可参考官方的中英文说明:https://github.com/tindy2013/subconverter

2.3 添加 Systemd 服务让程序保持运行状态

这步没什么好说的,创建一个 subconverter.service 文件,放置在 /etc/systemd/system 目录下就行了,文件具体要写的内容如下:

[Unit]
Description=subconverter
After=network.target

[Service]
Type=simple
ExecStart=/home/wwwroot/subconverter/subconverter
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Systemd 配置文件的写法在这里就不细说了,不是本文重点,只需要注意 ExecStart 这里要填写的是 Subconverter 程序文件路径就行,有其它修改需要的可以自行网上查资料了解~

对了,弄好之后别忘了启动一下:

systemctl start subconverter
systemctl enable subconverter

2.4 给 Subconverter 绑定域名

前面后端服务配置好了,接着就是给后端服务绑定一个域名了,我这里是使用 Web 服务器反向代理的方法,所谓 Web 服务器也就是搭建网站人们常说的 Nginx 和 Apache 这类的,用反向代理是因为 Subconverter 默认是在本地监听 25500 这个端口的,而我们使用 Nginx 给后端绑定域名只需要将域名的请求代理转发到服务器本地的 25500 端口就能让后端通过域名进行正常访问了。

下面的以绑定 http://sub.example.com 这个域名为例,Nginx 的配置文件如下:

server
    {
        listen 80;
        listen [::]:80;
        server_name sub.example.com;
        location / {
			proxy_pass       http://0.0.0.0:25500;
			proxy_set_header Host      $host;
			proxy_set_header X-Real-IP $remote_addr;
		}
    }

注意,我这里是以绑定 HTTP 域名为例,但是现在其实更建议绑定 HTTPS 的域名,比如 https://sub.example.com,但由于 HTTPS 还需要写 SSL 证书之类的配置,怕大家看着不好理解,所以这里仅以 HTTP 举例。如果对 Web 服务器的配置文件了解不多,建议使用一键脚本比如 LNMP 或者先提前了解一下再进行配置修改,如果还是不知道怎么弄的可以在这里评论请求帮助哦~

2.5 Subconverter 的更新升级

补充一点内容,就是搭建好服务之后 Subconverter 出新版本了怎么升级,这个其实不难,我们只需要按照第一步重新下载解压新版本的程序使用就行了,不过记得要做好文件的备份哦,尤其是/home/wwwroot/subconverter/pref.ini 这个程序配置文件,可以先备份之后等更新好程序了再覆盖回去。

三、Sub-web 的搭建

Sub-web 由于需要 Node.js 和 Yarn,所以我们得先安装好这两样东西才行,下面还是以 Debian 为例来说~

PS:Sub-web 项目地址为 https://github.com/CareyWang/sub-web

3.1 安装 Node.js 和 Yarn

Node.js

curl -sL https://deb.nodesource.com/setup_current.x | bash -
apt-get install -y nodejs

Yarn

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get install -y yarn

两样都安装好之后,就可以开始搭建了。

3.2 下载 Sub-web

还是跟前面的后端一样,将 Sub-web 下载保存到/home/wwwroot/目录下。

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

上面使用了 git clone 命令,如果提示没有 git 命令的话,先提前安装一下再运行以上命令:

apt-get install -y git

3.3 安装依赖项

git clone 完成之后,进入 Sub-web 目录,安装依赖项:

cd /home/wwwroot/sub-web
yarn install

3.4 修改 Sub-web 的相关配置

在正式生成前端页面之前,建议大家先修改下 Sub-web 默认的配置以方便自己使用。

.env 修改

该文件位于/home/wwwroot/sub-web/.env,其中有一项 VUE_APP_SUBCONVERTER_DEFAULT_BACKEND 是设置前端默认使用的后端转换服务域名,默认使用的订阅转换服务为作者提供的,因为我们这里搭建了自己的后端,建议改成自己的后端域名。

Subconverter.vue 修改

该文件位于/home/wwwroot/sub-web/src/views/Subconverter.vue,其中有一项 defaultBackend 建议改成自己搭建好的后端服务所绑定的域名,比如前面我们搭建的后端域名为 http://sub.example.com 则此处修改如下:

  backendOptions: [{ value: "http://sub.example.com/sub?" }],

另外,此文件中默认包含了一些远端配置的代理规则(关于远端配置有关的说明,可以看后端项目的文档说明:https://github.com/tindy2013/subconverter),如果不满意的话也可以提前修改。

3.5 部署 Sub-web

改完上面的配置之后,就可以部署了,还是在/home/wwwroot/sub-web 目录里,运行下面的命令部署:

yarn build

这里多说一句,如果后面还需要对 Sub-web 的配置进行更改的话,只需要修改完成之后再次运行此命令就可以更新配置了。

3.6 绑定 Sub-web 前端域名

注意,这里绑定的是前端的域名,也就是我们实际访问网页在线生成订阅链接/配置链接所使用的域名,和后端绑定的域名不是同一个,为了避免冲突建议大家单独给前端绑定一个域名,这里以绑定 example.com 这个域名为例。

绑定域名需要 Web 服务器,比如 Nginx/Apache,对绑定域名不熟悉或者不懂的,可使用 LNMP 这类的一键脚本或者留言评论寻求帮助~下面以 Nginx 绑定 http://example.com 这个域名为例,配置文件如下(PS:人懒,直接复制的官方给的:https://github.com/CareyWang/sub-web):

server {
    listen 80;
    server_name example.com;

    root /home/wwwroot/sub-web/dist;
    index index.html index.htm;

    error_page 404 /index.html;

    gzip on; #开启gzip压缩
    gzip_min_length 1k; #设置对数据启用压缩的最少字节数
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6; #设置数据的压缩等级,等级为1-9,压缩比从小到大
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; #设置需要压缩的数据格式
    gzip_vary on;

    location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
        access_log off;
        add_header Cache-Control "public,max-age=30*24*3600";
    }
}

此处没有什么特别要注意的地方,只需要记得修改 root /home/wwwroot/sub-web/dist;这里为实际 Sub-web 程序目录下的 dist 这个子文件夹路径即可。

3.7 Sub-web 的更新升级

上面大致已经说了 Sub-web 怎么搭建和绑定域名了,最后再说下这个前端的升级吧,其实也挺简单的,因为我们是用 git clone 将作者的 Github 项目克隆到我们的服务器的,所以只需要在这个克隆目录下再执行 git fetch 和 git merge 同步远端仓库代码就行了,如果本地对文件有所更改的话,可能需要先解决下冲突才能同步。

三、搭建完成的效果演示

由于我自己搭建的不是公开服务,所以就不贴我自己的网址啦,大家可以看看这个网站,就是搭建好之后的前端效果(非本人搭建,请仅当作演示用途打开,非必要不建议提供真的个人代理订阅链接):https://sub-web.netlify.app

可能刚接触这个服务的朋友还不太会用,我这里就以进阶模式为例来给大家简单讲解下吧。

首先来看看进阶模式的界面:

说明如下:

  • 订阅链接:填写商家提供给你的 SS/SSR 节点订阅链接或者 Surge/Clash 的配置文件链接,可以填写多个,这样生成的新订阅链接会包含有所有你填写的订阅链接里的节点
  • 客户端:用来选择新生成的订阅链接支持的客户端
  • 后端地址:这个要是根据我前面说的配置好了的话,选择默认的或者不填写都可以
  • 远程配置:用来配置新生成的订阅链接里包含的代理规则,Sub-web 默认有提供一些,也可以自己更改 Sub-web 的配置文件来添加自己的代理规则,如果这里留空的话,会使用 Subconverter 后端默认输出的代理规则
  • Include/Exclude:用于筛选新订阅链接中包含的代理节点,留空就是包含全部
  • Emoji:用于给节点名称添加国旗,会在支持的客户端上看到节点的名称会包含一个国旗 emoji
  • 过滤非法节点:勾选之后,如果原商家提供有上面客户端选项所选择的代理客户端不支持协议的节点,在新生成的订阅链接中会排除不支持的节点

主要需要注意的就是上面这些了,其它一些选项不是特别重要,就不多说了。完成上面的设置之后,点击生成链接就可以在“定制订阅”这一栏里看到全新的订阅链接了,可以直接导入对应的客户端使用。

好了体验部分也说的差不多了,我个人感觉最重要的可能就是代理规则这部分了,大家应该都是比较关心这方面的东西吧?

关于代理规则,Sub-web 本身只是一个前端,是不涉及代理规则的修改的,它只能引用现成的 Subconverter 配置文件来达到自定义代理规则的效果(其实这也是 Subconverter 后端支持的代理规则导入方式),所以想要 DIY 代理规则的话,还是得先弄清楚 Subconverter 的一些规则用法,篇幅有限,我就只简单说下了。

要生成自己的规则,首先需要了解 Subconverter 配置文件 pref.ini 一些选项的作用,具体的可以看看这里:https://github.com/tindy2013/subconverter/blob/master/README-cn.md#%E8%BF%9B%E9%98%B6%E7%94%A8%E6%B3%95

要自定义规则,最重要的就是了解这个配置文件中的 ruleset 和 proxy_group 这两部分,ruleset 用于导入代理规则(代理规则的格式和使用的代理客户端有关,比如 Subconverter 就可以导入 Clash 的代理规则),而 proxy_group 用于生成代理策略。

在弄懂了上面这两个部分之后,再来说说 Subconverter 远端配置,Subconverter 的配置文件默认是存放在本地目录下的 pref.ini 这个文件,前面我也有提到过修改这个文件的相关内容,除了本地配置,Subconverter 也可以使用远端配置文件,可以通过在订阅链接的请求参数中添加远端配置文件的链接来导入(不用了解太多,这部分说的就是 Sub-web 的远程配置这个选项),在远端配置中填写的选项会覆盖 Subconverter 的本地配置文件里填写的内容。为什么要说远端配置这个呢?因为我们前面搭建的 Sub-web 远程配置选项里的那些代理规则,实际上就是一个个的远端 pref.ini,里面便包含有 ruleset 和 proxy_group 这两部分内容,所以我才说要让大家先了解一下这方面的东西,这样我们才可以自己写远端配置,也就是 DIY 自己的代理规则。

好了就说这么多,不知道我说明白了没有,如果大家对这方面感兴趣的话,也可以评论告诉我,我看是不是有必要再详细的介绍一下吧。

结束

写到这里就差不多啦,说真的这个转换订阅链接的服务确实不错,有这方面需求的可以自己搭建一个去试试,有什么不懂的地方都可以评论问我。另外这里多嘴一句,如果自己动手能力不强的话,也可以用别人搭建好的服务,但务必确保是可信的服务,因为这类服务的使用需要知道你的代理订阅链接,难免会有人想要空手套白狼,这点请大家务必注意哦!

PS:本文特色图片来自 Pixiv 的画师 T5,画师原作品链接:https://www.pixiv.net/artworks/76168884 喜欢的朋友也可以去关注一波呀~

文章标题:[Debian]代理客户端订阅转换服务 Subconverter 及其前端 Sub-web 的搭建及使用(更新于于:20230913)
本文作者:希卡米
链接:https://hikami.moe/master/program/3735.html

如非文内特别说明,博客内作品均默认采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
知识共享许可协议
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇