WireGuard 伺服器設定:Ubuntu 閘道配置與完整驗證

WireGuard 伺服器設定:Ubuntu 閘道配置與完整驗證

Kevin Wu
2026年10月9日· 7 分鐘讀完

WireGuard 伺服器設定不能只憑近期握手驗收。本教學在 Ubuntu 24.04 LTS 建立 IPv4 互聯網閘道,以另一部 Ubuntu 24.04 LTS 客戶端分別核對轉送、DNS、拒絕、撤銷、重新啟動及還原。只使用自己擁有或獲授權管理的專用主機;指令供讀者操作,並非作者部署記錄。

關鍵要點

  • peer 連線不等於互聯網轉送或 DNS 已正常。
  • 保留獨立管理連線及可還原的防火牆基線。
  • 示例只涵蓋 IPv4,另一條有效 IPv6 路徑須另行處理。
  • 撤銷須移除執行中的 peer 及持久設定。
  • 有限工作及還原檢查通過後才開啟自動啟動。

應該選擇 WireGuard 伺服器設定還是託管出口?

先以自建規劃指南決定主機、憑證、更新及停用由誰負責。只需一個明確設定代理的應用程式時,VLESS/REALITY 部署教學是另一條路線,不是本教學前提。全隧道與應用程式代理比較說明流量涵蓋選擇。

若只需日常公開存取而不想管理 peer,AethoVPN 提供支援終端路線。Windows 使用官方 .exe,透過電郵驗證碼繼續,在 App 選擇實際可用位置後連線。以 出口 IP 核對工具核對這次請求的可見出口,再重做原本瀏覽或上載工作。

租主機前先比較 VPS 與 VPN 責任。Standard 支援一部流動裝置;Pro 支援兩部桌面及兩部流動裝置;Premium 支援八部裝置,不分裝置類型。

此方法不替你建立主機,也不承諾兼容本文 WireGuard 設定。新用戶只有一次三日 Pro 試用,刪除帳戶後重新註冊不會重設。試用託管日常出口。

準備 WireGuard Ubuntu 伺服器與還原路徑

選擇有可達公開 IPv4 端點的專用 Ubuntu 24.04 LTS 伺服器及另一部授權 Ubuntu 客戶端。NAT 後的主機還需要獲授權上游 UDP 映射,單靠私人位址不足。預留 UDP 51820、隧道網段 10.77.0.0/24、伺服器 10.77.0.1 及客戶端 10.77.0.2;與既有網絡重疊便須更換。WireGuard peer 機制交代兩端關係。[1]

改動前記錄 ip address、ip route、ip rule、ip -6 address、ip -6 route、resolvectl status、sysctl net.ipv4.ip_forward 及相關防火牆設定,私下保存。透過獨立供應商控制台或還原路徑建立一條新管理連線;已開啟的終端並不足夠。原設定備份不要放進公開儲存庫。

此防火牆示例使用 iptables,前提是沒有競爭的 UFW、firewalld 或獨立 nftables 管理器。檢視 sudo iptables-save 並確認政策擁有者。已有其他管理器負責時,停止套用示例,透過該管理器實現相同的小範圍政策,切勿清空規則表。

以 ip -4 route get 1.1.1.1 記錄真實出站介面;這只顯示路由選擇,不發出探測。EGRESS_IF 是待替換標記,並非介面名稱。

使用沒有可用 IPv6 預設路徑的受控客戶端。基線顯示有效路徑時,停止這個 IPv4 練習,另外設計 IPv6 路由及失敗政策。不要為了結果好看而關閉共用主機 IPv6。本教學亦沒有斷線保護:停止隧道會恢復普通路由。

圖中分開隧道、伺服器轉送/NAT 與公開目的地。隧道失效時管理仍須可用;圖只解釋路徑,並非量測流量證據。

步驟 1:安裝工具並分別建立 peer 密鑰

兩端均從 Ubuntu 已設定的可信套件來源安裝。項目的 Ubuntu 安裝方法使用 apt。[2]

sudo apt update
sudo apt install wireguard iptables
sudo install -d -m 700 /etc/wireguard
sudo -i
cd /etc/wireguard
umask 077
wg genkey > wg-exit.private
wg pubkey < wg-exit.private > wg-exit.public
exit

每端獨立產生密鑰,私鑰留在自己的主機,只交換對應公鑰。[1]檔案由 root 擁有且權限私密;不發布可用設定、QR code、截圖或密鑰值。下文名稱是替換標記,不是真實秘密。加到伺服器之前,先記錄公鑰對應哪部裝置。

步驟 2:設定轉送與 WireGuard 伺服器防火牆

透過私密編輯器建立伺服器 /etc/wireguard/wg-exit.conf,替換密鑰及 EGRESS_IF。規則附有識別註解,只服務這一部客戶端;wg-quick 在介面生命週期執行這些 hook。[3]

[Interface]
Address = 10.77.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -I INPUT 1 -p udp --dport 51820 -m comment --comment wg-exit-lab -j ACCEPT
PostUp = iptables -I FORWARD 1 -i %i -o EGRESS_IF -s 10.77.0.2/32 -m comment --comment wg-exit-lab -j ACCEPT
PostUp = iptables -I FORWARD 1 -i EGRESS_IF -o %i -d 10.77.0.2/32 -m conntrack --ctstate ESTABLISHED,RELATED -m comment --comment wg-exit-lab -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.77.0.2/32 -o EGRESS_IF -m comment --comment wg-exit-lab -j MASQUERADE
PreDown = iptables -D INPUT -p udp --dport 51820 -m comment --comment wg-exit-lab -j ACCEPT
PreDown = iptables -D FORWARD -i %i -o EGRESS_IF -s 10.77.0.2/32 -m comment --comment wg-exit-lab -j ACCEPT
PreDown = iptables -D FORWARD -i EGRESS_IF -o %i -d 10.77.0.2/32 -m conntrack --ctstate ESTABLISHED,RELATED -m comment --comment wg-exit-lab -j ACCEPT
PreDown = iptables -t nat -D POSTROUTING -s 10.77.0.2/32 -o EGRESS_IF -m comment --comment wg-exit-lab -j MASQUERADE

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.77.0.2/32

在供應商安全群組容許同一 UDP 連接埠,同時保留管理存取。客戶端公開來源穩定時,應限制 INPUT 及安全群組的來源;採用 -s CLIENT_PUBLIC_IPV4/32 時,新增及刪除規則都要包含同一條件。雲端安全群組與主機防火牆是不同層。

轉送規則容許此客戶端前往經 EGRESS_IF 可達的目的地。若主機有私人路由,可能包括內部服務:使用沒有敏感內部目的地的專用主機,或先加入經審查的目的地政策。認證不等於目的地 ACL。

NAT 提供公開回程,並不授權其他 peer。Ubuntu 預設出口文件要求轉送及地址轉換。[4]

sudo chmod 600 /etc/wireguard/wg-exit.conf
sudo chown root:root /etc/wireguard/wg-exit.conf

記錄轉送原值,確認路徑未被使用,再建立專用 /etc/sysctl.d/70-wg-exit.conf,內容為 net.ipv4.ip_forward=1。只套用該檔案:

sudo sysctl -p /etc/sysctl.d/70-wg-exit.conf
sudo wg-quick up wg-exit
sudo wg show wg-exit

啟動 hook 中途失敗時,重試前先檢查介面及規則;以完全匹配的刪除指令移除遺留條目。重複插入會產生重複規則。不要加入 SaveConfig=true:手冊指出它會在關閉時以執行中狀態覆寫設定檔。[3]

步驟 3:設定客戶端與 WireGuard 互聯網閘道 DNS

建立客戶端私密 /etc/wireguard/wg-exit.conf:

[Interface]
Address = 10.77.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
PostUp = resolvectl dns %i AUTHORIZED_DNS_IPV4
PostUp = resolvectl domain %i ~.
PreDown = resolvectl revert %i

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_PUBLIC_IPV4:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

替換公開端點,選可達且獲授權使用的 DNS。設為 root 擁有、模式 600,再執行 sudo wg-quick up wg-exit。

AllowedIPs 同時涉及路由及 peer 位址;伺服器 /32 與客戶端預設路由的角色不同。更改前閱讀AllowedIPs 指南。預設路由下 wg-quick 使用政策路由,要檢查 ip rule 與相關路由表,不能只看 main 表。[3]

Ubuntu systemd-resolved 可用 resolvectl 設定介面 DNS 及 ~. 路由域名。[5]此例不加入 DNS=,因為 wg-quick 會交給 resolvconf。使用 hook 前確認客戶端解析器確實採用 systemd-resolved。

程式自己的加密 DNS 要另行核對。Keepalive 對部分 NAT 映射有用,不是速度提升;不需要便省略。[1]

步驟 4:驗證、撤銷、重啟及還原

使用下表驗收,私下記錄實際觀察、版本及時間。表中是預期現象,並非作者測試結果。

檢查方法預期現象失敗處理
介面與 peer兩端執行 sudo wg show wg-exit 及 ip -4 address show dev wg-exit[6]公鑰配對正確;伺服器 10.77.0.1/24、客戶端 10.77.0.2/32改路由前先修正歸屬
認證發出授權工作請求,查看握手請求後出現近期握手查 UDP 可達性及密鑰
資料及出口重做授權公開工作,比較計數及出口計數增加,見到預期伺服器出口查轉送、NAT、回程
DNSresolvectl status wg-exit;resolvectl query TASK_HOST預期解析器/介面及有效答案修解析範圍,另查程式 DNS
IPv6 範圍重查基線位址及路由無另一有效 IPv6 路徑停止 IPv4 驗收
未登記 peer未列入伺服器的一次性客戶端密鑰無認證握手或工作轉送停止暴露,查有效 peer 清單
撤銷移除執行中及持久 peer,再試流量裝置不能認證或繼續隧道資料找重建 peer 的來源

撤銷時使用該裝置的真實公鑰:

sudo wg set wg-exit peer CLIENT_PUBLIC_KEY remove

再刪除伺服器設定檔的 peer 區塊。不要用整份執行中設定覆蓋 hook。從被撤銷客戶端重試,核對伺服器有效 peer 清單;後續授權測試改用替換憑證。只刪客戶端設定不會撤銷伺服器權限。

重新加入一個授權一次性 peer 並通過檢查後,在兩部專用主機啟用開機服務:

sudo systemctl enable wg-quick@wg-exit.service

只重新啟動獲授權的主機。核對 systemctl status wg-quick@wg-exit.service、wg show、轉送值、精確防火牆條目、解析範圍及新工作請求。容器重啟不能替代整機生命週期驗收。未能重啟時,這一項仍未驗證。

失敗分支及維護

沒有握手先查密鑰、端點、監聽或 UDP 過濾。有握手卻無工作回應,再查客戶端路由、伺服器轉送、NAT 及回程政策。IP 請求正常但名稱失敗,檢查 DNS。

依已連線但不能上網清單,一次改一層並重做同一工作。其他 VPN 正常不能定位此故障。

保持軟件受支援,每部可獨立撤銷的裝置有獨立 peer;相關改動後重做拒絕及還原檢查。也記錄供應商網絡變更。不明白活躍規則、失去獨立管理或需要改共用正式政策時,應停止。

還原基線

客戶端執行 sudo wg-quick down wg-exit,若啟用過開機服務亦要停用。伺服器若由活躍 unit 管理,使用 sudo systemctl disable --now wg-quick@wg-exit.service;手動啟動介面則用 sudo wg-quick down wg-exit。先確認真實狀態:停用非活躍 unit 不會移除手動介面。hook 失敗後檢查遺留規則,只移除此測試的精確條目,亦移除自己建立的雲端規則。

刪除專用 sysctl 檔案,沒有其他服務依賴轉送時才回復記錄的原值。協調設定漂移,不整份還原舊防火牆備份。回讀路由、解析器、規則及新管理連線,重做原日常工作。安全停用不用的密鑰及所屬檔案;主機、位址、磁碟及快照費用另在供應商處清理。

總結

  • 先完成一個 peer 及一項授權工作,再增加裝置。
  • 分別驗收握手、轉送、DNS、範圍、拒絕及生命週期。
  • 撤銷有效與持久權限,並證明基線已還原。

常見問題

需要公開伺服器嗎?

此互聯網出口工作需要獲授權的可達端點。NAT 後主機要有合適上游映射;私人網絡存取則是另一種拓撲。

為何握手不證明可以上網?

加密 peer 關係可正常,但轉送、NAT、回程或 DNS 仍可失敗。重做授權公開工作,逐層核對結果。

如何驗證 DNS?

查看介面解析狀態,查詢工作主機名稱,再核對真實應用程式解析行為。程式自設加密 DNS 時需要獨立證據。

設定涵蓋 IPv6 嗎?

不涵蓋。這是沒有有效替代 IPv6 路徑的受控客戶端上的 IPv4 示例;有效 IPv6 預設路由須另行設計。

如何撤銷一部裝置?

從執行中的 WireGuard 及持久伺服器檔案移除該 peer,再重試流量。只刪客戶端設定仍保留伺服器授權。

重啟後核對甚麼?

服務、有效 peer、轉送、精確規則、解析範圍及新的工作請求都要核對。服務運作本身不證明閘道可用。

何時選託管服務?

只需支援裝置的公開存取而毋須伺服器控制時,可考慮這路線。核對裝置條款及真實工作,不假定協議兼容。

適用範圍:按 Ubuntu 24.04 LTS 官方資料編寫,未進行作者完整端到端實測。此 IPv4 閘道示例沒有 IPv6 或斷線保護驗收。使用自有或授權主機,遵守適用法律與服務政策。

來源:

  1. WireGuard, "Quick Start": https://www.wireguard.com/quickstart/
  2. WireGuard, "Installation": https://www.wireguard.com/install/
  3. Ubuntu Noble, "wg-quick(8)": https://manpages.ubuntu.com/manpages/noble/man8/wg-quick.8.html
  4. Ubuntu Server, "Using the VPN as the default gateway": https://ubuntu.com/server/docs/how-to/wireguard-vpn/vpn-as-the-default-gateway/
  5. Ubuntu Noble, "resolvectl(1)": https://manpages.ubuntu.com/manpages/noble/man1/resolvectl.1.html
  6. Ubuntu Noble, "ip-address(8)": https://manpages.ubuntu.com/manpages/noble/man8/ip-address.8.html

Sources checked 2026 年 10 月 9 日。


相關文章:

開啟 3 天免費試用

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

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

WireGuard 伺服器設定:Ubuntu 閘道配置與完整驗證 | AethoVPN