Shadowrocket(小火箭)的 On Demand 會透過系統管理 VPN 通道何時建立或中斷連線,不會取代連線後的流量分流規則。本文適合已有服務商與訂閱,且能手動連線的使用者:先建立區分 Wi-Fi 與行動網路的基本規則,再分開測試網域觸發,最後檢查優先順序與系統授權,避免將「已連線」誤認為「所有要求都經由 Proxy」。
先區分 On Demand 與 Global Routing
On Demand 的位置是 Settings → On Demand。系統 VPN 機制會依按需連線條件執行連線,條件可涉及網路介面、Wi-Fi 名稱及網域評估。它不是排程工作,也不會只以 Shadowrocket 是否在前景執行作為觸發依據。自動連線仍須有有效的 VPN 設定、系統授權及可用網路。
Global Routing 則決定通道建立後如何處理要求。Home 中的 Global Routing 提供 Proxy、Direct、Config、Scene 等選項;其中 Config 會依目前設定的規則分流。On Demand 的 Connect 不代表將 Global Routing 改為 Proxy,Disconnect 也不代表將它改為 Direct。排查時必須分開檢查這兩個層次。
例如,行動網路符合 Connect 條件後,如果 Global Routing 設為 Config,符合 DIRECT 的要求仍會直接連線;符合代理策略的要求才會使用相應的輸出。反過來說,即使設定中有 DOMAIN-SUFFIX 規則,也不能因此推斷系統會在存取該網域時自動建立通道。
判斷順序:先確認通道,再檢查輸出
沒有自動連線時,先檢查 On Demand;系統顯示已連線但要求路徑不符時,再檢查 Global Routing 與 Config,避免反覆修改無關設定。
啟用前:先以手動連線建立基準
自動化規則無法修復失效的連線參數。開始前,先在 Home 選取一項既有設定並手動連線,確認系統允許新增 VPN 設定,並存取實際需要使用的目標。訂閱只會提供及更新既有連線資訊,不會替你決定 Wi-Fi 條件或網域觸發方式。
- 記錄目前設定:記下 Home 目前選取的項目、Global Routing 選項,以及 Config 中正在使用的設定;若已有 On Demand 規則,也先記下順序與動作。
- 確認連線:分別在預計測試的 Wi-Fi 與行動網路上手動連線。如果其中一種網路原本就無法使用,請先處理網路或既有設定問題。
- 開啟設定頁面:前往 Settings → On Demand,檢查網路條件、動作與規則順序。控制項位置及可用條件以目前 App 內顯示為準,請勿只依舊版教學尋找特定按鈕。
- 檢查系統設定:在 iPhone / iPad 的系統 Settings 中找到 VPN 設定,確認 Shadowrocket 對應的設定及 Connect On Demand 狀態。系統路徑的實際名稱以裝置目前顯示為準。
- 開始單項測試:先只啟用網路條件規則,暫不加入網域評估;確認網路切換行為符合預期後,再新增其他類型的條件。
依 Wi-Fi 名稱與行動網路設定動作
先明確寫下目標:例如,連上名稱為 Home-WiFi 的無線網路時中斷通道,切換到行動網路時建立通道。這裡的 Home-WiFi 只是自訂網路名稱範例,設定時必須換成裝置實際連線的 SSID;不要直接照抄不存在的名稱。
SSID 條件應依實際名稱核對大小寫、空格與標點符號。名稱相同的多個基地台可能符合同一條件,SSID 本身也無法證明網路是否可信。如果公司網路與家用網路剛好同名,只靠名稱便無法區分兩者。
指定 Wi-Fi 條件
- 位置
- Settings → On Demand
- 介面
- Wi-Fi
- SSID 範例
- Home-WiFi,請填入實際網路名稱
- 動作
- Disconnect
- 順序
- 排在一般 Wi-Fi 條件之前
只有在確定不希望該網路建立通道時,才使用 Disconnect;這不是判斷網路安全性的方式。
行動網路條件
- 位置
- Settings → On Demand
- 介面
- Cellular
- SSID
- 不適用於行動網路介面
- 動作
- Connect
- 驗證方式
- 關閉 Wi-Fi 後送出新要求
沒有行動網路功能的 iPad 不適用此項;連接個人熱點時,接收端通常會使用 Wi-Fi 介面。
- 為指定 Wi-Fi 新增 SSID 條件並選擇 Disconnect,儲存後確認條件確實綁定 Wi-Fi,而非不限制介面的通用規則。
- 為 Cellular 新增 Connect 條件。確認裝置可使用行動數據;只關閉 Wi-Fi、但沒有行動數據,並不構成有效的網路測試。
- 若也希望其他 Wi-Fi 自動連線,可再新增涵蓋其他 Wi-Fi 的 Connect 條件,並將它排在指定 SSID 的例外之後。
- 重新連線到目標 Wi-Fi,接著切換至行動網路,各送出一次新要求。記錄網路名稱、預期動作及系統 VPN 的實際狀態。
切換網路時,既有連線、正在切換的介面及系統處理時序都可能影響觀察結果。不要把剛切換時的圖示當成最終結論;先確認網路已可使用,再檢查 VPN 狀態與新要求的結果,也不要快速連續切換來測試規則。
依網域觸發:不要將 DOMAIN-SUFFIX 搬進 On Demand
網域按需連線與一般網域分流的目的不同。前者由系統依網域相關的連線評估條件,判斷是否需要通道;後者則是在通道運作期間,為要求選擇策略。Apple 的按需機制可透過 EvaluateConnection 及其網域評估動作處理這類需求;ConnectIfNeeded 表示依條件判斷是否需要建立連線,不是每次開啟特定網址都無條件連線。
在 Settings → On Demand 中確認目前介面是否提供網域評估項目及對應動作。若有提供,請填入網域,例如 internal.example.com,不要填入 https://internal.example.com/path。範例網域僅用於說明輸入格式,並非可使用的內部服務;實際測試須使用你有權存取,且了解其 DNS 條件的網域。
- 先檢查外層條件:網域評估規則也可能受到介面條件限制。如果較前面的網路規則已符合 Connect 或 Disconnect,後續網域評估規則便不會繼續作為同一輪比對的補充。
- 再檢查解析條件:ConnectIfNeeded 可依 DNS 解析結果、指定 DNS 伺服器或探測條件判斷是否連線。如果一般網路已能滿足解析條件,存取該網域不一定會觸發通道。
- 不要以 IP 位址取代網域:直接存取 IP、重複使用既有連線,或由 App 自行處理名稱解析,都可能無法觸發預期的系統網域評估。
- 不要假設離開網頁就會中斷連線:網域觸發負責判斷是否連線;關閉網頁並非通用的 Disconnect 條件。後續狀態仍會受到系統及其他按需規則影響。
因此,「任何 Wi-Fi 都先 Connect」與「只有需要特定網域時才連線」是不同目標。前者已設定網路一符合條件就建立通道,無法再靠後面的網域條件縮小範圍。若要依網域連線,應另外檢查一般網路規則是否提前攔截評估機會。
Config 中的網域規則只處理連線後的流量
以下是 Config 的規則語法範例,不是 On Demand 設定內容。這段規則表示相關要求使用指定策略,並非宣告系統自動連線的觸發條件。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
Global Routing 設為 Config 時,第一條規則會讓符合指定網域的要求使用 PROXY,其餘要求則套用 FINAL 的 DIRECT。實際設定時,請確認 PROXY 對應的輸出有效。將這段規則儲存至 Config,不代表已完成網域按需連線設定。
多項條件同時成立:先檢查符合順序
系統會依順序評估按需規則,由第一條符合的規則決定該次採用的動作,不會將所有動作疊加執行。範圍較明確的例外通常應排在較廣泛的網路條件之前;網域評估規則內部的條件也須另外檢查,不要與 Config 的規則順序混為一談。
| 順序 | 符合條件 | 動作 | 檢查要點 |
|---|---|---|---|
| 1 | Wi-Fi,且 SSID 為 Home-WiFi | Disconnect | 特定名稱的例外應排在一般 Wi-Fi 條件之前 |
| 2 | 其他符合條件的 Wi-Fi 網路 | Connect | 只有第一條不符合時,才會檢查此條 |
| 3 | Cellular | Connect | 確認行動數據可用後進行測試 |
此表是以網路條件為主的方案,不包含網域評估。若將一般 Wi-Fi 的 Connect 移到第一條,Home-WiFi 也會符合該條件,後面的 Disconnect 就無法達成預期的例外效果。若新增不限制介面的通用條件,也必須確認它不會遮蔽後續所有網路規則。
- 結果不符時,從第一條開始逐項記錄:「目前介面是否符合、SSID 是否符合、動作為何」。
- 暫時停用新增的規則,保留先前驗證成功的最小規則組合,確認問題是否因此消失。
- 每次只調整一條規則的位置或一個動作,儲存後重新測試網路切換並送出新要求。
這裡的「順序」無法靠 Config 中的 FINAL 補救。FINAL 只負責為要求分流設定預設規則;它不會成為系統 On Demand 的預設連線動作,也無法修正錯誤的 SSID 條件。
無法自動連線、中斷後又重新連線,以及網域未觸發的檢查方式
先記錄一個可重現的流程:從哪種網路切換到哪種網路、目前選取的設定、符合的第一條條件,以及系統 VPN 狀態。以下依照症狀檢查,不必同時重設所有設定。
已開啟 On Demand,切換到行動網路仍未連線?
先確認行動數據本身可正常使用,再前往 Settings → On Demand 檢查 Cellular 條件與 Connect 動作。確認前面沒有一般性的 Disconnect;接著在系統 VPN 設定中檢查 Connect On Demand。若手動連線也失敗,請先檢查既有連線設定。
在 Home 手動中斷連線,為什麼稍後又連上了?
如果 On Demand 仍處於啟用狀態,後續網路事件或要求可能再次符合連線條件。若要暫停並測試,請先在 Settings → On Demand 停用按需連線,再手動中斷連線,並檢查系統中對應設定的狀態;不要只反覆切換 Home 的連線開關。
已將指定 Wi-Fi 設為 Disconnect,為什麼仍顯示已連線?
核對實際 SSID,特別留意名稱尾端空格與相似字元;確認特定 SSID 規則排在一般 Wi-Fi Connect 之前。再檢查系統目前連線的是不是 Shadowrocket 對應的 VPN 設定,避免將其他設定的連線狀態誤認為本規則造成。
存取目標網域沒有觸發,是網域填錯了嗎?
先確認填入的是網域,而非完整 URL,再檢查是否有更前面的網路動作提前結束比對。若使用 ConnectIfNeeded,也應確認一般網路的 DNS 是否已滿足條件,以及測試中的 App 是否重複使用既有連線;不要靠反覆將 DOMAIN-SUFFIX 加進 Config 來修復系統觸發。
自動連線成功,為什麼部分要求仍是直接連線?
回到 Home 檢查 Global Routing。使用 Config 時,逐條檢查目標符合的策略及 FINAL;使用 Direct 時,要求不會因為 On Demand 的 Connect 而自動改走代理。先確認要求符合哪項策略,再檢查既有輸出是否可用。
需要回復設定時,先停用 On Demand,恢復手動連線並確認基準設定仍有效,再逐條還原規則。日常使用建議保留能說明每項結果的最小規則組合;不要用彼此重疊的重複條件掩蓋問題。