subconverter 部署记录
2022/06/30subconverter
self-hosting
我在 Mac 上一直使用 Clash X Pro 作为主力工具。 其 UI 简洁明了,使用起来也比较方便。但是比起 Clash for Windows ,它不方便添加个人规则。如果你直接修改配置文件,在下次更新远程节点时也会失效。更何况 FQ 配置文件内容复杂、篇幅又长,修改其内容时,经常因为一个莫名其妙的空格、亦或是其他细节问题导致配置文件无法被 Clash 读取。
长期以来,我都是在新老配置文件之间复制粘贴自己需要的片段,因此迫切希望实现服务商处导出的配置可以和私人配置自动合并,省去这些烦人操作。近期发现了 subconverter 这个超级棒的工具,可以完美解决我的烦恼。
1. 部署 subconverter
subconverter 有好几种部署方式,除了服务器部署,还可以在计算机本地直接运行。可是我下载 macOS 版本运行始终会报错,我也无能为力。最终我选择利用 docker 部署在服务器上,操作也比较简单。
1.1 为服务器添加 docker 运行环境
步骤略……
1.2 拉取 subconverter 镜像
我在 DockerHub 找到了这个镜像是可以正常使用的:DockerHub:stilleshan/subconverter
docker pull stilleshan/subconverter
1.3 部署 subconverter 服务
docker run -d --name=subconverter --restart=always -p 25500:25500 stilleshan/subconverter
注意:命令中的片段25500:25500
依次表示服务器端口:容器端口,你也可以改成其他端口。此处设置的服务器端口可能需要在云服务商处设置端口放行,容器端口无所谓,不要和已有容器端口冲突就行。
如果不出意外的话,subconverter 服务已经开始运行。浏览器打开 http://你的服务器IP:25500
,如果看到提示「File not found.」说明部署成功了。
我建议做反向代理、设置域名解析。这样后续就可以用域名访问,无需输入端口号,部署 https 时也比较方便。
2. 修改 subconverter 服务配置
想要直接对 docker 容器中的文件进行修改,这一点实现起来有点麻烦,但是我的主机安装了宝塔面板,就方便很多了。以上添加反向代理、解析域名、启用 https 这些操作我都是利用宝塔面板完成的。虽然这个面板风评一般,但也确实方便了像我这样的小白用户。
在宝塔 docker 管理页面 - 容器 中,找到刚刚添加的 subconverter,点击该容器右侧的「目录」,就可以进入容器内查看文件。先打开「base」文件夹,你可以看到其中包含有四个文件,分别是「pref.example.yml」、「pref.example.toml」、「pref.example.ini」、「pref.toml」。
toml、ini、yml 分别是三种不同的语法,我更习惯使用 yml 格式。
删除「pref.example.toml」、「pref.example.ini」、「pref.toml」,将「pref.example.yml」文件名修改成「pref.yml」,打开该文件进行编辑。
查看 subconverter 官方文档,修改此配置文件中的内容。一定要仔细对比官方文档,几乎每一个参数都有详细说明,根据需要修改,或者保持默认。
3. 添加个性化配置
从网上下载的各种「懒人配置」中,用久了发现不太满足个人需求。比如常见的「懒人配置」中,这些内容我就不太需要: 1.去广告规则(个人不需要,电脑已经装了 AdGuard,结合浏览器去广告插件,效果已经非常好了,FQ 软件无需再添加去广告规则); 2.流媒体分流规则(个人不需要,我只是偶尔看一下 YouTube,不用国外其他流媒体服务)
有些网站则是需要走 proxy ,但是懒人配置里却没有相应规则,需要手动添加。通过修改 subconverter 配置文件,也可以实现个性化定制 FQ 软件配置。
3.1 修改 groups.txt
文件
打开 /snippets/groups.txt
,你可以看到以下内容:
🔰 节点选择`select`[]♻️ 自动选择`[]🎯 全球直连`.*
♻️ 自动选择`url-test`.*`http://www.gstatic.com/generate_204`300
🎥 NETFLIX`select`[]🔰 节点选择`[]♻️ 自动选择`[]🎯 全球直连`.*
⛔️ 广告拦截`select`[]🛑 全球拦截`[]🎯 全球直连`[]🔰 节点选择
🚫 运营劫持`select`[]🛑 全球拦截`[]🎯 全球直连`[]🔰 节点选择
🌍 国外媒体`select`[]🔰 节点选择`[]♻️ 自动选择`[]🎯 全球直连`.*
🌏 国内媒体`select`[]🎯 全球直连`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|hk|港|tw)`[]🔰 节点选择
Ⓜ️ 微软服务`select`[]🎯 全球直连`[]🔰 节点选择`.*
📲 电报信息`select`[]🔰 节点选择`[]🎯 全球直连`.*
🍎 苹果服务`select`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
🎯 全球直连`select`[]DIRECT
🛑 全球拦截`select`[]REJECT`[]DIRECT
🐟 漏网之鱼`select`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
以上这些便是我们在 FQ 软件中看到的分组,可以根据需要添加私人分组,删除不需要的分组。
我的 groups.txt
分组配置如下:
♻️ 自动选择`url-test`.*`http://www.gstatic.com/generate_204`300
🚀 直接直连`select`[]DIRECT
🔰 节点选择`select`[]♻️ 自动选择`[]🚀 直接直连`.*
Ⓜ️ Microsoft`select`[]🚀 直接直连`[]🔰 节点选择`.*
✈️ Telegram`select`[]🔰 节点选择`[]🚀 直接直连`.*
🍎 Apple`select`[]🚀 直接直连`[]🔰 节点选择`.*
🐟 漏网之鱼`select`[]🔰 节点选择`[]🚀 直接直连`.*
👤 用户自定义`select`[]🔰 节点选择`[]🚀 直接直连`.*
只保留了需要的几个分组,还添加了自定义分组,用于保存自己遇到需要走 proxy 的网站。
3.2 修改 rulesets.txt
文件
打开 /snippets/rulesets.txt
,你可以看到以下内容:
🎯 全球直连,rules/LocalAreaNetwork.list
Ⓜ️ 微软服务,rules/MSServices.list
🎯 全球直连,rules/DivineEngine/Surge/Ruleset/Unbreak.list
🛑 全球拦截,rules/NobyDa/Surge/AdRule.list
🛑 全球拦截,rules/DivineEngine/Surge/Ruleset/Guard/Hijacking.list
🎥 NETFLIX,rules/DivineEngine/Surge/Ruleset/StreamingMedia/Video/Netflix.list
🌍 国外媒体,rules/DivineEngine/Surge/Ruleset/StreamingMedia/Streaming.list
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/Media/Bilibili.list
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/Media/iQiyi.list
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/Media/Letv.list
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/Media/MOO.list
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/Media/Tencent Video.list
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/Media/Youku.list
📲 电报信息,rules/DivineEngine/Surge/Ruleset/Extra/Telegram/Telegram.list
🔰 节点选择,rules/DivineEngine/Surge/Ruleset/Global.list
🍎 苹果服务,rules/DivineEngine/Surge/Ruleset/Extra/Apple/Apple.list
🎯 全球直连,rules/DivineEngine/Surge/Ruleset/China.list
🎯 全球直连,rules/NobyDa/Surge/Download.list
🎯 全球直连,[]GEOIP,CN
🐟 漏网之鱼,[]FINAL
可以看出默认规则组里,左边是分组名称,右边是引用的 list 规则文件,rulesets.txt
内包含的分组名称必须要和上一步groups.txt
中的分组一模一样,否则会报错。
根据分组名称后的文件路径,随便打开一个 list 文件,list 文件内就是熟悉的域名、IP 匹配语法。可以在适当位置新建一个 list 文件,用来编辑保存自己需要的规则。
注:rulesets.txt
除了可以引用本地路径下的 list 文件,也可以引用网络中的 list 文件。
比如🍎 苹果服务,rules/DivineEngine/Surge/Ruleset/Extra/Apple/Apple.list
表示引用/rules/DivineEngine/Surge/Ruleset/Extra/Apple/
文件路径中的Apple.list
文件;
比如🍎 苹果服务,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Apple.list
表示引用raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Apple.list
网址中的Apple.list
文件。
我的rulesets.txt
规则组配置如下:
🚀 直接直连,rules/LocalAreaNetwork.list
🚀 直接直连,rules/DivineEngine/Surge/Ruleset/China.list
🚀 直接直连,rules/NobyDa/Surge/Download.list
🚀 直接直连,[]GEOIP,CN
🚀 直接直连,rules/DivineEngine/Surge/Ruleset/Unbreak.list
🔰 节点选择,rules/DivineEngine/Surge/Ruleset/Global.list
🔰 节点选择,rules/ACL4SSR/Clash/ProxyGFWlist.list
Ⓜ️ Microsoft,rules/MSServices.list
✈️ Telegram,rules/DivineEngine/Surge/Ruleset/Extra/Telegram/Telegram.list
🍎 Apple,rules/DivineEngine/Surge/Ruleset/Extra/Apple/Apple.list
🐟 漏网之鱼,[]FINAL
👤 用户自定义,rules/myrules.list
注:
1.一个分组可以同时引用几个 list;
2.最后一个myrules.list
就是我用来保存个人规则的地方,参考一下其他 list 文件,写起来也很简单。
比如:在文件内添加一条DOMAIN-SUFFIX,example.com
,即表示「访问网站 example.com 时走 proxy」
4. 生成 FQ 软件个性化配置
4.1 前往你所使用的 FQ 服务提供方,获取节点订阅链接
步骤略……
假设我获取到的订阅链接是:example.com/subscribe/z1x2c3v4b5n6m
4.2 生成专属 FQ 配置
浏览器访问:http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%
,即可得到专属于自己的 FQ 配置文件。
注:http://127.0.0.1:25500
是示例地址,需要填写你在步骤 1.3 中生成的 subconverter 后端地址。
比如:http://你的服务器IP:25500/sub?target=%TARGET%&url=%URL%
;
或者是已经设置反向代理的地址(无需填写端口号):http://xxx.com/sub?target=%TARGET%&url=%URL%
%TARGET%
是你使用的 FQ 软件类型,具体支持软件请查看官方文档说明-支持类型;
%URL%
是你的 FQ 服务订阅链接。
假设我们要获取一个用于 clash 的配置,打开浏览器访问:http://127.0.0.1:25500/sub?target= clash&url=example.com/subscribe/z1x2c3v4b5n6m
,即可得到专属于自己的 FQ 配置文件。
target 支持的软件类型请查看官方文档说明
5. 写在最后
此次我利用 subconverter 搭建的后端服务,成功获取了包含「 FQ 服务节点 + 个性化分组 + 个人自定义规则」的 clash 配置文件。未来再次更新节点信息时,所有的个性化配置都可以得到保留,再也无需我手动修改 FQ 软件配置文件。
此次也仅仅探索了 subconverter 其中一小部分功能,对 FQ 配置文件有更多个性化需求的朋友,建议仔细阅读官方文档,实现更加丰富的定制功能。
参考资料:
subconverter 中文文档 https://github.com/tindy2013/subconverter/blob/master/README-cn.md