Shadowrocket 規則設定入門:DOMAIN-SUFFIX、GEOIP、FINAL 等關鍵字的比對方式

透過範例說明 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的比對對象、由上而下的生效順序與常見錯誤寫法。

本文速覽

本文適合已在 Shadowrocket(小火箭)設定好自己現有服務,並準備調整規則分流的使用者。請先確認 Global Routing 設為 Config,再區分網域規則與 IP 規則,最後透過命中記錄確認順序。文中的設定片段僅用於說明語法,不能取代完整設定,也不提供節點或訂閱。

先確認規則是否參與路由

規則決定某條連線採用哪種策略,不會建立可用的代理服務。即使已寫好 DOMAIN-SUFFIX,example.com,PROXY,仍須有可用的代理設定。本文以使用者已有自己的服務商與訂閱為前提,重點在檢查設定中的 [Rule] 區段。

在 Home → Global Routing 中,Proxy、Direct、Config、Scene 是不同的運作方式。Proxy 與 Direct 適合用於臨時比對測試;若要驗證目前設定中的規則,應選擇 Config。Scene 用來依情境切換路由行為,不能只因畫面顯示 Scene,就判定某份規則正在生效。

  1. 備份設定

    進入 Config,確認目前使用的設定檔,並先儲存一份副本。記下原本選取的 Global Routing,避免測試後無法還原。

  2. 選擇規則模式

    返回 Home → Global Routing → Config。接著確認 Config 中啟用的檔案,就是準備修改的那一份。

  3. 修改單一規則

    在 Config 中開啟該檔案的編輯功能,找到 [Rule],每次只新增或調整一條規則。保留其他既有設定區段。

  4. 儲存後驗證

    儲存設定、重新建立測試連線,並查看連線記錄中的目標、命中規則與採用的策略。如果仍沿用舊連線,請先關閉相關頁面再重新造訪。

網域規則:完整比對、後綴比對與子字串比對

常見規則依「類型、比對值、策略」書寫,欄位之間以英文逗號分隔。網域比對值只填主機名稱,不含 https://、路徑、查詢參數或連接埠。造訪 https://api.example.com:443/v1 時,網域規則處理的是 api.example.com,而不是整段網址。

關鍵字範例比對範圍
DOMAINDOMAIN,api.example.com,PROXY只比對 api.example.com,不包含其子網域。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,DIRECT比對 example.com 及其子網域,不比對 notexample.com。
DOMAIN-KEYWORDDOMAIN-KEYWORD,example,PROXY比對網域中包含 example 的目標,涵蓋範圍比後綴規則更廣。

DOMAIN-SUFFIX 通常不必在前面加點,也不必寫成 *.example.com。後綴比對已包含網域本身及其子網域。在一般後綴欄位中加入星號,無法建立預期的萬用字元運算式。

DOMAIN-KEYWORD 適用於確實需要子字串比對的情況,不能當作精確網域規則的簡寫。例如關鍵字 example 也可能比對到 example-news.test。若只要涵蓋某個網站及其子網域,優先使用 DOMAIN-SUFFIX;只處理單一主機時則使用 DOMAIN。

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

在上方範例中,api.example.com 使用 PROXY;www.example.com 使用 DIRECT;只有 example-news.test 會繼續命中關鍵字規則。這些保留網域僅供說明語法,不保證對應網頁可供存取。

IP-CIDR 與 GEOIP:比對位址,而非網址

IP-CIDR 依 IPv4 位址範圍比對。192.168.0.0/16 表示涵蓋從 192.168.0.0 到 192.168.255.255 的位址範圍。單一 IPv4 位址可用 /32 表示。這裡的前綴長度描述網路範圍,不是連接埠號碼。

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

片段中的 203.0.113.8 是文件範例位址,不是可用的服務位址。no-resolve 表示不要只為了比對這條 IP 規則而主動進行網域解析;這不代表整個 App 停止 DNS,也不代表所有經過此規則的要求都不需要解析。若目標位址已可取得,仍可進行位址比對。

寫法判斷依據注意事項
IP-CIDR,192.168.0.0/16,DIRECT目標 IPv4 位址是否落在該位址範圍內。不要在位址範圍欄位中填入網頁路徑或連接埠。
GEOIP,CN,DIRECT目標 IP 在所用地理資料庫中的歸屬地。不是依網頁內容、網域後綴或使用者所在地判斷。
FINAL,PROXY前面的規則都未命中。沒有比對值欄位,直接填入策略。

GEOIP 的結果取決於 IP 地理資料庫。網域可能因 CDN、DNS 回應或網路環境變動而對應不同位址,因此同一網域的 GEOIP 結果也可能改變。若目標必須固定採用某種策略,通常應在 GEOIP 前明確設定網域規則,而非只依賴位址歸屬。

由上而下比對,FINAL 放在最後

對本文介紹的常見規則而言,同一條連線會依規則排列順序逐一檢查;命中後便採用對應策略,不會繼續尋找「看起來更精確」的下一條。規則類型本身沒有自動優先順序;若將精確的 DOMAIN 寫在範圍較廣的 DOMAIN-SUFFIX 後面,可能永遠不會生效。

取得目標 依序檢查 命中第一條 採用策略 建立連線
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

DIRECT 表示直接連線至目標,不等於「略過所有系統網路條件」;PROXY 表示交由代理路徑處理,也不代表「連線一定成功」。若策略欄位填寫自訂策略群組名稱,該名稱必須與設定中既有的定義完全一致。本文僅使用 DIRECT 與 PROXY,避免引入未定義的群組名稱。

規則未生效時,分別檢查比對與連線

「網頁無法開啟」不能直接證明規則寫錯。先確認要求是否命中預期規則,再檢查該策略能否建立連線。若命中記錄已顯示 PROXY,但要求仍然失敗,應檢查既有代理服務及其連線參數;繼續新增同類網域規則,通常無法解決傳輸問題。

  1. 確認 Home → Global Routing → Config,且編輯的檔案與 Config 目前啟用的檔案相同。
  2. 使用同一個完整網址發出新要求,並記錄實際主機名稱。網頁跳轉、圖片與介面可能使用不同網域,應逐一檢查。
  3. 檢查命中行是否被更前面的 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或 FINAL 攔截。
  4. 若命中正確,暫時比較 Proxy 與 Direct 的存取結果;測試完成後還原為 Config。每次只變更一個條件。

以下錯誤識別碼來自 Apple 網路錯誤體系,僅在診斷資訊確實出現相應原文時使用。這些識別碼代表網路要求失敗的類別,不是 Shadowrocket 規則解析器的語法錯誤,也不能單憑錯誤碼判定問題所在環節。

錯誤:NSURLErrorDomain Code=-1001

原因與解決方法:要求未能在時限內完成。先確認命中規則與實際採用的策略,再以相同目標比較 Proxy、Direct,並檢查本機網路;不要直接把逾時視為 FINAL 寫錯。

錯誤:NSURLErrorDomain Code=-1003

原因與解決方法:系統找不到指定主機。先檢查要求中的網域拼寫與 DNS 解析結果,再確認 DOMAIN 欄位是否誤填網址路徑;新增 GEOIP 規則不能取代網域解析檢查。

常見文字錯誤還包括使用中文逗號、將 FINAL,PROXY 寫成三欄格式、把 https://example.com 填入 DOMAIN-SUFFIX,以及使用不存在的策略群組名稱。儲存前逐行核對欄位,不要一次取代整份設定。若設定由遠端來源維護,也應確認後續更新是否會覆蓋本機修改,並保留可還原的副本。

常見問題:修改一條規則後,如何確認結果

已設定 DOMAIN,為什麼子網域沒有生效?

DOMAIN 只比對完整主機名稱。若要同時涵蓋 example.com 和 api.example.com,請使用 DOMAIN-SUFFIX,example.com,DIRECT;若 api.example.com 需要採用例外策略,請將對應的 DOMAIN 規則放在前面。

只想處理 HTTPS,可以在網域後面加上 :443 嗎?

請勿在本文的網域規則欄位中加入 :443。DOMAIN 與 DOMAIN-SUFFIX 依主機名稱比對,不區分該主機使用 80 或 443 連接埠。請先用純網域規則驗證,再依實際需求查閱連接埠相關規則說明。

改用其他協定後,規則也要重寫嗎?

Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 描述的是代理連線方式,不是網域比對類型。若策略引用仍然有效,通常不必因協定變更而重寫 DOMAIN-SUFFIX;應另外確認對應服務的位址、連接埠與驗證參數。

更新現有訂閱後,就會自動取得正確規則嗎?

請勿混淆代理清單更新與 Config 規則更新。更新現有訂閱後,請返回 Config 檢查目前使用的檔案,再到 Home → Global Routing 確認已選擇 Config。是否包含規則、是否覆蓋本機內容,取決於匯入內容的類型與更新方式。

最終驗收應確認三項結果:要求的實際主機名稱正確、命中的規則行正確、採用的策略符合預期。接著再確認頁面與介面能否完成要求。如此即可分別處理「規則選擇錯誤」與「選取的路徑無法使用」,避免反覆切換碰運氣。

正版確認與入門

Shadowrocket 是 Apple 平台上的閉源商業 App,主要供 iPhone/iPad 使用,唯一取得管道為 App Store。請核對開發者 Shadow Launch Technology Limited 與 App ID 932747118;系統需求、相容性及購買適用範圍,請以 App Store 頁面標示為準。用戶端一次性買斷 ≠ 線路方案。本站不提供、不販售、不推薦節點或訂閱。

前往正版核對頁 查看教學
正版確認與下載