rathole:用 Rust 写的轻量内网穿透,把家里 NAS 安全地转出去

家里有台 NAS,想把服务安全地暴露出去,但又不想被各种商业隧道绑架?rathole 这个用 Rust 写的小工具值得一看。

我折腾内网穿透好些年了,从最早的 ngrok 免费版,到后来 frp 一把梭,再到各种带Web面板的方案。说实话,大部分时候我的需求很简单:把家里那台 NAS 上的某个服务(SSH、Web 管理界面)通过一个有公网 IP 的跳板机转出去,稳定、省资源、别太复杂就行。

rathole 就是冲着这个目标去的。它和 frp 思路几乎一致,但作者用 Rust 重写了一遍,主打高性能 + 低内存占用 + 简单配置。目前在 GitHub 上 1.4 万 stars,Apache-2.0 协议,单二进制最小可以压到 500KiB 左右——这意味着你甚至可以把它塞进路由器的闪存里跑。

为什么是 rathole 而不是 frp

先说清楚:如果你 frp 用得好好的,没必要专门换。但 rathole 有几个点确实更对我胃口:

内存占用明显更低。官方 benchmark 是在本地回环上测的(CPU 瓶颈场景),rathole 吞吐比 frp 高、内存更省。作者自己也诚实提醒:别指望它能让你的转发凭空快好几倍——如果瓶颈在网络而不是 CPU,你感知到的提升主要是”更省资源”,带宽和延迟未必有质变。这点我很欣赏,不吹牛。

配置按服务拆分到两端。这是 rathole 和 frp 最大的使用差异:frp 的服务转发配置写在一边,rathole 把每个服务的配置拆成了服务端和客户端各一份,而且每个服务强制单独 token。乍看麻烦,实际更安全——服务端和客户端各管各的密钥,泄露一个不影响全局。

传输加密开箱即用。支持 Noise Protocol(不需要自签证书,配个 key 就行)和 TLS 两种。对于不想折腾证书的人来说,Noise 模式真的解放生产力。

怎么用:一个最小可跑的例子

假设你有一台有公网 IP 的跳板机,家里 NAT 后面有台 NAS,想把它 22 端口的 SSH 暴露出去。

跳板机(server.toml):

[server]
bind_addr = "0.0.0.0:2333"

[server.services.my_nas_ssh]
token = "换成你自己的强随机串"
bind_addr = "0.0.0.0:5202"

NAS(client.toml):

[client]
remote_addr = "你的跳板机地址:2333"

[client.services.my_nas_ssh]
token = "和上面一致"
local_addr = "127.0.0.1:22"

两边各跑 ./rathole xxx.toml,然后从外面 ssh 跳板机:5202 就能连回家里 NAS 了。Linux 上建议配个 systemd 让它能开机自启、崩溃拉起,项目 examples 目录里有现成模板。

想加密传输?在两端 transport 块加上:

[client.transport]
type = "noise"

服务端同理。不需要 CA、不需要证书,Noise 自己搞定握手加密。

几个实际要注意的坑

1. token 是明文写在配置文件里的。rathole 本身不做密钥管理,配置文件权限要自己管好(chmod 600 起步),别把含 token 的配置提交到公开仓库。

2. 热重载是亮点也是风险点。rathole 支持改了配置不用重启就能动态加删服务,方便是真方便,但生产环境改配置前最好先在测试服务上验证,别手滑把正在跑的转发干掉。

3. HTTP API 还是 WIP。如果你想用脚本自动化管理转发规则,目前得靠改配置文件 + 热重载,没有现成的 REST API。对纯手动管理完全够用,大规模编排就算了。

4. 最新 release 是 v0.5.0(2023 年),但主分支一直在动。这个版本号看着吓人,其实作者维护还算稳,issue 有在回。介意的话可以自己从源码 build,Rust 工具链一条命令的事。

5. 安全靠 token alone。每个服务单独 token 是好事,但跳板机本身的防火墙规则、只暴露必要端口这些基本功还是得做。rathole 不替你管网络层安全。

谁适合用

如果你和我一样,想要一个轻量、省内存、配置不反人类的转发工具,而且已经有一台公网跳板机,rathole 几乎是无脑选。它不像那些带华丽 Web 面板的方案那样功能花哨,但恰恰因为简单,出问题的概率也低。

反过来,如果你要的是”一键把本地开发服务器分享给同事看一眼”这种极轻量场景,rathole 还是得你先有跳板机,不如用 cloudflared 或者 serveo 之类的零部署方案。工具没有银弹,看场景。

我用它把家里几个小服务转出来跑了小半年,最直观的感受就是:跳板机内存占用肉眼可见地降了,配置改起来也比之前那套顺手。对于自托管玩家来说,这玩意儿可以进常备工具箱了。

rathole logo
rathole mem
rathole http
rathole tcp

发表评论