Loading... 在当今互联网环境中,许多设备由于受到NAT(Network Address Translation)限制,很难直接从外部网络访问。然而,通过反向代理和隧道技术,我们可以将这些设备暴露到互联网上。多种此类工具已经存在,如frp和ngrok,但是这些工具在性能和资源消耗上存在一定的不足。本文将深入介绍一个新的替代方案:rathole。 ## rathole 是什么? rathole是一个使用Rust编写的轻量级高性能反向代理,专为NAT穿透而设计,旨在替代frp和ngrok。它主要有以下几个特点: * **高性能** :能够比frp实现更高的吞吐量,并且在处理大量连接时更加稳定。 * **低资源消耗** :消耗比类似工具少得多的内存,适合嵌入式设备等资源受限的设备。 * **安全性** :通过强制的服务令牌认证和可选的Noise协议加密,提供了更高的安全性。 * **热重载** :可以通过热重载配置文件动态添加或移除服务。 ## 快速入门 要开始使用rathole,您需要一个具有公共IP的服务器和一个在NAT后面的设备。假设您在NAT后的家用网络附加存储(NAS)上运行了一个SSH服务,并希望将其暴露到互联网上。可以通过以下步骤实现: ### 在具有公共IP的服务器上 创建并编辑`server.toml`: ```ini [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" ``` 启动服务器: ```sh ./rathole server.toml ``` ### 在NAT后面的设备 (例如NAS) 上 创建并编辑`client.toml`: ```ini [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" ``` 启动客户端: ```sh ./rathole client.toml ``` <div class="tip inlineBlock info"> 配置详解 </div> rathole可以通过配置文件自动确定运行模式(服务器或客户端),根据配置文件中是否包含`[server]`或`[client]`块来决定。如果希望显式指定运行模式,可以使用命令行选项`--server`或`--client`。 示例配置文件如下: <div class="tip inlineBlock info"> 客户端配置 </div> ```ini [client] remote_addr = "example.com:2333" default_token = "default_token_if_not_specify" heartbeat_timeout = 40 retry_interval = 1 [client.transport] type = "tcp" [client.transport.tcp] proxy = "socks5://user:passwd@127.0.0.1:1080" nodelay = true keepalive_secs = 20 keepalive_interval = 8 [client.services.service1] type = "tcp" token = "whatever" local_addr = "127.0.0.1:1081" nodelay = true retry_interval = 1 [client.services.service2] local_addr = "127.0.0.1:1082" ``` <div class="tip inlineBlock info"> 服务器配置 </div> ```ini [server] bind_addr = "0.0.0.0:2333" default_token = "default_token_if_not_specify" heartbeat_interval = 30 [server.transport] type = "tcp" [server.transport.tcp] nodelay = true keepalive_secs = 20 keepalive_interval = 8 [server.services.service1] type = "tcp" token = "whatever" bind_addr = "0.0.0.0:8081" nodelay = true [server.services.service2] bind_addr = "0.0.0.1:8082" ``` <div class="tip inlineBlock info"> 日志管理 </div> rathole使用环境变量来控制日志级别。支持的日志级别包括`info`, `warn`, `error`, `debug`, `trace`。例如,运行以下命令可以仅记录错误级别的日志信息: ``` RUST_LOG=error ./rathole config.toml ``` 如果未设置`RUST_LOG`,默认日志级别为`info`。 ## 性能调优 从v0.4.7起,rathole默认启用`TCP_NODELAY`,这有助于降低延迟,适用于交互式应用程序如rdp和Minecraft服务器。如果带宽更重要,可以通过设置`nodelay = false`来禁用此选项。 ## 性能基准 rathole的延迟与frp相近,但可以处理更多的连接,提供更大的带宽,并且内存使用更少。 然而需注意,rathole不能神奇地使转发服务的速度比以前快数倍。基准测试是在本地回环上进行的,主要展示的是CPU受限情况下的性能。如果网络不是瓶颈,则会带来不小的提升。不幸的是,这种情况对于许多用户来说并不常见。这种情况下,主要的好处是较低的资源消耗,而带宽和延迟可能不会显著改善。 <div class="tip inlineBlock share"> 总结 </div> 通过本文介绍,您应该对rathole有了深入的了解。作为一个基于Rust开发的高性能反向代理工具,rathole在性能和资源消耗上具有显著优势,并且提供了灵活的配置方式和优秀的安全性选择。如果您正在寻找一种新型的解决方案来替代frp或ngrok,rathole无疑是一个值得尝试的选择。 最后修改:2024 年 06 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏