白嫖阿里云函数计算,实现聚合各个“机场”订阅链接、自建 subconverter 转换订阅
作为目前使用较广的加密代理协议,V2Ray 是大部分“机场”的首选。大多数套模板(以及不套模板)的“机场”会为用户提供一个VMESS 协议的订阅链接,方便用户自动更新节点信息。
最初,VMESS 订阅链接不是由官方设计的,只是在部分工具中使用,但由于其非常方便,目前已经成为一个标准。订阅格式为 JSON 的节点配置信息通过 base64 编码为vmess://{base64 json}格式,每个节点一行,而后对所有节点再执行一次 base64 编码。
与 VMESS 订阅类似,Clash 作为一个广泛使用的跨平台跨协议代理工具,也提供了方便的配置订阅。用户可以自动更新节点信息(包括白名单、黑名单、节点组)。
通常clashroyale野猪流,用户会使用tindy2013/subconverter实现自动订阅转换。通过简单的配置文件,可以自动抓取 VMESS 订阅(该工具还支持其他格式),经过处理后,生成符合 Clash 要求的配置文件。对于初次使用的用户,可以借助可视化页面完成配置文件的配置。
传说中的函数即服务(FaaS),大题思路是将程序部署在 Docker 内,由函数计算服务商负责包括部署、版本回退、负载均衡、自动扩容……等各种运维任务。简单来说,开发者只需要写好代码,剩下就不需要考虑了,如果用户量小,就只跑一个容器。如果突然访问量爆发,就自动申请更多资源。
从设计上来说,函数计算适合于与其他功能低耦合的模块功能clash 配置订阅链接,刚好这里的需求符合
通常clash 配置订阅链接,会同时使用多个 “机场” 以供备份,部分机场可能会由于各种原因无法提供服务。如果电脑、手机、路由器分别都配置了代理工具,那么每次修改都非常麻烦(而需要修改是经常性的)
这里以阿里云-函数计算为例进行配置。简单介绍下阿里云函数计算的概念,对于每个用户,包含多个函数组,可以认为是一个大项目。每个函数组内包含多个函数,可以认为是项目内的各个功能模块。函数内可以是任意语言的代码或编译后的可执行文件(这里的函数与编程语言的函数不太一样,后续如果没有特殊说明,指函数计算的函数)。
首先,切换到香港集群。由于对于不同的集群,资源基本不共享,因此后续所有操作都在香港集群执行
用于聚合订阅信息的函数名为subscribe,创建时选择nodejs12.x环境的HTTP 函数,同时记得在 “修改配置” 里,将单实例并发度设置为 100
这里,用到了axios用于发送 HTTP 请求,因此需要安装依赖,在网页在线编辑器调出终端clash 配置订阅链接。,执行npm install axios即可(如果没有使用网页在线编辑,需要注意node_modules文件夹需要一起部署至函数计算)
功能很简单,从环境变量URL获取以分割的订阅链接,分别请求这些地址并聚合到一起返回给用户。如果用户访问的路径是/test,则会返回一个测试 VMESS 订阅(用于后续的转换测试)(如果大量请求可能会被“机场”封掉)
除去基本的功能外,这里做了一个简单的基于环境变量的用户管理,配置环境变量TOKEN可以设置以分割的用户信息对,用户信息格式为用户名=token,访问时需要访问/subscribe?token=1234的形式进行访问,只有存在于环境变量内的用户可以获得订阅信息。
在代码编辑页面,修改bootstrap文件,该文件是 custom runtime 的启动文件,一般来说不需要修改
函数计算默认会将请求转发至9000端口(可以修改),同时在使用自定义域名时,如果路由至根目录,则内部程序可能无法正确识别路径,需要去掉前缀
那么剩下的问题就是获取subconverter的代码了。使用在线编辑器的终端执行下述代码
该部分会在 Github 下载 v0.6.4 版本的subconverter,将其解压至当前目录,并删除掉压缩包。
函数计算默认会提供一个非常长的域名,这个域名很难记忆,而且为了确保用户不会恶意使用函数计算功能,因此对于未使用自定义域名的函数,在浏览器访问时会被自动转换为下载文件而非直接展示。
这里在功能上,我们不需要使用浏览器访问,因此实际上不进行自定义域名也没有任何影响,如果不使用自定义域名,可跳过该部分。
在自定义域名页面,可以看到自己账号在对应集群的域名。需要将自己的域名 CNAME 解析到该地址,然后等待几分钟填写clash pro。
需要特别注意的是,除去绑定域名外,还需要设置路由。这里的路由规则分为两种
这里,希望在不携带结尾的/也能正确访问服务,因此使用精确匹配绑定了对应的函数。
对于使用模糊匹配的域名绑定,需要注意的是如果被访问的路径是/abc/def,绑定的是/abc/*,那么程序中看到的 path 是/abc/def,而不是/def。
至此,我们已经完整部署了所需的所有功能,可以结合 Github 上的 Clash 配置文件,实现全自主可控的订阅转换了