前言
在過去,如果我想要進行 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
即可。
設定環境變數。
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 就好。