這個工具 socat 應該是我近期用過最好用的代理工具,原因是簡單易用。因為太好用了,我決定筆記在這裡。
安裝 socat
首先,我們先來安裝 socat
sudo apt-get update && sudo apt-get install socat
開始使用
使用範例如下:
你想將本機的 TCP 8080 轉發到 172.16.1.2 的 TCP 80 上
socat TCP-LISTEN:8080,fork,reuseaddr TCP4:172.16.1.2:80
你想將本機的 UDP 12345 轉發到 172.16.1.2 的 UDP 54321 上
socat UDP-LISTEN:12345,fork,reuseaddr UDP4:172.16.1.2:54321
其他設定技巧
[1] 如果我想同時轉發同個埠上的 TCP 及 UDP,是可以做到的嗎?
可以,就開兩個 socat,分別指向 TCP 及 UDP 就好。
[2] 支援 IPv6 嗎?
可以,在上述範例可以看到 TCP4 或是 UDP4,這個 4 就是代表 IPv4,所以若想轉發到 IPv6 上,只需要將其改成 TCP6 或是 UDP6 即可哦。
[3] 如何讓他在背景運作?
可以使用 screen 或是我之前寫的 在linux下將特定程式包成服務 就可以達成囉。
方式如下:
在 /etc/systemd/system
建立一個名為 myproxy.service
的檔案。
sudo vim /etc/systemd/system/myproxy.service
貼上以下內容並做適當更改。
[Unit]
Description=MyProxy
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/socat TCP-LISTEN:8080,fork,reuseaddr TCP4:172.16.1.2:80
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
存檔後退出,輸入以下指令讓服務生效。
sudo systemctl daemon-reload
接下來你可以用以下指令,來控制你建立的服務。
sudo systemctl start myproxy #啟動服務
sudo systemctl restart myproxy #重新啟動服務
sudo systemctl stop myproxy #停止服務
sudo systemctl enable myproxy #開機自動執行此服務
sudo systemctl disable myproxy #開機不執行此服務(預設)