專注於代理 UDP 的工具 – udpproxy

前言

在過去,如果我想要進行 TCP 或是 UDP 的反向代理,我或許會用 Socat。但是在使用一段時間後,我發現 Socat 在 UDP 的效率似乎不是到特別好。所以我在 Github 找到一款名為 udpproxy 的專案。

但跟他的名字一樣,他就只支援 UDP,所以你如果仍需要 TCP,可能還是需要 Socat 作為輔助。

安裝

更新及安裝必要元件。

sudo apt-get -y update && sudo apt-get install -y curl build-essential

過程建議使用 root 執行較為方便。

sudo -s

下載並執行 udpproxy 的 script。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

當彈出這個畫面,選擇 1 即可。

001.jpg

設定環境變數。

source "$HOME/.cargo/env"

使用 Cargo 安裝 udpproxy。

cargo install udpproxy

包成服務

我們的 udpproxy 安裝完了,接著我們將他包成服務,這樣我們可以更簡易的控制。

/lib/systemd/system/ 底下建立一個檔案,我這裡取名為 creudp.service,你可以改成自己喜歡的。

sudo vim /lib/systemd/system/creudp.service

有關 udpproxy 的參數,-l 代表本機監聽埠號,-h 代表遠端的 IP 位址,-r 代表遠端的埠號,-b 代表綁定位址。

參考以下內容,並做一些你需要的修改,並貼上在剛剛的檔案上:

[Unit]
Description=creudp
After=multi-user.target

[Service]
Type=simple
ExecStart=/root/.cargo/bin/udpproxy -l 8080 -h 172.16.0.8 -r 8080 -b 0.0.0.0
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

存檔後退出,輸入以下指令讓服務生效。

sudo systemctl daemon-reload

接下來你可以用以下指令,來控制這個反向代理服務。

sudo systemctl start creudp.service    # 啟動服務
sudo systemctl restart creudp.service  # 重新啟動服務
sudo systemctl stop creudp.service     # 停止服務
sudo systemctl enable creudp.service   # 開機自動執行此服務
sudo systemctl disable creudp.service  # 開機不執行此服務(預設)

結語

這就是 udpproxy 的安裝以及使用方法。我自己感覺他的效率比起 Socat 好一些,但是比較耗 CPU 資源。如果你不是非常在乎轉換效率的話,你可以直接使用 Socat 就好。