2026-10-14 · 規則進階 · 約 8 分鐘

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

Shadowrocket 自訂規則依序匹配,命中即停止,最後由 FINAL 處理未匹配項目。本文以 DOMAIN-SUFFIX、IP-CIDR 為例,說明 PROXY、DIRECT、REJECT 的設定與排列方式。

本文重點

自訂規則需同時符合三個條件:目前使用正確的 Config、Global Routing 設為 Config,以及例外規則排在廣泛規則與 FINAL 之前。本文適合已有自己的伺服器或訂閱、需要調整流量分流方式的使用者;依序完成備份、編輯、啟用與驗證,就能分辨「規則未命中」和「命中後連線失敗」。

01 先確認 Config 模式,再修改規則

Shadowrocket(小火箭)的規則不是獨立於運作模式的開關。在 Home 檢查 Global Routing:若要驗證設定檔中的分流規則,應使用 Config。Proxy 和 Direct 分別代表整體採用代理或直接連線的路由模式,不能用這兩種模式下的連線結果判斷自訂規則是否如預期生效。若目前使用 Scene,請先確認該場景實際採用的路由設定,再測試規則。

Home 用來檢查連線狀態與伺服器選擇,Config 用來管理設定檔,Settings 用來查看 App 設定。先在 Config 確認目前啟用的檔案,再進入該檔案的編輯頁面。請勿只修改同名副本,卻仍使用另一份設定檔。

  1. 先備份目前的設定檔,並記下原本的 Global Routing 和伺服器選擇。
  2. 在 Config 開啟要修改的設定檔,找到 [Rule] 區段。
  3. 先新增一條容易辨識的測試規則,不要一次取代整份規則。
  4. 儲存並確認已套用修改後的設定檔,回到 Home 將 Global Routing 設為 Config。
  5. 保持連線開啟,再重新發起連線;舊連線不適合用來驗證剛修改的路由。

02 規則由上而下執行,例外必須排在前面

一條規則通常由匹配類型、匹配值和策略組成,欄位之間以英文逗號分隔。例如 DOMAIN-SUFFIX,example.com,PROXY 表示將符合條件的網域交由 PROXY 處理。規則會依設定檔中的順序逐一檢查,首次匹配成功後便採用該條策略,不會繼續尋找後面「更精確」的規則。

新請求讀取規則首次命中套用策略檢查結果

因此,「越精確越優先」是排列建議,不是自動排序機制。若要讓 status.example.com 直接連線,而同一網域下的其他請求使用代理,精確的 DOMAIN 規則應排在 DOMAIN-SUFFIX 之前。

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

如果將前兩條規則對調,status.example.com 會先命中 DOMAIN-SUFFIX,後面的 DOMAIN 規則便不會執行。範例中的網域僅用來說明語法,不應以這些網域是否能開啟網頁,判斷代理服務是否可用。

03 DOMAIN-SUFFIX、IP-CIDR 與 GEOIP 各自匹配什麼

網域規則和 IP 規則處理的對象不同。DOMAIN-SUFFIX 依網域後綴匹配,不是搜尋任意字串是否包含:example.com 和 img.example.com 符合條件,notexample.com 則不符合。若只要匹配完整主機名稱,應使用 DOMAIN。

關鍵字匹配對象語法範例檢查重點
DOMAIN完整網域名稱DOMAIN,status.example.com,DIRECT不含協定、路徑或連接埠
DOMAIN-SUFFIX網域及其子網域DOMAIN-SUFFIX,example.com,PROXY較廣泛的後綴規則應排在具體例外之後
IP-CIDRIPv4 位址範圍IP-CIDR,192.0.2.0/24,DIRECT,no-resolve確認位址範圍與解析條件
GEOIPIP 地理位置資料GEOIP,CN,DIRECT不是依網域後綴判斷地區
FINAL之前都未命中的請求FINAL,PROXY放在所有例外規則之後

192.0.2.0/24 是文件範例網段,涵蓋 192.0.2.0 至 192.0.2.255,並非可直接使用的伺服器位址。no-resolve 表示不會為這條 IP 規則主動發起網域解析;若已有可供匹配的目標 IP,仍可進行判斷。不要將它解讀為關閉所有 DNS,也不要期待在只有網域、沒有可用 IP 的情況下強制命中。

GEOIP 會依據目標 IP 和歸屬資料進行判斷,無法保證使用特定語言的網站,或特定地區的網域後綴,一定採用相同策略。使用共用基礎設施的網站可能解析到不同位址。若要固定某個網域的路由,建議直接設定網域規則,而非依賴該網域當下解析到的地區。

3 種
本文使用的基本策略:PROXY / DIRECT / REJECT
256 個
範例 IPv4 /24 網段涵蓋的位址數量
2 個欄位
FINAL,PROXY:關鍵字與策略,不填匹配值

04 PROXY、DIRECT、REJECT 與 FINAL 的用途

PROXY、DIRECT、REJECT 是規則套用的策略,FINAL 則是規則類型,兩者層級不同。FINAL,PROXY 的意思是「沒有前面的規則命中時,採用 PROXY」,並不表示 FINAL 本身具備代理功能。

以代理作為預設路由的基本範例

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

先處理明確需要直接連線或拒絕的例外,其餘請求採用代理策略。

以直接連線作為預設路由的基本範例

DOMAIN
status.example.com,DIRECT
DOMAIN-SUFFIX
example.com,PROXY
FINAL
DIRECT

只有列出的匹配對象會使用代理;未列出的請求則直接連線。

以上是兩種不同的路由目標,請勿合併複製兩張卡片的內容。選擇 FINAL 的策略之前,先想清楚「未列入規則的請求應如何處理」。若將 FINAL 放在規則區段前面,後續的例外規則便無法正常參與匹配;保留一條明確的末尾預設規則,更容易檢查。

結論:先決定預設路由,再新增例外

先用 FINAL 指定未匹配請求的處理方式,再將需要改變路由的網域或 IP 規則放在 FINAL 之前;驗證時一次只調整一條例外,避免無法判斷是哪項修改影響結果。

05 完整範例:從精確網域到末尾預設規則

以下設定片段用於練習判讀規則順序,只展示 [Rule] 區段。內容不包含伺服器定義,也不應覆蓋現有設定檔中的其他區段。所有範例網域和位址僅供文件說明,實際使用時請填入已確認的匹配對象。

[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,PROXY
  1. 先判斷是否為 status.example.com,符合時直接連線。
  2. 接著判斷是否為 blocked.example.com 或其子網域,符合時拒絕連線。
  3. 再處理其他 example.com 網域請求,並採用代理。
  4. 對於尚未命中且有可用目標 IP 的請求,檢查範例網段。
  5. 其餘請求採用最後的 PROXY 預設規則。

第二條必須排在第三條之前,因為 blocked.example.com 同時符合這兩條後綴規則。即使 IP-CIDR 的匹配範圍不同,也無法推翻前面已命中的網域策略。排列規則時,應依「先處理明確例外,再處理廣泛集合」的原則判讀,而非將所有相同類型的關鍵字集中排列。

06 驗證規則:分開記錄匹配結果與連線結果

網頁能否開啟,並非判斷規則是否命中的唯一依據。命中 PROXY 後,仍可能因伺服器無法連線而失敗;命中 DIRECT 後,也可能受到目前網路限制;命中 REJECT 時,無法存取可能正是預期結果。排查時應分別記錄「採用了什麼策略」以及「套用策略後發生什麼事」。

  1. 準備目標:選擇一個自己能確認的真實完整網域名稱,先記錄修改前的連線情況,不要用範例位址測試服務是否可用。
  2. 固定環境:保持使用相同網路、伺服器和 Config,並確認 Global Routing 設為 Config。
  3. 建立新請求:儲存規則後關閉舊頁面或中斷舊連線,再重新發起請求,避免重複使用連線影響觀察結果。
  4. 查看記錄:在 App 的請求記錄中確認實際網域、目標 IP、規則和策略等可見資訊;記錄項目名稱及顯示內容以目前 App 介面為準。
  5. 逐項調整:若匹配錯誤,調整規則順序;若匹配正確但連線失敗,再檢查 DNS、代理伺服器或直接連線路徑。

單一頁面可能會向多個網域發出請求:主文件、圖片、API 和媒體資源可能各自匹配不同規則。只為主網站網域新增一條規則,不代表所有相關資源都會採用相同策略。請從失敗請求的實際主機名稱開始檢查,不要只根據瀏覽器網址列中的網域擴大規則範圍。

07 自訂規則常見問題

明明設定了 DIRECT,為什麼還是使用 PROXY?

先在 Home 確認 Global Routing 是否設為 Config,再確認 Config 啟用的是修改後的檔案。接著從第一條規則往下檢查:若較前面的 DOMAIN-SUFFIX 已命中 PROXY,後面的 DIRECT 就不會執行。將精確例外移到廣泛規則之前,再用新請求測試。

FINAL,PROXY 會自動選擇可用的伺服器嗎?

不會。FINAL 只負責處理未匹配項目,PROXY 只指定代理策略。請先確認已有可連線的伺服器;若設定檔使用策略群組,也要檢查群組選擇及相關設定。只修改最後一行,無法修正錯誤的位址、認證資訊或伺服器狀態。

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

先確認請求是否已命中前面的網域規則,再檢查目標實際解析出的 IP 是否位於該網段。若加上 no-resolve,這條規則不會為了匹配而主動解析網域。先從請求記錄確認目標 IP,再判斷規則條件,不要只憑網站名稱推測位址。

訂閱更新後,自訂規則會一直保留嗎?

先確認更新的是哪一項:伺服器訂閱主要管理伺服器項目,遠端設定檔更新則可能取代設定內容。修改前先備份,更新後到 Config 確認規則和啟用狀態。若自訂內容消失,先比對備份與目前檔案,再恢復所需項目,不要反覆覆蓋整份設定檔。

App Store 正版確認