On Demand 決定系統何時嘗試建立或中斷 VPN 連線,不能取代流量分流規則。本文適合已有服務商與訂閱,且能手動連線的使用者:先確認手動連線正常,再設定 Settings → On Demand 的網路條件,最後分別測試 Wi-Fi、行動網路與網域條件。網域按需連線涉及 DNS 評估,不代表「開啟某個網址就一定會連線」。
先釐清 On Demand 與 Global Routing 的差異
Shadowrocket(小火箭)的 On Demand 是連線觸發設定。儲存至系統 VPN 設定檔後,系統可在網路變更或符合網域評估條件時嘗試連線,不必每次都先開啟 App,再點選 Home 頂端的開關。它不是計時器,也無法修復無法連線的伺服器。
Global Routing 處理的是另一件事:連線建立後如何處理請求。Proxy、Direct、Config、Scene 是該入口下的不同選項;其中 Config 依所選設定檔中的規則分流,Scene 則依已設定的情境處理。即使按需連線已觸發,最終請求仍可能走 DIRECT。系統顯示 VPN 已連線,不代表每個請求都經過代理伺服器。
新的名稱解析請求也可能觸發網域評估,因此上述流程是用來說明各自職責,並不表示每次觸發都必須先切換網路。排查問題時,應分開確認「是否觸發連線」與「連線後如何分流」。
設定前:先建立可重現的手動連線基準
本文假設使用者已有服務商與訂閱。On Demand 不包含伺服器資訊,購買用戶端也不會附送線路。若手動連線尚未成功,應先處理伺服器、驗證參數與網路連線,再新增自動觸發條件。
- 暫時關閉 Settings → On Demand 中的按需連線,避免自動重新連線影響測試。
- 返回 Home,選取已匯入且準備使用的伺服器,確認選取標記位於預期項目上。
- 開啟連線開關;首次使用時,依系統提示允許新增 VPN 設定。系統授權無法略過。
- 執行 Connectivity Test,再開啟平常可瀏覽的頁面。測試結果只能反映該測試目標的狀況,不能取代對所有實際請求的驗證。
- 記下目前的 Global Routing 選項與已啟用的 Config,接著關閉連線,再開始測試自動觸發。
Wi-Fi 與行動網路:先確認條件,再選擇動作
前往 Settings → On Demand,查看目前提供的網路條件與動作選項。不同介面可能將條件與動作放在同一列,或分開編輯;請以 App 目前實際顯示的欄位為準。設定原則不變:先限定網路,再決定符合條件時要連線或中斷連線。不要把僅供標示用途的備註當成 Wi-Fi 名稱。
Wi-Fi 名稱請填寫實際 SSID
指定 Wi-Fi 時,請填入裝置目前連線網路的完整名稱,也就是 SSID。例如下方的 Home-WiFi 僅為說明用名稱,請改成系統 Wi-Fi 頁面實際顯示的名稱。請勿填入路由器管理位址、無線密碼或以 https:// 開頭的網址,也不要自行加上引號或萬用字元。
- 在系統 Wi-Fi 頁面確認目前的網路名稱,逐字核對大小寫、空格與後綴。
- 返回 Settings → On Demand,在 Wi-Fi 條件中填入該名稱,選擇符合目標的動作並儲存。
- 啟用 On Demand,再中斷並重新連接該 Wi-Fi,觀察連線狀態是否如預期變化。
- 切換至另一個 Wi-Fi 重複測試,確認這條規則不會意外套用至所有無線網路。
同一台路由器的不同頻段可能使用不同名稱;相同 SSID 也可能出現在不同地點。名稱相符不等於通過可信網路驗證。不要只因網路名稱看起來熟悉,就認定已完成安全檢查。
行動網路設定的是介面條件,不是電信業者名稱
行動網路條件指的是系統目前使用的行動網路介面,不是要填入電話號碼、電信業者名稱或行動網路 APN。若要在離開指定 Wi-Fi 後自動連線,也要考慮其他 Wi-Fi 的情況:行動網路規則不會自動代表「除了家中 Wi-Fi 以外的所有網路」。
指定 Wi-Fi 範例
- 入口
- Settings → On Demand
- 網路條件
- Wi-Fi
- 名稱範例
Home-WiFi- 動作目標
- 不維持 VPN 連線時,使用 Disconnect
只有在確實需要該網路中斷 VPN 時才使用;SSID 必須換成實際名稱。
行動網路範例
- 入口
- Settings → On Demand
- 網路條件
- Cellular
- 名稱欄位
- 不填寫 Wi-Fi SSID
- 動作目標
- 需要自動建立 VPN 連線時,使用 Connect
儲存後關閉 Wi-Fi,確認裝置確實正在使用行動數據,再進行測試。
Connect 表示嘗試建立連線,不保證一定成功;Disconnect 則表示在符合條件時中斷連線。若介面提供忽略或維持現狀等動作,也不能將其解讀為「確保中斷」。需要確實排除連線時,應確認動作的實際作用,而非只看規則名稱。
網域條件:填寫網域名稱,不要貼上完整 URL
網域條件與 Wi-Fi、行動網路介面條件並不完全相同。系統 VPN 按需機制可評估網域:符合網域條件後,系統會依解析結果與規則要求決定是否建立連線。這類機制通常涉及 EvaluateConnection 與 ConnectIfNeeded 的語意,不能簡單視為比對網頁網址列中的字串。
在 Settings → On Demand 中確認目前介面是否提供網域相關評估條件;只有確實提供時才進行設定。網域清單請填寫 example.com 這類名稱。不要將下列分流語法貼到網域欄位,也不要把 DNS 伺服器欄位誤當成目標網域欄位。
| 輸入內容 | 處理方式 | 原因 |
|---|---|---|
example.com | 可作為網域範例 | 不包含通訊協定、連接埠與路徑 |
https://example.com/page | 只保留網域部分 | 網域評估不會比對網頁路徑 |
example.com:443 | 移除連接埠部分 | 443 是 HTTPS 常用連接埠,不屬於網域名稱 |
DOMAIN-SUFFIX,example.com,PROXY | 放在 Config 的規則區域 | 這是分流規則,不是按需網域欄位的輸入格式 |
如果需要涵蓋多個特定主機,請確認該欄位的網域比對說明,不要假設 *.example.com 在任何地方都有效。不同網域欄位可能採用不同的後綴比對方式;先測試一個明確主機,再逐步擴大範圍。
若實際需求是「維持 VPN 連線,但只有指定網域經由代理」,建議檢查 Global Routing → Config 與規則內容,而非依賴網域按需連線來分流。以下僅說明兩者職責差異;範例會影響符合網域的請求,請依自己的設定目標使用。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX 在此決定請求的出站策略,FINAL 則接收前面未符合規則的請求。GEOIP、IP-CIDR 同樣屬於分流規則,不會因為寫入 Config 就自動成為 On Demand 的連線觸發條件。
同時存在多條規則:依序判讀,不要自行推測「越具體越優先」
系統會依清單順序評估按需規則,並採用第一條符合的頂層規則;不能假設網域較長或 SSID 較具體就會自動取得較高優先順序。單一頂層規則中的不同條件通常必須同時符合;同一名稱清單中的多個候選值則是符合其中一個即可。網域評估也可能包含內部動作,不能把所有條件都當成簡單的平面清單。
如果目前介面允許調整規則順序,請將明確的例外條件排在較寬泛的條件之前。若介面只提供固定選項,不要假設可以任意拖曳排序;應透過儲存後的實際行為,確認各選項之間的優先關係。尤其不要同時啟用廣泛的連線條件,卻期待後面的排除條件一定會生效。
- 先明確列出目標:例如「指定 Wi-Fi 中斷連線、行動網路連線,其他 Wi-Fi 暫不變更」。
- 檢查條件重疊:符合所有 Wi-Fi 的連線規則,會與指定 SSID 的中斷規則重疊。
- 處理例外:若規則清單可排序,請先評估指定 SSID 的例外,再套用較廣泛的 Wi-Fi 條件。
- 單獨測試網域:若頂層網路規則已符合 Disconnect,不應期待後續的網域評估能推翻它。
- 重新儲存並測試:App 中的變更必須儲存至實際生效的 VPN 設定;只修改編輯頁面但未儲存,不代表系統正在使用新條件。
這裡的順序指 On Demand 規則順序,與 Config 中由上而下比對規則是兩套獨立機制。即使兩者都採用「第一個符合」的概念,也不能混合兩份清單來安排優先順序。
驗證與排查:先確認觸發,再查連線,最後檢查分流
完成設定後,至少分別測試指定 Wi-Fi、其他 Wi-Fi 與行動網路。網域測試應獨立進行,並記錄是否存在 DNS 快取或背景請求。以下列出應觀察的現象與檢查方向,不保證適用於所有網路環境。
- 指定 Wi-Fi:重新連接目標 SSID,確認是否執行設定的連線或中斷動作。
- 其他 Wi-Fi:連接另一個名稱的網路,確認指定 SSID 條件沒有誤設為所有 Wi-Fi。
- 行動網路:關閉 Wi-Fi,確認行動數據可用,再觀察是否嘗試建立連線。
- 網域評估:確認其他條件不會先行符合後,再發出新的網域請求,並一併查看解析與連線狀態。
為什麼手動關閉後又自動連線?
先前往 Settings → On Demand 暫時關閉按需連線,再返回 Home 關閉連線開關。若之後不再自動連線,表示仍有條件正在觸發;請逐一檢查範圍較廣的網路連線規則與背景網域請求。需要暫停連線時,也應一併處理自動觸發設定。
已設定家中 Wi-Fi 中斷連線,為什麼仍保持連線?
先在系統 Wi-Fi 頁面重新核對完整 SSID,再檢查是否有排在前面的「所有 Wi-Fi 連線」條件。儲存後中斷並重新連接網路;若規則無誤但結果仍不同,請確認系統使用的是剛才儲存的 Shadowrocket VPN 設定。
開啟指定網域沒有觸發連線,是不是填錯了?
先移除網域欄位中的通訊協定、路徑與連接埠,再確認該條件究竟是無條件連線,還是依解析需求連線。若使用 ConnectIfNeeded,目前網路解析成功時不觸發可能是預期結果;也請排除 DNS 快取、App 自行解析,以及較早符合的網路規則。
自動連線成功了,為什麼網頁還是打不開?
返回 Home 執行 Connectivity Test,確認預設伺服器可用,再檢查 Global Routing 與目前的 Config。若測試失敗,請先恢復手動連線,排查伺服器與驗證參數;若測試成功但只有特定頁面無法開啟,請繼續檢查該請求的 DNS 與分流規則,不要一再新增 On Demand 條件。
需要復原設定時,請關閉 Settings → On Demand 並儲存,再手動使用 Home 的連線開關。確認恢復基準狀態後,每次只重新啟用一類條件。訂閱更新會變更使用者已有的伺服器清單與相關設定,不代表按需規則因此正確;更新後仍須確認選取的伺服器與實際連線結果。