· 規則分流 · 約 8 分鐘

Shadowrocket 指定網站走代理設定:用規則讓特定網域經過代理

在 Global Routing 選擇 Config,以 DOMAIN-SUFFIX 指定代理網站,其餘流量交由 FINAL,DIRECT 直連,並說明如何確認分流是否生效。

本文重點

Shadowrocket(小火箭)只讓指定網站走代理,需同時符合三個條件:Global Routing 設為 Config、目前使用的設定檔包含目標網域的 PROXY 規則,並以 FINAL,DIRECT 處理其餘請求。本文適合已有服務商與可用連線資料的使用者,依序說明準備設定、加入規則及檢查命中記錄,並區分「規則未匹配」與「匹配後連線失敗」。

一、先選擇 Config,再檢查目前設定

規則設定正確卻未生效時,請先檢查 Home → Global Routing。本文要依網域決定流量去向,因此需選擇 Config。只修改 Config 中的檔案,卻讓 Global Routing 維持 Proxy,無法驗證「指定網站走代理、其他網站直連」的效果。

以下僅比較與本次操作直接相關的三種選項,並非 Global Routing 的完整選項清單。Config 決定使用設定檔中的規則;規則中的 PROXY 則決定將請求交由代理策略處理。兩者名稱相近,但並非同一項設定。

Config

建議

依目前生效設定檔中的規則處理請求。目標網域可走 PROXY,其他請求則可由 FINAL,DIRECT 直連。

適用情境:只讓明確列出的網域經過代理。

Proxy

將接管的請求交由代理處理,而非依本文的網域清單區分流量去向。暫時使用後,請切回 Config 再測試分流。

適用情境:暫時確認現有代理連線能否存取目標網站。

Direct

將接管的請求設為直連,不會因設定檔中有 PROXY 網域規則就自動改走代理。

適用情境:確認目標網站在目前網路下的直連狀況。

結論:先固定測試條件

開始修改前,記下目前的設定檔名稱、所選連線及 Global Routing 選項。之後每次只修改一項規則,否則無法判斷結果是由切換設定檔、更換連線還是規則本身所造成。

二、四個步驟建立最精簡的規則設定

先在 Home 確認已選取可用連線,再前往 Config 編輯設定。現有訂閱用於管理連線資料,並不代表已啟用本文所需的網域分流規則。請分別確認連線清單已更新,以及設定檔規則已修改。

  1. 備份設定檔

    前往 Config,記下目前選取的檔案,並透過可用的分享或匯出功能保留原始內容。修改現有設定檔時,尤其要保留原有的 DNS、Host 與策略設定,避免為了新增網域而覆寫整份檔案。

  2. 編輯規則

    在 Config 開啟準備使用的設定檔並進入編輯畫面,於既有的 [Rule] 區段中加入下方範例。若原檔案已包含此區段,請直接編輯原有區段,不要再新增第二個同名區段。

  3. 啟用設定檔

    儲存後返回 Config,確認選取的是剛才編輯的檔案,而非名稱相似的其他設定檔。僅儲存檔案,不代表已切換至該檔案。

  4. 選擇模式

    返回 Home → Global Routing → Config,確認 Home 中仍選取目標連線,再開啟或重新建立連線。接著以新的請求檢查規則結果,不要只憑已開啟的頁面判斷。

三、使用 DOMAIN-SUFFIX 列出代理網域

以下網域僅為語法範例,並非連線服務位址。請替換成實際需要存取的網站網域。規則中的網域不含 https://、連接埠或路徑;例如目標頁面位於 https://www.example.com/account,需要比對的是 www.example.com。

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

DOMAIN-SUFFIX,example.com,PROXY 會匹配 example.com 本身及其子網域,例如 www.example.com 和 api.example.com。這不是「網域中含有 example 就會匹配」,因此不會把 notexample.com 視為該網域的子網域。

2 條
範例中的 DOMAIN-SUFFIX 代理規則
1 條
放在規則末尾的 FINAL,DIRECT
3 項
網域規則依序填入類型、網域與策略

若只想讓某個主機名稱經過代理,而不包含該網域下的其他主機,請使用範圍較窄的 DOMAIN 規則。例如下方規則只匹配 api.example.com;存取 www.example.com 時不會命中這一行,而會繼續往下比對其他規則。

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

DOMAIN 與 DOMAIN-SUFFIX 無法區分同一網域下的網頁路徑。若希望同一網站的 /video 走代理、/news 直連,不能在 DOMAIN-SUFFIX 後方加上路徑來達成。請先確認需求是依網域區分,還是依頁面內容區分,再判斷是否適用本文方法。

四、檢查規則順序與 FINAL 的位置

規則會依序比對,命中後通常不會繼續比對後續規則。範圍較窄的例外規則應放在範圍較大的規則前面。FINAL 是處理其餘請求的兜底規則,不應放在待比對的網域規則之前,也不要把多份設定檔中的 FINAL 原封不動地堆在同一個規則區段。

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

此範例會讓 account.example.com 優先命中 DIRECT;同屬 example.com 的其他主機仍可命中後面的 PROXY 規則。若對調前兩行,範圍較大的 DOMAIN-SUFFIX 會先匹配,前述直連例外就無法如預期運作。

五、透過連線記錄確認分流結果

頁面能開啟,只能代表這次存取成功,無法證明流量採用了預期策略。請同時檢查目標主機名稱、命中的規則及實際策略。驗證時,先分別對目標網站及清單以外的網站送出新的請求,降低既有連線與頁面快取對判斷的影響。

  1. 確認 Home → Global Routing 仍設為 Config,Config 中仍選取剛修改的檔案,並確認連線已開啟。
  2. 重新存取目標網站,並在 App 內的連線記錄中尋找對應主機名稱,確認是否命中預期的 DOMAIN 或 DOMAIN-SUFFIX 規則,以及是否交由 PROXY 處理。
  3. 存取一個未列入代理清單的網站,確認相關請求是否由 FINAL 處理並交由 DIRECT。不要以同一網站的另一個子網域作為對照。
  4. 若有重新導向、登入或圖片載入問題,請分別檢查新增請求的主機名稱。將頁面主網域與其依賴的資源網域分開記錄,不要只看網址列。
觀察到的現象優先檢查項目下一步處理
目標請求命中 FINAL,DIRECT網域範圍與生效中的設定檢查記錄中的實際主機名稱,確認是否符合已設定的網域後綴。
目標命中 PROXY,但請求逾時所選連線與伺服器連線狀況維持規則不變,檢查現有連線資料與連線測試結果。
未列入清單的網站也走 PROXYGlobal Routing 與其他代理規則確認目前不是 Proxy,並檢查排序較前的規則或規則集引用。
網頁文字顯示,但圖片或登入失敗資源與驗證網域找出失敗請求的主機名稱,依實際需求補上範圍較窄的規則。

以上是用來判讀連線記錄的預期現象,並非適用於所有網路環境的測速結論。若記錄已顯示正確命中 PROXY,重複新增相同網域並無幫助;此時應改為檢查連線參數、伺服器狀態或目標網站的存取限制。

六、處理資源網域、DNS 與自動連線的影響

一個網頁可能同時向主站、登入介面、圖片網域及獨立的內容傳遞網域發出請求。為主站新增 DOMAIN-SUFFIX,不代表頁面所需的所有資源都使用相同網域後綴。請先從失敗記錄確認網域用途,再決定是否新增規則,避免為了修復單一資源而代理過大的公用網域範圍。

若排查時暫時調整了 On Demand,驗證完成後請還原原本需要的設定。不要以「連線開關一直開著」取代實際策略檢查;連線狀態只能說明流量接管是否已建立,規則記錄才能判斷個別請求的去向。

七、保留可還原的規則清單

驗證通過後,請保留一份可正常運作的設定檔,並記錄每個新增網域的用途。之後若某項功能失效,先確認它是否新增了請求網域,再進行小範圍調整。維護的目標是讓規則符合實際需求,而不是不斷擴大代理範圍。

Shadowrocket 是閉源商業 App,買斷用戶端 ≠ 線路方案。本文假設使用者已有自己的服務商與連線資料。App 主要供 iPhone、iPad 使用,Mac、Apple TV 與 Apple Vision 的相容性請查看 App Store 頁面;系統需求及購買適用性以 App Store 頁面標示為準,唯一取得管道是 App Store。

下載 Shadowrocket