本文適合已向自己的服務商取得 WireGuard 設定,準備在 Shadowrocket 手動填寫欄位的使用者。先分清本機 Interface(介面)與遠端 Peer(對等端),再對應私鑰、公鑰、隧道位址和連線端點,最後確認 MTU 與分流設定。文中的位址、網域和連接埠僅用於說明結構,不能作為可連線的設定。
一、先分清 Interface 與 Peer 的設定歸屬
Shadowrocket(小火箭)中的 WireGuard 設定包含兩類資訊:本機以什麼身分和位址加入隧道,以及本機要連線到哪個遠端。常見的 WireGuard 文字設定會以 [Interface] 和 [Peer] 分段。手動新增時,應依欄位含義對應表單,而不是按照文字出現順序逐行貼上。
Private Key(私鑰)屬於本機身分;Peer 的 Public Key(公鑰)用來識別遠端。Address(隧道位址)是服務商分配給本機的隧道內位址;Endpoint(遠端連線端點)才是網路上要連線的伺服器網域或 IP 與連接埠。兩者不可互換。
欄位歸屬:本機 Interface 與遠端 Peer
Interface(本機介面)
- PrivateKey:本機私鑰,對應本機身分。
- Address:本機在隧道中的 IPv4 或 IPv6 位址。
- MTU:隧道介面可承載的 IP 封包大小參數。
- DNS:若設定中有提供,代表配套的解析伺服器資訊。
Peer(遠端對等端)
- PublicKey:遠端公鑰,不是本機公鑰。
- Endpoint:遠端主機位址與 UDP 連接埠。
- PresharedKey:雙方約定使用的選用預先共用金鑰。
- AllowedIPs:此 Peer 對應的隧道路由與位址限制。
先確認欄位屬於哪一端,再填入內容;不要把本機公鑰填到 Peer 的 Public Key 欄位。
服務商提供的資料可能是完整文字、QR Code、現有訂閱中的項目,或一組個別參數。以下步驟以手動填寫為主。畫面顯示的欄位依目前的 App 介面而定;若沒有對應的輸入欄位,不要把參數填進名稱相近但含義不同的欄位,應確認該設定是否適用於目前的匯入方式。
二、在 Home 新增 WireGuard 伺服器的步驟
先保留一份完整的原始設定,再開始輸入。若原始資料只有服務商後台顯示的本機公鑰,卻沒有本機私鑰,就不具備完成身分設定所需的全部資料;公鑰無法反推出私鑰。
-
準備原始設定
向自己的服務商取得完整參數。逐項找出 Interface 的 PrivateKey、Address,以及 Peer 的 PublicKey、Endpoint;若有 PresharedKey,也一併保留。
-
選擇協定
前往 Home(首頁)→ 右上角「+」→ Type(類型)→ WireGuard。確認新增的是 WireGuard 項目,而不是把整份文字貼進一般伺服器位址欄。
-
填寫端點
將 Endpoint 的主機部分填入 Address(伺服器位址)或相應的主機欄位,並將連接埠填入 Port(連接埠)。例如虛構端點
wg.example.com:51820應拆成wg.example.com和51820,不要加上網頁通訊協定前綴。 -
填寫身分
在 WireGuard 對應欄位填入本機 Private Key、遠端 Public Key 和隧道位址。若有 Preshared Key(預先共用金鑰)欄位,只有原始設定提供此項時才填寫;不要用其他金鑰替代。
-
儲存並驗證
儲存後返回 Home,選取剛建立的項目,再啟用連線。記下目前 Global Routing(全域路由)的選項與測試網路,使用自己有權存取的目標驗證實際連線,不能只看連線開關是否開啟。
三、Private Key、Public Key 與預先共用金鑰
WireGuard 私鑰與公鑰有固定的編碼結構,通常是表示 32 位元組資料的 Base64 字串,常見長度為 44 個字元。長度看似正確,只能排除部分複製錯誤,不能證明金鑰屬於目前的伺服器,也不能證明兩端已完成授權。
本機私鑰可產生本機公鑰,伺服器通常會透過本機公鑰識別此用戶端。若在本機任意重新產生私鑰,對應的公鑰也會隨之改變;若伺服器仍登記舊公鑰,連線便無法以原有身分完成交握。因此,不要把「重新產生金鑰」當成通用的修復方式。
| 欄位 | 應填寫的內容 | 常見錯誤 |
|---|---|---|
Private Key |
分配給本機身分的私鑰,通常來自 Interface 區段。 | 複製了本機公鑰,或誤用了另一台裝置的私鑰。 |
Public Key |
遠端 Peer 的公鑰,通常來自 Peer 區段。 | 填成本機公鑰,或連同整個 PublicKey = 前綴一起貼上。 |
Preshared Key |
原始設定約定的額外對稱金鑰;兩端必須一致。 | 原始設定沒有此項卻自行產生,或以登入密碼代替。 |
複製時只取等號右側的值,移除前後空格和換行,但保留金鑰本身的字元,尤其是可能出現在結尾的 =。不要把編碼中的 + 當成空格,也不要手動變更大小寫。金鑰不是使用者名稱、登入密碼或訂閱連結。
- Private Key 與 Preshared Key 應視為敏感憑證妥善保存,不要放進公開截圖或問題回報內容。
- 回報問題時可提供欄位名稱、錯誤狀況和已遮蔽的位址類型,不必提供完整私鑰。
- 若私鑰已外洩,應請服務商撤銷舊身分並重新分配;單純修改項目名稱沒有安全效果。
四、Address、Endpoint 與 DNS 的填寫界線
Interface 的 Address 通常會帶有 CIDR(位址前綴)長度,例如虛構值 10.66.0.2/32。其中 /32 代表單一 IPv4 主機位址;IPv6 單一位址常見 /128。這不是連接埠,也不是伺服器的公網位址。若介面將位址與前綴拆開輸入,請分別填入對應欄位,不要把斜線後的數字填到 Port。
本機端虛構範例
- Address
10.66.0.2/32- IPv6 Address
fd42:66::2/128- DNS
10.66.0.1- MTU
1420,僅供參數示意
這些數值僅用來說明本機欄位結構,不能據此推斷服務商的分配方式。
遠端虛構範例
- Endpoint
wg.example.com:51820- Host
wg.example.com- Port
51820,UDP 連接埠- IPv6 Endpoint
[2001:db8::10]:51820
完整的 IPv6 端點會以方括號區分主機與連接埠;分欄填寫時請依介面格式輸入。
WireGuard 使用 UDP 傳輸。51820 是常見的範例連接埠,但不是所有服務都使用此連接埠;實際連接埠必須以原始設定為準。若目前網路無法連上該 UDP 連接埠,將數字改成 443 並不會自動讓連線恢復,除非遠端確實有在相應連接埠提供服務。
DNS(網域名稱解析)還需區分兩個階段:Endpoint 使用網域名稱時,建立隧道前必須能解析該名稱;隧道內的網域請求則會受到 Shadowrocket 目前 DNS 與設定的影響。原始 WireGuard 文字設定中的 DNS 是配套的解析資訊,不應假設手動建立伺服器項目後,整份文字設定中的 DNS 行就會自動套用。
- Endpoint 解析失敗時,先確認網域拼字、目前網路的解析狀況,以及服務商提供的主機是否有效。
- 指定隧道內 DNS 位址時,先確認隧道可正常使用,且該位址可透過隧道連線。
- 若使用 IPv6 位址,請確認目前設定與遠端都支援;只填入 IPv6 位址無法補足遠端端的支援能力。
五、MTU 的含義與調整順序
MTU(最大傳輸單元)決定隧道介面可承載的 IP 封包大小。WireGuard 封裝會增加額外負擔,因此隧道 MTU 通常小於底層連線的 MTU。底層 MTU 為 1500 的常見情況下,外層 IPv4 封裝約占 60 位元組,外層 IPv6 約占 80 位元組;1420 是常見值之一,但不一定適用所有網路路徑。
MTU 過大時,可能出現小型請求正常、大型回應停滯、部分網頁載入不完整等情況。這些只是排查線索,並非 MTU 故障的唯一證據。DNS、遠端出口、UDP 封包遺失和規則選擇也可能造成類似現象,應先確認金鑰與端點正確,再調整 MTU。
採用服務商指定的 MTU
建議原始設定明確提供 MTU 時,請先照填;若未指定,先保留 App 的預設處理方式,建立可重現的連線基準,不要憑經驗同時修改多項參數。
適用情況:初次設定、已有明確參數、連線狀況正常
以 1420 作為對照
只有在需要診斷且介面允許設定時,才將 1420 作為一次受控測試。這是常見的隧道 MTU,不是速度等級,也不保證適合目前的網路路徑。
適用情況:未提供明確 MTU、需要建立單一變數對照
暫時調低至 1380
若使用 1420 時小型請求正常,但較大的傳輸反覆停滯,可暫時改用 1380 作為對照。每次儲存後都重新建立連線,並測試相同目標;若沒有改善,就恢復原值。
適用情況:已排除基本設定錯誤後,進一步排查網路路徑
記錄「網路類型、MTU、測試目標、成功或失敗」四項資訊,就能進行有效比較。例如在相同 Wi-Fi 下分別測試 1420 與 1380,再於行動網路重複測試;這是一種測試方法,並非本文對特定線路的實測結果。不要因為某次成功開啟網頁就認定 MTU 最佳,也不要只以單次測速結果作為判斷依據。
六、AllowedIPs 與 Global Routing 並非同一層級的設定
標準 WireGuard 設定中的 AllowedIPs(允許的 IP 範圍)用於選擇 Peer 的隧道路由,並限制從該 Peer 接收的來源位址。例如 0.0.0.0/0 代表所有 IPv4 位址範圍,::/0 代表所有 IPv6 位址範圍。它不等同於 Shadowrocket 的網域規則,也不應直接貼到 Rule(規則)區段。
Shadowrocket 還需要在 App 層級決定哪些請求要交由所選伺服器處理。即使金鑰和 Endpoint 都正確,若 Global Routing 設為 Direct(直連),應用程式請求也不會如預期交由此 WireGuard 項目處理。Config(設定)模式則使用目前啟用設定中的規則,必須一併確認符合條件的策略最終指向哪裡。
- Proxy(代理):依代理模式處理由 App 接管的請求,可用來暫時區分伺服器問題與分流問題;不能據此推斷裝置上的所有系統流量都經過相同路徑。
- Direct(直連):依直連模式處理,不適合用來驗證所選 WireGuard 出口是否生效。
- Config(設定):依目前設定中的規則選擇策略;選取 WireGuard 項目,不代表每個請求都一定會套用該項目。
- Scene(情境):依已設定的情境套用相應路由安排;排查時先確認情境實際選用的設定,不要只看模式名稱。
以下僅示範規則語法,並非可直接啟用的完整設定。PROXY 必須對應目前設定中實際可用的策略或策略群組,且最終選取所需的 WireGuard 項目。規則由上而下比對,第一條符合的規則會決定處理方式。
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIX(網域後綴)比對指定網域及其子網域;IP-CIDR(IP 網段)比對目標位址範圍;GEOIP(IP 地理分類)依 IP 資料庫分類比對;FINAL(最終策略)處理未符合前面規則的請求。範例中的文件專用位址區段僅用於說明語法,並非實際服務目標。
七、儲存後仍無法使用時的檢查方式
排查順序為「欄位是否完整 → 端點是否可連線 → 金鑰身分是否相符 → 請求是否交由該伺服器處理 → DNS 與 MTU」。每次只修改一個變數,並保留原值。連線開關處於開啟狀態,只能表示本機連線功能已啟動,不能單憑此點證明遠端交握成功或出口可用。
已填入 Private Key,為什麼還是無法使用?
先返回 Home → 找到相應項目的編輯入口,確認只複製了金鑰值且沒有前後空格,再確認 Peer Public Key 是遠端公鑰。若曾重新產生本機私鑰,請向服務商確認登記的用戶端公鑰是否已同步更新,不要反覆產生新金鑰嘗試。
已開啟連線,但存取結果沒有變化?
在 Home 確認選取的是新建的 WireGuard 項目,再檢查 Global Routing。若使用 Config,請前往 Config(設定)確認目前啟用的檔案,並檢查測試目標符合哪項策略。可短暫切換至 Proxy 進行對照,診斷完成後恢復原本的分流設定。
Wi-Fi 無法連線,行動網路卻可以,該先調整什麼?
保持金鑰和隧道位址不變,先檢查 Endpoint 網域解析、指定 UDP 連接埠是否可連線,以及網路限制。只有出現小型請求成功、較大傳輸停滯等線索時,再比較 MTU。不要在切換網路時同時更換金鑰、DNS 和連接埠。
同一份設定可以同時用在兩台裝置上嗎?
先確認服務商是否為每台裝置分配獨立身分。兩台裝置共用相同私鑰與隧道位址並同時連線時,遠端可能將同一 Peer 的回覆端點切換至最近傳送封包的裝置,導致連線互相干擾。若需同時使用,應取得各自獨立的金鑰對與位址。
完成設定後的保存清單
- 保留原始設定及其對應的裝置說明,並將敏感金鑰存放在受保護的位置。
- 記下伺服器主機、UDP 連接埠、隧道位址與已驗證的 MTU,不要公開完整憑證。
- 若項目來自現有訂閱,先確認更新是否會覆蓋手動修改;不要把暫時的診斷值當成服務商提供的新參數。
- 測試結束後,恢復原本的 Global Routing 與 On Demand 設定,並再次驗證日常連線。
Shadowrocket 是 Apple 平台上的閉源商業 App,主要適用於 iPhone 與 iPad,唯一取得管道為 App Store;系統需求請以 App Store 頁面標示為準。購買 App 不等於購買線路方案。本文以使用者已有自己的服務商與設定為前提,購買 App 本身不會提供 Private Key、Peer 公鑰或遠端服務參數。