rathole:Rust 写的内网穿透工具,性能比 frp 高出一截
文章目录ratholeRust 写的内网穿透工具性能比 frp 高出一截ratholeRust 写的内网穿透工具性能比 frp 高出一截GitHub 上有个用 Rust 写的内网穿透工具 rathole目前收获了 13,824 个 Star。rathole 的定位和 frp、ngrok 类似都是把内网设备上的服务暴露到公网。你需要一台有公网 IP 的服务器然后在内网设备上跑客户端流量就会通过服务器中转出去。rathole 有几个比较突出的特点。吞吐量高连接数大。在本地回环测试中rathole 的 HTTP 吞吐、TCP 带宽、UDP 带宽都明显高于 frp内存占用也更低。官方给出了详细的 benchmark 数据在 CPU 成为主要瓶颈的场景下提升幅度相当可观。不过要说明的是如果你的网络本身就是瓶颈带宽和延迟不会有太大变化主要收益在于资源消耗更低。二进制体积小。编译出来的文件可以做到 500KiB 左右适合放到路由器这类嵌入式设备上跑。安全机制完善。每个服务都必须配置 token客户端和服务端各自管理自己的配置。支持 Noise Protocol 加密不需要自己搞证书。也支持 TLS。支持热加载。修改配置文件后可以动态增删服务不用重启进程。**安装方式**rathole 提供了预编译二进制、源码编译、Docker 镜像三种方式。从 release 页面下载对应平台的二进制文件是最简单的方式。如果需要最小化体积或者支持特殊平台可以从源码编译。Docker 镜像也有现成的。**配置示例**rathole 的配置方式和 frp 比较像区别在于每个服务的配置要拆成客户端和服务端两部分且 token 是必填项。假设你家里有一台 NAS 在内网想把 SSH 服务暴露到公网服务端创建 server.toml[server] bind_addr 0.0.0.0:2333 [server.services.my_nas_ssh] token use_a_secret_that_only_you_know bind_addr 0.0.0.0:5202客户端创建 client.toml[client] remote_addr myserver.com:2333 [client.services.my_nas_ssh] token use_a_secret_that_only_you_know local_addr 127.0.0.1:22服务端执行./rathole server.toml客户端执行./rathole client.toml。之后访问myserver.com:5202就等于访问 NAS 的 22 端口。rathole 会根据配置文件自动判断运行模式如果只写了[server]就当服务端跑只写了[client]就当客户端跑。也可以把两段配置写在同一个文件里用--server或--client参数显式指定。**传输层配置**rathole 的传输层支持 TCP、TLS、Noise、WebSocket 四种模式默认是 TCP。TCP 模式下可以配置代理支持 HTTP 和 SOCKS5、TCP_NODELAY、keepalive 参数。从 v0.4.7 开始 TCP_NODELAY 默认开启对延迟敏感的应用比如远程桌面、Minecraft 服务器有帮助但会略微降低带宽。如果更看重带宽可以关掉。Noise 模式用的是 Noise_NK_25519_ChaChaPoly_BLAKE2s 协议配置简单不需要处理证书。**日志和调优**日志级别通过环境变量RUST_LOG控制支持 info、warn、error、debug、trace 五个级别。不设置的话默认 info。整体来看rathole 在内网穿透这个领域做到了性能和体积的兼顾。如果你目前在用 frp 但对资源占用不太满意或者需要在嵌入式设备上跑穿透服务rathole 值得试试。hole 在内网穿透这个领域做到了性能和体积的兼顾。如果你目前在用 frp 但对资源占用不太满意或者需要在嵌入式设备上跑穿透服务rathole 值得试试。