谷姐:我们都是谷歌迷
We are all Google fans

[开源] 或许是目前性能最好的ws隧道(狂-dunce

Rate this post

仓库: https://github.com/zephyrchien/kaminari

基于我亲自实现的ws库,要比其他通用ws库高效得多。其他库都在底层维护了一个fifo缓冲区,并且只能整读整写,使用的时候往往还需要再加一层缓冲。而我的库利用栈上缓冲保存状态(127b以内),直接指示出每次需要读写的数据范围,不需要额外在堆上分配内存。

食用姿势:

    kaminaric <local_addr> <remote_addr> <options>

    kaminaris <local_addr> <remote_addr> <options>

也可以作为Shadowsocks插件食用:

    sslocal ... --plugin <path/to/kaminaric> --plugin-opts <options>

    ssserver ... --plugin <path/to/kaminaris> --plugin-opts <options>

WS转发例子:

    kaminaric 127.0.0.1:10000 127.0.0.1:20000 'ws;host=example.com;path=/ws'

    kaminaris 127.0.0.1:20000 127.0.0.1:30000 'ws;host=example.com;path=/ws'

WSS转发例子:

    kaminaric 127.0.0.1:10000 127.0.0.1:20000 'ws;host=example.com;path=/ws;tls;sni=example.com;insecure'

    # use cert + key
    kaminaris 127.0.0.1:20000 127.0.0.1:30000 'ws;host=example.com;path=/ws;tls;cert=example.com.crt;key=example.com.key'

    # generate self signed cert/key
    kaminaris 127.0.0.1:20000 127.0.0.1:30000 'ws;host=example.com;path=/ws;tls;servername=example.com'

Options具体含义请看文档。

EDIT: PS:
是标准的WS实现喔,可以穿CDN,也可以配合Nginx, Haproxy等中间件食用。不强制你使用kaminaris作为服务端,这跟某些玩具是有着本质的区别的(锐评一把

热议
推荐楼 dunce 2022-4-9 22:26:46

晚点会把这些功能移植到Realm上,支持多节点转发。

推荐楼 xxhjkl 2022-4-9 22:34:38

有没有小白版的教程

推荐楼 DaoChen 2022-4-9 22:32:28

挺久没见技术贴了,加油楼主

推荐楼 suichang 2022-4-15 08:10:48

可以模仿客户端指纹为chrome或firefox吗,类似golang的uTLS。

推荐楼 zhujizixun 2022-4-10 19:28:03

wss支持吗 ws没卵用啊

推荐楼 mjj天下第一 2022-4-9 22:28:15

好久才见一次的技术贴

3楼 hcyme 2022-4-9 22:27:06

先谢再看再收藏

4楼 rooney 2022-4-9 22:27:17

挺好的,感谢分享!

6楼 load1ng 2022-4-9 22:30:33

插个眼

7楼 吹风秀跳刀 2022-4-9 22:30:50

晚点会把这些功能移植到Realm上,支持多节点转发。

大佬可以搞个方便使用的脚本吗,感谢大佬

8楼 naohjohn 2022-4-9 22:30:58

加一个效率测试是不是就可以发paper了

9楼 motao 2022-4-9 22:31:58

谢谢老哥分享

12楼 xxhjkl 2022-4-9 22:34:38

有没有小白版的教程

13楼 flyin 2022-4-9 22:36:44

mark

14楼 host0108 2022-4-9 22:37:01

rust大佬,太牛了。。。。。。。。。。

15楼 zaojiapai 2022-4-9 22:38:10

顶顶更健康

16楼 march1993 2022-4-9 22:40:18

所以比golang的channel高出多少性能?

17楼 my2468 2022-4-9 22:42:27

赞赞赞

18楼 ASDC 2022-4-9 22:46:08

小白看不太懂,先收藏了

19楼 枝江小狼王 2022-4-9 22:48:18

好好好,支持技术贴

20楼 plusiy 2022-4-9 22:55:00

来个一健脚本

22楼 lijihede 2022-4-9 22:58:05

这个看起来不错

23楼 adminii 2022-4-9 23:11:44

可以,大佬就是大佬

24楼 wycrow 2022-4-9 23:16:56

难得有活跃的开发者 已star

25楼 Amanda 2022-4-9 23:20:17

技术贴必须顶,好久没有这种干货了

26楼 JustBeHappy 2022-4-9 23:24:33

技术贴,收藏,围观

27楼 HOH 2022-4-9 23:26:18

我只选择libwebsockets

28楼 钱宗鑫 2022-4-9 23:26:48

我去给一个star

29楼 A1s2 2022-4-9 23:26:56

技术老牛逼

30楼 Caffine. 2022-4-9 23:28:00

顶一波

32楼 喵霸天 2022-4-9 23:41:55

等机场使用就行了

33楼 003 2022-4-9 23:44:41

好帖必顶

34楼 YIMSHING 2022-4-10 00:08:18

技术贴必须赞

35楼 TechBlack 2022-4-10 00:22:16

有iperf测速对比吗

36楼 cachexy 2022-4-10 00:48:20

真的牛逼,学习了

37楼 安妮炖熊 2022-4-10 01:10:21

技术贴!顶

38楼 三氧化二砷 2022-4-10 01:26:11

支持udp over tcp 吗

39楼 yi339999 2022-4-10 01:27:51

支持技术大佬,希望出个教程

40楼 liuyun 2022-4-10 01:31:41

只想要一建v2

42楼 祭徐坤 2022-4-10 01:36:26

rust 大佬牛批

43楼 squ33ker 2022-4-10 01:42:39

感谢分享~ 支持支持!

44楼 铅笔 2022-4-10 02:46:37

很久没见技术佬了

45楼 lsin 2022-4-10 03:15:33

只能说牛

46楼 dole 2022-4-10 03:16:23

马克

47楼 s920361 2022-4-10 03:19:30

能不能支援warp 扶墙 client id?

48楼 tinyfish 2022-4-10 09:24:04

不错,又多了个工具

49楼 表妹 2022-4-10 09:33:39

可刑

50楼 行尸走肉 2022-4-10 09:46:57

等一波速度测试

52楼 kagurazakashira 2022-4-10 09:57:52

草~
很难不支持,终于有个不是golang的ws tunnel了

53楼 suichang 2022-4-10 09:58:16

不能减少rtt没啥区别,吞吐量对个人用户影响不大了。

54楼 terrytw 2022-4-10 10:11:38

呃,既然是SIP003的话,能否上架google play呢

55楼 WZ-Software 2022-4-10 10:12:36

技术贴,帮顶,感谢分享

56楼 Laa 2022-4-10 10:25:04

高技术 膜拜

57楼 dunce 2022-4-10 14:13:27

HOH 发表于 2022-4-9 23:26
我只选择libwebsockets

敢写个应用出来bench吗

58楼 dunce 2022-4-10 14:15:31

Contribute 发表于 2022-4-10 09:52
https://github.com/vi/websocat

这个也是rust写的ws隧道,楼主可以对比一下

我写之前就看过那几个ws库(rust和go最火的4个)的源码了,不然也不至于闲的没事自己撸个库

59楼 dunce 2022-4-10 14:17:00

suichang 发表于 2022-4-10 09:58
不能减少rtt没啥区别,吞吐量对个人用户影响不大了。

可以0rtt,实现起来没啥难度。 握手的时候在http headers里塞个base64过的数据就完事了

60楼 ac1083819963 2022-4-10 14:17:33

希望能出个一键脚本

62楼 dunce 2022-4-10 14:22:44

kagurazakashira 发表于 2022-4-10 09:57
草~
很难不支持,终于有个不是golang的ws tunnel了

golang写的那几个隧道或多或少都有问题,不止是性能方面(毕竟都是调现成的包,都免不了额外的拷贝),有的是连正确性都没法保证,简直就是瞎写,同时代码质量感人 = -

63楼 追叶 2022-4-10 14:23:48

不明觉厉 这个是干什么用的呢

64楼 suichang 2022-4-10 14:24:22

可以0rtt,实现起来没啥难度。 握手的时候在http headers里塞个base64过的数据就完事了 ...

说的是tls rtt,就算tls1.3也比酸慢那么一点,长连接又不太稳。

65楼 凌寒 2022-4-10 14:24:46

来个一键脚本或者简明版的教程吧

66楼 dunce 2022-4-10 14:25:40

三氧化二砷 发表于 2022-4-10 01:26
支持udp over tcp 吗

没有udp,单纯的ws转发罢了( 你阔以在前面套一个UoT工具

67楼 dunce 2022-4-10 14:26:56

suichang 发表于 2022-4-10 14:24
说的是tls rtt,就算tls1.3也比酸慢那么一点,长连接又不太稳。

tls1.3也可以0rtt,tcp也可以 fastopen.还想快的话就得用基于udp的协议了,或者直接发ip数据报

68楼 corolo 2022-4-10 14:42:00

支持技术贴

69楼 joyoner 2022-4-10 15:26:57

希望可以支持udp

70楼 云烟 2022-4-10 16:14:34

技术贴哟~!收藏了

72楼 diocat 2022-4-10 16:22:05

对目前主流的ws隧道,用iperf3本地回环互拉来横向对比,更有说服力

73楼 dunce 2022-4-10 16:39:36

diocat 发表于 2022-4-10 16:22
对目前主流的ws隧道,用iperf3本地回环互拉来横向对比,更有说服力

得有人做个全面的测试。单从代码层面来看,我的ws实现绝对是最快的

74楼 micms 2022-4-10 16:46:22

mark大佬

75楼 darius 2022-4-10 17:32:46

我来当小白鼠对比gost试试

76楼 hcyme 2022-4-10 17:34:30

正在编译原版,做ss插件看看疗效

77楼 肤白貌美天然呆 2022-4-10 17:38:41

有大佬编译成品么

78楼 dunce 2022-4-10 17:39:51

肤白貌美天然呆 发表于 2022-4-10 17:38
有大佬编译成品么

有现成的release啊, github action自动编译发布

79楼 xc55 2022-4-10 17:41:11

技术贴,顶起来

80楼 肤白貌美天然呆 2022-4-10 17:44:49

有现成的release啊, github action自动编译发布

方便问下gnu和musl这俩应该怎么选择么? 查到的说是一个动态 一个静态不知道怎么选择了...

82楼 肤白貌美天然呆 2022-4-10 17:49:30

最大的区别就是动态链接和静态链接。gnu需要你机器上有比较高版本的glibc,不然没法启动。 musl就没有这 ...

好的 谢谢 搞一下试试

83楼 刚刚好先生 2022-4-10 17:52:31

实在看不懂...收藏下

84楼 橘橘橘 2022-4-10 17:53:45

支持大佬,感谢分享

85楼 bigexiu 2022-4-10 19:14:27

技术大佬

86楼 HOH 2022-4-10 19:22:14

敢写个应用出来bench吗

怎么说呢,这个东西的需求定位你没搞清楚,这是拿来过桥用的,速度和效率自然取决于桥,所以100M和1000M对于使用者来说并没有什么区别,而重点是如果是自己维护一套底层的话如果将来出现了漏洞之类的安全问题的话,那将可能面临无人维护的处境,这就是为什么尽量使用成熟的公共库的原因,虽然并不是说自己再造一套不好,只是对于用户负责的意思。说回来这种东西,就是安全、稳定,至于性能那并不是最重要的。

87楼 zhujizixun 2022-4-10 19:28:03

wss支持吗 ws没卵用啊

88楼 dunce 2022-4-10 19:58:09

wss支持吗 ws没卵用啊

你这是连帖子都没看吗

89楼 dunce 2022-4-10 23:32:20

HOH 发表于 2022-4-10 19:22
怎么说呢,这个东西的需求定位你没搞清楚,这是拿来过桥用的,速度和效率自然取决于桥,所以100M和1000M ...

=-=我一开始的意思是talk is cheap。我个人是不满足于现状的。在都能跑满带宽的前提下,如果能进一步降低cpu和内存占用,何乐而不为?

造轮子之前我就看了不下4个ws库(rust和go)的源码,rust的库只是没法满足我的需求; go的库则是代码质量感人,看得我蛋疼,更不可能满足我的需求。想到有些蛋疼的go选手用着蛋疼的go库,写出了蛋疼的玩具,我为用户深深的感到蛋疼。。于是我更觉得有必要做个质量好点的东西来打破go在这方面的垄断了

btw,c那么弱的抽象能力,写出来的库用着不蛋疼吗,至少我是不会去用的。就算是cpp, 如果不上c++20协程的话,性能也打不过rust

90楼 dunce 2022-4-10 23:36:17

HOH 发表于 2022-4-10 19:22
怎么说呢,这个东西的需求定位你没搞清楚,这是拿来过桥用的,速度和效率自然取决于桥,所以100M和1000M ...

至于安全和稳定,完全可以信任rust(虽然我写了不少unsafe)。ws协议本身很简单,我自认为代码质量很好(至少吊打这类工具用的最多的go开发者的平均水平),不存在维护难度一说。每个文件都有单元测试(一共40多个),整个库还有整体测试,握手,echo,几条ws对拷 (同步+异步),还能有啥问题呢~

92楼 dunce 2022-4-10 23:42:04

Niwi 发表于 2022-4-10 23:38
要有对比才行阿

得有人发正经评测(网速,延迟,cpu和内存占用等)。我自己就跑跑本地测试, 裸ws速度不会逊色于其他工具的tcp(无零拷贝,都使用8kb内存拷贝的情况下)

93楼 Niwi 2022-4-11 13:43:08

得有人发正经评测(网速,延迟,cpu和内存占用等)。我自己就跑跑本地测试, 裸ws速度不会逊色于其他工具的 ...

最好在github上贴一下性能对比,延时、带宽、cpu、内存占用之类的数据,可以在本地测试

94楼 option 2022-4-11 14:51:45

arm 套ss 使用有问题

95楼 tycu 2022-4-11 14:53:00

支持一下

96楼 mjj666zzz 2022-4-11 15:02:39

97楼 darksheen 2022-4-11 15:04:08

支持技术贴

98楼 dunce 2022-4-11 15:21:28

option 发表于 2022-4-11 14:51
arm 套ss 使用有问题

我早上起来脑子抽了,把local和remote写反了, v0.3.1已经修复。 btw, 手机客户端可以用v2ray-plugin, 需要给v2ray加一个mux=0参数,把mux关掉

99楼 option 2022-4-11 15:49:05

我早上起来脑子抽了,把local和remote写反了, v0.3.1已经修复。 btw, 手机客户端可以用v2ray-plugin, 需 ...

新版可以了,试过ws nginx http 转发可以了。
但又有个问题,我现在用v2ray-plugin 可以直接使用cf的ip,cf去卸载ssl转发http(v2ray-plugin不配置tls),在客户端原配置加个tls 可以变成wss使用了 。

同方法,这个不行,加了tls;sni=domain都不行 报错: PR_END_OF_FILE_ERROR

100楼 Nanhumly 2022-4-11 15:50:20

感谢分享

102楼 option 2022-4-11 16:07:39

感谢反馈。 同时指定sni和host都不能自选IP吗?

不行,原ws已设置host 可以转发,改cf ip后,加不加 tls;sni=domain 都不行

103楼 dunce 2022-4-11 16:15:37

option 发表于 2022-4-11 16:07
不行,原ws已设置host 可以转发,改cf ip后,加不加 tls;sni=domain 都不行

可能自选ip还要满足其他条件,有空我研究一下

104楼 langji518 2022-4-11 16:39:37

有没有小白一键安装的?

105楼 cq214 2022-4-11 16:51:56

技术贴必须顶

106楼 galesaur 2022-4-11 17:45:55

已收藏,期待持续更新迭代

107楼 爱你一生1024 2022-4-11 18:07:25

感谢分享

108楼 萌萌哒 2022-4-11 18:18:37

mark ,开源必赞!

109楼 dunce 2022-4-15 00:15:36

不行,原ws已设置host 可以转发,改cf ip后,加不加 tls;sni=domain 都不行

问题已经解决了。是我命令行程序里面给握手环节开的缓冲区太小,塞不下CF发送的Headers导致的。。

110楼 suichang 2022-4-15 08:10:48

可以模仿客户端指纹为chrome或firefox吗,类似golang的uTLS。

112楼 34995549 2022-4-15 09:14:53

可惜了 我不会,建议出一个一键小白脚本

113楼 hostboy 2022-4-15 10:06:49

感谢分享!

114楼 魔鬼筋肉人 2022-4-15 10:09:13

感谢!弱弱地问一下这个可以用来干什么

115楼 奔跑的路由器 2022-4-15 10:20:32

膜拜技术大佬,学习了。

116楼 greatly 2022-4-15 10:41:35

虽看不懂,顶大佬

117楼 kagurazakashira 2022-4-15 23:56:30

dalao,编译报错了
看issue

118楼 test100 2022-4-16 00:56:18

技术前沿么,马克

119楼 casm 2022-4-16 00:59:02

支持relay吗

120楼 dunce 2022-4-16 02:20:57

kagurazakashira 发表于 2022-4-15 23:56
dalao,编译报错了
看issue

需要用最新版本的nightly toolchain

122楼 纳米科技 半小时前

大佬牛逼 支持绑定

123楼 amilus 20分钟前

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » [开源] 或许是目前性能最好的ws隧道(狂-dunce
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活