Shadowrocket 分流規則設定:指定網站走 PROXY 的配置方式

以 DOMAIN-SUFFIX、DOMAIN-KEYWORD 和 FINAL,DIRECT 為例,說明如何只讓指定網站走代理、其他流量直連,以及規則順序如何影響比對結果。

本文重點

本文適合已在 Shadowrocket(小火箭)匯入自己的伺服器設定,並希望只讓指定網站使用 PROXY 的使用者。操作重點是啟用 Global Routing → Config,在目前設定中先列出目標網域,再以 FINAL,DIRECT 處理其餘請求;完成後查看請求記錄,確認實際命中的規則,不要只憑連線圖示判斷分流結果。

一、先確認 Global Routing 與設定檔的分工

「只讓指定網站走 PROXY」是依規則分流,並非開啟連線開關就會自動完成。Home 中選取的伺服器提供代理出口,Config 中啟用的設定檔則決定哪些請求使用這個出口。本文以使用者已有自己的服務供應商與訂閱為前提,不涉及連線資源的取得。

在 Home 開啟 Global Routing,選擇 Config,再確認 Config 中目前啟用的設定檔。Proxy 會將可由此模式處理的流量交由代理,Direct 則直接連線;這兩種模式都不適合用來驗證本文的逐條規則。Scene 用來依情境選擇路由方式,初次排查時請先固定使用 Config,減少切換情境造成的變數。

請求進入隧道 讀取路由模式 逐條比對規則 決定出口策略 建立目標連線

PROXY 是規則中的策略名稱,Global Routing 中的 Proxy 則是路由模式,兩者不可混淆。DIRECT 表示直接連線至目標,並不代表請求未經過系統 VPN 隧道。狀態列出現 VPN 標示,只能表示隧道已連線,無法證明特定網站使用代理出口。

二、設定最精簡規則:指定網域 PROXY,其餘 DIRECT

編輯前請先備份目前的設定檔,保留可還原的副本。以下是規則結構範例,example.com 是說明用的示例網域,請替換成確實需要比對的網站網域。它不是訂閱網址,也不是伺服器位址。

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

每一行的欄位以英文逗號分隔。第一行的 DOMAIN-SUFFIX 會比對 example.com 本身及其子網域,例如 www.example.com 和 static.example.com,但不會比對 notexample.com。最後一行 FINAL,DIRECT 不再檢查網域條件,而是將先前未命中的請求交由 DIRECT 處理。

  1. 進入 Config,找到目前啟用的設定檔,先儲存備份或建立副本。
  2. 開啟該設定檔的編輯功能,找到 Rule 對應的規則內容;若使用文字編輯器,請搜尋 [Rule]。
  3. 將目標網域規則放在可能涵蓋該網域的廣泛規則之前,並將 FINAL,DIRECT 放在規則最末端。
  4. 儲存並啟用這份設定檔,返回 Home,再次確認 Global Routing 設為 Config。
  5. 重新發出測試請求;若仍看到舊連線的行為,請結束原有連線後再測試,必要時重新連線隧道。

不要將整段內容重複附加到設定檔末尾,以免出現多個 [Rule] 區段或多個 FINAL。也請確認 PROXY 指向的出口可正常使用;規則只決定流量去向,無法修復伺服器無法連線、認證資訊錯誤或伺服器端設定不一致等問題。

三、如何選擇 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD

只處理少數明確的網站時,建議先使用 DOMAIN-SUFFIX。它依網域邊界比對,比關鍵字搜尋更容易控制涵蓋範圍。若只要處理單一主機、不包含其其他子網域,可使用 DOMAIN 精確比對。

依網域邊界比對

關鍵字
DOMAIN-SUFFIX
完整規則
DOMAIN-SUFFIX,example.com,PROXY
命中範例
example.com、img.example.com
未命中範例
notexample.com

適合已知網站主網域,且需要涵蓋其子網域的情況。

依網域字串比對

關鍵字
DOMAIN-KEYWORD
完整規則
DOMAIN-KEYWORD,example,PROXY
命中範例
example.com、notexample.com
範圍風險
可能涵蓋不相關網站

關鍵字比對不會辨識品牌,必須查看請求記錄,確認實際涵蓋範圍。

DOMAIN-KEYWORD 會檢查網域中是否包含指定字串,不會搜尋完整 URL。例如 https://www.example.com/video?id=8 中的路徑 /video 和查詢參數 id=8 都不是此規則的比對對象。將 https://、路徑或頁面標題填入網域欄位,無法達成依網頁路徑分流的效果。

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

這組規則明確保留一個例外:login.example.com 直連,其他屬於 example.com 的網域則使用 PROXY。若同一份設定檔也加入了涵蓋範圍較廣的 DOMAIN-KEYWORD,請重新確認它是否也包含原本希望直連的網站。

四、規則順序:先處理例外,再處理一般條件

規則會依順序逐一檢查,請求命中後便採用相應策略,不會因後面出現更精確的條件而自動改判。因此,依「精確例外在前、範圍規則在後、FINAL 放最後」排列,會更容易維護。

排列方式請求網域預期結果
DOMAIN 精確例外排在 DOMAIN-SUFFIX 前 login.example.com 先命中例外,使用 DIRECT
DOMAIN-SUFFIX 排在精確例外前 login.example.com 先命中後綴規則,使用 PROXY
FINAL 排在目標網域規則前 www.example.com 先由 FINAL 處理,後續規則不會命中
只有目標後綴規則與末尾的 FINAL,DIRECT www.example.net 未符合目標後綴,最後使用 DIRECT

判斷方式:從第一條規則開始代入待測網域

遇到第一條符合的條件時,記下它所套用的策略;若已得出結果,請先調整該規則的位置或涵蓋範圍,不要繼續在清單末尾追加補救規則。

GEOIP 與 IP-CIDR 處理的條件不同於網域規則。GEOIP 依目標 IP 的地理資料庫判定結果比對,IP-CIDR 則依位址範圍比對;兩者都無法精確表示「某個網站品牌」。同一網站可能使用不同地區的位址,同一個位址也可能承載多個網站。

五、儲存後如何驗證,而非只看網頁能否開啟

網頁能順利開啟,只能表示請求有可用的連線路徑,不能證明出口正確。建議先用一個目標網域和一個非目標網域進行對照,再逐步增加子網域與例外網域。以下是驗收條件,不代表任何網路環境的測速結果。

  1. 在 Home 確認已選取可用伺服器、Global Routing 設為 Config,且連線已建立。
  2. 開啟目前的請求記錄或連線詳細資料,清除篩選條件,再重新瀏覽目標頁面,避免將舊記錄誤認為新的結果。
  3. 搜尋目標主機名稱,確認命中的規則與出口策略。目標網域應命中指定的 DOMAIN 或 DOMAIN-SUFFIX,並使用 PROXY。
  4. 瀏覽一個未列入規則的網域,確認由 FINAL,DIRECT 處理。若命中其他規則,請返回 Config 檢查前面的項目。
  5. 測試例外網域與目標子網域,最後再開啟完整頁面,確認圖片、登入與影片請求各自符合預期。

一個頁面不等於一個網域。頁面內容、靜態資源、登入介面與媒體內容可能來自不同主機。若首頁正常但圖片無法顯示,請先在請求記錄中找出失敗資源的實際網域,再決定是否新增規則;不要直接將涵蓋範圍過廣的短關鍵字加入設定。

六、常見問題:修改規則後仍不如預期

為什麼加入 FINAL,DIRECT 後,許多網站仍走 PROXY?

先在 Home → Global Routing 確認已選擇 Config,再查看請求命中的第一條規則。若前面仍有指向 PROXY 的 DOMAIN-KEYWORD、規則集或 IP 條件,請調整這些項目;FINAL 只會處理前面尚未處理的請求。

只想讓一個子網域走代理,如何避免涵蓋整個網站?

使用 DOMAIN,video.example.com,PROXY,並在末尾保留 FINAL,DIRECT。同時檢查並移除與目標衝突、涵蓋範圍較廣的後綴或關鍵字規則,再分別測試 video.example.com 與 www.example.com。

更新自己的訂閱後,為什麼出口或設定檔的行為改變了?

請先區分伺服器訂閱更新與遠端設定檔更新。前者可能改變可選伺服器,後者則可能修改 Rule。返回 Home 確認選取的伺服器,再到 Config 確認啟用的檔案與規則內容;請將本機修改保存在獨立副本中,並比較更新前後的差異。

必須關閉 On Demand 才能分流嗎?

不需要。Settings → On Demand 決定何時依條件建立連線,Config 中的 Rule 則決定連線建立後如何分流。排查時可暫時手動連線,固定測試條件;確認規則有效後,再恢復適合自身網路環境的 On Demand 設定。

維護時一次只修改一個變數:先確認出口可用,再確認模式,接著檢查啟用的檔案、比對條件與規則順序。為新增的網域規則記下原因,並保留一組固定的測試目標。發生異常時,就能還原最近一次變更,不必重寫整份設定檔。

App Store 正版入口 先核對開發者與應用程式 ID