Shadowrocket 規則語法教學:DOMAIN-SUFFIX、GEOIP、FINAL 等關鍵字的比對方式

逐一說明 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的比對對象與寫法,以及規則由上而下的比對順序。

本文重點

本文適合已在 Shadowrocket(小火箭)中備妥服務商設定,並需要看懂或調整分流規則的使用者。先區分網域與目標 IP,再掌握「符合的第一條規則生效,FINAL 放在最後」的順序,最後透過 Config、Global Routing 和連線記錄確認結果。範例僅說明規則語法,不提供連線服務;買斷用戶端不等於購買線路方案。

一、規則由比對條件與策略組成

規則用來決定連線採用哪種出站策略,不會建立可用的代理連線。常見格式為「規則關鍵字,比對內容,策略」,欄位之間使用英文逗號。FINAL 沒有比對內容,因此只有關鍵字與策略兩個欄位。在設定檔中,這些項目通常寫在 [Rule] 區段。

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

此處的 DIRECT 表示直接連線,PROXY 表示透過代理策略連線,REJECT 則用來拒絕連線。使用具名策略群組時,規則末尾也可以填入目前設定中實際存在的群組名稱。請勿直接套用其他設定中的群組名稱,否則可能引用無效策略。本文範例中的 example.com 僅供示範語法,並非服務入口。

發起連線 辨識目標 依序比對 決定策略 建立出站連線

若要讓這些規則參與一般分流,請在 Home → Global Routing 選擇 Config,並在 Config 確認目前使用的設定。Proxy 與 Direct 是兩種不同的整體路由模式,不能用來驗證同一套依網域分流的預期結果;Scene 則應依其情境條件另行確認。編輯檔案不代表目前連線已套用該檔案。

二、DOMAIN 系列比對網域,不比對網址路徑

先拆解網址來看:https://api.example.com:443/account 的主機名稱是 api.example.com,連接埠是 443,路徑是 /account。以下三種規則的比對內容應填寫網域或網域片段,不要加上 https://、連接埠或路徑。這些規則不會依據網頁標題或內文判斷連線去向。

關鍵字寫法範例比對範圍
DOMAINDOMAIN,api.example.com,PROXY僅完整網域 api.example.com
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXYexample.com 本身及其子網域
DOMAIN-KEYWORDDOMAIN-KEYWORD,example,PROXY網域中含有 example 的目標

DOMAIN:為單一主機設定例外

DOMAIN,api.example.com,PROXY 不會比對 www.example.com,也不會比對 v2.api.example.com。若只有登入介面、某個 API 或單一主機需要採用特殊策略,使用完整網域比對較容易控制範圍。網域資訊應以實際連線記錄為準,不要只憑瀏覽器網址列猜測所有資源的主機名稱。

DOMAIN-SUFFIX:涵蓋一個網域及其子網域

DOMAIN-SUFFIX,example.com,PROXY 可涵蓋 example.com、www.example.com 和 a.b.example.com,但不應比對 notexample.com 或 example.com.other.test。這裡指的是網域層級的後綴,而不是任意字串結尾。通常填入 example.com 即可,不必寫成 *.example.com。

DOMAIN-KEYWORD:比對範圍較廣,需留意誤判

DOMAIN-KEYWORD,example,PROXY 可能同時比對 example.com 和 myexample.test。這類規則適合確實需要依字串比對的情況;若只想涵蓋特定網域家族,優先使用 DOMAIN-SUFFIX。關鍵字太短會擴大影響範圍,也會讓後續排查更難定位。

三、GEOIP 與 IP-CIDR 比對目標 IP

網域規則判斷名稱,IP 規則判斷連線的目標位址。網域解析到哪個 IP,會受到 DNS 結果、網路環境與內容傳遞服務部署方式影響。因此,「網域屬於某個組織」與「目標 IP 在資料庫中歸屬某個地區」是兩種不同條件,不能互相取代。

GEOIP,CN,DIRECT
IP-CIDR,192.168.50.0/24,DIRECT
IP-CIDR,203.0.113.7/32,PROXY

若請求一開始以網域名稱出現,比對 IP 類規則時可能需要進行網域解析。部分 IP 類規則可加上 no-resolve,表示不要為了這條規則額外發起網域解析;這不等於關閉 DNS,也不保證所有網域請求都會符合該 IP 規則。初次設定時建議先不加此參數,等了解 DNS 與比對流程後再調整。

四、符合的第一條規則生效,FINAL 負責兜底

規則通常由上而下檢查,第一條符合條件的規則就會決定策略,不會繼續往下尋找「更精確」的項目。DOMAIN 不會天然優先於 DOMAIN-SUFFIX;若較寬泛的規則排在前面,後續的精確例外就沒有機會生效。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
目標條件最先符合的項目結果
login.example.comDOMAINDIRECT
img.example.comDOMAIN-SUFFIXPROXY
其他網域,且目標 IP 歸屬 CNGEOIPDIRECT
前面的條件皆不符合FINALDIRECT

FINAL,DIRECT 表示其餘連線直接出站;FINAL,PROXY 表示其餘連線交由代理策略處理。兩種寫法沒有優劣之分,只是預設行為不同。若目標是「只有列出的網站走代理」,前者較符合預期;若將 FINAL 放在第一行,後續項目就沒有比對機會。

五、在 Config 中修改並驗證規則

以下步驟以使用者已有可用的服務商設定為前提。規則用來選擇策略,代理連線是否成功還取決於服務參數與網路條件。修改前請先保留原設定的副本;若使用會被遠端更新覆寫的設定,應先確認本機修改的儲存位置與後續更新方式。

  1. 確認目前使用的設定

    進入 Config,確認目前選取的設定檔。透過該檔案的編輯入口查看 [Rule] 區段,請勿修改尚未啟用的副本。

  2. 新增精確規則

    先新增一條 DOMAIN,api.example.com,PROXY 格式的規則,再視需要擴大為 DOMAIN-SUFFIX。保留英文逗號,並確認策略名稱確實可用。

  3. 選擇 Config

    返回 Home → Global Routing → Config,確認連線開關已開啟。測試期間不要切換至 Proxy 或 Direct,否則驗證條件會改變。

  4. 建立新的連線

    儲存後重新連線,並重新開啟測試頁面或重新啟動測試 App,讓系統產生新請求。已建立的長連線不一定會因編輯規則而立即改用其他路由。

  5. 檢查連線記錄

    在連線記錄中確認目標網域、目標 IP 與所選策略;若目前記錄也顯示符合的規則,請一併確認。逐項比較實際結果與最先符合規則的預期結果。

驗證時一次只修改一個條件。先確認完整網域規則能成功比對,再改用後綴或新增 IP 範圍。網頁能開啟只是結果之一,不能單獨證明連線採用了預期策略;快取、本機連線與頁面所用的其他網域都可能影響判斷。

六、分辨規則未符合與連線失敗

排查分兩步進行:先確認連線選用了哪條策略,再判斷該策略的出站連線是否成功。以下列出 DNS 或網路診斷中常見的錯誤訊息,但不同介面不一定會以相同文字顯示。只有在實際記錄中看到這些資訊時,才依相應方向檢查。

錯誤:NXDOMAIN

原因與處理方式:DNS 查詢回覆網域不存在——請確認請求網域的拼字及目前的 DNS 回應;先解決名稱解析問題,再驗證 GEOIP 或需要目標 IP 的規則。修改 FINAL 不會讓不存在的網域取得有效位址。

錯誤:Connection refused

原因與處理方式:目標主動拒絕連線,可能是連接埠沒有服務監聽,或服務策略拒絕連線——先確認記錄中的策略與目標位址,再向自己的服務商確認伺服器位址、連接埠與協定參數;不能只憑這項錯誤就判定 DOMAIN-SUFFIX 寫錯。

若沒有錯誤訊息,但記錄顯示採用了非預期策略,請優先檢查四項:實際主機名稱是否不同、前面是否已有較寬泛的規則、目前選取的設定是否正確,以及 Global Routing 是否設為 Config。不要為了消除逾時一次加入大量寬泛規則,否則會失去比對依據。

七、常見規則問題

設定了 DOMAIN-SUFFIX,為什麼登入頁面仍然不正常?

重新登入並查看連線記錄。登入流程可能會跳轉至其他網域,或精確規則已被前面的項目覆蓋。先針對記錄中的實際主機新增 DOMAIN 規則進行測試,再決定是否擴大後綴範圍。

GEOIP,CN,DIRECT 可以取代所有網域規則嗎?

不行。它判斷的是目標 IP 在資料庫中的歸屬,不會判斷網站內容或用途。若要固定依網域選擇策略,請將相應的 DOMAIN 或 DOMAIN-SUFFIX 規則放在 GEOIP 之前。

訂閱更新後,為什麼規則看起來沒有變化?

連線資訊訂閱與 Config 中的規則檔案是不同項目。請先在 Config 檢查目前檔案的 [Rule] 內容,不要以 Home 中連線清單更新成功,當作規則已更新的依據。

開啟 On Demand 會自動修正规則嗎?

不會。Settings → On Demand 會依條件觸發連線,不會重新排列規則或選擇網域範圍。要檢查規則,仍須確認 Config 的內容,以及 Home → Global Routing 目前採用的路由模式。

將 FINAL 改成 PROXY,就能證明代理正常嗎?

不能。FINAL 只是為未符合其他規則的請求指定策略。請先確認連線確實採用 PROXY,再檢查自己的服務商設定與實際出站結果;測試結束後,請還原為符合日常需求的兜底策略。

前往 App Store