提议:使用 Kernel TLS 提升 VLESS TLS 性能(没有 XTLS 流控也可以用上 splice)以及尝鲜方法 #4270
LGA1150
started this conversation in
Performance
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
出处 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