2026-08-21 · 規則分流 · 約 8 分鐘

Shadowrocket 規則設定教學:DOMAIN、DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINAL 匹配邏輯入門

認識六種規則關鍵字的匹配對象與範圍,掌握規則由上而下、命中即停止的順序,以及為何 FINAL 必須放在最後一行。

本文重點

Shadowrocket(小火箭)會先判斷請求是否符合規則條件,再決定交由哪種策略處理。本文適合已備妥自己的服務資料、準備編輯 Config 的使用者:先認識六種關鍵字,再依照「具體例外優先、寬泛匹配其次、FINAL 收尾」的順序排列規則,最後透過新連線確認結果。範例僅說明語法與匹配範圍,不提供服務資料。

1. 規則格式:匹配類型、匹配內容、處理策略

常見規則會寫在設定檔的 [Rule] 區段。除了 FINAL 等特殊形式外,每行通常由「關鍵字、匹配內容、策略」組成,欄位之間以英文逗號分隔。域名匹配內容只填主機名稱,不要加入通訊協定前綴、網頁路徑或連接埠。

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

這裡的 DIRECT 表示直接連線,PROXY 表示交由代理策略處理,REJECT 則表示拒絕符合條件的請求。規則只決定處理方式,不會建立伺服器,也不會補上認證資料。使用 PROXY 前,請先在 Home 確認已有的伺服器及其連線狀態;若使用自訂策略群組,規則末尾的名稱必須與設定中的定義相符。

6 種
本文介紹的規則關鍵字,並非所有支援的類型
3 個欄位
一般格式:關鍵字、匹配內容、策略
2 個欄位
兜底格式:FINAL、策略

重點:先正確設定匹配對象

只處理單一主機名稱時,先使用 DOMAIN;確實需要涵蓋整個域名及其子域名時,再改用範圍較大的 DOMAIN-SUFFIX,不要一開始就使用寬泛的關鍵字匹配。

2. DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 的適用範圍

這三種規則都用於匹配域名,但涵蓋範圍各不相同。DOMAIN 完整匹配主機名稱;DOMAIN-SUFFIX 匹配指定域名本身及其子域名;DOMAIN-KEYWORD 則檢查域名是否包含指定字串。這些規則不是網頁網址篩選器,無法透過 /video/ 這類路徑區分同一主機上的不同頁面。

規則範例會匹配不會匹配或需留意
DOMAIN,example.com,PROXYexample.com不包含 www.example.com
DOMAIN-SUFFIX,example.com,PROXYexample.com、www.example.com、a.b.example.com不匹配 notexample.com
DOMAIN-KEYWORD,example,PROXYexample.com、myexample.net可能涵蓋與目標網站無關的域名

例如,若要讓登入介面直接連線、同一域名下的其他請求走代理,可將 DOMAIN,account.example.com,DIRECT 放在 DOMAIN-SUFFIX,example.com,PROXY 前面。這裡仰賴的是規則排列順序,而非「完整域名天生優先級較高」。

3. GEOIP 與 IP-CIDR:依目標 IP 歸屬與位址範圍匹配

GEOIP 會依據地理資料庫中目標 IP 的歸屬進行匹配。例如,GEOIP,CN,DIRECT 表示將資料庫判定為歸屬 CN 的目標位址交由 DIRECT 處理。它不會依網頁使用的語文、域名後綴或伺服器營運者所在地判斷;資料庫記錄也不等於即時實際位置。

IP-CIDR 依 IPv4 位址範圍進行匹配。192.168.1.0/24 涵蓋 192.168.1.0 至 192.168.1.255,可用來說明規則範圍;但在實際區域網路中,哪些位址能指派給裝置,仍受網路設定限制。IPv6 位址範圍應使用 IP-CIDR6,不要將 IPv6 位址放進 IPv4 範例。

[Rule]
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

混用域名規則與 IP 規則時,應先列出明確的域名例外,再加入範圍較大的 IP 歸屬規則。這樣可避免目標因解析出的位址歸屬而提早套用其他策略。存取同一域名時,DNS 回傳的位址可能不同,因此 GEOIP 的判斷結果也可能隨目標位址改變。

4. 規則由上而下、命中即停止:為何 FINAL 要放最後

在一般線性規則清單中,請求會依排列順序逐條匹配;一旦符合某條規則,就採用該條指定的策略,不會繼續往下尋找「更精確」的規則。FINAL 不需要域名或位址條件,會接手此前未匹配的請求,因此必須放在規則清單末尾。

[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
  1. 存取 account.example.com:符合第一行,使用 DIRECT,後續的後綴規則不會再執行。
  2. 存取 images.example.com:第一行不符合,第二行符合,使用 PROXY。
  3. 存取目標位址 192.168.1.20:符合區域網路位址範圍,使用 DIRECT。
  4. 其他請求:先由 GEOIP 判斷;仍未符合任何規則時,最後使用 FINAL 指定的 DIRECT。

若將後綴規則放在完整域名例外之前,account.example.com 就會先套用 PROXY。若把 FINAL,DIRECT 放在最前面,後續規則便無法處理一般請求。若要「只代理指定網站」,可用域名規則列出目標,再以 FINAL,DIRECT 結尾;若要讓其他請求走代理,則需明確改成 FINAL,PROXY,兩者涵蓋範圍不同。

5. 在 Config 編輯規則,讓新連線套用設定

將規則寫入檔案,不代表該檔案已經生效。還要確認目前選用的設定檔,以及 Home 中的 Global Routing。若要依設定檔分流,請選擇 Config;Proxy 與 Direct 不適合用來逐條驗證本文的規則清單,Scene 則涉及情境選擇,不適合用於單純的基礎規則測試。

  1. 保留原始設定

    進入 Config,先備份目前檔案,或保留原始文字。確認要編輯的是目前正在使用的檔案,而不是另一份同名設定檔。

  2. 編輯規則區段

    在 Config 點選目標檔案,進入 Edit Plain Text,找到 [Rule]。將具體例外放在前面,只在末尾保留所需的 FINAL 兜底規則;檔案中的其他必要設定區段也請保留。

  3. 儲存並選用設定檔

    儲存修改並返回 Config,確認已選取剛編輯的檔案。遠端設定再次更新時,可能會覆蓋本機修改;測試前請保留自行新增的規則文字。

  4. 確認模式

    返回 Home → Global Routing → Config,並確認自己的代理伺服器狀態。訂閱更新只會更新已有的服務資料,不代表會替你編寫或啟用本機規則。

  5. 驗證新連線

    儲存後重新建立連線,再發出目標請求。檢查連線記錄中的目標主機、目標 IP 與實際採用的策略,不要只憑網頁是否開啟來判斷規則有沒有匹配。

驗證時一次只修改一個條件。例如,先讓單一完整域名使用 DIRECT,確認結果後再擴大為 DOMAIN-SUFFIX。瀏覽器快取、既有長連線及網站使用的其他資源域名,都可能影響觀察結果;重新發出請求時,必須確實建立網路連線,單靠快取頁面無法證明新規則已生效。

6. 規則未生效與網路錯誤:分開排查

「網頁無法開啟」不一定是規則語法錯誤。請先確認請求實際採用的策略,再檢查 DNS 與連線過程。以下列出的是 Apple 網路層可能回傳的英文錯誤訊息;App 或系統可能以本地化文字顯示,因此不一定每次都會在 Shadowrocket 中看到完全相同的提示。

錯誤:The request timed out.

原因與處理方式:請求未能在限定時間內完成,可能是目標無法連線,或所選伺服器的連線有問題;先檢查連線記錄中的 DIRECT 或 PROXY,再分別檢查對應的連線路徑,不要直接擴大規則範圍。

錯誤:A server with the specified hostname could not be found.

原因與處理方式:目標主機名稱解析失敗;先確認域名拼寫及目前設定中的 DNS,待解析恢復後,再檢查 GEOIP 或 IP-CIDR 是否取得匹配所需的目標位址。

觀察到的狀況優先檢查項目下一步
所有請求都使用相同策略Global Routing 是否設為 Config;FINAL 是否誤放在最前面修正模式或規則順序,再建立新連線
主站符合預期,但圖片不符合圖片請求是否使用了其他主機名稱依據連線記錄補上實際資源域名,不要盲目使用關鍵字
完整域名例外未能匹配前面是否已有範圍較廣的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD將具體例外移到範圍較廣的規則之前
域名請求未匹配 IP 規則目標 IP 是否可用;是否使用了 no-resolve分辨 DNS 解析問題與規則條件不符

重點:用一筆新請求確認三項資訊

每次修改後,記錄「目標主機、實際策略、對應規則順序」。確認請求確實進入預期策略後,再排查該連線路徑的問題;不要將連線失敗與規則未匹配混為一談。

App Store 正版查核