設定自訂規則前,先確認 Global Routing 使用 Config,再依「具體例外在前、寬泛條件在後、FINAL 放最後」排列。本文適合已備妥服務商與連線資訊,並想調整 Shadowrocket(小火箭)分流方式的使用者;以下提供可核對的規則語法、編輯步驟與驗證方法,不提供任何服務入口。
先確認 Config,再檢查規則是否生效
規則內容正確,不代表目前連線正在使用這份規則。開始排查前,先前往 Home → Global Routing 查看目前模式,再到 Config 確認選取的設定檔。本文說明的是設定檔中 [Rule] 區段的順序比對,不是服務列表的排列順序,也不是延遲測試結果的排序。
Config
建議使用目前設定檔中的規則決定連線策略。本文的 DOMAIN-SUFFIX、IP-CIDR 與 FINAL 範例皆以此為前提驗證。
適用情境:編寫、驗證並長期使用自訂分流規則。
Proxy
以代理方式處理連線,不會依本文這組設定規則逐條選擇策略。短暫切換後恢復連線,只能表示需要繼續檢查分流路徑,不能直接證明某條規則有誤。
適用情境:短時間確認代理路徑是否可用。
Direct
以直接連線方式處理連線。此時修改設定檔中的 PROXY 規則,並不能有效驗證規則是否生效。
適用情境:確認目前網路的直接連線狀況。
Global Routing 也有 Scene,可依場景設定決定使用方式。若目前選擇 Scene,請先確認實際生效的場景;為了讓測試條件單純,驗證本文範例時可暫時切換至 Config,完成後再恢復原本的選項。Settings → On Demand 用來控制隨選連線,不能取代規則為目標連線選擇策略。
規則語法:規則類型、比對值與策略怎麼寫
多數常用規則依「規則類型、比對值、策略」的順序書寫,欄位之間以英文逗號分隔。FINAL 是例外:它沒有比對值,因此寫成 FINAL,DIRECT 或 FINAL,PROXY。請勿使用中文逗號,也不要把網址路徑或連接埠一併填入網域比對值。
| 規則類型 | 語法範例 | 比對範圍 |
|---|---|---|
DOMAIN | DOMAIN,api.example.com,PROXY | 只比對這個完整網域。 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,DIRECT | 比對 example.com 及其子網域,不比對 notexample.com。 |
IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 比對指定的 IPv4 網段;此例涵蓋 192.168.0.0 至 192.168.255.255。 |
GEOIP | GEOIP,CN,DIRECT | 依目標 IP 在地理資料庫中的歸屬比對,不依網頁語言或網域後綴判斷。 |
FINAL | FINAL,PROXY | 前面的規則都未比對成功時,採用此處指定的策略。 |
例如,目標網域是 api.example.com 時,DOMAIN 規則的比對值只填這個網域,不加上 https://、/login 或 :443。同一網域的 HTTPS 連線通常使用 TCP 443,但 DOMAIN-SUFFIX 本身不會檢查連接埠;若需要區分連接埠,不能只修改網域字串。
no-resolve 是 IP 類規則的選用參數,可避免只為了比對這條規則而觸發網域解析;它並不是關閉整個 App 的 DNS。若連線只有網域名稱,尚無可供比對的目標 IP,含此參數的規則可能不會命中。若需求是依網域判斷,應優先使用網域規則,不要預期 IP 規則一定能涵蓋。
由上而下比對:具體例外排在寬泛規則之前
在本文介紹的基本規則中,連線會依序尋找符合條件的項目,命中後便執行該項策略。規則不會因為「寫得更精確」就自動提前,也不會合併多條命中規則的策略。最常見的問題是:前面的規則已涵蓋整個網域後綴,後面的個別子網域例外便沒有機會執行。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,PROXY
以下是說明順序的 [Rule] 範例,並非包含所有連線參數的完整設定。網域皆為示範用途;連線參數仍須使用使用者已有的資訊。若原檔案已有 [Rule],請在原區段內編輯,不要再新增一組重複區段。
api.example.com先命中第一條規則,因此使用 PROXY;即使它也符合後面的網域後綴條件,策略也不會因此改成 DIRECT。blocked.example.com命中第二條規則,執行 REJECT;若將這條規則移到 DOMAIN-SUFFIX 後面,就無法發揮例外效果。www.example.com不符合前兩條規則,因此命中第三條,使用 DIRECT。- 目標為
192.168.1.20的連線可命中第四條;其他未符合前面條件的連線才會交由 FINAL 處理。
重點:先移動例外,再新增規則
若某個子網域沒有依預期分流,先檢查上方是否已有涵蓋整個網域後綴的規則;將具體例外移到寬泛條件之前,通常比重複新增同一條規則更有效。
同樣的原則也適用於 IP 網段。若只想讓某個目標 IP 使用不同策略,可將該位址對應的 /32 規則放在涵蓋它的 /24 或 /16 規則之前。GEOIP 這類寬泛條件通常排在具體網域與網段之後,避免提早接管原本應個別處理的連線。
PROXY、DIRECT、REJECT 與 FINAL 如何搭配
規則類型決定「比對什麼」,策略則決定「比對成功後如何處理」。PROXY 表示交由代理路徑處理,DIRECT 表示直接連線,REJECT 表示拒絕連線。PROXY 能否完成請求,仍取決於目前選用的代理及其連線狀態;規則命中不代表一定能連上遠端服務。
- PROXY
- 將符合條件的連線交由代理路徑處理。驗證時也要檢查 Home 中目前選用的服務,以及該服務的連線狀態。
- DIRECT
- 透過目前網路直接連線至目標。這不代表「自動選擇較快路線」,也不保證目前網路能連上該目標。
- REJECT
- 拒絕符合條件的連線。若規則套用於範圍過大的網域後綴或網段,相關頁面與資源都可能受到影響。
- FINAL
- 前面的規則都未命中時套用的最終規則。它本身不是代理服務,而是將剩餘連線交由指定策略處理。
FINAL,DIRECT 適用於「只有明確列出的目標交由代理,其餘直接連線」的規則設計;FINAL,PROXY 則適用於「明確列出的目標直接連線或拒絕,其餘交由代理」的設計。兩者沒有一體適用的標準答案,也不要只因某個網站暫時無法開啟就反覆切換預設策略。
此外,網頁可能會同時連線至多個網域:主頁、圖片、登入介面與媒體資源可能各自命中不同規則。為主網域設定 DIRECT,不代表頁面上的所有連線都會使用 DIRECT。請依實際請求的網域補上必要例外,不要將所有無法識別的目標一律設為 REJECT。
編輯與驗證:每次只變更一項條件
開始前,先保留目前設定檔的副本,並記下 Home → Global Routing 的原本選項。Config 中的訂閱設定、遠端設定與本機副本要分清楚:更新服務列表不等於更新規則,更新遠端設定也可能覆蓋直接修改原始檔案的內容。需要長期保留的個人調整,應放在自己能維護的設定檔副本中,並在每次更新後確認變更。
-
確認模式
前往 Home → Global Routing → Config,讓本次驗證使用設定檔規則;同時記下目前選用的代理,測試期間不要更換。
-
找到設定檔
前往 Config,確認目前選取的設定檔。先保留一份副本,再開啟該檔案的編輯功能;使用文字編輯器時,找到
[Rule],並確認現有 FINAL 的位置。 -
加入例外規則
將要測試的 DOMAIN 或 DOMAIN-SUFFIX 放在相關寬泛規則之前,並確保排在 FINAL 上方。每次只新增或調整一條,避免同時修改 DNS 與連線參數。
-
建立新連線
儲存後,確認仍選取這份設定檔,再返回 Home 重新建立連線。關閉目標頁面後重新開啟,讓測試請求建立新連線,不要以既有的持續連線作為判斷依據。
-
檢查結果
查看 App 內的連線記錄,確認實際請求的網域、目標位址與採用的策略。若結果不符,先找出它之前可能命中的規則,再決定是否修改比對值。
可用「目標、預期、實際、變更」四項記錄測試結果。例如:目標是自己的某個介面網域,預期為 PROXY,實際為 DIRECT,本次只將該 DOMAIN 規則移到 DOMAIN-SUFFIX 前面。如此便能分辨「規則未命中」與「已命中但連線失敗」,也方便驗證後還原暫時設定。
- 命中錯誤:實際策略與預期不同,請優先檢查 Global Routing、選取的設定檔與規則順序。
- 命中正確但連線失敗:已使用 PROXY 卻逾時,請繼續確認現有服務是否可用及協定參數,無須立即重寫整套規則。
- 部分資源載入失敗:主頁正常,但圖片或登入功能失敗時,請檢查失敗資源本身的網域,不要只查看網址列中的網域。
常見問題:規則未生效時先檢查什麼
已經寫好規則,為什麼所有連線還是走代理?
先前往 Home → Global Routing 確認目前不是 Proxy,再到 Config 確認選取的檔案。若已使用 Config,請檢查前面是否有範圍更廣的 PROXY 規則,以及 FINAL 是否不小心放在自訂規則之前。
DOMAIN-SUFFIX 需要加星號嗎?
要比對 example.com 及其子網域,請寫成 DOMAIN-SUFFIX,example.com,DIRECT,不要寫 *.example.com,也不要加上通訊協定前綴。若只想比對某個完整網域,請改用 DOMAIN。
IP-CIDR 加上 no-resolve 後,為什麼反而沒有命中?
先確認連線記錄中是否已有可供比對的目標 IP。no-resolve 不會為了這條規則主動解析網域;若需求原本就是依網域分流,應新增網域規則,不要假設此參數能補上位址資訊。
更新後自訂規則不見了,該怎麼辦?
先在 Config 檢查目前檔案是否被遠端內容取代,或是否已切換至另一份設定檔,再與保留的副本比對並還原。Home 中的服務訂閱更新與 Config 中的設定更新不是同一項操作,排查時請分別記錄。
可以用 FINAL,REJECT 取代逐條檢查嗎?
只有在明確採用允許清單,且已準備好維護所有必要目標時,才考慮這種設計。它會拒絕所有未被前面規則處理的連線;一般排查時,先保留原有的預設策略,並用具體 DOMAIN 例外進行驗證,以免一次封鎖大量資源。
完成驗證後,恢復暫時變更的模式、刪除測試規則,再確認 FINAL 仍位於最後。維護規則的重點不在項目數量,而是每個例外都有明確目標、每次更新都能確認差異,並能區分每個失敗連線是比對問題還是連線問題。