TLDR; nysocks1.2.4 版本支持了“某个很流行的代理”协议(即作为其 server 服务),修复了一些内存问题(项目的本身的代码 valgrind free )。
nysocks是基于kcp写的的 node-addon,用于网络代理,在有一定程度丢包的网络环境下会比 tcp 有更好的传输效果。
目前 nysocks 的 client 支持 SOCKS5 协议和“某个很流行的代理”协议。使用这些协议的客户端都可以接入。
对于我这边经常丢包 10%的 Linode Tokyo 2, JP 机房到 YOUTUBE 的测试:
tcp 代理
nysocks
使用
安装完 node 和 node-addon 后:
npm i -g nysocks
在对境外网络访问比较好的机器上开 server:
nysocks server -k MY_PASSWORD -m fast
在境内机器或本机上开 client (默认 SOCKS5 ):
nysocks client -k MY_PASSWORD -s my.host.net -m fast
或者开“某个很流行的代理”协议的 client:
nysocks client -c config.json --cp SS --ss_password MY_SS_PASSWORD --ss_method aes-128-cfb
另外-d start
开启守护进程,-c config.json
指定配置文件
底层传输默认aes_256_cbc
加密,流量过境时,协议应该不会被轻易识别阻拦。
一些微小的思考与分享
对于 kcp 及其他比 tcp 占用更多网络资源的工具,我比较赞同云风老师的想法。和其他工具对比起来,我觉得至少 kcp 做的是比较优雅的。
nysocks 大量参考 kcptun,目前不支持 FEC。在最便宜的 VPS 上(aliyun, linode),10MB/s 的传输 cpu 和内存应该都没有太大问题,整体瓶颈还是带宽。底层的 node-addon(C/CPP)代码还有很多优化空间。脚本消耗内存比较厉害,猜测不太适合部署在路由器上等小内存的设备上。
原本想用 node 直接写kcp-node,但是 node 中默认包含的 api (来自 libuv )和性能都还是会有问题。好在之前看到了 Scott Frees 的 blog 和这本电子书 —— C++ and Node.js Integration(需付费)。如果你有类似的需求的话,特别是在 c/cpp 层面进行非阻塞进程的操作及大量 buffer 在 c/cpp 和 v8 之前转换的这种场景,这本书中的内容是非常有效、实用的。
对我自己最大的帮助还是代理用的 vps 的选择范围变广了。欢迎试用和各种意见。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.