Shadowrocket 規則語法入門:DOMAIN-SUFFIX、GEOIP、IP-CIDR 與 FINAL 的比對方式

完整說明 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的比對對象與規則順序,並提供可直接參照的寫法範例。

本文重點

本文適合已在 Shadowrocket(小火箭)匯入自己的設定檔,並準備調整分流規則的使用者。請先確認 Global Routing 設為 Config,再區分網域條件與 IP 條件,最後依照「具體例外優先、較廣範圍其次、以 FINAL 收尾」排列規則。以下範例僅用於說明語法,不含可用的連線參數;測試時請替換成自己有權存取的目標。

先確認規則的生效條件

規則會決定連線採用哪種策略,不會建立伺服器,也不會決定伺服器本身是否可用。Home 用於選擇伺服器及管理連線,Config 用於管理設定檔,Settings 用於調整 App 設定。編輯檔案後,也要確認該檔案已設為目前使用的設定;只儲存尚未啟用的檔案,不會改變正在使用的規則。

在 Home → Global Routing 中選擇 Config,才能依目前設定套用本文討論的分流規則。Proxy 代表整體使用代理,Direct 代表整體直接連線;Scene 則須配合已設定的場景條件確認,不能只因選單中出現 Scene,就認定某份規則已生效。排查時先固定使用 Config,減少切換場景造成的變因。

6 種
本文介紹 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL
3 個欄位
一般條件規則包含類型、比對值與策略
1 條
最簡範例以一條 FINAL 處理前面未比對成功的連線

結論:先確認生效中的設定

測試前記下目前的設定名稱與 Global Routing 選項;若這兩項尚未確認,先不要新增規則,否則無法判斷結果變化是來自切換檔案,還是比對條件。

規則寫法與策略名稱

在設定文字的 [Rule] 區段中,一般條件規則通常以英文逗號分隔三個欄位:規則類型、比對值、策略。網域欄位不要填入完整網址:網域條件不包含 https://、路徑、查詢參數或連接埠。以下兩行分別表示「指定網域直接連線」及「其他連線使用代理」。

[Rule]
DOMAIN,example.com,DIRECT
FINAL,PROXY
欄位或策略說明確認事項
DOMAIN規則類型,依完整網域比對。不是協定類型,也不是伺服器名稱。
example.com該列使用的比對值。不能填入含路徑的網址。
DIRECT直接連線至目標。連線仍會受到目前網路、DNS 與目標可連線性的影響。
PROXY使用代理策略。確認 Home 中目前選取的預設伺服器。
REJECT拒絕符合條件的連線。符合規則後無法存取,可能正是預期結果。

若目前設定使用自訂策略群組名稱,規則末尾必須填入設定中實際存在的名稱。初次測試請先使用 DIRECT 與 PROXY,不要在同一次修改中同時新增策略群組、調整 DNS 並重新排列規則。本文範例僅為片段;若現有設定已包含 [Rule],請編輯原有區段,不要重複新增同名區段。

如何區分三種網域條件

DOMAIN 適合設定單一主機的例外;DOMAIN-SUFFIX 適用於某個網域及其子網域;DOMAIN-KEYWORD 則會比對網域是否包含指定字串。這三種條件比對的是網域資訊,不是網頁標題、頁面內容或 URL 路徑。

規則範例會比對不會比對
DOMAIN,example.com,DIRECTexample.comapi.example.com
DOMAIN-SUFFIX,example.com,DIRECTexample.com、api.example.comnotexample.com、example.com.test
DOMAIN-KEYWORD,example,DIRECTapi.example.com、notexample.com除 example.org 外,不含該字串的網域,例如 sample.test

使用 DOMAIN-SUFFIX 時直接填入 example.com,不必加上 *.。它會依網域邊界判斷後綴,而非單純比對字串結尾。相較之下,DOMAIN-KEYWORD,example,DIRECT 的比對範圍明顯較廣,可能涵蓋與目標網站無關的網域;若只想比對某個網站及其子網域,建議優先使用明確的後綴條件。

GEOIP 與 IP-CIDR 的比對方式

GEOIP 會依目標 IP 在地理資料庫中的歸屬進行判斷。例如,GEOIP,CN,DIRECT 表示將資料庫判定為 CN 的目標 IP 交由 DIRECT 處理。此條件不會依據網域後綴、網頁語言或公司註冊地判斷,也無法保證同一網域的所有解析結果都屬於同一地區。

IP-CIDR 則直接指定 IPv4 位址範圍。斜線後方是前綴長度:/32 代表單一 IPv4 位址,/24 則涵蓋 256 個位址。以下使用專供文件範例的位址區段說明語法,這些位址並非可用的服務位址。

IP-CIDR,192.0.2.7/32,DIRECT
IP-CIDR,198.51.100.0/24,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY

部分 IP 條件可使用 no-resolve,例如 IP-CIDR,192.0.2.0/24,DIRECT,no-resolve。這會避免僅為了評估該規則而觸發網域解析,並不代表全域停用 DNS;若當下沒有可用的目標 IP,就不能期待這條規則透過解析網域而符合。排查時請先保留原設定的相關選項,不要批次新增或刪除。

依序比對,FINAL 放在最後

本文提到的一般規則會依由上而下的順序檢查;符合某條規則後,就會採用該列的策略,不會因為後面出現「更精確」的條件而自動改用其他策略。因此,規則類型名稱不代表優先順序:DOMAIN 不會天然優先於排在它前面的 DOMAIN-SUFFIX。

[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
  1. 要求 api.example.com 時,第一行已符合,因此使用 PROXY。
  2. 要求 www.example.com 時,第一行不符合,第二行符合,因此使用 DIRECT。
  3. 目標 IP 為 192.0.2.8,且前面的網域規則都未符合時,範例中的網段規則即可符合。
  4. 其他連線會繼續比對 GEOIP;若仍未符合,則由 FINAL,PROXY 作為最後處理規則。

若交換前兩行,api.example.com 會先符合後綴規則,原本要保留的單一網域例外便會失效。同樣地,FINAL 是無條件的最後處理規則,應放在規則末尾;排在它後面的一般規則,無法改變已確定的結果。不要試圖新增第二條 FINAL 來修正前面的順序錯誤。

結論:先列例外,再列較廣範圍

若要讓某個子網域採用不同策略,請將它的 DOMAIN 條件放在相關 DOMAIN-SUFFIX 前面;儲存後分別測試該子網域與另一個一般子網域,確認兩者確實採用不同策略。

依照五個步驟修改並驗證

以下流程假設使用者已擁有自己的伺服器或訂閱,且能完成基本連線。規則檔案與 Home 中的伺服器列表用途不同:更新伺服器資訊,不代表正在編輯的規則檔案已切換;同樣地,調整分流也無法修復失效的連線憑證。

  1. 備份設定

    進入 Config,先保留目前設定的副本,並記下正在使用的檔案名稱。若使用遠端設定,請確認後續更新是否會覆蓋本機修改。

  2. 確認連線模式

    在 Home → Global Routing 選擇 Config,並確認 Config 中選取的正是待測試檔案;同時確認 Home 中選取的預設伺服器。

  3. 一次只改一項

    在 Config 中開啟目標設定的編輯功能,進入文字編輯器並找到 [Rule],只新增一條已知目標的 DOMAIN 規則,或只調整一處順序,然後儲存修改。

  4. 重新建立連線

    儲存後重新建立 VPN 連線,並讓測試 App 發出新的請求。既有的長時間連線可能仍沿用原本路徑;反覆重新整理同一頁面,不一定會建立新連線。

  5. 比對結果

    參照連線記錄中可查看的目標、策略與錯誤訊息,確認實際結果。Connectivity Test 可協助檢查基本連線能力,但無法單獨證明某個網站符合了哪條規則。

規則符合但無法存取時的排查方式

符合規則只代表選擇了某條連線路徑,不保證該路徑能成功連到目標。請先確認「策略是否選對」,再檢查「選定的路徑是否可用」。以下是連線診斷時可能出現的系統錯誤原文,並非規則解析器的固定錯誤訊息;出現位置與完整描述可能因連線類型而異。

錯誤:Connection refused

原因:目標或中間設備主動拒絕連線,可能是服務未在監聽或連接埠填寫錯誤;不能因此判定 DOMAIN 語法有誤。

處理方式:先確認記錄中的實際連線目標;若使用 PROXY,請檢查自己已有伺服器的位址與連接埠;若使用 DIRECT,請確認目標服務是否允許透過該連接埠存取。

錯誤:Operation timed out

原因:連線未能在等待期限內完成,可能是伺服器無法連線、目標沒有回應或網路丟棄資料所致;僅憑逾時無法判斷是哪條規則造成。

處理方式:先確認最後採用的策略,再透過相同網路測試基本連線能力;維持設定不變,逐項檢查,避免同時切換 DNS、伺服器與規則順序。

沒有錯誤訊息,但策略不如預期

測試完成後,請刪除臨時規則,或將其調整為明確需要的範圍,再儲存備份。最基本的排查記錄應包含目標網域、實際目標 IP、預期策略、實際策略及錯誤原文;透過這些資訊才能分辨是比對範圍、規則順序或網路連線能力所造成的問題。

App Store 正版查核