本文重點

設定 WireGuard 時,先分清本機身分、對端身分與公網入口,再檢查隧道位址和流量範圍。本文適合已取得服務商或自建端點設定的使用者,說明如何在 Shadowrocket 對應參數、測試連線,並依序從握手、路由、DNS、MTU 著手排查問題。範例位址僅用於說明欄位,並非可連線的服務。

一、加入前先分清 Interface 與 Peer

Shadowrocket(小火箭)的 WireGuard 設定不能只靠一個伺服器位址完成。常見的 WireGuard 設定分為 [Interface] 與 [Peer]:前者描述本機的金鑰與隧道位址,後者描述通訊對端的公鑰、入口及允許的位址範圍。若把兩邊的金鑰填反,即使位址和連接埠正確,也無法完成正常驗證。

本文以使用者已備妥服務商提供或自行建立的設定為前提。開始前應取得完整且彼此相符的參數;只有 Endpoint,沒有本機 PrivateKey 或對端 PublicKey,無法組成可用設定。Shadowrocket 是閉源商業應用,客戶端買斷不等於線路方案;購買客戶端不會自動產生可用的 WireGuard 對端。

參數所屬:本機與通訊對端

Interface:本機
  • PrivateKey:本機私鑰,必須妥善保密。
  • Address:指派給本機的隧道 IP,通常包含前綴長度。
  • MTU:隧道介面的封包大小設定。
  • DNS:部分設定檔內含的解析器設定,不屬於 WireGuard 握手參數。
Peer:通訊對端
  • PublicKey:遠端公鑰,不是本機公鑰。
  • Endpoint:遠端可連線的網域名稱或 IP,以及 UDP 連接埠。
  • AllowedIPs:與此 Peer 關聯的位址範圍。
  • PresharedKey:選用的預先共用金鑰,雙方必須一致。

先依角色整理原始設定,再逐項填寫;不要只因欄位名稱相似就互換金鑰。

二、在 Home 加入 WireGuard 並保留原始參數

手動加入請從 Home → 右上角「+」→ Type → WireGuard 開始。選好協定後再填寫,避免將 WireGuard 參數填進其他協定的表單。以下以 WireGuard 設定檔的標準欄位名稱說明對應方式;應用程式表單可能會將 Endpoint 拆成位址與連接埠,實際欄位請以目前應用程式內顯示為準。

  1. 整理設定

    保留一份原始設定,分別標出 Interface 的 PrivateKey、Address,以及 Peer 的 PublicKey、Endpoint、AllowedIPs。若有 PresharedKey,也一併記下,但不要放進公開筆記或截圖。

  2. 選擇協定

    前往 Home →「+」→ Type → WireGuard。先確認 Type,再輸入參數;不要把整份設定檔文字貼進伺服器位址欄。

  3. 填寫入口

    將 Endpoint 的主機與連接埠分別填入。例如 192.0.2.10:51820 代表主機 192.0.2.10、連接埠 51820;此文件中的範例位址不可作為實際入口使用。

  4. 填寫身分

    填入本機 PrivateKey、對端 PublicKey 和已指派的 Address,再依原始設定處理 AllowedIPs 與選用參數。金鑰內容不要附帶引號、欄位名稱或換行。

  5. 儲存並測試

    儲存後返回 Home,選取該設定並確認 Global Routing,再開啟連線。首次出現系統 VPN 設定授權提示時,確認是此應用程式後依系統指示操作。使用已知可存取的目標發出請求,並檢查連線結果。

三、PrivateKey 與 PublicKey:長度正確不代表配對正確

PrivateKey 用於驗證本機身分,其對應的本機 PublicKey 必須登記在遠端的 Peer 設定中。Shadowrocket 內填寫的 Peer PublicKey 則應取自遠端。雙方不是互換私鑰,而是各自保管私鑰,並使用對方的公鑰辨識通訊對端。

32 位元組
WireGuard 公鑰與私鑰的原始長度
44 個字元
標準含填充 Base64 編碼的金鑰長度
雙方一致
啟用 PresharedKey 的必要條件

上述長度只能用來檢查明顯的複製錯誤,無法證明金鑰有效或屬於同一連線。結尾的 = 可能是 Base64 填充,不應任意刪除;聊天排版帶入的空格、引號和換行則不屬於金鑰。也不要憑外觀相似的字元手動補齊缺漏內容。

四、Endpoint、Address 與 AllowedIPs 各自控制什麼

Endpoint 是建立通訊時連線的外層入口,Address 則是本機在隧道內使用的位址,兩者不可互換。例如遠端公網入口使用連接埠 51820,不代表本機 Address 也要包含該連接埠。WireGuard 使用 UDP;若入口只允許 TCP,即使填入相同的連接埠號碼,也無法取代 UDP 連通性。

欄位範例或格式檢查要點
Endpoint192.0.2.10:51820文件範例。實際主機與 UDP 連接埠必須由設定提供方提供;51820 是常見選擇,並非固定要求。
IPv6 Endpoint[2001:db8::10]:51820組合格式以方括號區分 IPv6 位址與連接埠;分欄表單則填入對應的位址與連接埠欄位。
Address10.20.0.2/32隧道位址範例。必須使用實際指派的值,避免與其他裝置重複。
AllowedIPs10.20.0.0/24僅宣告此網段,不代表所有公網位址都能透過此 Peer 傳輸。
AllowedIPs0.0.0.0/0, ::/0分別涵蓋所有 IPv4 與 IPv6 位址;仍須配合對端的轉送能力及應用程式流量策略。

在 WireGuard 協定層,AllowedIPs 會參與選擇要將輸出資料送往哪個 Peer,也用於驗證該 Peer 傳來的資料所宣告的來源位址。它不是網站網域清單,不能填入 example.com,也不能直接放進 DOMAIN-SUFFIX 規則。只有 IPv4 預設範圍而沒有 IPv6 範圍時,不應因此認定 IPv6 目標也已涵蓋。

五、Global Routing 與 WireGuard 並非同一層的設定

Shadowrocket 會先依自身的流量策略決定請求的去向,WireGuard 參數則會限制選用此連線後的通訊。Global Routing 中的 Proxy、Direct、Config、Scene 不能與 AllowedIPs 畫上等號:Proxy 用於代理路徑,Direct 用於直接連線,Config 依設定規則處理,Scene 則依已設定的情境處理。實際結果也會受選取的策略與設定影響。

首次測試時,可在了解影響範圍的前提下短暫使用 Proxy,並選取待測的 WireGuard 連線,減少規則分流對判斷的干擾;測試後再恢復原本設定。在 Config 模式下,即使 WireGuard 本身可用,若請求符合 DIRECT 規則,也不會因為 AllowedIPs 設定了預設範圍,就自動改走該 Peer。

DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT
FINAL,PROXY

這段僅用來示意規則關鍵字,不是 WireGuard 設定,也不是要求覆蓋現有的 Config。DOMAIN-SUFFIX 會比對網域後綴,GEOIP 依 IP 地理資料庫比對,IP-CIDR 會比對 IP 網段,FINAL 則接收未符合前面規則的請求。範例中的 PROXY 代表代理策略;實際使用時還要確認設定中的策略指向,不能只看規則最後的文字。

六、MTU 與 PersistentKeepalive 的調整範圍

MTU 控制隧道介面傳送的 IP 封包大小。WireGuard 封裝還需要額外的外層 IP、UDP 等開銷,因此不能直接將底層連線的 MTU 原值照搬到隧道。1420 是常見的排查參考值,但不適用於所有路徑;應優先採用既有設定提供的數值,或使用應用程式的預設處理方式。

  1. 先確認基本連線。若尚未建立握手,應先檢查 Endpoint、UDP 網路與金鑰,不要把 MTU 當成首要原因。
  2. 記錄可重現的狀況。例如小型請求成功,但較大的回應一再停滯,才需要進一步懷疑路徑 MTU、封包遺失或相關網路限制。這只是排查線索,不能僅憑現象就下定論。
  3. 每次只修改一個數值。可在設定提供方允許的範圍內,分別以 1420、1380 進行比較;每次儲存並重新連線,以相同目標和請求再次測試,並記下原值以便還原。
  4. 避免一味降低數值。若降低後沒有改善,應回頭檢查 DNS、路由與對端狀態,而非持續調低數值。使用 IPv6 時,也須符合其鏈路 MTU 限制。

PersistentKeepalive 用於定期傳送保活資料,協助維持 NAT 對應。25 秒是常見設定範例,並非協定要求必須啟用;0 代表關閉定期保活。若閒置一段時間後回程通訊中斷,可將其納入排查,但它無法修正錯誤的公鑰、無法連線的連接埠或未獲允許的目標網段。

七、依據現象排查,不要反覆重建設定

每輪排查只變更一個項目,並記錄測試網路、Global Routing 模式、存取目標與結果。Home 顯示的延遲或連線結果,只能反映對應測試項目的狀況;不同測試方式涵蓋的環節各不相同,不能用單一延遲數值證明金鑰、DNS、AllowedIPs 與所有業務請求都正常。

連線開關已開啟,為什麼仍然沒有流量?

先在 Home 確認選取的是剛儲存的 WireGuard 連線,再檢查 Global Routing。接著確認 Endpoint 的主機與 UDP 連接埠,以及 PrivateKey 和對端 PublicKey 的歸屬。若可管理對端,請在發出請求後確認握手時間;系統 VPN 已啟動不代表對端已完成驗證。

只有部分位址能存取,是 AllowedIPs 設定錯誤嗎?

先確認無法存取的目標 IP 是否落在 AllowedIPs 範圍內,再檢查 Config 是否將其分配給其他策略。若原始設定只允許 10.20.0.0/24,不要直接改成預設範圍,期待取得公網轉送;應向設定管理方確認允許的範圍與遠端轉送設定。

Wi-Fi 可以使用,行動網路不行,該先檢查哪裡?

保持金鑰、目標與策略不變,先分別在兩種網路手動連線。檢查 Endpoint 網域的解析結果、IPv4 或 IPv6 可達性及 UDP 通訊條件,再查看 Settings → On Demand 是否設定了不同網路下的觸發條件。不要同時修改連接埠、金鑰與 MTU。

將同一份設定複製到 iPad 後,iPhone 連線變得不穩定?

先停用其中一台裝置,再重新測試。若單台使用正常、同時使用時異常,請確認兩台是否共用相同的 PrivateKey 與 Address。向設定管理方申請獨立的 Peer 與隧道位址,並分別儲存;只更改顯示名稱不會改變協定身分。

提供截圖尋求協助時,哪些內容需要遮蔽?

遮蔽 PrivateKey、PresharedKey、QR Code 及任何訂閱驗證資訊。保留已去識別化的欄位名稱、連接埠、MTU、AllowedIPs 範圍與錯誤狀況即可。若私鑰已外洩,應更換金鑰並同步更新遠端登記;只刪除截圖不足以撤銷舊身分。