本文速覽

Shadowrocket(小火箭)可在 Global Routing 選擇 Config,依照目前設定檔的 Rule 區段進行分流。本文適合已有服務商與可用設定檔,只想讓指定網站走代理的使用者:先建立網域比對規則,再以 FINAL,DIRECT 作為兜底,最後查看請求記錄確認實際命中的規則。範例網域僅用於說明語法,不代表線路或服務推薦。

先確認 Config 與代理出口

規則分流須同時符合兩個條件:目前使用的設定檔包含目標規則,且 Home 的 Global Routing 設為 Config。只在 Config 編輯檔案,不代表所有流量已依該檔案分流;還要確認它是目前選取的設定檔。

Global Routing 中的 Proxy 代表整體使用代理,Direct 代表整體直連;這兩種模式都無法用來驗證本文的「指定網站走代理、其他流量直連」設定。Scene 用於選擇情境,也不能直接視為目前檔案的 Config 模式。排查時請先確認選取 Config,避免情境切換改變測試條件。

Config
Home → Global Routing 中本例使用的選項
2 種
本例出口:PROXY 與 DIRECT
最後 1 行
在 Rule 區段以 FINAL,DIRECT 作為兜底

PROXY 代表代理策略,通常使用目前選取的代理出口;DIRECT 代表直接連線至目標。若現有檔案使用自訂策略群組,請先確認群組名稱與群組內的選項,不要混淆群組名稱、伺服器顯示名稱和內建策略。本文只使用 PROXY、DIRECT,避免加入額外的群組定義。

  1. 在 Home 選取已有且可用的代理出口,並透過 Connectivity Test 檢查基本連線狀態。
  2. 進入 Config,先備份目前的設定檔,再編輯供本次測試使用的本機副本。
  3. 確認已選取修改後的副本,返回 Home → Global Routing → Config。
  4. 啟用連線後重新造訪目標網站;既有連線可能仍使用先前的出口,不能用來驗證新規則。

DOMAIN-SUFFIX 與 FINAL 的基本寫法

若要讓 example.com 及其子網域走代理,其他請求直連,只需兩行核心規則。以下為獨立的 Rule 區段示意,並非需要覆蓋整份現有設定檔的完整檔案。若現有檔案已有 [Rule],請編輯該區段,不要重複新增同名區段。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

DOMAIN-SUFFIX,example.com,PROXY 會依網域後綴比對,涵蓋 example.com 本身,以及 www.example.com、api.example.com 等子網域。填入的是網域,不包含 https://、連接埠或路徑;不可填入完整網頁網址,也不需要在網域前加上 *.。

FINAL,DIRECT 不需要網域參數:請求未符合前面的規則時,最終使用 DIRECT。它的意思是「其餘流量直連」,不是「先嘗試直連,失敗後自動改用代理」。若要新增第二個目標網站,請將新的網域規則放在 FINAL 前面。

DOMAIN-KEYWORD 適用情境

DOMAIN-KEYWORD 會比對網域中的關鍵字,涵蓋範圍通常比 DOMAIN-SUFFIX 更廣。它不會比對網頁正文、網址路徑或搜尋內容。例如以下的 media 會比對網域中包含此字串的請求,而不是只比對某個網站。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,media,PROXY
FINAL,DIRECT

此處第一行網域規則是刻意設定的例外:login.example.com 直接連線;example.com 的其他符合請求走代理;其餘網域若包含 media,也走代理。此範例用來說明比對範圍與順序,不代表建議所有使用者加入 media 關鍵字。只讓少數指定網站走代理時,建議優先使用 DOMAIN 或 DOMAIN-SUFFIX。

規則關鍵字比對輸入範例適用範圍
DOMAINlogin.example.com只精確比對該網域,不會自動涵蓋其他子網域。
DOMAIN-SUFFIXexample.com比對該網域及其子網域,適合依網站分流。
DOMAIN-KEYWORDmedia比對網域中的字串,可能涵蓋原本不打算代理的網域。
FINAL不需要網域參數處理此前未命中的請求,應放在 Rule 區段末尾。

規則順序:首條符合者決定策略

Rule 區段會由上而下依序比對。請求符合一條有效規則後,就會採用該規則的策略,不會繼續往下尋找「更精確」的規則。先放精確例外,再放較廣的比對範圍,並將 FINAL 放在末尾,是安排規則時最重要的原則。

建立新請求取得目標依序比對首條符合套用策略

以上一節為例,若將 DOMAIN-SUFFIX,example.com,PROXY 放在 DOMAIN,login.example.com,DIRECT 前面,login.example.com 就會先符合 PROXY,後面的 DIRECT 例外便不會生效。同樣地,若 FINAL 提前出現,後續規則也無法發揮預期作用。

若現有設定檔包含 RULE-SET、GEOIP 或 IP-CIDR,也要一併檢查,不要只看新增的兩行。這些規則若位於前面並先行符合,請求仍會依原策略處理。將新規則加在檔案最末尾,尤其是 FINAL 之後,無法保證規則生效。

IP-CIDR、GEOIP 與網域分流的差異

DOMAIN-SUFFIX 依網域比對,IP-CIDR 依目標 IP 所屬網段比對,GEOIP 則依 IP 的地理位置分類比對。三者採用的依據不同。只讓少數網站走代理時,通常從網域規則開始較容易核對,因為同一網站的 IP 可能變動,不同網站也可能共用同一個位址。

IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT

此處的 192.0.2.0/24 是文件範例網段,不是需要照抄的實際網站位址。no-resolve 用於避免只為了比對這條 IP 規則而主動進行網域解析,不代表關閉所有 DNS。GEOIP,CN,DIRECT 表示目標 IP 被歸類為 CN 時直連;它不能取代「指定網域必須走代理」的明確需求。

儲存後查看請求記錄驗證

Connectivity Test 顯示結果,只能表示在相應測試條件下,出口具備一定的連線能力,不能證明某個網站已符合指定規則。請以「目標網站、一般網站、例外網域」三類請求進行對照,再從請求記錄核對目標、符合的規則與策略。

  1. 儲存設定檔,確認 Config 目前選取的是剛才修改的檔案。
  2. 確認 Home → Global Routing 仍設為 Config;若曾設定 Settings → On Demand,也請檢查自動觸發是否改變連線狀態。
  3. 關閉目標頁面的舊連線,必要時重新連線 Shadowrocket,再載入新的頁面請求。
  4. 查看相應的請求記錄:目標網域應符合 DOMAIN-SUFFIX 或其他明確規則,策略應為 PROXY;不在指定範圍內的網域應套用 FINAL 並使用 DIRECT。
  5. 若發現資源載入失敗,請記下實際資源網域,不要只根據瀏覽器網址列中的主網域判斷。

以下是可能出現在網路錯誤或記錄中的一般錯誤訊息;實際顯示內容會因請求來源與系統而異。這些錯誤代表連線失敗,不能單獨證明規則語法有誤。請先查看命中的策略,再判斷問題出在代理出口、直連路徑或目標服務。

錯誤:Connection refused

原因:連線的目標位址或代理連接埠拒絕連線。解決方法:先確認請求符合的是 PROXY 還是 DIRECT,再檢查相應的位址與連接埠是否正確;代理出口資訊應與使用者現有服務商提供的設定一致。

錯誤:Operation timed out

原因:連線或回應未能在限定時間內完成,可能與目前網路、出口或目標網站有關。解決方法:先執行 Connectivity Test,再對照同一網站的請求記錄;若請求符合 FINAL,DIRECT,但原本應走代理,請優先修正規則涵蓋範圍。

指定網站分流常見問題

已新增規則,為什麼所有網站仍然走代理?

先前往 Home → Global Routing,確認選取的是 Config,而不是 Proxy。接著檢查目前的 Config 是否有較早符合的廣泛 PROXY 規則,以及 FINAL 是否仍設為 PROXY。每次只修改一個條件,再用新請求驗證,避免同時變更多項設定而無法比較。

網頁能開啟,但圖片和登入失敗,應新增哪條規則?

先從請求記錄找出失敗資源的實際網域。若它屬於另一個獨立網域,請為該網域新增 DOMAIN 或 DOMAIN-SUFFIX 規則,並放在 FINAL 前面。不要因為頁面部分內容載入失敗,就改用常見關鍵字擴大比對範圍,以免連不相關的網站也一起納入。

更新現有訂閱後,自訂規則為什麼不見了?

伺服器訂閱與遠端 Config 是不同項目。更新伺服器清單不等於修改 Rule;但重新取得遠端設定檔可能會覆蓋檔案中的本機變更。請將自訂規則保存在可自行管理的本機副本中,更新後確認目前選取的 Config,並比對 Rule 區段。

改用其他協定,需要重寫 DOMAIN-SUFFIX 嗎?

通常不需要。網域規則決定請求交由哪個策略處理,代理協定則決定出口如何連線,兩者用途不同。切換現有出口後,先確認 PROXY 指向可用的選項,再檢查同一目標是否仍符合原規則;不要透過修改網域規則來掩蓋出口連線故障。

最後保留一份精簡且易於理解的規則集:明確列出的網站使用 PROXY,必要的例外規則放在前面,其餘流量由 FINAL,DIRECT 處理。每新增一個網域,同時驗證一個應走代理的請求和一個應直連的請求,比只觀察連線開關更能確認設定結果。