2026-08-03 · 規則分流 · 約 8 分鐘

Shadowrocket 自訂規則優先順序:由上而下比對與 FINAL 後備規則

了解 [Rule] 區段由上而下逐條比對、命中即停止的機制,以及 DOMAIN-SUFFIX、IP-CIDR 的排列順序、PROXY/DIRECT/REJECT 策略和 FINAL 後備規則的寫法。

本文重點

Shadowrocket(小火箭)的自訂規則應先列出明確例外,再列適用範圍較廣的規則,最後以 FINAL 指定其餘流量的處理方式。本文適合已有服務商與訂閱、需要調整現有設定的使用者;閱讀後可在 Config 檢查規則順序,在 Home 選擇 Config 模式,並一次只修改一項來驗證結果。

一、規則優先順序:先命中,不是越精確越優先

使用設定檔進行分流時,[Rule] 區段會由上而下依序檢查;某條規則符合時,就採用該規則指定的策略,不會再繼續尋找後面「更精確的規則」。因此,規則類型本身沒有能取代排列順序的通用優先權。把 DOMAIN 寫在 DOMAIN-SUFFIX 後面,不會因此自動取得較高優先順序。

例如,希望 api.example.com 直連,而 example.com 的其他子網域走代理,應先寫出這個個別網域的例外。以下網域僅用來說明語法,不是服務位址,也不代表可用性。

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

如果交換前兩條規則,api.example.com 也符合較廣泛的網域後綴條件,會先被 PROXY 規則攔截。排查「明明設了直連,卻仍走代理」時,先檢查目標規則之前是否已有其他規則涵蓋該請求,而不是在末尾不斷新增重複項目。

3 種
本文使用的基本策略:PROXY/DIRECT/REJECT
32 位元
IPv4 位址長度;/32 可表示單一位址
1 條
本文設定在末尾保留一條 FINAL 後備規則

二、先確認 Global Routing,再編輯 Config

設定檔中有規則,不代表目前連線一定會依照這些規則分流。前往 Home → Global Routing 確認目前模式,再到 Config 確認正在使用的檔案。以下只比較本次驗證會用到的三種模式;Scene 用於場景設定,排查本文的規則時,請先明確選擇 Config,減少切換場景造成的變數。

Config

建議

依目前設定執行規則分流。最後採用代理、直連或拒絕,取決於命中規則所指定的策略,包括末尾 FINAL 的設定。

適用情境:驗證本文的規則順序與網域例外。

Proxy

以代理模式處理流量,不能藉此證明某條自訂分流規則已命中。此模式可用來排除規則因素,確認現有代理連線本身是否可用。

適用情境:暫時比較代理連線與規則分流的差異。

Direct

以直連模式處理流量。若目前選擇 Direct,即使設定檔中寫有 PROXY,也不能因此認定本文所述的代理規則會生效。

適用情境:比較本機網路的直連狀況。

檢查順序:先確認執行條件,再調整規則

先在 Home 確認 Global Routing 設為 Config,並在 Config 確認目前使用的檔案,再進行測試;否則修改規則行,可能只是改到未參與目前分流的檔案。

  1. 備份設定

    前往 Config,先儲存目前檔案的副本或匯出備份,保留可還原的原始規則;不要只備份新增的幾行。

  2. 開啟編輯

    在 Config 中開啟目標設定的編輯入口,找到 [Rule] 區段。確認修改的是設定檔正文,而不是 Home 中的伺服器連線參數。

  3. 排列規則

    將單一網域的例外放在對應的廣泛規則之前,再檢查 IP 範圍與 GEOIP 項目,並在末尾保留 FINAL;儲存後確認目前使用的是這個檔案。

  4. 確認模式

    返回 Home → Global Routing → Config,確認已選取正確的伺服器,再啟用連線;若系統要求授權 VPN 設定,請依照系統提示操作。

  5. 送出新請求

    關閉目標頁面後重新瀏覽,必要時重新建立連線,避免以舊連線判斷新規則。記下目標網域、時間與比對結果,再進行下一項修改。

三、DOMAIN-SUFFIX、IP-CIDR 與 GEOIP 的排列方式

規則比對的對象與規則所在行數,是兩個不同的問題。網域規則檢查主機名稱,IP 規則檢查目的位址,GEOIP 則依據位址資料庫分類。網域請求可能解析出多個位址,同一網域也可能因網路環境不同而解析到不同位址;不要把一次 IP 命中視為該網域永遠固定的屬性。

關鍵字語法範例檢查重點
DOMAINDOMAIN,api.example.com,DIRECT比對指定網域;適用於明確例外。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXY涵蓋該網域及其子網域;不填寫通訊協定或路徑。
IP-CIDRIP-CIDR,192.168.0.0/16,DIRECT,no-resolve比對 IPv4 網段;遮罩決定範圍。
GEOIPGEOIP,CN,DIRECT依 IP 資料庫分類,不是依網頁語言分類。
FINALFINAL,PROXY處理先前未命中的請求,應放在規則末尾。

DOMAIN-SUFFIX 後方應填入 example.com,而不是包含 https:// 的完整網址,也不是 example.com/path。路徑是 URL 的另一部分;貼到網域欄位中,無法表示「只讓這個頁面走代理」。規則也不會因為網站常用 HTTPS 通訊埠 443,就自動加入通訊埠比對條件。

no-resolve 表示不為了比對這條 IP 規則而額外觸發網域解析;這不代表關閉整份設定的 DNS,也不代表這個網段永遠不會命中。若請求已有可供判斷的目的 IP,仍可依位址範圍進行比對。若只有網域名稱,且不希望這條規則觸發解析,請留意略過解析可能使請求繼續往下比對。

四、PROXY、DIRECT、REJECT 與 FINAL 的完整寫法

規則末尾的策略會決定命中後的動作:PROXY 交由代理路徑處理,DIRECT 直接連線至目的地,REJECT 則拒絕請求。這些動作與伺服器通訊協定屬於不同層級的設定;將現有伺服器從 Shadowsocks 改為 Trojan,不會改變規則由上而下比對的基本順序。

以下僅為說明用的 [Rule] 區段,不能取代所有現有設定。範例假設使用者已有可用伺服器;示例網域不提供任何服務。實際合併前,請檢查現有檔案中的策略名稱、其他規則與所需網路範圍。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

將 FINAL 插在規則中段,會提早接手之後未分類的請求,使後續項目無法發揮預期作用。維護時只在末尾保留一條明確的後備規則,避免舊設定中殘留第二條 FINAL,造成判讀混淆。

五、透過單一變數測試找出規則未生效的原因

驗證順序應為「目前檔案 → 目前模式 → 請求目標 → 實際比對 → 連線結果」。網頁能開啟,只能證明該次請求成功,不能單獨證明使用了哪條路徑;網頁無法開啟,也可能是 REJECT、目的服務故障或代理連線問題。請分別記錄規則比對結果與連線成敗。

  1. 建立基準:維持相同網路、同一台現有伺服器與同一個目標,記錄修改前的狀況,避免同時更換伺服器與規則。
  2. 只修改一行:例如只交換 DOMAIN 與 DOMAIN-SUFFIX 的順序,儲存並確認目前使用這份設定,再重新送出請求。
  3. 檢查請求資訊:在 App 的連線記錄或日誌中查看本次目標主機、目的 IP 與可見的策略資訊;若只看到 IP,先確認是否有網域資訊。
  4. 檢查完整資源:頁面正文、圖片與登入介面可能使用不同網域。只為主站新增一條規則,不一定涵蓋整個頁面的所有相依資源。
  5. 還原並比較:還原剛才的修改,再次瀏覽。若狀況沒有隨修改反覆變化,請繼續檢查快取、舊連線與目標服務狀態。

訂閱更新與設定編輯也應分開處理。在 Home 更新使用者現有的伺服器訂閱,主要是重新整理伺服器項目;在 Config 更新遠端設定,則可能取代設定檔正文。不要把這兩種更新都當成「重新整理規則」。修改遠端設定前,請先儲存本機副本;更新後重新檢查例外項目與 FINAL 是否仍存在。

結論:以可重現的命中變化驗證規則順序

只有在僅交換兩條規則後,同一個目標的策略也隨之改變,才是判斷順序問題的直接依據;單次速度變快或延遲降低,不足以證明規則命中正確。

六、規則順序與 FINAL 常見問題

已在末尾加入 DIRECT,為什麼仍然走代理?

先在 Home → Global Routing 確認選擇的是 Config,再到 Config 檢查這條 DIRECT 之前是否已有符合的 DOMAIN-SUFFIX、IP-CIDR 或 FINAL。將明確例外移到涵蓋它的規則之前,儲存後使用新連線測試。

FINAL,PROXY 會讓所有請求都走代理嗎?

不會,它只會接手先前未命中的請求。已命中 DIRECT 或 REJECT 的請求不會再進入 FINAL。若要排查代理連線本身,可暫時切換至 Global Routing 的 Proxy 模式進行比較,測試後再切回 Config。

把 GEOIP,CN,DIRECT 放在第一行比較省事嗎?

只有在接受它優先涵蓋後續例外時,才適合這樣排列。若某個目標必須固定走 PROXY,請將該目標的網域規則放在 GEOIP 之前,並確認本次請求是否帶有可供比對的網域資訊。

開啟 On Demand 後,規則順序會改變嗎?

不會。Settings → On Demand 用來管理按需連線條件,不會重新排列 [Rule]。它可能影響連線何時自動建立;排查時請維持觸發條件不變,並另外確認 Home 中的 Global Routing 設定。

更新後自訂規則不見了,該檢查哪些地方?

先到 Config 確認目前使用的檔案是否已切換,再檢查遠端設定正文是否已更新。使用修改前的備份比對 [Rule],將確實需要的例外合併回工作副本;不要靠重複新增 FINAL 來修復。

App Store 正版核驗