分享:基于 kcp 写的代理工具 nysocks(node-addon) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
oyyd
V2EX    分享创造

分享:基于 kcp 写的代理工具 nysocks(node-addon)

  •  1
     
  •   oyyd
    oyyd 2017-12-20 21:50:05 +08:00 3662 次点击
    这是一个创建于 2862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    TLDR; nysocks1.2.4 版本支持了“某个很流行的代理”协议(即作为其 server 服务),修复了一些内存问题(项目的本身的代码 valgrind free )。

    nysocks是基于kcp写的的 node-addon,用于网络代理,在有一定程度丢包的网络环境下会比 tcp 有更好的传输效果。

    目前 nysocks 的 client 支持 SOCKS5 协议和“某个很流行的代理”协议。使用这些协议的客户端都可以接入。

    对于我这边经常丢包 10%的 Linode Tokyo 2, JP 机房到 YOUTUBE 的测试:

    tcp 代理

    tcp

    或者你想看 gif

    nysocks

    nysocks fast mode

    或者你想看 gif

    使用

    安装完 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 的选择范围变广了。欢迎试用和各种意见。

    16 条回复    2017-12-22 20:15:11 +08:00
    bao3
        1
    bao3  
       2017-12-21 02:59:38 +08:00 via iPhone
    为什么我们不是协作起来打造一个好用的而每个人造一次轮子,结果疏于维护。。。。
    oyyd
        2
    oyyd  
    OP
       2017-12-21 10:15:55 +08:00
    @bao3 我是觉得,在这件事情上,个人理解原理最重要,客观手段多不是件坏事。其次 golang 很好,但也不是每个人都熟悉。我自己是特别想尝试在脚本上用起来 kcp,所以说是 proof of concept 也不过过吧,至少我自己能用 nysocks 替代其他日常代理工具。
    Thiece
        3
    Thiece  
       2017-12-21 10:48:14 +08:00
    我用的香港线路,丢包反而不是困扰着我的问题,线路本身上没有问题,但是在公司这边的网络网关对 UDP 限制,以及应该是识别出了酸酸乳的协议对我使用的端口进行了屏蔽。nysocks 有计划解决这些问题吗?
    xm0625
        4
    xm0625  
       2017-12-21 15:35:51 +08:00
    @Thiece 这是 Qos 问题,来自运营商对 UDP 流量的粗暴 Qos 根本不管你是什么协议
    xm0625
        5
    xm0625  
       2017-12-21 15:38:17 +08:00
    @Thiece 所以最佳方案是 KVM_VPS+BBR+酸酸乳乳+tls 伪装
    NullMan
        6
    NullMan  
       2017-12-21 16:10:44 +08:00
    很赞!比 kcptun 好用,已切换成 nysocks 了.
    Thiece
        7
    Thiece  
       2017-12-21 16:40:45 +08:00   1
    @xm0625 抱歉,我一直在你们口中听说酸酸乳乳,但是我一直找不到它的项目地址。我在 GitHub 上发了这个项目,它对于 UDP 被 Qos 的处理方法非常有意思 https://github.com/wangyu-/udp2raw-tunnel
    ZiLong
        8
    ZiLong  
       2017-12-21 17:07:07 +08:00
    @xm0625 酸酸乳大概知道是啥?请问酸酸乳乳又是啥,可以给点提示么?
    xm0625
        9
    xm0625  
       2017-12-21 18:02:26 +08:00
    @ZiLong aab->aabb
    xm0625
        10
    xm0625  
       2017-12-21 18:03:52 +08:00
    @Thiece 看我 github 的 star
    ZiLong
        11
    ZiLong  
       2017-12-21 18:36:43 +08:00
    @xm0625 最后一个乳是 server 啊,我还以为。。。
    oyyd
        12
    oyyd  
    OP
       2017-12-21 21:19:08 +08:00
    @Thiece 每个地方的网络情况不一样,得看具体情况。我碰到的情况是公司网络会对请求做代理,不保持链接再次发请求,端口会发生变化,并且 udp 发送请求和接收请求的端口必须完全一致,这类情况我再 nysocks 中做了处理。理论上如果加密解密包含了协议部分的话,都不会被轻易识别。
    oyyd
        13
    oyyd  
    OP
       2017-12-21 21:22:24 +08:00
    @NullMan 感谢资瓷(其实更多是对个人使用上做了些优化处理
    xm0625
        14
    xm0625  
       2017-12-22 16:23:22 +08:00
    @ZiLong 其实一个 R 和两个 R 可能就是说明是上一个的演进版吧
    xm0625
        15
    xm0625  
       2017-12-22 16:24:47 +08:00
    @Thiece udp2raw-tunnel 很有意思, rawsocket 这一手玩的骚啊
    forwind
        16
    forwind  
       2017-12-22 20:15:11 +08:00
    一生平安
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5303 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 08:18 PVG 16:18 LAX 01:18 JFK 04:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86