2026-08-06 · 規則與分流 · 約 8 分鐘

Shadowrocket 自訂規則優先順序:由上而下比對與 FINAL 兜底設定

說明規則如何由上而下逐條比對、符合後即停止,以及為何 FINAL 必須放在最後;並介紹 PROXY、DIRECT、REJECT 的適用情境。

本文重點

本文適合已在 Shadowrocket(小火箭)設定好連線,準備調整分流規則的使用者。請先確認 Global Routing 設為 Config,再依「具體例外在前、範圍規則在後、FINAL 最後」整理設定,並透過單筆請求記錄確認實際命中的規則。連線資訊與訂閱請向服務供應商取得;本文僅說明規則排序、驗證與還原方式。

先確認 Config:規則順序生效的前提

修改規則前,先到 Home → Global Routing 確認目前的路由模式。本文討論的是選擇 Config 後,當前設定中 [Rule] 清單的比對順序。只修改檔案,卻讓 Global Routing 停留在 Proxy 或 Direct,無法用來驗證這組規則是否如預期生效。

Global Routing 的模式名稱與規則列中的策略名稱,屬於不同層級的設定。例如,Proxy 是路由模式,PROXY 則是規則列的目標策略。兩者拼法相近,但不要把「選擇 Proxy」理解成「只有 PROXY 規則會生效」。

Config

建議

依目前設定執行分流。請求可能由某條具體規則處理,也可能交由 FINAL;實際路徑取決於命中的策略。

適用情境:編輯規則、確認命中順序,以及日常依設定分流。

Proxy

以代理模式處理流量,不會依本文所述的規則清單逐條決定分流。可用來確認代理連線本身是否可用,但無法據此證明規則正確。

適用情境:暫時確認連線是否可用,區分代理故障與規則選擇錯誤。

Direct

以直連模式處理流量。此時存取成功或失敗,不能直接歸因於剛修改的 PROXY 或 REJECT 規則。

適用情境:確認本地網路的直連狀況,對照完成後切回 Config。

判斷方式:先固定模式,再修改一條規則

將 Global Routing 固定為 Config,並保持所選連線不變;每次只調整一條規則或一個位置。如此才能將請求路徑的變化與這次修改對應起來。

由上而下比對:規則更具體,不代表自動優先

在一般規則清單中,Shadowrocket 會依由上而下的順序檢查規則。只要某條規則符合並決定處理策略,就不會繼續尋找下方「看起來更精確」的規則。優先順序主要取決於排列位置,而非網域長短,也不是由 DIRECT、PROXY 或 REJECT 的名稱決定。

以下使用保留的範例網域說明規則衝突,不代表可直接存取的測試服務。假設整個 example.com 都需要 PROXY,但其中的 api.example.com 是需要 DIRECT 的例外,就必須將例外規則放在範圍規則前面。

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

如果將第二行移到第一行之前,api.example.com 就會先被 DOMAIN-SUFFIX 符合,後面的 DIRECT 例外便沒有機會執行。同理,放在範圍規則後面的 REJECT 也不會自動取得較高優先順序。

1 個網域
DOMAIN 精確比對指定網域,不包含該網域的所有子網域。
2 種範圍
DOMAIN-SUFFIX 涵蓋網域本身及其子網域。
1 條兜底規則
本例只保留一條 FINAL,並放在規則清單的最後。

DOMAIN-SUFFIX,example.com,PROXY 並非在 URL 中任意搜尋文字;網址路徑中出現 example.com,不會因此符合。規則參數應填寫網域,不要加入 https://、頁面路徑或查詢參數。若只要處理單一主機名稱,建議用 DOMAIN 描述這項例外。

FINAL 設定方式:指定未符合其他規則時的處理方式

FINAL 是不附帶網域或 IP 條件的最終兜底規則。常見寫法包括 FINAL,DIRECT 或 FINAL,PROXY。它不是「只比對無法識別的網站」,而是處理所有到達該行、尚未被前面的規則處理的請求。

因此,FINAL 應放在 [Rule] 清單的最後,而不是整份設定檔的最後。設定檔可能還包含其他區段;移動 FINAL 時,請勿將它移到其他區段。若 FINAL 提前出現,後面的普通規則就沒有比對機會。

設定方式未符合規則時的結果檢查事項
FINAL,DIRECT其餘請求直接連線。需要代理的網域是否已由前面的規則涵蓋。
FINAL,PROXY其餘請求交由 PROXY 處理。本地網路及需要直連的目標,是否已設定明確例外。
FINAL,REJECT其餘請求一律拒絕。是否確實要採用嚴格的允許清單,並能接受遺漏項目造成無法存取。

以下是獨立的最小結構範例,用來說明網域規則、IP 規則與兜底規則的位置。這不是完整的日常設定:範例只列出一段私有 IP 位址範圍,未涵蓋所有本地網路情況。請在現有設定的副本中合併所需規則,不要再新增第二個 [Rule] 區段。

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

IP-CIDR 用來檢查 IP 位址範圍;GEOIP 依據 IP 地理資料庫分類,不能據此判斷內容所屬地區或營運者所在地。範例中的 no-resolve 表示不要只為這條 IP 規則主動解析網域,不代表整份設定都不會進行 DNS 查詢。IP 規則能否符合,也取決於該次請求可用的目標位址資訊。

PROXY、DIRECT、REJECT:分別查看比對條件與處理動作

規則列前半部用來指定「比對什麼」,最後的策略則回答「符合後如何處理」。同一條 DOMAIN-SUFFIX 可以搭配不同策略;策略本身不會改變比對範圍,也不會提升該規則的排列優先順序。

PROXY
將請求交由代理路徑處理。實際使用的連線仍取決於目前的選擇及設定中的策略安排;符合 PROXY 不代表伺服器連線、驗證或目標存取一定成功。
DIRECT
透過本地網路直接連線至目標。適用於已確認需要直連的網域或位址範圍;DIRECT 不會自動修正 DNS 錯誤、本地網路封鎖或目標服務故障。
REJECT
拒絕符合條件的請求。適用於明確需要封鎖的單一網域或位址;請先確認比對範圍,避免連登入、驗證或頁面資源也一併封鎖。

例如 DOMAIN,metrics.example.com,REJECT 只表示封鎖這個範例主機名稱。如果正常內容與待封鎖請求共用同一網域,DOMAIN 或 DOMAIN-SUFFIX 無法依網頁路徑將兩者區分。將整個網域設為 REJECT,可能同時造成圖片無法顯示、按鈕失效或頁面載入中斷。

規則決定流量去向,協定則決定如何建立代理連線。將 PROXY 對應的連線從一種協定換成另一種,不會改變 DOMAIN-SUFFIX 的比對範圍。排查時應先確認「路徑是否正確」,再檢查該路徑能否順利完成連線。

修改與驗證:保留副本,逐條確認命中結果

以下操作以已有可用連線及設定為前提。訂閱與設定檔是不同項目:在 Home 更新訂閱,不代表目前 Config 中的規則會自動調整為你需要的順序。修改前,請先確認正在編輯的是實際選用的檔案,並保留可還原的副本。

  1. 保留副本

    在 Config 中確認目前選用的檔案,先保留原檔副本或匯出備份。若檔案來自遠端更新,請使用獨立的本機副本進行修改,避免後續更新覆蓋內容。

  2. 固定路由模式

    前往 Home → Global Routing → Config,並保持目前選用的連線不變。同一次驗證中,請勿同時切換路由模式、連線與規則檔案。

  3. 編輯規則

    前往 Config → 目前檔案右側 ⓘ → Edit Plain Text,找到 [Rule] 區段。將具體例外放在範圍規則之前,確認清單末尾只保留一條 FINAL,然後儲存。

  4. 重新建立請求

    確認已選用修改後的設定,重新建立連線,再次開啟實際測試頁面。長連線可能會繼續使用原有工作階段;若頁面仍沿用舊連線,請勿只靠重新整理就下結論。

  5. 檢查記錄

    查看這次請求的連線記錄,確認目標網域或 IP、命中的規則及處理策略。若路徑錯誤,就調整規則順序;若路徑正確但存取失敗,再檢查連線本身與目標服務。

測試至少涵蓋三種目標:一個應符合具體例外的網域、一個應符合範圍規則的網域,以及一個應交由 FINAL 處理的目標。請使用你實際有權存取、且知道預期路徑的目標;本文中的 example.com 系列名稱僅用於說明語法,不代表連線測試結果。

驗收:一併確認網域、規則與策略

網頁能開啟,只能證明這次存取成功,不能證明命中了預期規則。請記錄「實際目標 → 命中規則 → 處理策略」三項,確認三者一致後再擴大修改範圍。

常見問題:規則沒有生效時,先檢查哪些地方

已新增 DIRECT,為什麼還是走 PROXY?

先確認 Home → Global Routing 是否設為 Config,再檢查 Config 中實際選用的檔案。接著查看 DIRECT 前方是否有涵蓋相同網域的 DOMAIN-SUFFIX、其他範圍規則,或提前出現的 FINAL。將具體例外移到第一條會涵蓋它的範圍規則之前,再重新建立請求驗證。

FINAL 放在最上面,會先檢查完下方規則嗎?

不會。請求比對到 FINAL 時,就會採用兜底策略,不會先往下搜尋再返回。請進入設定中的 [Rule] 區段,將 FINAL 移到規則清單末尾,並刪除重複的 FINAL;儲存後再次確認目前選用的是修改過的檔案。

已符合 PROXY,為什麼頁面還是打不開?

命中記錄只表示路由決策已完成。保持規則不變,檢查 Home 中選用的連線是否可用,再以相同目標進行對照。若連線、驗證或目標服務發生問題,應處理相應故障;不斷新增相同的 DOMAIN 規則無法修復這些問題。

更新後規則又恢復原樣,該如何保存修改?

確認更新的是 Home 中的訂閱,還是 Config 中的遠端設定檔。若遠端設定檔更新覆蓋了本機編輯內容,請還原備份,將自訂規則合併至獨立的本機副本並選用該檔案。之後更新時先比較差異,再手動合併,不要直接覆蓋唯一可用的副本。

如果記錄中的目標與預期網域不同,請先確認頁面跳轉、資源網域,以及這次連線實際使用的位址。單一頁面通常會建立多筆請求;替入口網域新增 DIRECT,不代表頁面引用的所有資源都會符合同一條規則。依記錄逐項確認,比不斷擴大 DOMAIN-SUFFIX 範圍更容易控制影響。

App Store 正版確認與使用說明

Shadowrocket 是 Apple 平台上的閉源商業應用程式,透過 App Store 一次性購買取得。請核對 App ID 932747118 與開發者 Shadow Launch Technology Limited;價格、系統需求及相容性請以 App Store 頁面標示為準。用戶端購買與線路服務分開管理,訂閱請向服務供應商取得。

前往正版確認頁 查看教學
App Store 正版確認