提议:使用 Kernel TLS 提升 VLESS TLS 性能(没有 XTLS 流控也可以用上 splice)以及尝鲜方法 #4270
LGA1150
started this conversation in
Performance
Replies: 2 comments 1 reply
-
佬,有没有补丁可以直接让xray支持ktls?op现在内核都是6.6了已经支持ktls。 |
Beta Was this translation helpful? Give feedback.
1 reply
-
kTLS 对于 XHTTP 的意义是比较大的,不过另一个常见的场景,使用 VLESS-TCP-XTLS-Vision-REALITY,只有在所代理的 TLS 连接的握手阶段会涉及 TLS 流量加解密,因为要对握手包进行 padding 再通过底层 TLS 连接传输;完成握手后,如果是 TLS 1.3,后续就是直接 splice 的了,kTLS 意义不大。 得等 utls 加上 kTLS 支持。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
出处 http://juejin.cn/post/7380222254195834892
让 Linux 内核处理 VLESS TLS 加解密,没有 XTLS 流控也可以用上 splice,还能利用上 TLS 硬件加密设备,进一步提升性能。
现在 Go 官方 TLS 库暂不支持 kernel TLS,有第三方 fork 做了移植,可以参考:
暂时不能改代码的情况下,文中提到可以使用 Nginx+OpenSSL 3.0 前置 TLS 来实现 kernel TLS,只是这样就没有了 splice 的优化,不一定有性能提升。
利用 ngx_stream_proxy_module 我在客户端实现了 Xray 调用 kernel TLS。
先确认 tls 内核模块已加载:
如果提示
No such file or directory
则说明没有加载,尝试加载一下再 cat:如果还提示 not found 则你的内核版本太低,需要升级内核。
OpenSSL 至少为 3.0 版本,且编译时启用 ktls 选项。确认版本号好说,确认是否开启 ktls 有点麻烦,见 StackOverflow
已知 Debian 12 同时满足两种要求。如果是 OpenWrt 需要编译
kmod-tls
,还需要修改 OpenSSL Makefile 启用 ktls。在 nginx.conf 根节点加上
重启 nginx,如果报错
"stream'' directive is not allowed here
可能是没有安装 stream 模块,请自行安装。然后修改 Xray 客户端服务器为 127.0.0.1:12345 并关闭 TLS。
随便刷点流量,再次
cat /proc/net/tls_stat
,如果有出现非 0 的计数,如下,则说明 KTLS 加速已生效。如果是服务端,可以用 ngx_stream_ssl_module 实现,这里就不测了,毕竟服务端 CPU 一般不会是瓶颈吧(
Beta Was this translation helpful? Give feedback.
All reactions