Shadowrocket 自訂規則設定:規則順序、FINAL 預設策略與 PROXY/DIRECT/REJECT

了解 Shadowrocket 規則如何由上而下比對、以 FINAL 處理未命中流量,並掌握 PROXY、DIRECT、REJECT 的差異;附 DOMAIN-SUFFIX 與 IP-CIDR 範例說明規則順序。

本文重點

在 Shadowrocket(小火箭)中,自訂規則是否生效,先檢查 Global Routing,再確認目前使用的設定檔,最後檢查規則順序。本文適合已有自用服務與連線設定的使用者,透過保留網域與文件範例網段說明規則寫法、預設策略及驗證方式。範例僅供理解語法,並非可直接套用於日常設定的完整方案。

先確認 Global Routing,再修改規則

修改規則前,請前往 Home → Global Routing 確認目前選項。若要讓目前設定檔中的規則參與分流,請選擇 Config。若目前選的是 Proxy 或 Direct,單純調整規則順序通常無法解決預期的分流問題,因為這兩種模式不會依照目前檔案中的規則逐條決定連線出口。

Config

建議

依目前生效設定中的規則選擇策略。連線要直連、代理或拒絕,取決於命中的規則;未命中不代表一定直連。

適用情境:撰寫、驗證及日常使用自訂規則

Proxy

由應用程式處理的連線一律採用全域代理模式。可用來確認代理連線是否可用,但不能據此證明某條規則已命中。

適用情境:暫時比對代理路徑與規則路徑

Direct

由應用程式處理的連線一律採用直連模式。Direct 不代表關閉系統 VPN 設定,也不會刪除目前的設定檔。

適用情境:比對目標在目前網路下的直接連線結果

Global Routing 也可能使用 Scene,這與場景選擇有關。排查本文範例時,請先明確切換至 Config,避免混淆場景變更與規則變更。另外,請留意兩個同名項目:Global Routing 中的 Config 是連線模式,底部的 Config 則是管理設定檔的位置。檔案出現在清單中,不代表目前正在使用該檔案。

規則語法:條件在前,策略在後

設定檔的規則寫在 [Rule] 區段中。常見條件規則由「類型、比對值、策略」組成,各欄位以英文逗號分隔。使用中文逗號、策略名稱中多加空格,或將規則寫在其他區段,都可能造成解析或比對結果不如預期。以下四個關鍵字請務必區分:

關鍵字範例檢查重點
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXY比對 example.com 本身及其子網域,不填寫 URL 路徑。
IP-CIDRIP-CIDR,192.0.2.0/24,DIRECT比對 IPv4 網段;/24 表示網路前綴長度為 24 位元。
GEOIPGEOIP,CN,DIRECT依目標 IP 在地理資料庫中的歸屬判斷,不是根據網域名稱判斷。
FINALFINAL,PROXY沒有比對值欄位,用於處理前面條件都未命中的流量。

DOMAIN-SUFFIX,example.com,PROXY 可比對 api.example.com,但其他網域名稱即使字串結尾剛好包含「example.com」,也不會因此自動命中;網域比對會判斷層級邊界。請勿填寫 https://example.com/path,也不要在比對值中加上 :443。此規則依網域比對,不會依網頁路徑或連接埠比對。

IP-CIDR 與 GEOIP 需要可用的目標 IP 資訊。網域連線是否會觸發解析、何時進行 IP 判斷,也會受到設定中的 DNS 與規則選項影響。GEOIP 結果不代表網站營運者所在地,也不應預期同一網域永遠解析至相同網段。

4 種
本文使用的規則關鍵字:DOMAIN-SUFFIX / IP-CIDR / GEOIP / FINAL
3 種
本文使用的策略:PROXY / DIRECT / REJECT
256 個
192.0.2.0/24 包含的 IPv4 位址數量

由上而下比對:較明確的例外規則放前面

規則會依序逐條判斷,命中後便採用該條策略,不會繼續尋找後續是否有「更適合」的規則。系統不會自動將較長的網域後綴或較小的網段移到前面。因此,請先列出明確的例外,再列出涵蓋範圍較大的條件,最後放置預設規則。

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

在這個範例中,api.example.com 及其子網域會先命中第一條規則並直連;www.example.com 則會命中第二條規則。若將前兩條對調,api.example.com 會先符合範圍較廣的 example.com 條件,改走 PROXY;下方的 DIRECT 例外就沒有機會參與判斷。

IP 網段也遵循相同的順序

[Rule]
IP-CIDR,192.0.2.128/25,REJECT,no-resolve
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,PROXY

192.0.2.128/25 位於 192.0.2.0/24 範圍內。對於已知目標 IP 的連線,192.0.2.130 會先命中 REJECT,而 192.0.2.20 則會繼續往下比對並命中 DIRECT。若將這兩條對調,較大的 /24 會先涵蓋整個範圍,原本的拒絕例外便會失效。

PROXY、DIRECT、REJECT 與 FINAL 的關係

前三個詞說明「命中後如何處理」,FINAL 則說明「前面的規則都未命中時怎麼辦」。它們並不是四種同級的比對條件。尤其要留意,FINAL,PROXY 本身不包含網域或地區判斷,若放得太前面,後續規則就會被它攔截。

若只希望列出的網域走代理,其餘流量直連,可在完整檢查規則後使用 FINAL,DIRECT;若希望未列出的目標繼續走代理,則使用 FINAL,PROXY。兩者沒有脫離實際需求的標準答案。修改 FINAL 會改變所有未命中前面規則的連線去向,影響範圍通常比新增一條網域規則更大。

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

此範例會先拒絕特定子網域,再讓其他 example.com 網域走代理,其餘目標則直連。這只用來示範三種處理結果如何搭配,並非完整的隱私或網路存取方案。套用到自己的設定前,請保留原有必要規則,並確認代理策略的引用與目前設定一致。

修改與驗證:每次只變更一個項目

請勿直接覆寫仍在使用的設定檔。先保留原始檔案,再編輯副本;若檔案來自遠端更新,也要考量後續更新可能覆蓋本機修改。請依照以下順序操作,介面中顯示的檔名以實際儲存的名稱為準:

  1. 確認連線模式

    開啟 Home → Global Routing → Config,記下目前選取的代理。先不要同時修改 DNS、代理選擇或 On Demand。

  2. 保留原始檔案

    前往底部的 Config,確認目前生效的檔案;編輯前先透過檔案操作保留副本或匯出備份,以免失去可還原的基準版本。

  3. 修改規則

    在 Config 中開啟要修改檔案的編輯畫面,找到 [Rule] 區段。一次只新增一條例外或對調兩條規則,保留末尾的 FINAL。儲存後,確認目前使用的是修改後的檔案。

  4. 重新送出連線請求

    返回 Home 確認連線狀態,結束目標應用程式中舊有的請求,再重新建立連線。已建立的長連線不會因為修改文字就自動變成另一條新連線。

  5. 檢查連線記錄

    在 Data 查看對應時間的連線記錄,依據目標網域或 IP、命中的規則及實際策略進行判斷。記錄測試目標,以及修改前後的結果,不要只看網頁是否能開啟。

例如驗證網域例外時,應分別檢查一個例外子網域與一個一般子網域;驗證 FINAL 時,應選擇明確不符合前面條件的目標。若使用自己的測試服務,HTTPS 常見連接埠為 443,HTTP 常見連接埠為 80;本文的網域後綴規則本身不會依這兩個連接埠區分流量。

無法連線本身不足以證明規則失效:命中 PROXY 後代理路徑無法使用、命中 DIRECT 後本機網路無法連線,或命中 REJECT 後請求遭拒,都可能出現類似的頁面錯誤。請依序確認「是否命中預期條件 → 是否採用預期策略 → 該路徑是否可連線」,不要反過來根據頁面結果猜測規則。

常見問題:設定了規則,為什麼結果沒有改變?

修改規則後,為什麼所有目標仍然走代理?

先前往 Home → Global Routing 確認是否選了 Proxy,再到 Config 確認目前生效的檔案。若已使用 Config,請從第一條規則開始往下檢查,看看是否有涵蓋範圍過大的條件提早命中,或 FINAL 是否放在例外規則上方。

DIRECT 放在後面,為什麼無法覆蓋前面的 PROXY?

後寫的規則不會覆蓋先寫的規則。請將範圍較明確的 DIRECT 條件移到會涵蓋它的 PROXY 條件之前,儲存後重新建立連線;同時確認修改的是規則順序,而不只是清單中顯示的名稱。

新增 IP-CIDR 後,網域連線為什麼沒有命中?

檢查實際目標 IP 是否位於該網段內,以及是否使用了 no-resolve。網域可能解析出多個位址,也可能使用 IPv6;IPv4 的 IP-CIDR 範例無法涵蓋 IPv6。若需求本來就是依網域分流,建議優先使用明確的網域條件。

更新後自行新增的規則不見了,該怎麼辦?

先在 Config 確認更新的是遠端設定檔還是其他項目,再與備份比對。訂閱中的伺服器清單與設定檔中的規則屬於不同層級的資料。請保留獨立的本機修改副本,還原後重新確認生效檔案,避免反覆修改會被遠端內容覆蓋的檔案。

為什麼關閉連線後又自動開啟?

前往 Settings → On Demand 檢查按需連線條件。On Demand 負責管理何時建立連線,不會取代 [Rule] 的逐條比對。請先固定連線狀態,再檢查 Global Routing 與規則,避免同時排查兩種不同層次的行為。

最後請保留一份足以說明設定目的的最小修改:例外放前面,範圍較廣的條件放後面,FINAL 放在末尾;每次驗證都記錄目前模式、生效檔案、目標與命中策略。規則數量增加不代表準確度自然提高;能說明每條規則涵蓋什麼、為何排在此處,才方便日後維護。更多介面與連線概念請參閱術語手冊;若問題持續發生,請依故障排除逐項檢查。

確認 App Store 正版 →