Shadowrocket 自訂規則教學:匹配優先順序、FINAL 預設規則與 PROXY/DIRECT/REJECT

規則會依由上而下的順序匹配,命中後即停止。本文說明 DOMAIN-SUFFIX、IP-CIDR 等關鍵字的寫法,以及三種策略如何搭配 FINAL 預設規則使用。

本文重點

本文適合已在 Shadowrocket(小火箭)設定好連線,準備修改 Config 的使用者。先確認 Global Routing,再依「具體例外在前、一般規則在後、FINAL 放在最後」的順序整理規則;透過網域與 IP 範例,分辨匹配條件和處理策略,最後建立新連線確認實際結果。訂閱請向你的服務供應商取得,連線服務與用戶端購買分開處理。

先確認 Global Routing

自訂規則是否會參與判斷,首先取決於 Home → Global Routing 目前的選項。Config 會依目前啟用的設定檔處理連線;Proxy 與 Direct 則代表不同的全域處理方式。不要在 Proxy 模式下測試規則順序,也不要把 Direct 模式下能連上某個目標,當成某條 DIRECT 規則已命中的證據。

Config

建議使用

使用目前啟用的 Config,依其中的規則決定連線策略。結果可能是 PROXY、DIRECT 或 REJECT,不預設未匹配的連線一定直連。

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

Proxy

用於全域代理處理,不適合依本文的一般規則順序測試分流。可用來協助判斷已設定的代理連線是否可用。

適用情境:短時間排除代理連線問題與規則問題。

Direct

用於全域直連處理。目標能開啟,只表示目前的直連路徑可用,無法證明 Config 中某條規則已生效。

適用情境:對照本地網路的直連狀況。

Global Routing 也可能使用 Scene。Scene 會依設定的場景條件運作;排查時先記下原有設定,暫時明確選擇 Config,避免把切換場景造成的變化誤認為規則變動。Settings → On Demand 用來管理連線觸發條件,不會調整 [Rule] 中的匹配順序;測試期間盡量維持網路狀態與觸發條件不變。

結論:先固定測試條件

先確認 Global Routing 設為 Config,且目標設定檔已啟用,再修改一條規則。否則,即使設定文字正確,也無法從連線結果判斷這次修改是否生效。

規則語法與首次命中

常見規則的寫法是「類型,匹配內容,策略」,欄位之間以英文逗號分隔;FINAL 不需要匹配內容,因此通常只有兩個欄位。規則關鍵字與策略請保留英文原文,不要在關鍵字中加入中文標點。以下為設定文字範例,並非應用程式介面,也不代表適用於所有網路的完整設定。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
3 個欄位
常見規則:類型、匹配內容、策略
2 個欄位
FINAL:關鍵字與預設策略
首次命中
依文字順序判斷,不會依規則長短自動排序

假設要判斷的網域是 login.example.com,第一條 DOMAIN 已經命中,因此會採用 DIRECT,不會再由下一條 DOMAIN-SUFFIX 改為 PROXY。若將這兩行對調,較廣泛的後綴規則會先命中,同一個網域便會採用 PROXY。「更精確」的規則必須放在前面才能成為例外;規則不會自動覆蓋前面的項目。

PROXY、DIRECT 與 REJECT

匹配條件說明「這條規則適用於哪個目標」,策略則說明「命中後如何處理」。DOMAIN-SUFFIX 本身不代表代理,IP-CIDR 本身也不代表直連;同一種匹配類型可以搭配不同策略。修改時應分別確認條件與策略,不能只看行首的關鍵字。

策略處理方式檢查重點
PROXY透過代理路徑處理。確認目前選取的代理、策略參照及連線是否可用。
DIRECT直接連線至目標。確認本地網路是否能連到目標。
REJECT拒絕符合條件的連線。確認拒絕範圍是否誤包含必要網域。

PROXY 不會建立連線服務,也無法讓不可用的連線自動恢復。如果設定中使用自訂策略組名稱,還需要確認該名稱對應的定義與選取項目;不要直接將其他設定中的組名貼到規則尾端。本文範例只使用三種基本策略,方便觀察規則順序,並非要求將現有策略組全部替換。

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

在這段範例中,blocked.example.com 會被第一條規則拒絕;login.example.com 會採用 DIRECT;docs.example.com 則採用 PROXY。其他未命中的目標由 FINAL 設為直連。這些網域僅用於說明語法,不需要實際造訪,也不表示相關網址提供任何連線服務。

IP-CIDR 與 GEOIP 的適用範圍

IP-CIDR 用來判斷 IPv4 位址是否位於指定網段,不是依網站名稱分類。192.168.0.0/16 涵蓋從 192.168.0.0 到 192.168.255.255 的位址,但不包含 10.0.0.0/8。若要讓本地裝置直連,應確認實際位址與子網路,不要把單一網段當成所有本地網路。

IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

若需求是「某個網域一律使用指定策略」,建議使用明確的 DOMAIN 或 DOMAIN-SUFFIX 表達,並將規則放在可能先命中的一般規則之前。不要為了修正單一網域的分流而刪除所有 GEOIP 規則;先確認實際命中哪一條,再決定修改範圍。

FINAL 預設規則與安全修改步驟

FINAL 通常放在 [Rule] 的末尾。只有前面規則都未命中的連線才會到達此處,因此在 FINAL 後繼續新增一般規則,通常無法達到預期效果。選擇 FINAL,PROXY 或 FINAL,DIRECT,取決於未分類連線的處理方式;兩者都是明確策略,沒有適用於所有使用者的統一答案。

  1. 保留備份

    進入 Config,確認目前啟用的檔案,並先保留一份可還原的副本。記下原有的 FINAL、策略組名稱與規則順序,避免遠端設定更新時覆蓋自訂內容。

  2. 固定模式

    在 Home → Global Routing 選擇 Config。回到 Config 確認準備編輯的檔案與實際啟用的檔案相同,而不是名稱相近的另一份副本。

  3. 加入例外

    在該檔案的 [Rule] 區段中,將精確的 DOMAIN 例外放在相應 DOMAIN-SUFFIX 之前。新增的規則行必須位於 FINAL 前,保留英文逗號與原有的區段界線。

  4. 檢查預設規則

    確認 [Rule] 末尾的 FINAL 符合預期。不要為同一目的連續加入多個 FINAL,也不要將 FINAL 寫成含網域的三欄規則。

  5. 驗證新連線

    儲存並確認設定檔已啟用後,讓目標應用程式重新建立連線。檢查連線記錄中的目標網域或 IP、命中的規則及採用的策略;若結果不符,先還原備份,再逐項修改。

修改規則主要影響後續連線的判斷;已建立的長連線可能仍沿用先前的路徑。測試時請結束舊工作階段,必要時在可中斷作業的情況下重新連線,再開啟相同目標。檔案傳輸或通話期間不要反覆切換模式,以免將連線中斷誤認為規則語法錯誤。

規則未生效時的常見檢查項目

排查時先確認「是否使用這份設定」,再檢查「匹配到哪個目標」,最後確認「策略執行後是否能連線」。網頁無法開啟不代表命中 REJECT;頁面能開啟,也不代表所有相關網域都採用相同策略。登入、圖片與影片請求可能使用不同網域,必須依實際連線分別判斷。

明明寫了 DIRECT,為什麼還是走 PROXY?

先確認 Home → Global Routing 是否設為 Config,再檢查 DIRECT 規則之前是否已有 DOMAIN-SUFFIX 等規則匹配同一目標。將精確例外移到較廣泛的規則之前,儲存後重新建立連線;不要只是不斷切換清單中的代理選項。

把規則加在最後,為什麼沒有變化?

開啟目前 Config 的 [Rule],找到 FINAL。若新規則位於 FINAL 後,請移到 FINAL 前;若前面還有更廣泛的匹配項,也要進一步調整前後順序。每次只移動一條規則,方便確認哪次變更影響了結果。

IP-CIDR 加了 no-resolve,為什麼網域沒命中?

確認該次判斷時是否已有可用的目標 IP。no-resolve 不會主動為此規則補上網域解析;若要固定某個網域的策略,請改用明確的 DOMAIN 或 DOMAIN-SUFFIX,並將規則放在一般 IP 規則之前。

一條 REJECT 讓整個頁面異常,該如何還原?

先從備份還原該項修改,或只移除剛新增的 REJECT 規則,再重新建立連線驗證。檢查遭拒絕的網域是否同時承載登入、指令碼或資源;若需縮小範圍,請改用精確的 DOMAIN,避免使用範圍過大的後綴匹配。

更新後規則恢復原狀,該檢查哪些地方?

前往 Config 確認目前啟用的檔案、遠端來源與 [Rule] 內容,並確認更新是否取代了本機修改。先還原保留的副本,再決定如何維護自訂規則;不要把重複更新連線訂閱當成還原設定規則的方法。

完成排查後,保留足以說明結果的最少規則。每條例外都應有明確的對象與用途,FINAL 則只負責為未匹配的連線提供預設處理方式。如需進一步確認介面詞彙,可參閱術語表;若連線路徑仍不可用,請參考疑難排解檢查網路與代理連線,不要繼續堆疊規則。

下載 Shadowrocket