Rathole:基于Rust开发的轻量级高性能反向代理,替代Frp和Ngrok!

开发 开发工具
通过本文介绍,您应该对rathole有了深入的了解。作为一个基于Rust开发的高性能反向代理工具,rathole在性能和资源消耗上具有显著优势,并且提供了灵活的配置方式和优秀的安全性选择。

在当今互联网环境中,许多设备由于受到NAT(Network Address Translation)限制,很难直接从外部网络访问。然而,通过反向代理和隧道技术,我们可以将这些设备暴露到互联网上。多种此类工具已经存在,如frp和ngrok,但是这些工具在性能和资源消耗上存在一定的不足。本文将深入介绍一个新的替代方案:rathole。

rathole 是什么?

rathole是一个使用Rust编写的轻量级高性能反向代理,专为NAT穿透而设计,旨在替代frp和ngrok。它主要有以下几个特点:

  • 高性能:能够比frp实现更高的吞吐量,并且在处理大量连接时更加稳定。
  • 低资源消耗:消耗比类似工具少得多的内存,适合嵌入式设备等资源受限的设备。
  • 安全性:通过强制的服务令牌认证和可选的Noise协议加密,提供了更高的安全性。
  • 热重载:可以通过热重载配置文件动态添加或移除服务。

快速入门

要开始使用rathole,您需要一个具有公共IP的服务器和一个在NAT后面的设备。假设您在NAT后的家用网络附加存储(NAS)上运行了一个SSH服务,并希望将其暴露到互联网上。可以通过以下步骤实现:

在具有公共IP的服务器上

创建并编辑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"

启动服务器:

./rathole server.toml

在NAT后面的设备 (例如NAS) 上

创建并编辑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 client.toml

现在,客户端会尝试连接到服务器myserver.com的端口2333,并将任何到达myserver.com:5202的流量转发到客户端的22端口。您可以通过SSH连接到myserver.com:5202来访问您的NAS。

配置详解

rathole可以通过配置文件自动确定运行模式(服务器或客户端),根据配置文件中是否包含[server]或[client]块来决定。如果希望显式指定运行模式,可以使用命令行选项--server或--client。

示例配置文件如下:

客户端配置

[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"

服务器配置

[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"

日志管理

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受限情况下的性能。如果网络不是瓶颈,则会带来不小的提升。不幸的是,这种情况对于许多用户来说并不常见。这种情况下,主要的好处是较低的资源消耗,而带宽和延迟可能不会显著改善。

总结

通过本文介绍,您应该对rathole有了深入的了解。作为一个基于Rust开发的高性能反向代理工具,rathole在性能和资源消耗上具有显著优势,并且提供了灵活的配置方式和优秀的安全性选择。如果您正在寻找一种新型的解决方案来替代frp或ngrok,rathole无疑是一个值得尝试的选择。

责任编辑:武晓燕 来源: Rust开发笔记
相关推荐

2020-10-13 18:09:22

开发框架开源

2023-12-12 13:50:00

代码业务状态

2020-06-19 15:38:08

分析工具GoatCounter开发

2021-10-27 11:29:32

框架Web开发

2024-01-03 07:42:49

分割模型高性能

2017-10-11 16:12:19

内存

2023-09-08 00:07:41

2011-10-11 20:06:08

2022-06-01 09:28:43

​​Umami​​开源

2011-10-11 15:54:57

2011-08-31 16:37:51

Nginx

2021-12-13 16:43:04

鸿蒙HarmonyOS应用

2024-07-22 15:34:25

2018-11-12 12:17:00

2010-06-12 18:00:16

ARP协议

2018-12-03 08:42:02

反向代理层DNS轮询架构

2020-11-11 12:13:59

JS

2021-01-05 08:35:24

GNU nanoVim编辑器

2010-03-16 09:09:04

F#

2018-08-21 08:49:53

Nginx服务器配置
点赞
收藏

51CTO技术栈公众号