前言:
有很多人对订阅转换服务有心里洁癖。当然这是对的,确实有部分转换服务存在偷链接、偷节点的问题,并且在目前的环境下,越来越多的在线转换服务都在失效的边缘。因此在局域网环境下部署一个不会失效的在线订阅转换服务,会成为越来越多人的选择。同时幻梦也不建议将自建的转换服务开放给他人使用,以免引起不必要的麻烦。
为什么使用subconverter?目前subconverter支持的协议数量较多,并且符合openclash调用在线订阅转换api的规范。subconverter就是自然而然的选择。
什么是subconverter?本篇文章中的subconverter,指的是tindy2013/subconverter这个开源项目。介绍就不做了,直接去github看readme吧。
第一步:拉取镜像
需要明确,幻梦这次使用的subconverter,作者tindy2013已经在DockerHub发布了这个项目的镜像,我们可以直接拉取使用,无需使用自行制作的镜像。DockerHub的链接我就放在这里了,查看原文
提示:tindy2013/subconverter,目前不支持Vless节点。如需vless支持,请使用asdlokj1qpi233/subconverter,DockerHub链接请查看原文。两者的使用方法一致,只需在拉取镜像这一步替换为asdlokj1qpi23/subconverter
(复制这个,用户名github与DockerHub中并不一致)。
直接输入tindy2013/subconverter
或asdlokj1qpi23/subconverter
然后点击拉取
拉取完成后可以在下方看到出现了一个这样的新的镜像文件
如果拉取时出现网络问题。请开启魔法,或者安装并使用Kspeeder
第二步:添加并启动一个容器
从https://github.com/tindy2013/subconverter/blob/master/README-docker.md,可得到docker-compose
---
version: '3'
services:
subconverter:
image: tindy2013/subconverter:latest
container_name: subconverter
ports:
- "15051:25500"
restart: always
我们在iStoreOS的创建docker容器中做出如下编辑
点击提交
左侧打钩,点击启动
启动后,我们可以得到以上的地址和端口号。我们直接访问他
如果出现以上的内容证明服务部署成功
另外如果直接访问路由器的ip+端口,应该会显示拒绝访问。
第三步:测试并使用
将我们刚刚部署的订阅转换服务的ip+端口按格式IP地址:端口号/sub
填入对应的位置
正常调用运行日志中将会出现类似以下内容
注意以上三个框内的内容,分别是成功调用了转换服务的api,成功完成转换并下载,转换后的配置文件正确。
第四步:结束
到这里容器的部署工作已经完成了,这篇博客其实主要就是介绍tindy2013/subconverter这个项目。记得给你使用的项目仓库点一个star
疑难杂症:
本来幻梦不想写这一块的,但是幻梦在使用中确实遇到了这些问题,顺便帮大家解决一下。
首先是vless节点的支持问题,这个没什么好说的换asdlokj1qpi23/subconverter
就可以解决了。
然后是比较麻烦的一点,subconvertor会有SubConverter-Request
和SubConverter-Version
的请求头。部分机场为了防止节点或者订阅链接泄漏,只要检测到这两个请求头就会给你返回空的值,这样我们就会收到一个报错。又是经典的“我为了你好”问题,开发者可能是为了方便机场亦或是使用者的适配,结果机场反过来检测这两个值给你ban了(那确实是适配了)。详细的issue看这两个
【1】https://github.com/tindy2013/subconverter/issues/573#issuecomment-1436012060
【2】https://github.com/asdlokj1qpi233/subconverter/issues/7
问题还是要解决,其中一个issue中提供了一个去掉请求头的分支。但是已经两年没更新了,也不支持vless和更多新协议。那就只剩两个办法,自己修改编译源码,或者在订阅链接上做文章。
幻梦果断选第二种,还是反代。openresty反代订阅链接的域名或者ip,而且是局域网内使用自然无需域名和https的需求。我们只需要增加一条more_clear_input_headers 'SubConverter-Request' 'SubConverter-Version';
一切就大功告成。