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 的选择范围变广了。欢迎试用和各种意见。
1
bao3 2017-12-21 02:59:38 +08:00 via iPhone
为什么我们不是协作起来打造一个好用的而每个人造一次轮子,结果疏于维护。。。。
|
2
oyyd OP @bao3 我是觉得,在这件事情上,个人理解原理最重要,客观手段多不是件坏事。其次 golang 很好,但也不是每个人都熟悉。我自己是特别想尝试在脚本上用起来 kcp,所以说是 proof of concept 也不过过吧,至少我自己能用 nysocks 替代其他日常代理工具。
|
3
Thiece 2017-12-21 10:48:14 +08:00
我用的香港线路,丢包反而不是困扰着我的问题,线路本身上没有问题,但是在公司这边的网络网关对 UDP 限制,以及应该是识别出了酸酸乳的协议对我使用的端口进行了屏蔽。nysocks 有计划解决这些问题吗?
|
6
NullMan 2017-12-21 16:10:44 +08:00
很赞!比 kcptun 好用,已切换成 nysocks 了.
|
7
Thiece 2017-12-21 16:40:45 +08:00 1
@xm0625 抱歉,我一直在你们口中听说酸酸乳乳,但是我一直找不到它的项目地址。我在 GitHub 上发了这个项目,它对于 UDP 被 Qos 的处理方法非常有意思 https://github.com/wangyu-/udp2raw-tunnel
|
12
oyyd OP @Thiece 每个地方的网络情况不一样,得看具体情况。我碰到的情况是公司网络会对请求做代理,不保持链接再次发请求,端口会发生变化,并且 udp 发送请求和接收请求的端口必须完全一致,这类情况我再 nysocks 中做了处理。理论上如果加密解密包含了协议部分的话,都不会被轻易识别。
|
16
forwind 2017-12-22 20:15:11 +08:00
一生平安
|