Zhi Wei 的个人博客
一个让生产力工具高可用的工具
一个让生产力工具高可用的工具

一个让生产力工具高可用的工具

迫于一些不可抗力以及某云跑路的原因,下定决心搭建一个高可用的环境。我这边使用的是OpenWRT 21.02 +CentOS 8,V的底层是kcp。然后用C++撸了一个小软件,主要是学着写写程序。

核心想法就是写个脚本自动换V的端口来实现高可用,定义了两个工作环境,一个是Server一个Client:

Server模式监听一个TCP端口,负责响应Client的询问请求,并且启动一个V,如果检测到V的Log中存在“inbound: unable to set read deadline > transport/internet/kcp: Connection closed.”(被干扰,原因为UDP流量超过某些限制),自动重启V,并且随机分配新Port和Passwd(seed)。然后重新配置防火墙白名单。
Client模式启动一个V并且持续测试可用性,如果V不可用,向Server请求当前V的Port和Passwd,然后修改配置重启V,循环到V可用为止。

目前已知BUG是OpenWRT重新拨号的时候因为无法创建socket导致程序退出。然后就是不支持vmess+kcp以外的模式。实际用下来体验还行,如果遇到V不可用了,稍等大概30s基本可以重新连上,就不用每次都要担心Port是不是挂了要重新配置的问题了。

垃圾代码预览:

Server:

Client:

如果你感兴趣的话可以下载源码自己编译,点我下载 md5sum:a68b2e6f2e3c5fb81ff57c0d0e1d5a46

PS1.在OpenWRT编译的时候会报/usr/bin/ld: cannot find这个错,是因为thread头文件好像已经被引入到内核了?反正敲一下ar -rc /usr/lib/libpthread.a这个命令就可以编译了。

PS2. Project V官方有个动态端口的配置方法,也可以实现同样的事情,因为没测过,所以我也不知道效果如何。https://guide.v2fly.org/advanced/dynamicport.html#%E6%B3%A8%E6%84%8F

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注