首先感谢作者提供如此优秀的程序!
我先说一下我这边的情况,我的测试环境是mt7620方案的openwrt路由器,MIPS32-LE构架,是目前的主流家用路由器。kcptun交叉编译成功,也可以正常运行。但是因为MIPS32的CPU性能比较弱,所以隧道以后只能跑到网速只能达到2-3Mbps(使用tea加密),在PC上测试的时候可以轻松超过20Mbps。猜测可能和kcptun使用加密传输有关。
请问作者能否增加 --crypt none 参数?不加密直接传输?另外其他参数是否有可以降低CPU和内存消耗的用法?路由器跑go语言实在伤不起的,谢谢作者!
--crypt value methods for encryption: aes, tea (default: "aes")
嗯,我考虑下,加一个最简易轻量的加密
不加密不行吗?其实我只需要一个隧道。
我原来路由器直接部署ss的透明代理,峰值可以到50Mbps。但是遇到网络高峰可能会跌到500Kbps,所以希望可以嵌套kcptun的隧道加速。对数据加密其实无所谓。
谢谢!!!
即使ss加密了,kcp的头部如果不加密,依然是明文,所以最低我提供一个最低层度的加密,即简单XOR,速度应该是接近裸跑的。
请教简单的加密会暴露kcptun特征吗?
最简单的加密,一定会导致数据包具有特征,但是如果经常更换key,问题也不大,但是,肯定谈不上安全,但如果你上层有加密,信息依然是安全的。
谢谢!等你更新!
@bettermanbao 你可以尝试一下最新的提交的 -crypt xor
pc上测试没问题,但是我交叉编译mips32 little endian后,所有加密方式都不能用了。
表现为:
server端不会出现正常的stream open, stream close。
client端xor初始化很慢,你可以看log的时间点,花了36秒才启动。tea和aes都是立刻启动的。tea aes xor这3种加密方式都无法和服务器建立连接。client端log有显示stream opened, stream closed,但server端无显示。
感觉是kcp-go中有关加密方式的修改影响了mips32下的编译,另外我用的是go 1.42 mips32 port,不知道是否版本太低的缘故?
谢谢!!!
client端log如下:
2016/06/13 04:59:08 version: SELFBUILD
2016/06/13 04:59:44 listening on: [::]:12948
2016/06/13 04:59:44 encryption: xor
2016/06/13 04:59:44 nodelay parameters: 0 20 2 1
2016/06/13 04:59:44 remote address: 我是马赛克.ddns.info:29900
2016/06/13 04:59:44 sndwnd: 128 rcvwnd: 1024
2016/06/13 04:59:44 mtu: 1350
2016/06/13 04:59:44 fec: 4
2016/06/13 04:59:44 acknodelay: false
2016/06/13 04:59:44 dscp: 0
2016/06/13 04:59:44 stream opened
2016/06/13 04:59:44 stream opened
2016/06/13 04:59:44 stream opened
server端无显示是不应该的,这个很奇怪,我检查一下, 另外mips32确实太慢,产生固定的xor_tbl居然用掉了36秒,实在匪夷所思,我只能想办法换一个生成方式
@bettermanbao 试一下,问题修正了
我用我编译mips32的go 1.42编译了linux_amd64的server端,配合你release里的windows64的client端,xor可以正常运行。go 1.42的兼容性问题应该可以排除了。
server端没显示,是否因为加密方式的bug导致server端认为是无效包,所以直接丢弃,没有进行处理?
还有我的mt7620的mips32已经是mips32中的战斗机了,ss-libev版配合rc4-md5转发速度可以达到50Mbps。
是代码bug
- dst[i+4] = a[i+4] ^ b[i+5]
+ dst[i+4] = a[i+4] ^ b[i+4]
用最新的代码应该能跑, 两端的加密方式必须一致,两端都必须重新编译 @bettermanbao
另外改了下xor table生成算法:
- c.xortbl = pbkdf2.Key(key, []byte(saltxor), 1024, mtuLimit, sha1.New)
+ c.xortbl = pbkdf2.Key(key, []byte(saltxor), 32, mtuLimit, sha1.New)
首先感谢!测试成功,不过貌似速度并没有改进,还是2-3Mbps。
看来MIPS32慢是因为go语言本身的问题,和加密方式关系不大。
就当留个记录吧,go交叉编译后,可以在MIPS32上正常运行,不过性能非常低下。
再次感谢作者!!!
@bettermanbao 嗯,尽力了,如果能确认是CPU太高的原因,可以用这组参数在MIPS上试试
-mode manual -nodelay 0 -interval 40 -resend 2 -nc 1
如果不是CPU占用率的原因,可能有其他方面的问题
附件是交叉编译好的MIPS32的bin文件,little endian对应ramips,在Openwrt MT7620平台上测试通过,big endian对应ar71xx,不过没有测试。一起传上来留个纪念吧。
kcptun-client_mips32_little_endian.zip
kcptun-client_mips32_big_endian.zip
这组参数似乎并没有什么作用,我放弃了。看来go的程序确实不适合用路由器来跑。
嗯,看来确实如此,希望ARM好些
谢谢更新none加密方式,我试过,性能依然悲剧,这是逼我上arm呢。
我在网件3800(AR7xxx)上面部署了KCPTUN 效果不如在PC上面强悍,速度最快1800上下,基本维持在1000上下,在不使用kcptun的时候(版瓦工)基本上在600KB上下,虽然没有在PC上效果好,但是已经提升不少,在pc上最高可以6000+ 看720p youtube 无等待 无卡顿,在路由器上看480p 无卡顿 无等待
@JogFeelingVI 你可以试一下0627的版本,加了压缩
@xtaci 老大,你太拼了,天天在更新啊?
@JogFeelingVI 1000KB,你的3800好强大啊
@bettermanbao 还好,压缩就几行代码,10分钟就加上了
@bettermanbao 能麻烦你再编译一下mt7620的版本么?谢谢!
@bettermanbao 不好意思 单位带错了 是KBPS 1MB版瓦工 小水管,但是我发现一个有趣的现象,我在firefox下观看youtube 就很慢,但是在Chrome就很快,1MB的贷款,基本跑满!
@bettermanbao 在Chrome上面观看youtube 480P视屏,Cs大约在9000-10600Kbps之间,无卡顿。等下跟新一下Kcptun Server看看效果变化情况!但是您的 AR71XX 更新了嘛?
@JogFeelingVI 刚编译了最新版,我折腾不动了,你慢慢折腾吧。
下载:https://github.com/bettermanbao/openwrt-kcptun/releases
Most helpful comment
附件是交叉编译好的MIPS32的bin文件,little endian对应ramips,在Openwrt MT7620平台上测试通过,big endian对应ar71xx,不过没有测试。一起传上来留个纪念吧。
kcptun-client_mips32_little_endian.zip
kcptun-client_mips32_big_endian.zip