小火箭部分網站走代理:DOMAIN-SUFFIX 規則範例

以「預設直連、指定網站走代理」為例,逐行說明 DOMAIN-SUFFIX、DOMAIN-KEYWORD、IP-CIDR 與 FINAL 的排列順序,並附上可直接修改使用的 Config 片段。

本文摘要

本文適合已在 Shadowrocket(小火箭)中加入自有服務,並希望只讓指定網站使用代理的使用者。操作重點是將 Global Routing 設為 Config,並在目前使用的設定檔 [Rule] 中先加入指定網站規則,再以 FINAL,DIRECT 處理其餘連線。下文提供規則片段、編輯步驟與驗證方式,並說明網域、IP 與 DNS 的適用範圍。

一、先確認 Global Routing 設為 Config

連線開關與分流模式是兩回事:開啟連線只會讓流量進入系統 VPN 通道,不代表每條連線都會使用代理。若要達成「預設直連、指定網站走代理」,請在 Home → Global Routing 中選擇 Config,並確認目前啟用的是準備修改的設定檔。

本文假設已有可用的代理服務。規則中的 PROXY 是處理策略,不是伺服器位址,也不會自動建立可用服務;請先在 Home 選擇可用伺服器,並檢查目前設定是否包含會影響選擇的策略組。

設定項目用途本文的選擇方式
Proxy以全域代理模式處理連線,而非依照本文的網域白名單進行分流。不適用於驗證本文規則。
Direct以全域直連模式處理連線。即使加入指定網域規則,也不會自動改用代理。
Config依照目前啟用設定檔中的規則選擇處理策略。本文使用此選項。
Scene依照已設定的情境決定對應行為。請先固定使用 Config,避免同時變更情境與規則。

Settings → On Demand 用於管理按需連線條件,不負責指定特定網站使用 DIRECT 或 PROXY。排查時請分別確認「通道是否連線」與「連線符合哪條規則」,不要反覆切換 On Demand 來修正網域規則。

二、規則由上往下比對,FINAL 放在最後

在本文的基本規則情境中,連線符合前面的規則後,就會採用該規則指定的策略;後續規則不會再覆蓋結果。因此,應將明確的例外放在範圍較廣的規則之前,並將處理其餘連線的 FINAL 放在最後。

應用程式提出請求 系統通道 比對規則 選擇策略 建立對外連線

DOMAIN-SUFFIX 比對的是網域,而非完整網址。應填寫 example.com,而不是 https://example.com/video。同一網域下的不同路徑無法透過這條規則區分;/video、查詢參數與網頁標題也不是此規則的比對對象。

三、可修改使用的 Config 片段

以下只展示 [Rule] 區段,並非完整的服務設定。網域與網段僅用於說明語法;其中 203.0.113.0/24 是文件示範網段,不應用來測試實際服務。實際使用時,請替換為需要分流的真實網域或已確認的目標網段,並刪除不需要的行。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
DOMAIN-KEYWORD,example-media,PROXY
IP-CIDR,203.0.113.0/24,PROXY,no-resolve
FINAL,DIRECT

第一條規則為 api.example.com 保留直連例外;接下來的兩條後綴規則,會讓兩個指定網站及其子網域使用 PROXY。關鍵字規則僅用來示範寫法;若已知道完整網域,通常優先使用 DOMAIN 或 DOMAIN-SUFFIX,以減少誤判。最後的 IP 規則補充已知網段,FINAL 則讓其他連線預設直連。

  1. 備份設定

    進入 Config,開啟目前啟用的設定檔,先保留原始檔案副本或匯出備份。遠端設定請另存為可編輯的本機副本,避免後續更新覆蓋本機修改。

  2. 編輯規則

    在 Config 中開啟該本機檔案的編輯功能,找到現有的 [Rule] 區段。將需要的規則合併至該區段,不要重複新增第二個 [Rule],並檢查原有 FINAL 的位置。

  3. 檢查策略

    確認 DIRECT、PROXY 拼寫正確;若保留原檔中的自訂策略組名稱,請確認對應群組仍然存在。本文片段以通用 PROXY 策略為例,不需要新增同名伺服器。

  4. 啟用設定

    儲存後,在 Config 中選取修改後的檔案,再前往 Home → Global Routing 選擇 Config。只儲存檔案但未啟用,不會改變目前連線使用的規則。

  5. 重新建立連線

    先關閉 Home 的連線開關,再重新開啟並重新載入網頁。既有的長連線可能仍沿用原本的出站路徑,請先關閉相關頁面或應用程式再測試。

若原設定中仍有 GEOIP,CN,DIRECT,該規則會依目標 IP 的地理資訊選擇 DIRECT,不會依網頁內容或網域後綴判斷。在本文預設直連的情境中,通常不需要這條規則;若要保留,請放在明確的網站代理規則之後、FINAL 之前,以免過早符合。

四、透過連線記錄驗證,不要只看網頁能否開啟

網頁能開啟,只能表示這次請求收到回應,無法證明使用了哪種策略。請搭配連線記錄中的目標網域、目標 IP、符合的規則與處理策略進行驗證。記錄入口與欄位顯示方式可能因介面而異,核對重點是同一條新連線的實際結果。

測試對象預期符合的規則預期策略
api.example.com最前面的 DOMAIN 例外規則DIRECT
www.example.comDOMAIN-SUFFIXPROXY
static.example.netDOMAIN-SUFFIXPROXY
未符合任何前置規則的實際網站FINALDIRECT

表格列出的是依規則推導的預期結果,並非測試這些示範網域是否連線正常。實際驗證時,請使用已替換至設定中的真實網站。每次只修改一條規則,重新建立連線後記錄結果,才能分辨問題出在規則順序、設定未啟用,還是服務本身無法連線。

五、分別排查逾時與解析錯誤

規則選擇 PROXY 後,仍可能因 DNS、伺服器連線或目標服務狀態而失敗。以下列出系統網路錯誤中常見的原始標識;只有在實際記錄中看到相應內容時,才依此方向排查。這些錯誤不一定代表規則寫錯,也不能只憑錯誤碼判斷是哪一端發生故障。

NSURLErrorDomain Code=-1001

原因與處理方式:請求逾時,可能發生在連線或等待回應的階段。先確認該連線實際使用 DIRECT 還是 PROXY,再透過同一代理存取其他已知可用的目標,以區分單一網站問題與代理連線問題。

NSURLErrorDomain Code=-1003

原因與處理方式:找不到主機時,通常需要檢查網域與解析結果。先確認實際存取的網域拼寫正確,再檢查目前設定 [General] 中的 dns-server 設定;修改前請保留原值,不要以新增 FINAL 規則取代 DNS 排查。

網域規則代表「辨識到這個網域後要採用哪種策略」,並不保證所有 DNS 查詢都會經由同一代理。DNS 的來源、解析路徑與對外連線彼此相關,但屬於不同設定。對於帶有 no-resolve 的 IP-CIDR 規則,也不能假設每個網域請求都會先解析,再與該網段比對。

六、部分網站分流常見問題

只新增一條 DOMAIN-SUFFIX 就夠了嗎?

還要確認 Global Routing 設為 Config,以及目前設定檔最後的 FINAL 是否為 DIRECT。如果原檔保留 FINAL,PROXY,未符合規則的其他連線仍會使用 PROXY,無法達成本文所說的預設直連。

可以用 *.example.com 比對子網域嗎?

在 DOMAIN-SUFFIX 中直接填寫 example.com,不加星號、不加通訊協定前綴,也不帶路徑。這種寫法已涵蓋根網域及其子網域;若只想比對單一主機,請改用 DOMAIN。

為什麼更新後規則又恢復原狀?

先確認更新的是 Home 中的服務訂閱,還是 Config 中的遠端設定。重新取得遠端設定時,檔案內容可能會被覆蓋;請將自訂分流規則儲存在獨立的本機設定檔,並在更新後再次確認目前啟用的檔案。

改用 Hysteria2 或 WireGuard 時,需要重寫網域嗎?

協定決定代理連線方式,DOMAIN-SUFFIX 則負責比對目標,兩者屬於不同層級的設定。更換服務時,先確認新服務可用、規則引用的策略有效,再使用同一組網站重新測試;不必只因協定名稱改變就重寫網域。

指定網站使用代理後,其他應用程式也會受影響嗎?

本文依連線目標進行分流,不依應用程式名稱分流。其他應用程式只要連線至相同的符合網域,也可能使用 PROXY;同一應用程式若連線至未符合的網域,則會套用 FINAL,DIRECT。請依實際連線記錄判斷。

App Store 下載先核對正版資訊