Shadowrocket 只讓指定網站走代理:DOMAIN-SUFFIX 規則設定

使用 DOMAIN-SUFFIX、DOMAIN-KEYWORD 指定網站走 PROXY,其餘流量交由 FINAL,DIRECT,並透過 Config 模式確認規則是否生效。

本文重點

本文適合已在 Shadowrocket(小火箭)匯入自己的訂閱,並希望只有指定網站使用代理的使用者。重點是編輯目前生效的 Config,將需要代理的網域規則放在前面,最後以 FINAL,DIRECT 收尾,並在 Home → Global Routing 選擇 Config。以下說明匹配範圍、規則順序、儲存及驗證方式,不會更動使用者既有訂閱的來源。

一、先分清規則、策略與連線模式

「只讓指定網站走代理」包含兩個條件:目標網站符合指向 PROXY 的規則,其餘請求則使用 DIRECT。訂閱提供可用的伺服器資訊,Config 決定請求如何分流;只切換伺服器或更新訂閱,不會自動建立這套分流邏輯。開始前,請確認 Home 中已有可用伺服器,並先備份目前使用的設定。

本文使用內建策略 PROXY 與 DIRECT。PROXY 會將請求交由目前選取的代理處理,DIRECT 則直接連線至目標;若現有設定使用自訂策略群組,規則末尾也可填入該群組的正確名稱,但須先確認群組已定義且包含可用成員。第一次調整建議先採用下方的最簡結構,避免同時變更策略群組與匹配條件。

2 種策略
本文以 PROXY 與 DIRECT 分配請求
4 種模式
Global Routing:Proxy / Direct / Config / Scene
1 條兜底規則
將 FINAL,DIRECT 放在 Rule 清單最下方

Home → Global Routing 中的 Proxy 與 Direct 用於整體選擇代理或直連,無法用來確認本文所述的逐條分流結果。此處應使用 Config,依設定中的規則處理流量。Scene 用於切換情境,初次驗證時請固定使用 Config,減少情境條件造成的變化。Settings → On Demand 負責按需求建立連線,並非編輯網域規則的入口。

二、如何選用 DOMAIN-SUFFIX 與 DOMAIN-KEYWORD

網域規則匹配的是請求對應的主機名稱,不是完整網頁網址。以 https://www.example.com/account 為例,應填寫 example.com 或 www.example.com,不要將 https://、路徑 /account、查詢參數或連接埠一併填入網域欄位。規則使用半形逗號分隔,規則關鍵字維持英文。

規則寫法 匹配範圍 適用情況
DOMAIN,www.example.com,PROXY 只匹配 www.example.com 這個主機名稱。 只需要指定單一網站入口。
DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 及其子網域,例如 api.example.com。 同一根網域下的網頁與 API 一併使用代理。
DOMAIN-KEYWORD,example,PROXY 匹配主機名稱中含有 example 字串的請求。 確實需要跨網域關鍵字匹配,且能接受較大的匹配範圍。
FINAL,DIRECT 處理先前未符合任何規則的請求。 作為「其他流量直連」的最後一條規則。

DOMAIN-SUFFIX 依網域後綴邊界匹配:example.com 規則可涵蓋 img.example.com,但不會因字串相似而匹配 notexample.com。DOMAIN-KEYWORD 沒有後綴邊界限制,使用關鍵字 example 會擴大到其他含有該字串的主機名稱。因此,已知目標網域時,優先使用 DOMAIN 或 DOMAIN-SUFFIX,不要用短關鍵字猜測網站歸屬。

結論:先列出網域,再決定是否使用關鍵字

先用 DOMAIN-SUFFIX 涵蓋目標根網域;只有在記錄確認多個必要網域確實共用穩定關鍵字,且逐一列出不利於維護時,才加入 DOMAIN-KEYWORD。

三、最簡規則片段與由上而下的順序

以下片段表示 example.com、example.net 及其各自的子網域使用代理,其餘請求直連。[Rule] 是設定檔中的規則區段標記:以文字編輯方式貼上時只需使用一次;若透過規則清單逐項新增,請分別填寫規則類型、網域與策略,不必將區段標記填入任何一條規則。

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

規則通常依由上而下的順序匹配,最先符合的規則會決定該請求使用的策略。若將 FINAL 放在清單前面,後續目標規則就沒有機會處理請求。同樣地,若前面已有涵蓋目標網域的 DIRECT 規則或範圍較廣的規則集,新增的 PROXY 規則應放在這些規則之前,否則即使只修改清單末尾,也可能看不到效果。

若要讓某個子網域維持直連,請將較明確的例外規則放在範圍較廣的規則之前。以下片段中,status.example.com 使用 DIRECT,www.example.com 等其他子網域則使用 PROXY;不要將例外規則放在 DOMAIN-SUFFIX 之後,期待它覆蓋先前的匹配結果。

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

現有設定可能還包含 DNS、Host、策略群組及其他區段。上述程式碼只展示 Rule 部分,並非要求刪除整份設定後重新建立。編輯前請先複製一份現有設定,並確認是否已存在 [Rule],避免在原檔案末尾重複加入整個區段。

四、在 Config 中儲存並切換至規則模式

以下依 Home、Config、Settings 的介面結構說明。編輯時必須選取實際啟用的設定,而非同名的遠端設定副本。遠端設定更新時可能會覆蓋本機修改;若要長期保留規則,請將其寫入另存的本機副本,並在每次切換後確認目前選取的設定。

  1. 備份設定

    進入 Config,找到目前使用的設定並先保留副本。記下原本使用的設定名稱,以便驗證失敗時切回;不要直接覆寫唯一一份檔案。

  2. 編輯規則

    在 Config 中開啟該本機設定的編輯入口,進入 Rule。透過規則清單新增 DOMAIN-SUFFIX,網域欄位填入 example.com 對應的實際目標網域,策略選擇 PROXY;或者在文字編輯器中修改現有的 [Rule] 區段。

  3. 整理順序

    將指定網站的 PROXY 規則放在可能衝突的廣泛規則之前,並確認最後一條是 FINAL,DIRECT。儲存變更後,在 Config 清單中選取此設定,作為目前使用的設定。

  4. 選擇模式

    返回 Home → Global Routing → Config,並確認目前的代理選擇有效。若此處停留在 Proxy 或 Direct,就不能根據瀏覽結果判斷剛才編輯的網域規則是否生效。

  5. 重新測試

    啟用連線後重新開啟目標網頁;修改前已建立的連線可能仍沿用原本的路徑。必要時關閉網頁並重新建立連線,再分別測試一個目標網域與一個清單外網域。

更新訂閱是為了更新伺服器清單與參數,編輯 Config 則是調整請求路由,兩者是不同操作。若只是新增需要走代理的網站,通常不必重新匯入訂閱,也不必修改伺服器的連接埠、密碼、SNI 或 TLS 參數。首次匯入與連線步驟請參閱快速入門,模式差異請參閱代理模式說明。

五、透過連線記錄驗證,不只看網頁是否開啟

網頁成功開啟,不能單獨證明流量經過代理:有些網站直接連線也能存取。網頁無法開啟,也不代表規則一定沒有匹配,因為伺服器連線、DNS 解析或網站本身狀態都可能造成失敗。驗證時應在連線記錄或日誌中核對目標主機名稱、匹配規則與最終策略;各平台的記錄入口可能不同,但需要核對的資訊相同。

測試請求 預期匹配規則 預期策略
example.com 與 www.example.com DOMAIN-SUFFIX,example.com PROXY
status.example.com,已新增前文所述的例外規則 DOMAIN,status.example.com DIRECT
不在目標清單中,且未符合其他規則的網域 FINAL DIRECT

上表列出前述規則的預期結果,並非對範例網站連線狀況的實測。實際測試時,請換成自己需要的目標網域,並一次只變更一項條件。若記錄顯示目標已符合 PROXY,但仍連線失敗,應改為檢查目前伺服器及服務商提供的參數,而不是反覆擴大 DOMAIN-KEYWORD 的匹配範圍。

一個網頁通常會另外載入圖片、登入、驗證碼及 API 等網域。主頁符合 PROXY,不代表這些請求也會自動跟著使用代理。遇到「文字正常顯示但圖片載入失敗」或「首頁正常、登入一直轉圈」時,請重新執行相關操作,找出失敗請求對應的主機名稱,再將確實需要的網域加入清單。

六、逾時、解析失敗與常見問題

排查時先區分「未依規則路由」與「已依規則路由但連線失敗」。以下兩項是瀏覽器可能顯示的實際錯誤代碼,並非 Shadowrocket 固定顯示的提示文字;不同瀏覽器的呈現方式可能不同。請搭配連線記錄判斷原因,不能只憑錯誤代碼就認定伺服器或規則有問題。

錯誤:ERR_CONNECTION_TIMED_OUT

原因與解決方法:瀏覽器等待連線或回應逾時,可能與目標服務、目前網路或代理連線有關——先確認該請求最後使用 PROXY 還是 DIRECT;若已符合 PROXY,請測試目前伺服器的連線狀態;若未符合,則檢查生效中的設定與規則順序。

錯誤:ERR_NAME_NOT_RESOLVED

原因與解決方法:瀏覽器無法取得可用的網域解析結果——先確認網域拼字與 Config 中的 DNS 設定,並檢查瀏覽器是否另有 DNS 設定;不要用重複新增 DOMAIN-SUFFIX 取代 DNS 排查。

規則已新增,為什麼所有網站還是走代理?

先檢查 Home → Global Routing 是否停在 Proxy,並切換回 Config;再確認目前生效設定的最後一條是否仍為 FINAL,PROXY,以及前面是否有涵蓋範圍過廣的 PROXY 規則。儲存後重新建立連線,再查看一個清單外網域最後使用的策略。

為什麼新增主網域後,登入還是失敗?

登入流程可能會跳轉到另一個根網域,DOMAIN-SUFFIX,example.com 不會匹配 example.net。觸發登入後查看連線記錄,將必要的登入或 API 網域個別新增在 FINAL 之前;不要長期改用全域 Proxy。

可以只讓某個網頁路徑走代理嗎?

DOMAIN 與 DOMAIN-SUFFIX 匹配主機名稱,不會區分 /news 與 /account 等路徑。同一主機名稱下的 HTTPS 頁面,無法靠這兩種規則依路徑分流;若服務使用不同子網域,可分別以 DOMAIN 明確指定。

更新訂閱後,這些規則需要重寫嗎?

單純更新伺服器訂閱,通常不代表 Config 也會被替換。先到 Config 確認目前使用的設定及 Rule 是否仍在;若更新的是遠端設定,內容可能遭到取代,請改用保留自訂規則的本機副本,再返回 Home → Global Routing → Config 進行驗證。

最後依照固定順序檢查:目前 Config 正確、Global Routing 設為 Config、指定網域規則在前、FINAL,DIRECT 在後、目前伺服器可用,最後以新連線核對日誌。若要進一步了解其他規則類型,可參閱設定欄位參考;不要只因個別網站顯示異常,就直接新增整段 IP 規則。

取得 Shadowrocket 並完成首次設定

iPhone / iPad 版在 App Store 售價 $2.99,為一次性付費;Mac(Apple 晶片 / Intel)、Windows、Android、Linux 版免費。iPhone / iPad 的系統需求請以 App Store 頁面標示為準。前往下載頁選擇平台;已安裝應用程式的使用者,可依照教學匯入自己的訂閱,再設定 Config 規則。

下載 Shadowrocket