在 docker 中創建 WireProxy 代理伺服器
上一篇手動創建的可以參考這裡的做法
CHG: 在 Ubuntu 中創建 WireProxy 代理伺服器
重複的如何生成設定檔等等這篇不再重複贅述,會集中在如何部署在 docker 上。會需要部署在 docker 上是因為如果有不只一個 WireProxy 通道要在 host 上跑會變得很難管理。
每次更改設定檔得重啟服務,甚至有時候只是想單獨只要關閉其中一個通道也是相當麻煩,上 docker 就很省事以上都同輕鬆管理。
在 Windows 上可以直接安裝 docker 就可以有圖形管理介面了,如果是在 linux 上可以用 portainer 這個管理套件。都不安裝也沒差純指令管理也行。
下面讓我們開始吧,記得先準備好能用的 wireporxy.conf 檔案
步驟 1:建立 Docker 映像檔
建立 Dockerfile
mkdir -p ~/docker/wireproxy
nano ~/docker/wireproxy/Dockerfile
內容如下
FROM debian:bullseye-slim
# 安裝必要工具
RUN apt update && apt install -y wget tar && rm -rf /var/lib/apt/lists/*
# 建立工作目錄
WORKDIR /opt/wireproxy
# 下載並解壓縮 wireproxy 二進位檔
RUN wget https://github.com/whyvl/wireproxy/releases/download/v1.0.9/wireproxy_linux_amd64.tar.gz -O /tmp/wireproxy_linux_amd64.tar.gz && \
tar -xzf /tmp/wireproxy_linux_amd64.tar.gz -C /opt/wireproxy && \
chmod +x /opt/wireproxy/wireproxy && \
ln -s /opt/wireproxy/wireproxy /usr/local/bin/wireproxy && \
rm /tmp/wireproxy_linux_amd64.tar.gz
# 設定預設啟動命令
ENTRYPOINT ["wireproxy", "-c", "/etc/wireproxy.conf"]
建立 Docker 映像檔
cd ~/docker/wireproxy
docker build -t wireproxy .
這個映像檔可以重複使用,並且會自動儲存在docker中
步驟 2:執行 container
# 0. 刪除就有的docker
docker stop wireproxy
docker rm -f wireproxy
# 1. 建立 docker
docker run -d \
--name wireproxy \
--cap-add=NET_ADMIN \
-p 1080:1080 \
-v /etc/wireproxy.conf:/etc/wireproxy.conf \
wireproxy
# 2. 設置開機自動啟動 (no|always)
docker update --restart=always wireproxy
跑完就已經啟動服務了,用下面的指令確定一下IP有無跳轉
myip() {
echo -e "🌐 Direct IPv4 : \033[1;33m$(curl -4 -s ifconfig.me)\033[0m"
echo -e "🌐 Direct IPv6 : \033[1;33m$(curl -6 -s ifconfig.me)\033[0m"
echo -e "🧦 SOCKS5 IPv4 : \033[1;36m$(curl -4 -s --socks5 localhost:1080 ifconfig.me)\033[0m"
echo -e "🧦 SOCKS5 IPv6 : \033[1;36m$(curl -6 -s --socks5 localhost:1080 ifconfig.me)\033[0m"
}; myip
執行多個不同代理的 container
如果要跑多個服務就是步驟2重複執行就可以,只需要更改 port 與 設定檔 即可
例如要讓 1081 對應到本機 /etc/wireproxy/wp0.conf 的話可以像以下這樣設置
docker run -d \
--name wp0 \
--cap-add=NET_ADMIN \
-p 1081:1080 \
-v /etc/wireproxy/wp0.conf:/etc/wireproxy.conf \
wireproxy
如此一來就可以輕鬆建立對應各個伺服器的代理了,要關哪個改哪個都是獨立的,隨意輕鬆來互相不影響。
快速部署多個不同代理的 wp 容器
一個容器對應一個設定檔案,所以這邊寫了兩個快速產出設定檔與執行docker容器的函式
快速產出設定檔案
wp_conf_init() {
local name="${1:-wp0}"
local dir="/etc/wireproxy"
local file="$dir/${name}.conf"
local msg
# 建立設定檔目錄
sudo install -d -m 700 -o root -g root "$dir"
# 初始化設定檔
if sudo test -e "$file"; then
msg="設定檔已存在,使用以下指令檢視或修改:"
else
# 建立模板檔案
sudo tee "$file" > /dev/null <<'EOF'
# WireGuard 客戶端設定
# 取代這行並貼上完整wg設定檔 (包含 [Interface] 與 [Peer] 區塊)
# SOCKS5 代理設定
[Socks5]
BindAddress = 0.0.0.0:1080
EOF
sudo chown root:root "$file"
sudo chmod 600 "$file"
msg="已建立設定檔,使用以下指令編輯:"
fi
echo "$msg sudo nano $file"
}
使用方式
wp_conf_init wp0
會快速幫你產好檔案,只需要再把 wirguard 設定值貼進去就好
再來處理容器的起動,這邊設定好之後執行剛剛的名稱 wp0
run_wireproxy() {
local NAME="${1:-wireproxy}"
local PORT="${2:-1080}"
local CONF
if [[ -n "$3" ]]; then
CONF="/etc/wireproxy/$3"
elif [[ -z "$1" ]]; then
CONF="/etc/wireproxy.conf"
else
CONF="/etc/wireproxy/${NAME}.conf"
fi
if [[ ! -f "$CONF" ]]; then
echo -e "\033[1;31m❌ 找不到設定檔:$CONF\033[0m"
return 1
fi
docker stop "$NAME" >/dev/null 2>&1
docker rm -f "$NAME" >/dev/null 2>&1
echo "🚀 啟動容器:$NAME"
echo " 🌐 主機埠 $PORT 映射至容器 1080"
echo " 🔗 掛載設定檔 $CONF → /etc/wireproxy.conf"
CID=$(docker run -d \
--name "$NAME" \
--cap-add=NET_ADMIN \
-p "$PORT":1080 \
-v "$CONF:/etc/wireproxy.conf" \
wireproxy)
if [[ $? -eq 0 && -n "$CID" ]]; then
echo " ✅ 成功啟動容器:$NAME"
else
echo " ❌ 容器啟動失敗"
return 1
fi
return 0
}
執行函式
run_wireproxy wp0
就可以把剛剛建立的設定檔跑起來了
需要開機自動啟動再自行設定: docker update --restart=always wp0
沒有留言:
張貼留言