背景
飞牛上部署了bitwarden和syncthing两款应用,但家里的宽带没有公网的v4或v6 IP,在外访问飞牛只能走中继。
而syncthing的公共代理服务器质量不稳定,速度也确实不太行。话虽如此,还是感谢愿意免费分享服务器带宽的每个大好人。
前段时间飞牛出了应用走中继访问的浏览器插件,但使用场景比较受限。特别是像syncthing这种走tcp的更是没办法直接用。
本文分享下折腾的过程和结果。
解除trim_nginx限制
方案一:劫持动态库,不启动回滚
可以参考这篇帖子,思路超棒,预计能有效很久。
方案二:修改回滚用的备份配置文件
回滚机制分析
原始的nginx是没有配置文件回滚的,我需要分析飞牛的回滚原理。
恢复配置文件必然要做文件的打开操作,可以利用strace监控nginx的操作,然后执行一次reload,发现nginx打开了一个路径为/usr/trim/share/.restore/ng.conf.zip的可疑文件。

ng.conf.zip内部是配置文件,大概率是用这个zip替换了nginx的配置文件。
解压ng.conf.zip
ng.conf.zip是带密码的,不知道密码就没办法修改,但trim_nginx内肯定有密码。
ldd发现其链接了不少加密库,估计是调库来解密的,那就简单了。


修改trim_nginx的配置文件
拿到压缩包密码后,就可以利用nginx反代各种自己的http应用了,只不过多了一个将修改的文件加到压缩包里去的步骤。
配置文件教程一搜一大把,不再赘述。

至此,trim_nginx的配置文件回滚已经不影响我们对配置的修改了。
通过fn connect访问http应用
修改了nginx配置文件后,浏览器首次访问反代的url时会跳转到fnos web端的登录链接。必须登陆一次并保持,后续访问应用才会正常。
经网友提示(非常抱歉我的某个通信APP的账号丢失了,忘记了网友ID),fnos的web有一个cookie控制了这一现象。
mode=relay这条cookie的有效期从 会话
改为一个较久之后的时间,即可顺利访问反代的应用。

到这里,已经可以使用bitwarden等需要http链接的应用了。
http2tcp
fn connect是http链接,且支持websocket,市面上有较多代理工具可以实现http to tcp,只需要注意需要在建立代理链接时带上cookie即可。
我对这方面不熟,使用的是 chisel
。各位可以用自己熟悉或者喜欢的工具。
完成这一步,可以使用ssh了。
syncthing部署
私有转发服务器和发现服务器的部署教程网上很多,常规步骤不再赘述了。
需要注意:
- syncthing服务,发现服务器discosrv,转发服务器relaysrv,三个容器的网络互通
- 修改各个节点的hosts,使用统一的url。比如使用
chisel
的机器,指向127.0.0.1;局域网不用穿透的机器,就指向局域网地址;
至此,即可实现1M左右的同步速率。
最后
期待飞牛同步的linux版本,这样就不用折腾了。