本文速覽

本文適合已在 Shadowrocket(小火箭)中完成基本連線、希望縮小代理範圍的使用者。核心做法是將 Global Routing 設為 Config,在規則頂端加入指定網站的網域條件,並以 FINAL,DIRECT 接住所有未比對到的流量;完成後再透過暫時規則、請求現象與規則順序逐項驗證。

先確認 Config 如何處理單次請求

Shadowrocket 的規則分流只有在 Global Routing 採用 Config 時,才會依照 Config 中的 Rule 順序執行。若目前模式為 Proxy,流量會統一交給代理策略;若為 Direct,流量會直接連線;Scene 則依情境條件選擇模式。若要實現「只有部分網站走代理」,應先在 Home 檢查 Global Routing,並選擇 Config。

規則引擎採用由上而下、首次命中即停止的處理方式。請求命中第一條適用規則後,後續的 DOMAIN-SUFFIX、GEOIP 或 FINAL 不會再參與判斷。因此,範圍較窄的例外規則應放在範圍較廣的規則之前,兜底規則則必須放在最後。

應用程式發出請求進入系統通道讀取目標資訊依序比對規則選擇出站策略
1 次
首次命中後停止繼續比對
4 種模式
Global Routing:Config / Proxy / Direct / Scene
2 個層級
網域規則與目標 IP 規則
80 / 443
常見 HTTP 與 HTTPS 連接埠

規則比對的輸入不只有網域

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

這四類規則的涵蓋範圍並不相同。若只讓指定網站走代理,通常以 DOMAIN 或 DOMAIN-SUFFIX 為主;DOMAIN-KEYWORD 僅適用於網域結構不穩定、但具有明確固定片段的情況。GEOIP 依目標 IP 的地域資料庫分類,FINAL 則不檢查網域或位址,直接處理剩餘請求。

規則中的最後一項是策略。PROXY 表示交由代理策略處理,DIRECT 表示直接連線,REJECT 表示拒絕請求。若 Config 使用自訂策略群組名稱,規則末尾必須填寫 Config 中實際存在且拼寫完全一致的名稱。策略名稱不一致時,即使規則成功命中,也無法得到預期的出站結果。

規則關鍵字 比對對象 適用情境 注意事項
DOMAIN 完整網域 只處理單一明確主機名稱 不會自動包含其子網域
DOMAIN-SUFFIX 網域後綴 同時涵蓋主網域及其子網域 不要把範圍寫得過寬
DOMAIN-KEYWORD 網域中的字串 比對包含固定關鍵字的多個網域 可能誤判不相關網域
GEOIP 解析後的目標 IP 依位址所屬地域分類 結果取決於 IP 與本機資料庫的判斷
IP-CIDR IPv4 位址範圍 處理固定位址區段 位址變更後需要同步調整
FINAL 所有剩餘請求 定義預設出站路徑 必須放在規則末尾

同一網域的寬泛規則與精確規則

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

上例先將 static.example.com 指定為 DIRECT,再讓 example.com 及其其他子網域使用 PROXY。如果把第二行放在第一行之前,靜態網域會先命中 DOMAIN-SUFFIX,後面的 DOMAIN 例外便不會執行。

結論:先寫例外,再寫範圍,最後寫兜底

檢查規則順序時,可以依「完整網域 → 網域後綴 → 寬泛關鍵字 → IP 分類 → FINAL」整理;若實際需求需要不同順序,也必須確保較窄的條件位於會涵蓋它的寬泛條件之前。

可直接改寫的「指定網站走代理,其餘直連」Config

以下範例使用保留的示例網域,不對應實際服務。編輯前先複製目前的 Config 作為備份,然後進入 Config,開啟正在使用的本機設定並編輯 Rule 區段。若設定來自使用者自己的訂閱,後續更新可能覆蓋手動修改;較穩妥的做法是保留一份獨立的本機 Config,並清楚記錄自訂規則。

範例中的 PROXY 必須對應目前 Config 可用的代理策略。規則只決定請求交給哪個策略,不會改變既有設定採用的協議。無論現有連線使用 Shadowsocks、VMess、VLESS、Trojan、Hysteria2 或 WireGuard,DOMAIN-SUFFIX 的首次命中邏輯都相同。

[Rule]
DOMAIN,login.example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
DOMAIN-KEYWORD,media-example,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
  1. 替換完整網域:login.example.com 改成只需單獨處理的主機名稱。DOMAIN 必須填寫完整主機名稱,不要附加 https://、連接埠、斜線或頁面路徑。
  2. 替換網域後綴:example.net 改成目標網站的主網域。DOMAIN-SUFFIX 會涵蓋該網域本身及其下層子網域。
  3. 謹慎保留關鍵字:只有在確認多個目標網域共用唯一片段時,才使用 DOMAIN-KEYWORD。若沒有這項需求,可以刪除該行。
  4. 確認預設路徑:FINAL,DIRECT 是「其餘流量直連」的關鍵。若誤寫為 FINAL,PROXY,未命中的請求也會進入代理策略。
  5. 儲存並套用:返回 Config,確認剛編輯的設定處於選取狀態;再到 Home 將 Global Routing 切換為 Config,重新建立連線。

需要固定 IP 例外時

[Rule]
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT

192.0.2.0/24 是文件示例位址區段。no-resolve 表示該 IP 規則不會為了比對而額外觸發網域解析,適合目標已經以 IP 形式出現的情況。不要根據一次解析結果,就長期固定網站的位址區段,因為使用分散式網路的網站可能隨地區、時間與網路條件回傳不同位址。

如何驗證規則確實只影響指定網站

成功儲存不代表規則已依預期運作。驗證時應分別檢查「Config 是否啟用」、「目標網域是否完整」、「規則是否被更早的項目攔截」以及「網站是否呼叫其他網域」。一次只修改一個變數,才能判斷現象由哪條規則造成。

  1. 確認模式:在 Home 查看 Global Routing,確保目前為 Config,而不是 Proxy、Direct,或由 Scene 暫時切換出的其他模式。
  2. 確認設定:進入 Config,檢查含有新規則的本機設定是否處於選取狀態。編輯未啟用的副本不會改變目前流量。
  3. 先測試一般網站:開啟一個未寫入規則的網站。由於最後一行是 FINAL,DIRECT,它應繼續透過直接連線路徑處理。
  4. 再測試目標網站:開啟已寫入 DOMAIN-SUFFIX 的網站。如果首頁可以開啟,但圖片、登入或影片載入失敗,通常表示頁面還呼叫了其他網域。
  5. 補充相依網域:根據 Shadowrocket 中可觀察到的請求主機名稱,逐條加入確實需要的 DOMAIN 或 DOMAIN-SUFFIX,不要直接擴大成含義模糊的關鍵字。
  6. 重新測試例外:同時測試目標網站、一般網站與系統常用網路功能,確認新規則沒有放在 FINAL 之後,也沒有涵蓋無關網域。

用暫時的 REJECT 判斷網域是否命中

當無法確認某個網域是否真正參與頁面載入時,可以暫時將該網域的策略改為 REJECT。若對應資源立即停止載入,表示網域與規則位置有效;驗證結束後應立即恢復為 PROXY 或 DIRECT。此方法用於定位規則,不適合作為長期設定。

[Rule]
DOMAIN-SUFFIX,assets.example.net,REJECT
FINAL,DIRECT

錯誤:Failed to load config

原因與解法:常見原因包括 Rule 行缺少逗號、區段標題拼寫不完整,或策略欄位為空。回到 Config,檢查每一行是否維持「規則關鍵字,比對值,策略」結構,並確認 [Rule] 獨佔一行後重新載入。

錯誤:Policy not found

原因與解法:規則末尾填寫的策略名稱不存在於目前 Config 中,或大小寫與實際名稱不一致。檢查現有策略名稱並逐字替換,不要沿用其他設定中的自訂名稱。

常見偏差與進一步縮小範圍的方法

一個網站通常不只使用一個網域。主頁面、靜態資源、登入介面與媒體資源可能分別位於不同主機名稱下,因此只填寫主網域後出現「頁面框架開啟但內容缺失」,不代表 Shadowrocket 忽略規則,而是尚未涵蓋頁面依賴的其他請求。

另一方面,DOMAIN-KEYWORD 雖然方便,但涵蓋範圍很難單從字面準確判斷。例如關鍵字出現在多個無關網域中時,這些網域都會命中相同策略。長期設定應優先使用 DOMAIN 或 DOMAIN-SUFFIX,並將 DOMAIN-KEYWORD 作為經過驗證的補充。

已經寫了 DOMAIN-SUFFIX,為什麼整個網站仍無法完整載入?

先記錄失敗資源對應的主機名稱。若登入、圖片或媒體來自其他網域,需要分別補充 DOMAIN 或 DOMAIN-SUFFIX;不要把 URL 路徑寫進規則,因為網域規則不會比對路徑。

為什麼所有網站都進入了代理策略?

先在 Home 檢查 Global Routing 是否誤設為 Proxy,再檢查 Rule 最後一行是否為 FINAL,DIRECT。如果 FINAL 使用 PROXY,所有未提前命中的請求都會進入代理策略。

為什麼修改規則後沒有任何變化?

進入 Config,確認編輯的是目前選取的設定,然後返回 Home 選擇 Config 模式並重新建立連線。也要檢查目標規則是否位於 FINAL 之前,以及前面是否已有更寬泛的規則提前命中。

訂閱更新後手動規則消失,該怎麼辦?

訂閱內容更新時可能會重寫對應設定。修改前保留本機副本,並記錄自訂 Rule;更新後對照副本恢復必要項目。訂閱的有效性與內容應向使用者自己的服務商確認。

需要為 80 和 443 連接埠各寫一條網域規則嗎?

不需要。DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD 比對的是主機名稱,不會依連接埠拆分。同一網域使用 80、443 或其他連接埠時,仍由同一條網域規則決定策略。

穩定設定的檢查順序