Shadowrocket 規則設定入門:DOMAIN、DOMAIN-SUFFIX、GEOIP、FINAL 完整解析

認識 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的比對方式與順序,並了解 PROXY、DIRECT、REJECT 的搭配方法。

本文重點

本文適合已完成首次連線、準備編輯 Config 的使用者。先分清比對條件與執行策略,再透過六種規則了解由上而下的比對流程。範例僅用於說明語法,並非可直接取代現有設定的完整配置;若要使用代理連線,須先備妥自己的服務商、伺服器與訂閱。

一、先確認 Global Routing,再修改 Config

Shadowrocket(小火箭)的規則會回答兩個問題:連線符合哪些條件,以及符合條件後要採用哪種策略。規則不會建立伺服器,也無法讓無法使用的伺服器變得可用。開始修改前,請先確認 Home 中已選取可用伺服器,並完成基本連線測試。

Home 用來管理伺服器與連線狀態,Config 用來管理配置檔,Settings 則管理 App 設定。若要依配置規則分流,請在 Home → Global Routing 中選擇 Config。只編輯檔案而未啟用對應配置,無法據此判斷規則是否有效。

模式主要用途本文的檢查方式
Config依目前配置中的規則決定策略。測試規則時使用此模式。
Proxy以代理方式處理流量,而非依本文所述的網域規則逐條分流。可用來比較代理連線是否可用。
Direct以直連方式處理流量。無法用來驗證某條 PROXY 規則是否命中。
Scene依已設定的 Scene 決定路由行為。先檢查 Scene 設定;若要了解單一規則檔,請使用 Config。

On Demand 決定何時建立或中斷連線,無法取代網域與 IP 規則。若連線會自動恢復,請另外檢查 Settings → On Demand。不要將自動連線的情況誤認為是某條 DOMAIN 規則所觸發。

二、規則結構與比對順序

多數基本規則採用「類型、比對值、策略」的逗號分隔格式。規則放在配置的 [Rule] 區段中,通常會由上而下依序檢查。第一條符合條件的規則會決定該連線採用的策略,後續更精確的規則不會自動覆蓋它。

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

在這段範例中,login.example.com 會先符合第一行,採用 DIRECT。www.example.com 不符合第一行,接著符合第二行,採用 PROXY。其他未符合任何規則的連線則由 FINAL 處理。若將第二行移到第一行之前,登入網域也會先符合後綴規則。

連線進入 讀取目標 依序比對 決定策略 建立連線
6 種
本文介紹的基本規則類型
3 種
基本策略:PROXY / DIRECT / REJECT
32 位元
IPv4 位址長度,/32 代表單一位址

這些數字說明本文涵蓋的基礎概念,不代表 Shadowrocket 只支援六種規則。編輯時請使用半形逗號,每行撰寫一條規則;避免從富文字複製全形標點或隱藏字元。

三、DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD

網域規則比對連線所關聯的主機名稱,不會比對網頁路徑。請填入 example.com,不要填入包含通訊協定、連接埠與路徑的完整網址。即使某個詞出現在 URL 中,也不代表 DOMAIN-KEYWORD 會因網址路徑而命中。

寫法會比對不會比對
DOMAIN,example.com,DIRECTexample.comwww.example.com
DOMAIN-SUFFIX,example.com,PROXYexample.com、api.example.comnotexample.com
DOMAIN-KEYWORD,example,PROXY主機名稱中包含 example 的網域只有網頁路徑包含 example 的請求

DOMAIN:指定單一主機的精確例外

DOMAIN 適合用來調整單一主機,例如讓 login.example.com 直連,同時讓其他子網域繼續使用代理。它不會自動涵蓋該主機的下層網域。精確例外應放在涵蓋範圍較大的規則之前。

DOMAIN-SUFFIX:根網域及其子網域

DOMAIN-SUFFIX 適合依網域邊界管理一組主機。填入 example.com 即可,不必加上 *.。此規則會涵蓋根網域與子網域,但不會將 notexample.com 視為相同後綴。

DOMAIN-KEYWORD:主機名稱子字串

DOMAIN-KEYWORD 的比對範圍較廣,容易涵蓋預期之外的網域。除非確實需要依子字串比對,否則優先使用 DOMAIN 或 DOMAIN-SUFFIX。關鍵字規則若放在前面,後面的精確規則同樣不會取得優先權。

四、GEOIP 與 IP-CIDR:依目標 IP 判斷

IP 規則使用目標位址,而非網址文字。存取網域時,可能需要先取得 DNS 解析結果才能進行 IP 比對。解析結果變動、位址資料庫差異及 CDN 調度,都可能影響實際比對結果。

IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

GEOIP,CN,DIRECT 表示目標 IP 在使用的位址資料庫中歸屬 CN 時,採用 DIRECT。它只依據目標 IP 在位址資料庫中的歸屬,不會分析網頁內容或判斷業者所在地。中文網站可能使用不同地區的位址,同一個網域也可能解析出多個位址。

如果目標使用 IPv6,只有 IPv4 的 IP-CIDR 規則不足以涵蓋該連線,請另外檢查相應的 IPv6 規則與網路設定。不要因為 IPv4 範例正確,就認定所有位址類型都已處理。

五、PROXY、DIRECT、REJECT 與 FINAL 的搭配

比對類型與策略是兩個不同層次的概念。DOMAIN-SUFFIX 決定「比對哪些網域」,PROXY 則決定「命中後如何處理」。將規則最後一欄從 DIRECT 改為 PROXY,只會改變連線方式,不會擴大網域比對範圍。

策略執行方式檢查重點
PROXY交由代理連線處理。確認目前選用的伺服器或相關策略可正常使用。
DIRECT直接連線至目標。確認目前網路可直接存取目標。
REJECT拒絕符合條件的連線。確認拒絕範圍不會涵蓋必要的 API。

FINAL 是兜底規則,不含獨立的網域或 IP 比對值,格式為 FINAL,策略。請將它放在規則區段的最後。若將 FINAL 放在中間,後續規則便無法處理已由它兜底的連線。

[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

這段範例先處理明確例外,再處理較廣的範圍,最後設定兜底。ads.example.com 會遭拒絕;login.example.com 會直連;其他屬於 example.com 的網域則交由代理處理。即使這些網域解析至 CN 位址,也已由前面的網域規則決定策略,不會繼續比對 GEOIP。

六、在 Config 中儲存、啟用與驗證

修改前請保留目前可正常使用的配置副本。伺服器訂閱更新與規則檔更新是兩回事:Home 中的伺服器清單成功更新,不代表 Config 中的規則也已變更。由遠端維護的配置也可能在更新時覆蓋本機修改,編輯前請確認檔案來源。

  1. 確認基準狀態。在 Home 選取伺服器,開啟連線開關並執行 Connectivity Test。測試成功只代表相應的測試連線可用,不表示所有網站都能存取。
  2. 找到目前使用的配置。進入 Config,確認目前啟用的檔案。透過該檔案的編輯入口檢查 [Rule] 區段,保留其他配置區段,不要用本文片段取代整份檔案。
  3. 一次只修改一個變數。新增需要的 DOMAIN 或 DOMAIN-SUFFIX 規則,並放在相關的寬泛規則與 FINAL 之前,然後儲存。
  4. 確認生效條件。啟用修改後的配置,並在 Home → Global Routing 中選擇 Config。必要時請重新建立連線。
  5. 重新送出請求。關閉原有頁面或相關 App 的連線後再測試。既有的長連線可能沿用建立時的連線方式,無法代表新規則的結果。
  6. 記錄實際狀況。參考連線記錄或日誌,核對目標主機名稱、目標 IP 與採用的策略。若問題仍未改善,請還原上一份可用配置,再檢查 DNS 或連線路徑。

測試時也要區分連接埠與規則範圍。HTTPS 常用的目標連接埠是 443,但 DOMAIN,example.com,DIRECT 本身並未限制「只比對 443」。如果網頁正常,另一項使用不同連接埠的服務卻無法使用,請檢查服務是否正在監聽及網路是否連通,而非直接判定網域規則失效。

七、連線失敗時,先分清錯誤訊息與規則命中

錯誤訊息描述連線失敗的某個環節,無法直接證明某條規則寫錯。以下兩種是網路診斷時可能出現的錯誤文字,並非 Shadowrocket 專用的規則語法提示。請一併檢查失敗的目標與實際連線方式,判斷原因。

錯誤:Connection refused

原因:目標端或中間設備主動拒絕連線,也可能是該連接埠沒有服務在監聽。

處理方式:先確認連線失敗的目標是代理伺服器還是網站,再核對相應的位址與連接埠;確認規則命中後,檢查該連線路徑上的服務狀態。

錯誤:Operation timed out

原因:連線未能在等待時間內完成,可能與網路路徑、過濾或目標無法連線有關。

處理方式:先在 Home 執行 Connectivity Test,再分別檢查 DIRECT 與 PROXY 路徑;一次只調整一條目標規則,避免同時更換 DNS 與伺服器。

REJECT 的預期結果就是阻止連線。若必要資源遭到拒絕,請縮小拒絕規則的範圍,或將明確允許的精確例外放在它之前。反覆重試不會讓已命中的 REJECT 規則自動改用 PROXY。

八、規則設定常見問題

為什麼新增 DOMAIN 規則後,子網域還是沒有變化?

DOMAIN 只會比對填入的主機名稱。若要涵蓋根網域及其子網域,請改用 DOMAIN-SUFFIX,並確認該規則位於其他可能命中的規則之前。若只需為單一子網域設定例外,新增專用的 DOMAIN 規則即可。

規則寫在最後一行,為什麼一直沒有生效?

先確認它是否位於 FINAL 之後。請將具體規則移到 FINAL 之前,再檢查前面的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD 是否已經命中。規則並非依「越後面優先權越高」的方式覆蓋。

GEOIP 已設定 CN,為什麼這個網站還是走 PROXY?

先檢查前面是否已有網域規則指定 PROXY,再確認目標的實際解析位址及其在位址資料庫中的歸屬。GEOIP 依據 IP 位址資料庫判斷,而非網頁內容。若要固定某個已知網域的連線方式,可在前面新增明確的 DOMAIN 規則進行驗證。

訂閱更新成功,為什麼規則仍是舊的?

伺服器訂閱與 Config 檔案需要分開檢查。請先到 Config 確認目前啟用的檔案及其規則內容,再判斷是否需要更新對應的遠端配置。更新前請儲存本機修改,不要將訂閱更新誤當成規則更新。

瀏覽器可以正常使用,但 App 裡的圖片仍無法開啟,該怎麼辦?

檢查圖片請求實際使用的主機名稱,不要只測試主網站。重新送出請求後查看連線記錄,確認是否使用其他資源網域、不同的目標 IP,或有 API 遭到 REJECT,再為明確目標新增範圍最小的例外規則。

Shadowrocket 正版下載