Shadowrocket WireGuard 設定教學:Private Key、Public Key、Address 與 MTU 填寫方式

了解 WireGuard 金鑰配對與 Peer 架構,逐一對照 Shadowrocket 的設定欄位與服務商提供的資料,並掌握 MTU 和 DNS 的設定原則。

本文重點

本文適合已取得服務商提供的 WireGuard 設定,準備在 Shadowrocket 輸入參數的使用者。先區分本機 Private Key 與對端 Public Key,再依序確認 Address、Endpoint、MTU 和 DNS 的用途;最後透過單一變因測試,區分金鑰不符、UDP 無法連通、DNS 解析失敗與封包過大等問題。

先分清 WireGuard 的本機與對端參數

WireGuard 以金鑰配對辨識通訊雙方。每一端都有自己的 Private Key,以及由此產生的 Public Key:Private Key 保留在所屬裝置上,Public Key 則提供給通訊對端登錄。因此,服務商提供的用戶端設定中,[Interface] 與 [Peer] 分別代表不同類型的資訊,不能因為都看到 Key 就互相替換。

在 Shadowrocket 中,本機 Private Key 用來證明本機身分,Peer 的 Public Key 則用來確認遠端身分。伺服器也必須登錄與本機 Private Key 對應的用戶端 Public Key。如果自行更換 Private Key,卻沒有同步更新伺服器上的登錄資料,即使照抄其他參數,也無法建立正確的通訊關係。

32 位元組
WireGuard 金鑰的原始長度;通常以 Base64 文字表示
UDP
WireGuard 的傳輸方式,不使用 TCP 交握
2 類
設定分工:Interface 本機參數與 Peer 對端參數

結論:先確認金鑰屬於哪一端

輸入前,先將資料中的 Interface PrivateKey 和 Peer PublicKey 分別標記為「本機私鑰」與「伺服器公鑰」;缺少任何一項時,先向自己的服務商確認,切勿用另一端的金鑰代替。

Private Key、Public Key 與位址欄位的對應關係

以下依照標準 WireGuard 設定欄位說明各項資訊的對應方式。Shadowrocket 編輯頁面的欄位排列可能隨介面調整,核對時請以欄位用途為準。尤其要分清 Address 和遠端伺服器位址:前者是隧道內部位址,後者來自 Endpoint,兩者通常不同。

WireGuard 設定資料與輸入欄位對照
參數資料來源填寫重點
Private Key[Interface] 的 PrivateKey使用分配給本機的私鑰。保留完整的 Base64 內容,包括末尾可能出現的 =,不要加入空格或換行。
Public Key[Peer] 的 PublicKey填入遠端 Peer 的公鑰,不是用戶端自己的公鑰,也不是訂閱存取憑證。
Address[Interface] 的 Address依服務商分配的隧道位址與前綴填寫,例如文件中的 10.66.0.2/32。不要自行選用相近的位址替代。
伺服器位址與 Port[Peer] 的 Endpoint將主機名稱與連接埠分別填入對應欄位。連接埠必須與伺服器設定一致;51820 只是常見範例,並非固定值。
Preshared Key[Peer] 的 PresharedKey這是可選的額外共享金鑰。若伺服器有啟用,兩端必須完全一致;若未提供,請勿用 Private Key 代填。
MTU[Interface] 的 MTU 或服務商提供的說明優先沿用既有設定值。若未提供,保留 App 預設值,不要將任意網路上的參數視為通用最佳值。
DNS設定中的 DNS 與服務商的解析說明確認 DNS 解析器是否只能透過隧道存取,再對照 Shadowrocket 目前的 DNS 設定,核對實際解析路徑。

請將 Private Key 視為敏感憑證妥善保管。向他人描述問題時,可以提供錯誤訊息、網路類型,以及不含憑證的欄位名稱;不要貼出完整私鑰、Preshared Key 或訂閱連結。公鑰並非用來保密私鑰,但公開紀錄中也不必附上帳戶與位址資訊。

在 Home 新增 WireGuard 的操作順序

先備妥自己的完整設定資料,再開始輸入。只有 Endpoint 或公鑰其中一項,並不足以組成可用設定;伺服器登錄的用戶端身分、分配位址與允許存取範圍都必須相互對應。以下以手動新增為例,介面用語保留英文。

  1. 選擇協議

    前往 Home → 點選右上角「+」→ Type → WireGuard。先選擇類型再填寫欄位,避免將 WireGuard 參數輸入其他協議的編輯頁面。

  2. 填寫遠端資訊

    將 Endpoint 的主機部分填入伺服器位址欄位,連接埠則填入 Port。例如資料為 vpn.example.com:51820 時,請分別填寫主機名稱與 51820;這只是格式範例,不是可用的連線資訊。

  3. 核對金鑰

    填入本機 Private Key 與遠端 Public Key;若有 Preshared Key,也一併填入。逐項對照原始資料,確認複製時沒有多帶引號、空白或欄位名稱。

  4. 填寫內部位址

    依照資料填寫 Address,並保留指定的前綴長度。IPv4 和 IPv6 位址都應依實際分配填寫;不要因裝置目前連線的是 IPv4 網路,就刪除設定中的 IPv6 資訊。

  5. 儲存並測試

    確認 MTU 等選用參數後儲存,返回 Home 選取該項目。在可控的短時間測試中,將 Global Routing 設為 Proxy,再開啟連線開關;測試完成後,恢復平常使用的 Config 等設定。

若項目是由既有 Subscribe 訂閱建立,先確認訂閱內容確實包含 WireGuard 項目。更新訂閱時,可能會重新寫入由訂閱管理的欄位;手動修改前請保留原始資料,並記下修改內容。不要為了保留一次測試參數而反覆修改整份訂閱,也不要在疑難排解截圖中放入完整訂閱憑證。

Address、AllowedIPs 與規則分流屬於不同層級

Address 是本機隧道介面的內部位址。範例 10.66.0.2/32 中,/32 表示單一 IPv4 主機位址,不代表遠端 Endpoint,也不表示所有網路流量都會自動進入隧道。位址通常須與伺服器針對該用戶端的設定相符;任意改成 /24 並不能解決連線問題。

標準 WireGuard 設定中的 AllowedIPs,與 Peer 的目標位址選擇及來源位址檢查有關;Shadowrocket 的 Global Routing 和 Config 規則則決定 App 請求採用哪種策略。不可將系統層級 WireGuard 設定的路由效果,直接視為 Shadowrocket 目前的規則分流效果。

MTU 的設定原則與測試方法

MTU 是介面可承載的 IP 封包大小上限。WireGuard 封裝還需要額外的外層 IP、UDP 與協議標頭,因此隧道內可使用的封包大小通常小於外層鏈路的 MTU。路徑中也可能有其他封裝,不能只憑 Wi-Fi 訊號強弱或寬頻速度推算 MTU。

1420 是 WireGuard 常見的 MTU 起始值,1280 可作為縮小封包的疑難排解參考,但兩者都不是適用所有網路的固定答案。既有設定若明確指定數值,請先照填;若未提供,則保留預設值。只有出現「小型請求成功,但大型頁面或較大資料傳輸停滯」等情況時,再將 MTU 納入排查。

  1. 記錄原始 MTU、目前網路、Global Routing 模式與測試目標,保留可還原的基準設定。
  2. 先確認同一個項目在目前網路下能否完成實際請求。若完全無法通訊,應優先檢查金鑰、Endpoint 和 UDP 是否可連通,而不是接連嘗試多種 MTU。
  3. 若在預設值或 1420 下,能穩定重現大型傳輸停滯,可暫時測試 1380;若仍有異常,再以 1280 作為診斷對照。每次只修改 MTU,重新建立連線後重複相同操作。
  4. 分別記錄 Wi-Fi 與行動網路的測試結果。某個數值只在其中一種網路有效,通常表示連線路徑條件不同,不能因此判定另一種網路的設定有誤。

這些數值只是測試順序的範例,並非本站實測結果。降低 MTU 後恢復連線,只能表示問題可能與路徑 MTU、分片或相關封包處理有關,仍須重複驗證。若降低後沒有改善,請還原原值並檢查其他層級;不要把 MTU 越小越穩定當成長期設定原則。

DNS 需同時檢查解析器與連線路徑

WireGuard 本身沒有定義統一的 DNS 設定傳送協議。常見設定檔中的 DNS 是提供給用戶端或設定工具使用的資訊,不是透過 WireGuard 交握自動協商出的解析器。Shadowrocket 實際採用哪些 DNS 設定,還須依目前 Config 的 DNS 設定與 App 設定判斷。

Endpoint 使用網域名稱時,建立隧道前必須先能解析該網域。如果完全依賴只能透過隧道存取的 DNS,可能形成「必須先建立隧道才能解析,但必須先解析才能建立隧道」的循環依賴。另一方面,服務商提供的內部 DNS 即使位址格式正確,也未必能透過 Direct 連線。

常見設定問題與疑難排解順序

連線開關維持開啟,只能表示系統 VPN 工作階段處於相應狀態,無法單獨證明 WireGuard 已成功交換資料。排查時依序確認「資料完整 → Endpoint 與 UDP → 金鑰對應 → 位址與策略 → DNS → MTU」,比隨意切換所有參數更容易找出問題。

Public Key 應該填自己產生的那一把嗎?

這裡需要的是遠端 Peer 的 Public Key,請對照服務商資料中 [Peer] 的 PublicKey。本機自己的公鑰應登錄在伺服器上;若自行產生新的金鑰配對,必須請伺服器同步登錄新公鑰,不能只修改本機 Private Key。

把 Port 改成 443 就一定連得上嗎?

不一定。Port 必須對應遠端實際監聽的 UDP 連接埠。即使填入 443,WireGuard 也不會因此變成 HTTPS 或 TCP。先還原資料中的連接埠,再用同一個項目分別透過 Wi-Fi 和行動網路測試,確認是否只有某一種網路路徑無法連線。

可以直接使用文章範例中的 10.66.0.2/32 作為 Address 嗎?

不可將範例當成分配給自己的位址。請開啟原始設定,找到 [Interface] 下的 Address,依實際值填寫;若沒有提供,請向自己的服務商確認。複製其他裝置的設定也可能造成身分與位址衝突,請確認是否需要獨立分配。

為什麼重新連線後,看起來還是使用舊項目?

返回 Home,確認目前選取的項目和 Global Routing;若使用 Config,也要確認實際選取的策略群組。若連線狀態會自動恢復,請前往 Settings → On Demand 檢查隨選連線條件;測試期間記錄並暫時停用相關條件,完成後再恢復。

訂閱更新後參數又變了,該怎麼處理?

先確認該項目是否由 Subscribe 管理,再對照自己的原始資料檢查更新結果。將測試參數與正式參數分開記錄;若訂閱持續提供不相符的 Address 或金鑰,請向自己的服務商確認設定,而不是每次更新後都靠手動覆寫。

下載 Shadowrocket