Shadowrocket 自訂規則設定:由上而下的匹配順序與 FINAL 兜底

Shadowrocket 規則由上而下逐條匹配,符合即停止。了解 PROXY、DIRECT、REJECT 的作用,以及 FINAL 為何必須放在最後。

本文重點

本文適合已經有服務商提供的訂閱或可用連線,並準備編輯 Shadowrocket(小火箭)設定檔的使用者。先確認 Global Routing 設為 Config,再依照「具體例外在前、較廣範圍在後、FINAL 放最後」整理規則。本文透過最簡設定檔、衝突範例與驗證步驟,協助判斷是「規則未匹配」還是「匹配後連線失敗」。

一、先確認 Config:規則清單何時會參與分流

自訂規則不是連線開關,也不會提供連線所需的伺服器資訊。開始前,請先向服務商取得訂閱或連線參數,並確認選用的連線可正常使用。本文以 iPhone / iPad 上的 Home、Config、Settings 頁面名稱說明操作;其他平台請在相應的路由與設定入口確認相同選項。

在 Home 檢查 Global Routing。選用 Config 時,目前生效設定檔中的規則才是排查分流的主要依據。Proxy 與 Direct 是全域路由模式,不可與單條規則結尾的 PROXY、DIRECT 策略混為一談;Scene 則須依目前場景的設定判斷,不能直接視為 Config 的同義詞。

請求進入隧道 讀取目標資訊 由上而下匹配 執行匹配策略 建立或拒絕連線

這個流程描述的是參與設定分流的請求,不代表所有系統請求都必然經過完全相同的處理路徑。驗證時,請從明確的目標網域與新連線開始;不要只因狀態列出現 VPN 標記,就認定規則已生效。

二、規則語法:分開看匹配條件與執行策略

常見規則由「類型、匹配值、策略」組成,欄位之間以英文逗號分隔。類型說明檢查項目,匹配值限定範圍,策略決定匹配後的動作。FINAL 不需要匹配值,因此通常只有兩個欄位。請勿使用全形逗號,也不要在策略名稱後直接加上說明文字。

3 個欄位
常見條件規則:類型、匹配值、策略
2 個欄位
兜底規則:FINAL、策略
3 種策略
本文使用 PROXY、DIRECT、REJECT
規則類型範例檢查範圍
DOMAINDOMAIN,login.example.com,PROXY精確匹配 login.example.com,不會自動包含其子網域。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,DIRECT匹配 example.com 本身及其子網域,例如 www.example.com。
IP-CIDRIP-CIDR,192.168.50.0/24,DIRECT檢查目標 IPv4 位址是否位於指定網段;/24 不是連接埠號碼。
GEOIPGEOIP,CN,DIRECT根據目標 IP 在本機 GeoIP 資料中的地區分類判斷。
FINALFINAL,PROXY處理前面規則都未匹配的請求。

網域規則的匹配值不含 https://、路徑、查詢參數或連接埠。例如目標網址為 https://login.example.com:443/account,DOMAIN 的值仍填 login.example.com。IP-CIDR 使用位址與遮罩長度,不填網址。GEOIP 判斷的是 IP 分類,不是網頁語言、網域後綴或服務營運方所在地。

三、PROXY、DIRECT、REJECT 各自會改變什麼

策略位於規則結尾。匹配只代表已選定處理動作,不保證目標一定連得上:PROXY 仍取決於選用的連線與遠端網路,DIRECT 仍取決於本機網路,而 REJECT 會刻意阻止連線。以下兩張設定卡用於拆解規則,並非需要同時匯入的完整設定檔。

依網域設定例外

DOMAIN
login.example.com,PROXY
DOMAIN-SUFFIX
ads.example.com,REJECT
DOMAIN-SUFFIX
example.com,DIRECT

精確例外和封鎖子網域的規則,應放在涵蓋整個網域的規則之前,避免先被較寬泛的條件匹配。

依位址設定範圍

IP-CIDR
192.168.50.0/24,DIRECT
GEOIP
CN,DIRECT
FINAL
PROXY

只有在確實需要直連該位址範圍時,才保留相應規則;其餘請求由 FINAL 處理。

同一個網域若同時用於登入和其他內容,廣泛使用 REJECT 可能連登入也一併阻擋。請先找出實際需要處理的目標,再縮小匹配範圍。不要直接把「頁面少了一部分」當成規則正確,也不要把所有失敗都歸咎於代理連線。

四、匹配順序:更精確的規則不會自動優先

規則清單從第一行開始往下檢查,最先匹配的規則決定這次請求採用的策略,後續規則不再參與此次判斷。DOMAIN 比 DOMAIN-SUFFIX 精確,但精確度不會自動改變規則順序;同樣地,REJECT 也沒有越過前方 DIRECT 規則的特殊優先權。

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

依照這個順序,連線至 login.example.com 時會先匹配第一行,因為它是 example.com 的子網域。第二行雖然更精確,但已沒有執行機會。若要讓登入網域使用 PROXY、其他子網域使用 DIRECT,請將前兩行對調:

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

結論:例外規則要放在涵蓋它的較大範圍之前

新增規則後,先檢查上方是否已有涵蓋相同目標的條件。若有,請調整規則順序或縮小上方規則的範圍,不要一再新增相同規則。

「具體規則在前」是整理規則的實用方法,真正生效的原則仍是先匹配者優先。例如特定 IP 必須使用 PROXY,就應放在可能涵蓋該 IP 的 GEOIP 直連規則之前。不要假設網域規則一定優先於位址規則,也不要認為某種策略天生比其他策略更強。

五、FINAL 為什麼必須放在最後

FINAL 不會再檢查特定網域或位址,而是接手處理前面都未匹配的請求。若將它放在清單中間,就等於從該位置起停止檢查其餘規則;即使下方仍有語法正確的 DOMAIN、IP-CIDR 或 GEOIP,也無法處理已被 FINAL 接手的請求。

[Rule]
DOMAIN,login.example.com,PROXY
DOMAIN-SUFFIX,ads.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.50.0/24,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

以下是用來理解規則順序的最簡範例,並非適用於所有網路環境的預設方案。example.com 及其子網域僅供示範;區域網路網段也必須替換為實際需要存取的範圍。若現有設定檔已包含 [Rule],請在原有區段整理規則,不要再次貼上同名區段。

  1. login.example.com 在第一行匹配 PROXY,不會繼續比對後續的網域後綴規則。
  2. ads.example.com 在第二行匹配 REJECT;其子網域也包含在此後綴範圍內。
  3. www.example.com 匹配第三行 DIRECT,前提是請求中有可供匹配的目標網域資訊。
  4. 目標位址 192.168.50.10 位於範例 /24 網段內;若前面的規則都未匹配,便由第四行處理。
  5. 其餘請求會繼續檢查 GEOIP;仍未匹配時,才使用 FINAL 指定的 PROXY。

FINAL 的策略必須自行選擇。FINAL,PROXY 代表將未分類的請求交由代理處理;FINAL,DIRECT 則代表未分類的請求直接連線。兩者沒有脫離網路需求後仍一概適用的正確答案。實際維護時,請保留一條明確的 FINAL,並讓它成為最後一條有效規則。

IP 類規則可能涉及網域解析,匹配結果也會受到實際目標 IP、DNS 回應及 GeoIP 資料影響。直接以 IP 位址連線時,可能沒有可供 DOMAIN 規則匹配的網域。因此,透過網域連線和直接連線至該 IP,不應視為完全相同的測試。

六、儲存與驗證:先確認設定生效,再檢查連線失敗

編輯前,請先備份目前可用的設定檔。驗證時一次只更動一個目標或一項順序,並保留修改前後的結果;避免同時調整 DNS、路由模式與規則清單,否則難以判斷是哪項變更造成影響。

  1. 確認正在編輯的檔案:進入 Config,確認目前使用的設定檔,再開啟其編輯入口。遠端設定檔與本機副本請分開辨認。
  2. 檢查規則區段:在 [Rule] 中修改,保留英文逗號;確認策略名稱拼寫正確,並將 FINAL 移至最後。
  3. 儲存並套用:完成編輯後儲存,確認該設定檔仍是目前使用的檔案;返回 Home,確認 Global Routing 設為 Config。
  4. 建立新連線:儲存後重新連線,再重新開啟測試頁面或 App,避免把既有長連線的行為誤認為新規則的結果。
  5. 檢查記錄:在請求或連線記錄中找到測試目標,查看可用的匹配規則、策略及目標位址資訊。先確認是否匹配預期規則,再檢查連線錯誤。
  6. 縮小問題範圍:若匹配 PROXY 後仍逾時,請檢查選用的連線及服務商狀態;若匹配 REJECT 後連線失敗,則是該策略預期的行為。

更新訂閱與更新設定檔是兩回事。連線訂閱通常用於更新服務商提供的連線資訊,不代表目前的 [Rule] 已經修改;更新遠端設定檔則可能取代檔案內容。若要長期保留自訂規則,請明確指定存放的設定檔,並在更新後再次確認。

不要只憑一次「可以開啟」就認定分流正確。同一個頁面可能連線至主網域、圖片網域和 API 網域,分別匹配不同規則。請逐一核對相關請求;排查時也不要公開含有認證資訊的訂閱連結或完整設定檔。

七、規則未生效時的常見問題

為什麼新增 REJECT,目標還是能開啟?

先檢查上方是否已有 DIRECT、PROXY 或 FINAL 涵蓋相同目標,再確認 Global Routing 設為 Config,且正在編輯的檔案就是目前生效的設定檔。接著重新建立連線,核對實際請求的網域;頁面使用的 API 網域可能與網址列中的網域不同。

FINAL 後面還能繼續新增規則嗎?

檔案中可以有後續文字,但 FINAL 已接手處理此前未匹配的請求,後面的普通規則就沒有機會處理這些請求。請將需要使用的規則移至 FINAL 上方,並移除多餘的 FINAL,以免維護時造成誤判。

開啟 On Demand,為什麼仍未依網域分流?

Settings → On Demand 管理自動連線條件,不會取代 Global Routing 的選擇。請返回 Home 確認目前為 Config 模式,再到 Config 確認使用中的設定檔;不要以自動連線開關取代路由設定。

訂閱更新成功,為什麼剛新增的規則看起來沒變?

先確認更新的是連線訂閱還是遠端設定檔。前者不能證明規則已更新;後者則可能覆寫本機修改。請開啟目前使用的設定檔檢查實際的 [Rule] 內容,再針對明確目標建立新連線進行驗證。

同一個網域昨天直連,今天卻匹配到其他規則?

先比對匹配記錄、實際目標 IP 與目前的設定檔。DNS 回傳位址改變,可能影響 IP-CIDR 或 GEOIP 的判斷;遠端設定檔更新也可能改變規則順序。若要穩定依網域處理,可將相應的 DOMAIN 或 DOMAIN-SUFFIX 規則放在相關位址規則之前。

取得 Shadowrocket 並繼續設定

iPhone / iPad 版在 App Store 一次性購買,價格為 $2.99;Mac(Apple 晶片 / Intel)、Windows、Android、Linux 版免費。iPhone / iPad 的系統需求以 App Store 頁面標示為準。前往下載頁選擇相應平台,再依照教學匯入現有設定檔與訂閱。

用戶端買斷 ≠ 連線方案。連線所需的訂閱請向服務商取得;本站提供用戶端取得方式與設定說明,不提供、不販售也不推薦節點或訂閱。

Shadowrocket 全平台下載