在 Ubuntu 中創建 WireProxy 代理伺服器
前幾天自己做了個 wireguard client + sock5 的伺服器跳轉 IP,雖然是做成了不過就是管理兩個關聯服務麻煩,以及我不希望本機被跳轉
簡單說就是連上 wg1 不跳轉 ip,但是由 sock5 進來的流量經過 wg1 要跳轉 ip 的需求,本來手動搞了一下兩個辦法
一個是用 NameSpace 隔離,另一個是打 tag 在封裝上,研究了一下沒弄成,找而問 AI 有沒有人幹過這事?
結果還真有這事google解了,並且有用go寫成函式庫,然後有人用這個庫把他寫成一個軟體了
whyvl/wireproxy: Wireguard client that exposes itself as a socks5 proxy
那就開始安裝吧,開始前記得注意 sock5 是沒加密的別公開到外網上
順帶一提 wsl1 是不能執行 wg 的,因為缺少了wg的核心,但是WireProxy可以正常執行,真好我可以直接在 wsl1 中跑代理了。
安裝 WireProxy
從官方下載編譯好的檔案並複製到指定位置
下載 64位元版本 (Releases · whyvl/wireproxy)
cd /tmp
wget https://github.com/whyvl/wireproxy/releases/download/v1.0.9/wireproxy_linux_amd64.tar.gz
解壓縮並安裝
sudo mkdir -p /opt/wireproxy
sudo tar -xzf wireproxy_linux_amd64.tar.gz -C /opt/wireproxy
sudo chmod +x /opt/wireproxy/wireproxy
sudo ln -s /opt/wireproxy/wireproxy /usr/local/bin/wireproxy
rm wireproxy_linux_amd64.tar.gz
檢查是否可用
wireproxy --version
有出現版本就可以了
設置檔案
新增設定檔
sudo nano /etc/wireproxy.conf
設定檔內容 (內容其實就是 wg client 的內容加上 sock5)
# WireGuard Interface 設定
[Interface]
Address = 10.6.0.2/32
PrivateKey = ${:YOUR_PRIVATE_KEY_HERE}
DNS = 8.8.8.8
# WireGuard Peer 設定
[Peer]
PublicKey = ${:YOUR_PUBLIC_KEY_HERE}
Endpoint = ${:IPv4}:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
# SOCKS5 代理設定
[Socks5]
BindAddress = 0.0.0.0:1080
更改權限
sudo chmod 600 /etc/wireproxy.conf
sudo chown root:root /etc/wireproxy.conf
然後我們執行測試一下
# 測試設定檔案是否正確
sudo wireproxy -c /etc/wireproxy.conf -n
# 前台測試運行
sudo wireproxy -c /etc/wireproxy.conf
能運行應該就沒問題了
設置開機自動啟動
創建 systemd 服務
curl https://raw.githubusercontent.com/pufferffish/wireproxy/master/systemd/wireproxy.service | sudo tee /etc/systemd/system/wireproxy.service
這份檔案是原作提供的 wireproxy/systemd at master · whyvl/wireproxy發生一個意外這個配置在 pi5 上不能跑,姑且是找到問題了,可以參考這篇文章
啟動服務
# 重新載入 systemd
sudo systemctl daemon-reload
# 啟用服務與設置開機自動啟動
sudo systemctl enable --now wireproxy.service
# 檢查服務狀態
sudo systemctl status wireproxy.service
對於 wsl1 沒有 systemctl 的解法是,在 sudo nano /etc/wsl.conf 檔案中添加,command="wireproxy -c /etc/wireproxy.conf &" 讓他開機自動啟動。如果已經有 ssh 服務掛著用 && 連接兩個命令,或是外置一個 sh 檔案代理。
最後測試一下IP是有跳轉成功
# 測試機器本身 IP
curl ipinfo.io
# 測試 SOCKS5 代理 IP
curl --socks5 localhost:1080 ipinfo.io
上面兩個會顯示出不同的IP,只有 SOCK5 會跳轉到 wg 伺服端的 IP