在當今互聯網環境中,許多裝置由於受到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:[email protected]: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
語
言
」
學
習
資
料
關註公眾號並回復 」rathole「 立即獲取計畫地址