本文適合已在 Shadowrocket(小火箭)中完成基本連線、希望縮小代理範圍的使用者。核心做法是將 Global Routing 設為 Config,在規則頂端加入指定網站的網域條件,並以 FINAL,DIRECT 接住所有未比對到的流量;完成後再透過暫時規則、請求現象與規則順序逐項驗證。
先確認 Config 如何處理單次請求
Shadowrocket 的規則分流只有在 Global Routing 採用 Config 時,才會依照 Config 中的 Rule 順序執行。若目前模式為 Proxy,流量會統一交給代理策略;若為 Direct,流量會直接連線;Scene 則依情境條件選擇模式。若要實現「只有部分網站走代理」,應先在 Home 檢查 Global Routing,並選擇 Config。
規則引擎採用由上而下、首次命中即停止的處理方式。請求命中第一條適用規則後,後續的 DOMAIN-SUFFIX、GEOIP 或 FINAL 不會再參與判斷。因此,範圍較窄的例外規則應放在範圍較廣的規則之前,兜底規則則必須放在最後。
規則比對的輸入不只有網域
- 網域資訊:適用於 DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD。這些規則比對主機名稱,不比對 URL 的路徑、查詢參數或網頁標題。
- 目標 IP:適用於 IP-CIDR 與 GEOIP。網域完成解析後,目標位址可能繼續參與 IP 層級的規則判斷。
- 目標連接埠:DOMAIN-SUFFIX 只關注網域本身。網站使用常見的 80、443 或其他連接埠時,只要主機名稱符合,網域規則仍可命中。
- 最終兜底:FINAL 處理前面所有規則都未接住的流量,因此只能放在規則清單末尾。
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
- 替換完整網域:將
login.example.com改成只需單獨處理的主機名稱。DOMAIN 必須填寫完整主機名稱,不要附加https://、連接埠、斜線或頁面路徑。 - 替換網域後綴:將
example.net改成目標網站的主網域。DOMAIN-SUFFIX 會涵蓋該網域本身及其下層子網域。 - 謹慎保留關鍵字:只有在確認多個目標網域共用唯一片段時,才使用 DOMAIN-KEYWORD。若沒有這項需求,可以刪除該行。
- 確認預設路徑:
FINAL,DIRECT是「其餘流量直連」的關鍵。若誤寫為FINAL,PROXY,未命中的請求也會進入代理策略。 - 儲存並套用:返回 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 是否啟用」、「目標網域是否完整」、「規則是否被更早的項目攔截」以及「網站是否呼叫其他網域」。一次只修改一個變數,才能判斷現象由哪條規則造成。
- 確認模式:在 Home 查看 Global Routing,確保目前為 Config,而不是 Proxy、Direct,或由 Scene 暫時切換出的其他模式。
- 確認設定:進入 Config,檢查含有新規則的本機設定是否處於選取狀態。編輯未啟用的副本不會改變目前流量。
- 先測試一般網站:開啟一個未寫入規則的網站。由於最後一行是 FINAL,DIRECT,它應繼續透過直接連線路徑處理。
- 再測試目標網站:開啟已寫入 DOMAIN-SUFFIX 的網站。如果首頁可以開啟,但圖片、登入或影片載入失敗,通常表示頁面還呼叫了其他網域。
- 補充相依網域:根據 Shadowrocket 中可觀察到的請求主機名稱,逐條加入確實需要的 DOMAIN 或 DOMAIN-SUFFIX,不要直接擴大成含義模糊的關鍵字。
- 重新測試例外:同時測試目標網站、一般網站與系統常用網路功能,確認新規則沒有放在 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 或其他連接埠時,仍由同一條網域規則決定策略。
穩定設定的檢查順序
- 先確認 Home → Global Routing → Config。
- 再確認 Config 中選取的檔案就是剛才編輯的檔案。
- 將精確的 DOMAIN 放在寬泛的 DOMAIN-SUFFIX 前面。
- 將 DOMAIN-KEYWORD 控制在確有證據的最小範圍內。
- 需要 IP 規則時,再加入 IP-CIDR 或 GEOIP。
- 始終將 FINAL,DIRECT 留在最後一行。
- 修改後分別測試目標網站與未列入規則的一般網站。