本文適合已能手動連線 Shadowrocket 的 iPhone、iPad 使用者。先區分 On Demand 與連線後的流量分流,再設定 Wi-Fi、行動網路條件,最後確認網域條件與規則順序。閱讀後即可建立方便還原的自動連線方案,並判斷「沒有自動連線」和「連線後套用錯誤策略」分別該檢查哪一層。
On Demand 管理連線,Config 管理連線後的流量分流
Shadowrocket(小火箭)的 On Demand 使用系統的按需 VPN 機制,依網路環境與連線評估條件決定是否啟動連線。它不是在背景定時點按連線開關,也不是為每個網站個別建立 VPN。設定路徑為 Settings → On Demand;可編輯的條件請以目前 App 介面為準。
On Demand 決定「是否建立通道」,Global Routing 則決定通道建立後如何處理流量。選擇 Proxy 代表全域代理模式,Direct 代表全域直連模式,Config 依目前設定比對規則,Scene 則依所選場景處理。若要確認設定中的 DOMAIN-SUFFIX 等規則,請先確認使用的是 Config,避免混淆兩層規則而誤判問題。
- Home:先確認選取的連線資料有效,並能在手動連線後正常上網。
- Config:確認目前使用的設定檔及規則順序,避免修改到未選取的檔案。
- Settings → On Demand:設定系統何時嘗試連線;此處不需填寫代理協定的驗證資料。
本文假設使用者已有自己的服務商與訂閱。On Demand 無法修復過期的連線資料,也不會自動更新失效的訂閱網址。若手動連線尚未成功,請先排除基本連線問題,再啟用自動化。
啟用前:先建立手動連線與還原方式
首次設定時,先不要啟用自動化。先手動連線一次,確認系統允許加入 VPN 設定,再返回 Settings → On Demand。測試期間請勿同時變更伺服器、DNS、Global Routing 和按需條件,否則單一故障現象可能涉及多個變因。
- 在 Home 選取自己已有且有效的連線資料,手動開啟連線。
- 依測試目的選擇 Global Routing。若要驗證設定檔分流,請使用 Config。
- 開啟平時可正常使用的網頁,記錄目前的網路類型及連線狀態。
- 前往 Settings → On Demand,先只加入一組網路條件,再啟用按需連線。
- 切換一次 Wi-Fi 與行動網路,檢查 Home 的連線狀態及系統 VPN 狀態。
先記下如何停止自動連線需要停用時,先在 Settings → On Demand 關閉按需功能,再手動中斷連線。若只關閉 Home 的連線開關,之後網路變更時,系統仍可能重新評估按需規則。可在系統設定中搜尋「VPN」找到 VPN 項目;受組織管理的裝置也可能受到管理政策限制。
若 iPad 不支援行動網路,只需測試 Wi-Fi 條件。系統需求請以 App Store 頁面標示為準。裝置未出現行動網路切換選項,不代表行動網路條件失效。
Wi-Fi 與行動網路:先設定特定條件,再設定通用條件
網路條件的基本寫法是「介面類型 + 可選的 Wi-Fi 名稱 + 動作」。以下示範一種設定:連上家中 Wi-Fi 時不建立通道,連上其他 Wi-Fi 或行動網路時自動連線。Home-WiFi 是範例 SSID,設定時請改成裝置實際連線的 Wi-Fi 名稱,不是路由器管理頁面的網址。
家中 Wi-Fi 例外
- 設定路徑
- Settings → On Demand
- InterfaceTypeMatch
- WiFi
- SSIDMatch
- Home-WiFi
- Action
- Disconnect
先加入特定 SSID 條件,再加入符合所有 Wi-Fi 的條件。
行動網路連線
- 設定路徑
- Settings → On Demand
- InterfaceTypeMatch
- Cellular
- SSIDMatch
- 不設定
- Action
- Connect
行動網路條件不使用 Wi-Fi 名稱;裝置必須具備可用的行動網路連線。
上述英文鍵名用來說明系統的按需條件,不代表 App 介面一定會逐字顯示這些欄位。請使用目前介面提供的 Wi-Fi、行動網路與動作選項進行設定,不要將這些鍵名貼入 Config 的一般分流規則。
| 評估順序 | 符合條件 | 動作 | 預期結果 |
|---|---|---|---|
| 1 | WiFi,SSID 為 Home-WiFi | Disconnect | 符合家中 Wi-Fi 例外,不維持此按需 VPN 連線 |
| 2 | WiFi,不限 SSID | Connect | 其他 Wi-Fi 觸發連線 |
| 3 | Cellular | Connect | 行動網路觸發連線 |
結論:先確認規則是否被覆蓋,再檢查連線資料
若連上家中 Wi-Fi 後仍自動連線,先確認通用 Wi-Fi 的 Connect 是否排在指定 SSID 的 Disconnect 之前。請讓特定例外優先評估,再重新切換網路測試。
請確認 SSID 的大小寫、空格及實際連線名稱。同一台路由器的不同頻段可能使用不同名稱,訪客網路也可能有另一個名稱。SSID 比對只辨識名稱,不會驗證網路是否可信,因此符合家中名稱不等於通過安全驗證。
網域按需連線:並非 DOMAIN-SUFFIX 的另一種寫法
網域按需連線屬於系統的連線評估機制。系統層級的 EvaluateConnection 可搭配網域條件與 ConnectIfNeeded 使用,但不代表「每次造訪該網域都會強制重新連線」。若目前網路已能完成所需的解析與連線評估,系統可能不會啟動 VPN。快取、既有連線和 App 的解析方式也會影響觀察結果。
以下展示系統按需規則的結構,方便理解 Action、Domains 和 DomainAction 之間的關係。這是用於說明的屬性清單片段,不是 Shadowrocket Config 檔案,也不是可直接匯入的設定。只有在目前 On Demand 介面提供相應的網域評估選項時,才透過介面設定。
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>Domains</key>
<array>
<string>example.com</string>
</array>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
</dict>
</array>
</dict>
- EvaluateConnection:進入連線評估流程,而非無條件執行 Connect。
- Domains:指定參與評估的網域範圍,不填寫完整網址、路徑或連接埠。
- ConnectIfNeeded:符合系統評估條件時嘗試連線,但不保證每次造訪都會啟動。
- NeverConnect:不因相應網域評估而啟動連線,但不代表會中斷已建立的整條通道。
例如,example.com 是網域,example.com:443 則包含連接埠,兩者不應視為相同的網域條件。HTTPS 常用連接埠 443,但 On Demand 不會依此連接埠決定是否啟動連線。直接造訪 IP 位址,也無法驗證網域條件是否符合。
網路方案與網域方案請分開測試若前面的規則已對所有 Wi-Fi 執行 Connect,後續的網域評估通常就沒有機會決定是否啟動連線。相反地,前面的 Disconnect 也可能略過網域評估。請先單獨測試網域評估,再加入網路限制;不要預期系統會自動合併多個互斥動作。
通道建立後:再用 Config 決定目標流量的去向
若需求是「保持連線,但只有指定網域走代理」,通常應使用 Config 分流,而不是反覆啟動及中斷整條通道。On Demand 可負責行動網路自動連線,再由 Config 依網域、IP 或地區選擇策略。兩種機制可以搭配使用,但不能互相取代。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY
此處僅示範規則語法,並非完整可用的連線設定。DOMAIN-SUFFIX 比對網域後綴;IP-CIDR 比對指定的位址範圍;GEOIP 依位址歸屬資料庫進行比對;FINAL 處理前面規則都未符合的要求。請依自己的現有設定理解策略,不要直接覆寫整份 Config。
| 要解決的問題 | 應調整的位置 | 請勿混淆的事項 |
|---|---|---|
| 切換至行動網路時自動連線 | Settings → On Demand | 不是新增一條 GEOIP 規則 |
| 連線後讓 example.com 使用代理 | Config 中的 DOMAIN-SUFFIX | 不是啟動通道的觸發條件 |
| 區域網路位址保持直連 | Config 中的 IP-CIDR | Direct 分流不代表系統 VPN 已中斷 |
| 未符合其他規則的要求 | Config 中的 FINAL | 應放在需要優先比對的規則之後 |
排查時也應分層進行。先確認系統是否已建立通道,再確認 Global Routing 是否使用 Config,最後檢查實際符合的分流規則。若尚未連線,修改 FINAL 無法解決按需觸發問題;若已連線但目標流量套用錯誤策略,應檢查設定檔,而非反覆修改 Wi-Fi 條件。
測試與排除問題:每次只變更一項條件
確認自動連線是否正常,應透過可重現的網路切換進行測試。以下提供測試步驟與預期現象,不代表所有網路環境都能在特定時間內完成連線。切換網路後,請等待系統完成評估再檢查狀態;不要在切換當下連續手動開關連線。
- 測試指定 Wi-Fi:連上 Home-WiFi,確認符合 Disconnect 例外條件。若仍保持連線,請檢查 SSID 和規則順序。
- 測試其他 Wi-Fi:切換至另一個名稱已知的 Wi-Fi,確認通用 Wi-Fi 的 Connect 能觸發連線。
- 測試行動網路:關閉 Wi-Fi,確認裝置已連上行動數據,再觀察 VPN 是否啟動。
- 單獨測試網域:暫時移除會優先符合的通用動作,中斷既有通道,再依網域評估條件測試。不要只靠反覆重新整理快取頁面來下結論。
- 測試還原方式:關閉 On Demand 後手動中斷連線,再切換網路,確認沒有其他自動化或管理政策重新啟動連線。
為什麼剛關閉連線,過一會兒又自動連上?
先前往 Settings → On Demand 關閉按需功能,再到 Home 中斷連線。若連線仍恢復,請檢查系統 VPN 設定是否還有其他有效的按需設定,以及裝置是否受組織管理。
為什麼家中 Wi-Fi 的 Disconnect 沒有生效?
先在系統 Wi-Fi 設定中確認目前的 SSID,再將指定 SSID 條件排在通用 Wi-Fi 條件之前。若同一台路由器提供兩個不同名稱,請分別加入需要比對的範圍。
造訪指定網域後,為什麼沒有立即連線?
先確認使用的是網域評估,而非 Config 中的 DOMAIN-SUFFIX。接著檢查是否已有前置的 Connect 或 Disconnect 規則符合條件。ConnectIfNeeded 取決於系統評估;若一般網路能直接解析並連線,不啟動 VPN 也可能符合其設計。
VPN 已連線,為什麼目標要求仍是直連?
在 Home 檢查 Global Routing。若使用 Config,請檢查目前設定中優先順序較前的規則,以及最後符合的策略。系統顯示 VPN 已連線,只代表通道已建立,不代表每項要求都會使用 PROXY。
保留最後確認有效的方案時,請記錄實際 SSID、規則順序、Global Routing 模式及測試時的網路類型。請勿在排查紀錄中公開訂閱網址或驗證資料。日後需要新增條件時,先重新測試目前方案,再一次新增一條規則。