wg-easy 部署:限制管理入口、撤銷裝置與備份復原

wg-easy 部署:限制管理入口、撤銷裝置與備份復原

Kevin Wu
2026年10月11日· 8 分鐘讀完

wg-easy 部署會為 WireGuard 加上管理介面,但主機保安、路由和復原仍由你負責。本教學把管理介面放在 SSH 通道後,為每部裝置建立獨立身份,並將撤銷紀錄納入復原程序。

關鍵要點

  • 對外發佈隧道埠,管理埠只綁定主機回環地址。
  • 裝置設定檔及二維碼都含有秘密,不能當普通圖片分享。
  • 撤銷及重新啟動後檢查新流量,不憑綠色指示判斷成功。
  • 先關閉業務入口,還原資料後先重做其後的撤銷。

wg-easy 部署符合你的維護方式嗎?

先用自建維護責任清單訂明更新、憑據、防火牆及退役的負責人。WireGuard 網頁管理介面方便一致地新增裝置,但不安全的備份或匯出亦可能洩露全部裝置秘密。授予管理權前,先了解WireGuard 的公鑰身份模型。

若只需日常互聯網出口,不想維護伺服器,可比較租用 VPS 與使用託管 VPN 的責任。實際任務若是管理 Xray 入站,則參考限制入口的 3x-ui 設定程序;它的憑據和復原資料不同,並非 WireGuard 的另一種介面。

適用範圍及證據: Ubuntu 24.04 LTS、配備 Compose 插件的 Linux Docker Engine、wg-easy v15.4.0,以及另一部獲授權 WireGuard 客戶端。本文依據來源編寫,作者未完成端到端部署或效能實測,沒有把截圖或終端輸出冒充觀察結果。固定版本只是操作基線,不代表宣稱它是最新版本。[1]

步驟 1:準備主機和獨立復原通道

選擇具備公網入口的專用主機,或已獲授權的上游 UDP 埠映射。確認映像支援主機架構,Linux 核心支援 WireGuard。工作站上的 Docker Desktop 不在本閘道程序範圍內。依 Docker 官方發行說明安裝 Engine 和 Compose,並檢查版本。

私下保存原有介面、路由、DNS、防火牆管理者、Docker 已發佈埠及雲端安全群組。建立一條新的 SSH 連線,並確認供應商復原控制台可用。不要把管理路徑改到即將建立的隧道。

預留 UDP 51820 和主機 TCP 51821;已有佔用便停止。將 Compose 橋接子網與主機、客戶端、區域網絡路由比較,排除衝突。預設私有 IPv6 橋接網絡不能證明公網 IPv6 出口有效。本次有限 IPv4 檢查應使用沒有可用 IPv6 預設路由的受控客戶端;否則先設計及驗證雙棧覆蓋,不要為了通過檢查關閉共用機器的 IPv6。

步驟 2:啟動前限制 WireGuard 網頁管理介面

下載並閱讀所選版本的 Compose,保留配套的卷、能力、網絡及轉送設定,不混用 v14 環境變數。上游檔案會發佈兩個服務埠,故必須有意識地修改管理埠。[2]

sudo install -d -m 700 /etc/docker/containers/wg-easy
sudo curl --fail --show-error --location \
  https://raw.githubusercontent.com/wg-easy/wg-easy/v15.4.0/docker-compose.yml \
  -o /etc/docker/containers/wg-easy/compose.yaml
sudoedit /etc/docker/containers/wg-easy/compose.yaml

在已有 wg-easy 服務內替換以下對應欄位。這是片段,並非完整 Compose;保持原有縮排及其他必要設定,包括 NET_ADMIN 和文件要求的模組處理。不要加入 privileged,亦不要掛載 Docker socket。

image: ghcr.io/wg-easy/wg-easy:15.4.0
environment:
  - INSECURE=true
ports:
  - "51820:51820/udp"
  - "127.0.0.1:51821:51821/tcp"
restart: "no"

INSECURE=true 允許這個受限介面使用 HTTP,不會關閉 WireGuard 認證,也不是公開明文管理的許可。本方案的瀏覽器至伺服器路徑由 SSH 保護,不可改用公網 HTTP 管理地址。日後若需公開網頁入口,須另行設計認證及 HTTPS。[4]

項目目錄保持只供 root 存取。下列指令在 sudo 權限內明確指定 Compose 檔案,一般 sudo 管理員毋須進入該目錄。[7]

透過供應商防火牆及實際負責主機/Docker 政策的管理者放行 UDP 51820,不開放公網 TCP 51821,IPv6 同樣適用。Docker 發佈流量可能繞過人們預期保護普通主機服務的 UFW 規則;單一 UFW deny 不足以證明限制成立。不要關閉 Docker 防火牆規則管理或清空規則表。[3]

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml config --quiet
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml pull
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml up -d
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml ps
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml port wg-easy 51821

管理映射應顯示 127.0.0.1:51821。若看到萬用地址或其他地址,應停止容器,在初始化前修正檔案。首次驗收使用 restart: "no";完成下列檢查後才啟用自動重新啟動政策。

步驟 3:經 SSH 初始化並新增裝置

在管理工作站替換以下大寫佔位符。信任檔案必須包含經獨立核對的主機密鑰;不匹配時應停止,不可關閉校驗。本地 51821 也須未被佔用。

ssh -N -T -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=yes \
  -o UserKnownHostsFile=/PATH/TO/VERIFIED_KNOWN_HOSTS \
  -L 127.0.0.1:51821:127.0.0.1:51821 ADMIN@SERVER_IP

保持終端運行,開啟 http://127.0.0.1:51821。以獨立管理員名稱及強密碼完成首位用戶設定,選擇新設定,填寫公網隧道入口及 UDP 51820,再於介面/客戶端設定中指定 DNS 和路由。不要將回環地址當作裝置 endpoint。官方說明有區分新設定與舊安裝匯入。[5]

新增一部裝置,使用能對應持有人及用途的清楚名稱,私下將匯出的設定交付到該裝置。不同人士不要共用 peer 檔案,不要貼到聊天或公開二維碼。裝置與公鑰的對應清單應與私鑰分開保存。

用作 IPv4 互聯網出口時,檢查所產生客戶端的 AllowedIPs 是否包含 0.0.0.0/0,並確認 DNS 可達。客戶端路由不是伺服器端存取控制,亦不表示 VPS 能連到任意私人區域網絡。核對 endpoint、路由、地址分配及 DNS 符合實際拓撲後才匯出。

步驟 4:分別驗證存取、流量和拒絕

連接前私下記錄客戶端原有出口,連接新裝置並產生新請求。在確實使用 WireGuard 介面的瀏覽器中核對可見出口 IP,預期 IPv4 應與伺服器已知出口一致,並考慮供應商 NAT。

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml exec wg-easy wg show wg0
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml restart wg-easy

產生新流量後查看握手時間及傳輸計數。舊握手只能證明過去曾交換資料,不能證明目前請求經過隧道。不要將公鑰及入口地址放入共用日誌。認證失敗時,依WireGuard 密鑰不匹配的排查次序比較目標 peer,不披露任何私鑰。

讀者檢查預期條件失敗時處理
獲授權外部主機存取公網管理地址TCP 51821 沒有管理連線停容器,檢查 Docker 綁定及兩種地址族
經 SSH 的新瀏覽器尚未登入無法執行特權管理操作停止設定,調查認證並移除匿名存取
有效裝置發出新互聯網請求新握手、計數增加、出口正確區分入口/UDP 與轉送、NAT、DNS、路由
分別進行 DNS 及應用 UDP 檢查解析路徑正確,受控 UDP 請求成功獨立排查,不以瀏覽器 TCP 成功代替
中斷隧道實際回退符合明確政策不宣稱斷線保護,有需要另行設計及驗證

以自己控制的 DNS 測試檢查實際解析路徑,另用獲授權 UDP 應用驗證 UDP。HTTPS 瀏覽不能代替 UDP 檢查。本文沒有提供客戶端斷線保護;全隧道設定中斷後可能恢復普通連線,不要用敏感業務探索這種行為。

步驟 5:撤銷裝置並製作 wg-easy 備份

保留第二部獲授權裝置作對照。在管理介面停用或刪除第一部,儲存變更,確認其公鑰不再是運行時接受的 peer。保留舊客戶端設定並強制產生新流量,預期不能完成新的有效握手或轉送請求。確認對照裝置仍可運作,再重新啟動容器,重複兩邊檢查。

把撤銷公鑰和日期寫入獨立於被替換備份的私人紀錄。刪除自己客戶端的檔案不能撤銷另一部裝置已有的副本;管理介面截圖也不能證明目前介面及下次重新啟動都遵守撤銷。

停止容器後製作一致備份。下列帶日期的目的地目錄必須尚不存在,下一份快照應改用另一日期或標籤。每條指令確認成功才繼續;複製失敗時保留來源卷,有意識地恢復服務,不可把失敗副本當作可復原備份。

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml stop wg-easy
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml cp wg-easy:/etc/wireguard /root/wg-easy-backup-20261011
sudo chmod -R go-rwx /root/wg-easy-backup-20261011
sudo cp /etc/docker/containers/wg-easy/compose.yaml /root/wg-easy-compose-20261011.yaml
sudo chmod 600 /root/wg-easy-compose-20261011.yaml
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml start wg-easy

需要整個 /etc/wireguard 持久化目錄,包括資料庫和產生的密鑰。同時保留 Compose、映像版本及防火牆/復原通道清單。異機副本須加密並限制存取,檢查封存能夠讀取;複製或列出檔案均不能證明復原成功。

復原演練前先在供應商端關閉隧道入口,使用專用替代主機或隔離實例。重建同版本,在服務停止時還原持久化目錄及原有擁有人、權限,管理介面繼續只綁定回環地址。不要向運行中的資料庫合併檔案,也不要覆蓋唯一尚存的備份。

入口關閉時啟動,先重做快照之後全部撤銷,再核對裝置清單。其後只短暫允許獲授權測試客戶端,重複有效/失效身份檢查,重新啟動後再次驗證。還原後已撤銷身份重新可用,便屬復原失敗:關閉入口,從持久化及運行狀態移除身份,重新驗收後才恢復正常開放。

步驟 6:找回管理入口或退役

SSH 正常但管理員密碼遺失時,在獲授權主機使用文件規定的互動式重設。不要把新密碼放入指令參數或記錄輸入。[6]

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml exec -it wg-easy cli db:admin:reset

管理介面故障時,經供應商控制台只檢查此 Compose 項目的設定及日誌,還原最後已知正確的設定,不以公開 UI 繞過問題。無法安全恢復管理通道時,保持業務入口關閉並停止後續修改。

退役時先關閉此部署的 UDP 入口、停止容器,執行 sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml down;備份保留政策未定前不要加 -v。撤銷匯出身份,只移除此項目的供應商規則及預留資源,檢查殘餘監聽,並確認新的 SSH 連線和原有服務可用。資料卷須在明確決定保留政策後才刪除;停止容器不會停止 VPS 計費。

總結

  • 分開管理通道、隧道、裝置清單與撤銷紀錄。
  • 新流量及負向驗證通過後才啟用自動重新啟動。
  • 可復原備份須保留有效裝置,同時保持現有拒絕狀態。

常見問題

管理介面會取代 WireGuard 密鑰嗎?

不會,每部裝置仍需獨立 WireGuard 身份。管理介面只是管理設定及簡化匯出,因此更應保護管理員入口和匯出資料。

密碼足夠複雜就可以公開 UI 嗎?

強密碼不能取代受控管理入口。本方案只允許經 SSH 到回環地址的 HTTP 存取,不提供公網管理監聽。

為何 UFW 顯示拒絕,容器埠仍可達?

Docker 的轉送和埠發佈可能不經普通主機服務採用的 UFW 路徑。應核對實際 Docker 綁定及供應商防火牆,不能只看 deny 紀錄。

有握手就證明互聯網出口成功嗎?

握手只證明某一刻的 peer 交換。還要分別檢查新流量、可見出口、DNS、UDP 及斷連行為,才能判斷完整路徑。

還原備份會令已撤銷裝置重新生效嗎?

如果快照早於裝置刪除,便可能復活舊身份。應保留獨立撤銷紀錄,在入口關閉時重做其後變更,再驗證拒絕。

全部裝置可以共用一份匯出檔案嗎?

應使用獨立身份,遺失一部裝置時才可單獨撤銷,而毋須更換其他裝置憑據。共用檔案亦會破壞裝置清單和流量歸屬。

作者是否完成端到端部署實測?

本文不宣稱作者已完成端到端實測。指令及預期條件是依官方資料設計的讀者驗收程序,請記錄自己獲授權環境的實際結果。

來源:

  1. wg-easy v15.4.0 — https://github.com/wg-easy/wg-easy/releases/tag/v15.4.0
  2. wg-easy v15.4.0 Compose — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docker-compose.yml
  3. Docker — Packet filtering and firewalls — https://docs.docker.com/engine/network/packet-filtering-firewalls/
  4. wg-easy — No Reverse Proxy — https://wg-easy.github.io/wg-easy/latest/examples/tutorials/reverse-proxyless/
  5. wg-easy v15.4.0 — Setup — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docs/content/guides/setup.md
  6. wg-easy v15.4.0 — CLI — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docs/content/guides/cli.md
  7. Docker — Compose CLI — https://docs.docker.com/reference/cli/docker/compose/

Sources checked 2026 年 10 月 11 日。


延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

wg-easy 部署:限制管理入口、撤銷裝置與備份復原 | AethoVPN