Shadowrocket 分流規則設定:只讓指定網站走代理的 DOMAIN-SUFFIX 寫法

說明在 Global Routing 選擇 Config,如何搭配 DOMAIN-SUFFIX、DOMAIN-KEYWORD 與 FINAL、DIRECT,讓名單中的網站走 PROXY,其餘流量直連。

本文重點

本文適合已在 Shadowrocket(小火箭)設定好可用代理連線,並希望只代理指定網站的使用者。先確認 Global Routing 設為 Config,再將網域名單放在規則前段,最後以 FINAL,DIRECT 作為兜底。下文提供可併入現有設定檔的規則片段、儲存與啟用步驟,以及驗證方式,並說明如何區分規則未命中與代理連線失敗。

先確認 Config:名單分流的必要條件

「只讓指定網站走代理」包含兩個獨立條件:指定網域符合規則時使用 PROXY,其他請求預設使用 DIRECT。只新增網域規則還不夠;如果 Global Routing 目前設為 Proxy,請求會依全域代理模式處理,無法用來驗證這份名單的分流結果。

在 Home 開啟 Global Routing,選擇 Config;接著在 Config 確認目前使用的設定檔。Home 中選取的代理連線也必須可用。本文假設你已備妥自己的服務商與訂閱或連線參數,不涉及如何取得連線服務。

模式處理方式本文中的用途
Config依據目前設定檔中的規則決定連線策略。驗證名單分流的必要條件。
Proxy全域代理模式,不依本文的網域名單決定分流。可用來確認代理是否可用,測試後切回 Config。
Direct全域直連模式。用於直連對照,無法驗證 PROXY 規則。
Scene依據已設定的情境條件套用相應的路由設定。排除問題時,先明確切換至 Config,減少情境切換造成的干擾。

On Demand 負責依條件建立或恢復連線,不能取代網域規則。若測試期間連線自動變動,可在 Settings → On Demand 檢查現有條件,記下原設定後暫時改為手動控制連線;不要同時修改隨選連線、DNS 和規則,否則難以判斷是哪項變更造成影響。

最精簡規則:DOMAIN-SUFFIX 搭配 FINAL,DIRECT

以下是規則片段範例,並非包含所有連線參數的完整設定檔。example.com 是示範網域,不代表實際需要代理的網站。使用時請換成要分流的網站網域,並併入現有設定檔的 [Rule] 區段,不要用這段內容覆蓋整份檔案。

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

DOMAIN-SUFFIX,example.com,PROXY 會匹配 example.com 本身,以及 www.example.com、api.example.com 等子網域。此規則依網域層級匹配,不會因為 notexample.com 結尾也包含相同字母,就將其視為相同的網域後綴。

2 行
最精簡規則組合:一條網域匹配規則加一條最終策略
1 個後綴
example.com 同時涵蓋主網域及其子網域
最後一行
將 FINAL,DIRECT 放在所有待匹配規則之後

FINAL,DIRECT 表示前面的規則都未命中時採用直連。規則會依序檢查,由最先命中的規則決定策略。因此,若名單前方還有較寬泛的規則,或 FINAL 提前出現,請求可能根本不會執行到新增的那一行。

DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD 的差異

名單的精準度取決於匹配關鍵字。若網站的主網域及其子網域都需要代理,優先使用 DOMAIN-SUFFIX;只處理單一主機名稱時,使用 DOMAIN。DOMAIN-KEYWORD 會匹配網域中的字串,涵蓋範圍較廣,不適合直接取代網域後綴規則。

規則寫法匹配範圍適用情況
DOMAIN,api.example.com,PROXY只匹配 api.example.com,不包含其下層子網域。只代理一個明確的 API 網域。
DOMAIN-SUFFIX,example.com,PROXY匹配 example.com 及其子網域。以網站網域為單位維護名單。
DOMAIN-KEYWORD,example,PROXY匹配網域中含有 example 的請求,可能涵蓋不相關的網域。確實需要以關鍵字匹配,且能檢查誤匹配時使用。

規則中的網域不要包含 https://、連接埠、路徑或查詢參數。例如只填 example.com,不要填 https://example.com/account。這類網域分流規則無法依 HTTPS 網頁路徑區分同一主機上的不同頁面。

若要讓某個子網域直連,而同一主網域下的其他請求走代理,請將更精確的例外規則放在後綴規則之前。以下順序會讓 status.example.com 直連,其餘符合該後綴的網域則走代理。

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

儲存與啟用:每次只修改一組規則

先保留原設定檔的副本,再對本機設定檔進行最小幅度修改。遠端設定檔更新可能會覆蓋本機編輯內容;Home 中連線訂閱的更新,也和 Config 中設定檔的更新不同。排除問題時,請分別記錄目前的連線與設定檔,避免將連線清單變動誤認為規則已載入。

  1. 備份設定檔

    進入 Config,確認目前使用的設定檔並保留副本。先記下原有的 FINAL 策略與規則集引用,避免修改後無法還原。

  2. 編輯規則

    在 Config 開啟要使用的本機設定檔並進入編輯,將名單加入 [Rule] 區段。該區段只保留一個有效的最終兜底規則,並將 FINAL,DIRECT 放在名單之後。

  3. 儲存並選取

    儲存後返回 Config,確認選取的是剛修改的檔案,而非名稱相似的其他設定檔。若出現解析錯誤,先檢查英文逗號、關鍵字拼寫,以及每行欄位數量。

  4. 切換模式

    返回 Home → Global Routing → Config,並確認已選取可用的代理連線。必要時先中斷連線再重新連線,讓測試使用目前的設定。

  5. 重新測試

    關閉目標網頁後重新開啟,觸發新的連線,再檢查資料記錄中的網域、命中規則及實際策略。不要只觀察修改前已建立的長連線。

從其他設定檔複製規則時,也要檢查策略名稱是否存在。自訂群組名稱並非通用內建關鍵字;原檔案中名為某個群組的策略,在新檔案中不一定有對應定義。若目標只是實作本文的名單分流,請先用 PROXY 與 DIRECT 驗證,再考慮新增策略群組。

驗證分流:檢查命中規則,不只看網頁能否開啟

網頁能正常開啟,只能表示某條連線路徑可用,無法單憑此事確認流量是否經過代理。請在 Shadowrocket 的資料記錄中核對本次請求的網域、規則與出站策略;若未啟用記錄,先到 Settings 檢查資料記錄設定,再重新發出請求。只保留必要記錄,分享前移除網域以外的敏感資訊。

發出新請求 辨識目標網域 依序匹配 選擇出站策略 核對記錄

同一網頁可能會同時連線至主站、登入介面、靜態資源與媒體網域。主站命中 PROXY,但圖片請求命中 DIRECT,並不矛盾。若頁面文字正常,但圖片或登入失敗,請先找出失敗請求的實際網域,再決定是否加入名單;不要直接加入過短的 DOMAIN-KEYWORD 擴大匹配範圍。

GEOIP 依目標 IP 的地理資訊匹配,IP-CIDR 則依 IP 網段匹配,兩者都不是用來判斷網站所屬網域的方式。同一網站可能使用多個 IP,也可能與其他網站共用 IP。若要嚴格依名單分流,不要為了省事加入寬泛的 IP 代理規則,否則名單外的請求也可能走代理。直接連線至 IP 的請求,也不保證會命中網域規則。

連線失敗:先區分規則問題與出站問題

如果記錄已顯示命中 PROXY,但請求仍失敗,通常不必再調整 DOMAIN-SUFFIX。以下列出連線診斷中可能出現的底層錯誤片段;實際顯示文字取決於協定與失敗環節,不代表每次都會出現完全相同的完整訊息。

錯誤:connection refused

原因與處理方式:目標端或中間設備拒絕連線,並不代表網域規則未生效。先確認記錄中的實際出站策略,再核對現有連線的位址、連接埠與伺服器監聽狀態;連接埠應以自己的設定為準,不要因目標網頁使用 HTTPS 就將代理連接埠改為 443。

錯誤:i/o timeout

原因與處理方式:某個網路讀寫階段逾時,單憑這段文字無法判斷問題出在本機網路還是代理路徑。保持規則不變,分別透過 Wi-Fi 與行動網路發出新請求,並比較同一代理連線的測試結果。

錯誤:certificate has expired

原因與處理方式:TLS 驗證涉及的憑證可能已過有效期限,也可能是裝置時間設定錯誤。先檢查 iPhone 的設定 → 一般 → 日期與時間,再向自己的服務商確認憑證狀態;不要透過停用憑證驗證來掩蓋問題。

如果記錄顯示 DIRECT,但你預期應為 PROXY,請回到規則層檢查:目前使用的檔案是否正確、Global Routing 是否設為 Config、實際請求是否使用了其他網域,以及名單前方是否有更早命中的規則。依據這些線索修正,比反覆重寫整份設定檔更容易找出原因。

常見問題:新增網域、更新與還原

只想讓一個網站走代理,需要列出每個子網域嗎?

同一主網域通常只需一條 DOMAIN-SUFFIX。先填入主網域,再檢查資源請求;如果網站使用不同主網域的登入或資源服務,請依實際記錄分別新增,不要將整段 URL 填入規則。

新增規則後,所有網站仍然都走代理,該怎麼檢查?

先到 Home → Global Routing 確認已選擇 Config,再到 Config 核對目前使用的檔案。接著檢查是否仍有 FINAL,PROXY、其他範圍較廣的代理規則或代理規則集;嚴格名單模式下,名單外的請求最終應套用 FINAL,DIRECT。

更新自己的連線訂閱後,需要重寫名單嗎?

只更新 Home 中的連線清單,通常不必重寫 Config 內的網域規則,但應重新確認選取的連線。若更新的是遠端設定檔,本機編輯內容可能會被覆蓋;更新後請開啟目前使用的設定檔檢查 [Rule],再測試名單內外的請求。

修改後連線異常,如何還原原設定?

在 Config 重新選取先前保留的設定檔,再返回 Home 確認原有的 Global Routing 模式,然後重新連線。恢復正常後,請在副本中一次只新增一條規則;不要同時還原設定檔、更換代理連線並修改 DNS,以免失去排查線索。

完成後只需確認三項:Config 正在生效、名單內的請求命中預期規則、其他請求使用 DIRECT。若想進一步了解設定檔結構,請參閱本站技術參考;若要確認路由模式的差異,可查看代理模式說明。

App Store 下載先確認正版三項資訊