前言
在很久以前的文章,我曾經介紹了 利用 FRP 來實現內網穿透 。但時隔多年再次想使用他時,卻發現他的最新版本卻早已變得非常複雜,不是我當初的那個簡單設定即可使用的軟體。因此我就在尋找他的替代品,而意外找到這款使用 Rust 編寫的 Rathole 。雖然他的最新 Releases 已經停留在 3 年前了,但使用了一下也是有當初 FRP 的味道,所以還是寫了一篇記錄一下。
根據官方自己的說法,由於 Rathole 使用 Rust 編寫,因此性能相較 FRP 提升了不少,但這個部份我自己就沒有實測了,留給大家自己試試看。
設定方法
在本篇文章中,操作皆在 Linux 上執行。與 FRP 相同,程式部分不分伺服器版及客戶端版,所以請前往 Rathole 的 Releases 頁 下載,筆者最新的穩定版本為 v0.5.0。
wget https://github.com/rathole-org/rathole/releases/download/v0.5.0/rathole-x86_64-unknown-linux-gnu.zip
比較特別的是他是使用 zip 打包的,而不是 tar 之類的,所以解壓縮的時候要注意一下你有沒有相關套件。
unzip rathole-x86_64-unknown-linux-gnu.zip
然後我是比較習慣把檔案移到 /etc/ 底下,這個就見仁見智的,你愛怎麼放就怎麼放。
mkdir -p /etc/rathole ; mv rathole /etc/rathole/
接著不管伺服器端的設定或是客戶端的設定,我都會在 /etc/rathole/ 底下寫。
伺服器端
伺服器端的部分,我們需要一個 server.toml,範例如下:
[server]
bind_addr = "[::]:7000"
[server.services.client1]
token = "YOUR_TOKEN_HERE"
bind_addr = "[::]:7001"
由於我是 IPv6 愛好者,所以 bind_addr 的部分我都一律使用 [::] 表示了,避免沒有監聽到 IPv6。
上面的部分主要是 server 端要監聽的 port,也是客戶端連入的 port。
下方 [server.services.client1] 則是客戶端,其中 client1 則是他的名字。所以如果你需要很多客戶端,則可以複製這個段落,就可以服務很多客戶端了。
token 就像是密鑰,這邊你可以自己定義,客戶端也必須持有相同密鑰才可以順利建立連線,你也可以為每個客戶端定義不同的 token。
最後客戶端的 bind_addr 則是定義成要轉換為本機的哪個 port,供人連線。
客戶端
客戶端的部分,我們則需要一個 client.toml,範例如下:
[client]
remote_addr = "[SERVER_IP_ADDR]:7000"
[client.services.client1]
token = "YOUR_TOKEN_HERE"
local_addr = "[::1]:443"
remote_addr 的部分,請記得改成伺服器端的 IP 位址。
接著下方 client 的段落,名稱跟 token 的部分必須配置的與伺服器端相同,驗證才會成功。
最後 local_addr 則是你希望 Rathole 監聽本機的哪個服務 port。
開始使用
你可以使用以下指令來開始使用,記得伺服器端跟客戶端都要一起啟動哦。
# 伺服器端
/etc/rathole/rathole /etc/rathole/server.toml
# 客戶端
/etc/rathole/rathole /etc/rathole/client.toml
接著,你就可以在伺服器端定義的 port,使用到客戶端的服務囉!
如果你想讓服務常駐,你可以參考 在 Linux 下將特定程式包成服務,讓他在背景運作。