Shadowrocket 自訂規則順序教學:由上而下比對、FINAL 兜底與 PROXY/DIRECT/REJECT

透過實際規則範例說明 Rule 區段的比對順序、FINAL 為何必須放在最後,以及 PROXY、DIRECT、REJECT 的設定方式。

本文重點

本文適合已有自己的服務商與訂閱,並準備修改 Shadowrocket 規則的使用者。先在 Home 確認 Global Routing 是否設為 Config,再前往 Config 確認目前使用的設定檔,依序整理 Rule 區段中的「精確例外、較廣範圍、FINAL」,最後以新建立的連線確認命中紀錄。範例僅說明比對邏輯,不含連線憑證。

先確認操作位置:選取設定檔,再以 Config 分流

在 Shadowrocket(小火箭)的 Home 頁面開啟 Global Routing,選擇 Config。接著前往 Config,確認已選取要修改的設定檔;開啟該設定檔的編輯入口,找到 Rule 區段。文字設定檔中的區段標記為 [Rule],每行一條規則。修改前先儲存一份可還原的副本,避免直接覆寫目前可用的設定。

Global Routing 中的 Proxy、Direct、Config、Scene 代表不同的運作模式。Proxy 與 Direct 是全域的輸出選擇,不適合用來驗證特定自訂規則是否正確;本文使用 Config,讓連線依照選取的設定檔分流。Scene 用於依情境套用相應設定;驗證時應先固定運作條件,避免情境變動同時影響結果。

  1. 在 Home → Global Routing 選擇 Config,並記下目前使用的代理選擇。
  2. 前往 Config,確認目前設定檔名稱,並在副本中修改 Rule 區段。
  3. 儲存設定檔,確認它仍是目前選取的設定檔,然後重新建立測試連線。
  4. 連線至明確的測試目標,並在 Data 的連線紀錄中檢查目標、命中規則與輸出資訊;實際顯示欄位依目前介面為準。

訂閱中的伺服器清單與 Config 中的分流規則用途不同。更新既有訂閱通常是更新連線資料,不能據此判定 Rule 區段已變更;遠端設定檔更新則可能會取代設定內容。排查前先記錄更新的是哪一種資源,避免把連線參數變更誤認為規則順序變更。

比對順序:最先命中的規則決定本次策略

Rule 區段會由上而下依序檢查。某條規則命中並選定策略後,不會再往下比對以尋找「更精確」的條件。因此,精確規則不會自動優先於範圍規則;只有將它排在範圍規則之前,才有機會先命中。

建立新連線 取得目標 依序比對 決定策略 執行輸出

例如,希望 api.example.com 使用 PROXY,而 example.com 的其他子網域使用 DIRECT,可採用以下順序。範例網域僅用於說明語法;測試網路連線時,請改用自己有權使用且確認可連線的目標。

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

連線目標為 api.example.com 時,會命中第一行 DOMAIN;目標為 www.example.com 時,第一行不符,接著由第二行 DOMAIN-SUFFIX 命中。DOMAIN-SUFFIX 同時涵蓋該網域本身及其子網域,並非比對任何包含這串字元的網域。

判斷原則:例外規則排在範圍規則之前

若同一目標同時符合 DOMAIN 與 DOMAIN-SUFFIX,請先調整兩行的順序,再測試新連線;新增在後面的精確規則,無法取代已先命中的範圍規則。

策略設定:PROXY、DIRECT、REJECT 只決定處理方式

規則通常由規則類型、比對值與策略組成,並以英文逗號分隔。例如 DOMAIN,api.example.com,PROXY 中,DOMAIN 是比對類型,網域是比對值,PROXY 則是命中後的處理策略。只接受網域的欄位中,不要填入完整網址、路徑或中文逗號。

3 種
本文採用的基本策略:PROXY/DIRECT/REJECT
2 類
網域範例:DOMAIN 精確比對、DOMAIN-SUFFIX 後綴比對
1 條
在最後以 FINAL 作為統一兜底
策略命中後的行為需確認的條件
PROXY交由目前設定檔中的代理選擇處理代理選擇可用,且連線參數與伺服器設定一致
DIRECT直接連線至目標,不經代理伺服器轉送目前網路可直接連線至目標
REJECT拒絕符合條件的連線目標確實應遭封鎖,且不會誤擋必要的相依服務

命中 PROXY 不代表遠端連線一定成功。即使規則判斷完全正確,代理連線的位址、連接埠或驗證參數錯誤,仍會造成連線失敗。DIRECT 也不代表連線完全不受系統網路設定影響;它只表示此處不經代理伺服器轉送。REJECT 則是明確拒絕,不應將由此造成的連線失敗視為線路逾時。

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

在這段設定中,blocked.example.com 雖然也屬於 example.com,仍會被第一行拒絕。若將 REJECT 行移到 DOMAIN-SUFFIX 後面,就無法封鎖這個目標。網站也可能連線至獨立的登入、圖片或 API 網域;測試時應逐筆查看連線紀錄,而非只確認首頁能否開啟。

FINAL 兜底:放在最後,不填網域

FINAL 用來處理前面規則都未命中的連線,不包含網域或位址條件。基本寫法為 FINAL,PROXY 或 FINAL,DIRECT,而非 FINAL,example.com,PROXY。應保留一條明確的 FINAL,並放在 Rule 區段末尾;若放在中間,後續規則就沒有命中的機會。

其餘連線使用 PROXY

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

先處理拒絕例外與直接連線範圍,其餘連線交由 PROXY 處理。

僅指定目標使用 PROXY

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

先處理拒絕例外與代理範圍,其餘連線使用 DIRECT。

以上是兩種不同的分流需求,請勿將兩張卡片中的 FINAL 一併加到同一個 Rule 區段。應採用哪種兜底策略,取決於目標在目前網路中的可連線性與個人連線需求。若沒有符合的網域規則,連線就會套用 FINAL;因此,遺漏規則造成的行為變化,往往會先表現在兜底策略上。

加入 IP-CIDR 與 GEOIP:先處理明確的位址範圍

網域規則比對網域條件,IP-CIDR 則比對 IP 位址網段。連線至本機裝置時,可以將已知的區域網路網段排在較廣泛的位址歸屬規則之前。以下的 192.168.0.0/16 涵蓋 192.168.0.0 至 192.168.255.255 的位址,但不代表所有家庭網路都使用此網段,實際設定應依路由器的位址規劃調整。

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

若連線只有網域資訊,且沒有可供位址規則使用的目標 IP,附有 no-resolve 的區域網路規則不會自行啟動解析。相對地,IP 相關判斷可能會用到既有的解析結果或解析流程。遇到「同一網域有時走不同路徑」時,請先確認實際目標 IP 與命中紀錄,再檢查 DNS 或位址歸屬因素,不要直接認定規則順序隨機變動。

儲存後驗證:用三類連線區分規則錯誤與連線錯誤

每次只修改一組規則,儲存後重新建立連線。瀏覽器或 App 可能重用已建立的連線;即使剛儲存規則檔,舊連線也不會因此重新比對。必要時關閉測試 App 的現有連線,或在適當時機中斷後重新連線 Shadowrocket,再次連線至目標。

  1. 驗證精確例外。選擇同時符合精確條件與範圍條件的目標,確認是否命中前面的 DOMAIN,而非後面的 DOMAIN-SUFFIX。
  2. 驗證範圍規則。選擇相同後綴下另一個未列為例外的目標,確認是否由 DOMAIN-SUFFIX 處理。
  3. 驗證 FINAL。選擇已知可連線且不符合任何前置條件的目標,確認是否使用預定的兜底策略。
  4. 驗證 REJECT。暫時使用可控的測試目標,確認拒絕規則是否生效;測試結束後刪除臨時規則,避免影響日常使用。

測試紀錄至少應註明目標網域、實際 IP、Global Routing 模式、命中規則與結果。不要只寫「無法開啟」。若紀錄顯示已命中預期規則但連線失敗,應檢查輸出連線;若命中的是其他規則,應先檢查規則順序與比對條件,不要同時修改通訊協定參數。

判斷原則:先確認命中規則,再檢查輸出連線

命中規則不符時,調整設定檔選擇、比對範圍或順序;命中正確但無法連線時,檢查 DIRECT 的網路連線能力,或 PROXY 的連線參數。每次只變更一項因素,並保留可還原的副本。

維護規則:更新後重新檢查例外與兜底

遠端設定檔更新後,應重新檢查 Rule 區段開頭的例外規則與末尾的 FINAL,確認自訂內容未遭取代。訂閱更新後,則應確認原本使用的代理選擇仍可用。這是兩種不同的維護作業;分開記錄設定內容與連線資料,才能釐清更新前後的行為變化。

規則決定連線如何分流,不提供連線服務。一次買斷用戶端 ≠ 線路方案;本文假設使用者已有自己的服務商與訂閱。Shadowrocket 是閉源商業 App,主要供 iPhone 與 iPad 使用,唯一取得管道為 App Store;系統需求請以 App Store 頁面標示為準。

前往 App Store 確認正版 →