本文適用於已在 Shadowrocket(小火箭)設定連線,並需要調整分流行為的使用者。請先確認 Global Routing 設為 Config,再了解規則依序比對、首次命中即採用對應策略的原則;接著以特定網域例外、IP 網段和 FINAL 組成可檢查的規則清單。本文僅使用說明用位址,不提供連線服務;訂閱連結請向你的服務供應商取得。
1. 自訂規則優先順序:先命中的規則生效
使用設定檔分流時,[Rule] 中的規則會由上而下依序檢查。符合條件的規則一旦命中,請求就會採用該規則指定的策略,不會繼續往下尋找「更精確」或「位置更後面」的規則。因此,規則優先順序主要由排列位置決定,不會依網域長短或規則類型自動排序。
例如,DOMAIN-SUFFIX,example.com,PROXY 可比對 example.com 及其子網域。如果要讓其中的 files.example.com 例外直連,就應將 DOMAIN,files.example.com,DIRECT 放在這條後綴規則之前。若順序相反,後綴規則已涵蓋該子網域,後面的例外就沒有機會參與這筆請求的判斷。
- 先列出範圍較小的例外:單一網域、特定目標 IP 或明確需要封鎖的目標,應放在會涵蓋它們的大範圍規則之前。
- 再列出範圍較大的分類規則:網域後綴、IP 網段、地區分類等規則可處理其餘請求,但彼此的先後順序仍由實際位置決定。
- 將 FINAL 放在最後:它會接手未命中前面規則的請求,後面不應再排列預期要生效的一般規則。
2. Global Routing 與 PROXY、DIRECT、REJECT 的差異
先在 Home → Global Routing 確認目前的路由模式。Config 才是本文檢查目前設定檔規則的基準;Proxy 和 Direct 則是全域路由選項,不能用來判斷某條自訂規則是否命中。若使用 Scene,還要確認場景實際採用的設定,不能只根據設定檔編輯器中的規則推斷目前結果。
| 規則策略 | 命中後的處理方式 | 檢查重點 |
|---|---|---|
PROXY | 透過代理處理此請求的對外連線。 | 確認目前選用的代理;若設定使用策略群組,請再檢查群組內實際選用的對外連線。 |
DIRECT | 透過目前的網路直接連線至目標。 | 直連仍取決於本地網路、目標是否可連線及 DNS 解析結果,不代表一定能成功連線。 |
REJECT | 拒絕符合條件的請求。 | 目標相關功能可能因此無法載入,請先確認命中範圍,再擴大封鎖範圍。 |
檢查順序:先確認路由模式,再檢查規則
修改規則後若沒有作用,請先返回 Home 確認 Global Routing 設為 Config,再到 Config 確認選取的檔案就是剛才編輯的檔案;不要一開始就反覆切換代理,藉此判斷規則順序。
PROXY 是規則中的策略標記,Proxy 則是 Global Routing 的介面選項,兩者屬於不同層級。規則決定哪些請求應使用哪種對外連線;Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 等協定則決定相應連線的建立方式。調整規則順序不會修正協定參數中的連接埠、金鑰或認證錯誤。
3. DOMAIN-SUFFIX、GEOIP、IP-CIDR 與 FINAL 的寫法
常見規則的格式為「規則類型、比對內容、策略」。FINAL 不需要比對內容,因此只有規則關鍵字和策略兩部分。下表用於說明語法;其中 example.com 和 192.0.2.0/24 都是文件範例,不應視為實際服務位址。
| 規則範例 | 比對方式 | 順序注意事項 |
|---|---|---|
DOMAIN,files.example.com,DIRECT | 比對這個完整網域。 | 放在會涵蓋它的 DOMAIN-SUFFIX 規則之前。 |
DOMAIN-SUFFIX,example.com,PROXY | 比對該網域及其子網域,不是比對任意包含該字串的內容。 | 可接續處理前面單一網域例外以外的其他子網域。 |
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve | 比對範例中的 IPv4 網段;no-resolve 可避免為了這條 IP 規則主動進行網域解析。 | 這不會關閉整份設定的 DNS,也不會改變先前已知目標 IP 的比對條件。 |
GEOIP,CN,DIRECT | 依目標 IP 的地區資料庫分類進行比對。 | 不是依網域後綴判斷;比對結果取決於目標 IP 和資料庫。 |
FINAL,PROXY | 將前面未命中的請求交由 PROXY 處理。 | 放在規則清單的最後。 |
網域規則能否參與比對,也取決於該連線是否有可用的目標網域資訊。若直接請求 IP 位址,就不應預期它會自動命中某條 DOMAIN-SUFFIX。同樣地,一個網頁可能同時請求主站、圖片、認證介面和內容傳遞網域;主站命中直連,不代表頁面中的每筆連線都會採用相同策略。
4. 規則順序調整範例:子網域例外與 FINAL 兜底
假設需求如下:files.example.com 直連、ads.example.com 拒絕,其餘 example.com 網域走代理。以下兩張設定卡的規則內容相同,只調整排列位置。這個範例說明,寫了例外不代表例外一定會生效。
調整前:大範圍規則在前
- 第 1 條
DOMAIN-SUFFIX,example.com,PROXY- 第 2 條
DOMAIN,files.example.com,DIRECT- 第 3 條
DOMAIN,ads.example.com,REJECT- 第 4 條
FINAL,PROXY
兩個指定的子網域都會先命中第 1 條,後面的例外無法如預期生效。
調整後:明確例外在前
- 第 1 條
DOMAIN,files.example.com,DIRECT- 第 2 條
DOMAIN,ads.example.com,REJECT- 第 3 條
DOMAIN-SUFFIX,example.com,PROXY- 第 4 條
FINAL,PROXY
先處理單一網域例外,再處理整個網域範圍,最後處理其餘請求。
若還需要依網段和地區分流,可將規則整理成以下結構。這裡的 GEOIP,CN,DIRECT 僅用來說明地區規則的排列方式,不代表所有使用者都應採用此設定。實際策略應配合目前的網路環境和存取需求。
[Rule]
DOMAIN,files.example.com,DIRECT
DOMAIN,ads.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
在這個範例中,example.com 範圍內的網域會先由網域規則處理,不會因為解析出的位址被 GEOIP 歸類為 CN 就改走 DIRECT。對於未命中上述網域規則的其他請求,後面的 IP 規則才有機會參與判斷。這就是規則清單中的位置比「規則看起來更具體」更重要的原因。
調整原則:先列業務例外,再列分類規則
將必須直連或必須拒絕的特定目標,移到會涵蓋它們的規則之前;每次只移動一組相關規則,並保留末尾的 FINAL。這樣更容易說明每次行為變更的原因。
5. 從 Config 編輯到驗證新連線的操作順序
驗證規則時,應區分「編輯完成」、「目前設定檔已選取」和「新請求已採用新設定」這三個階段。瀏覽器或 App 可能重複使用既有連線,單純重新整理頁面不一定會建立新的對外連線。測試時也要分清楚:是規則判斷正確但連線失敗,還是請求根本沒有命中目標規則。
- 保留原始設定。在 Config 編輯前先儲存一份可還原的副本,並記錄目前選取的檔案。不要直接用整段範例取代現有設定中的其他內容。
- 檢查 [Rule]。找到需要調整的規則,確認前面是否已有相同網域、上層後綴、網段規則或提早出現的 FINAL。末尾只保留一條明確的兜底規則。
- 儲存並選取檔案。編輯完成後確認已儲存,再到 Config 確認實際選取的是這份設定,而不是名稱相似的其他檔案。
- 確認路由模式。返回
Home → Global Routing → Config。測試期間維持目前的代理選擇不變,避免同時變更對外連線和規則,造成判斷混淆。 - 重新建立連線。在不影響重要工作的情況下,先中斷連線再重新啟用,並重新發出目標請求。必要時先關閉目標 App,再重新開啟,以減少沿用舊連線的情況。
- 查看新請求記錄。在連線記錄或日誌中確認目標網域、目標 IP 和採用的策略;若記錄有提供命中規則資訊,也一併檢查。不要只憑網頁能否開啟來判斷規則是否生效。
本文的範例網域沒有提供實際測試服務。驗證時,請改用自己有權存取且能確認請求目標的位址,並記錄測試條件。例如,若出現「頁面文字能顯示、圖片卻一直載入」的情況,應檢查圖片實際請求的網域,而不是立刻將整個主站改用另一種策略。
6. FINAL 與自訂規則常見問題
FINAL 寫在第一行,為什麼下面的規則沒有效果?
FINAL 會接手所有到達該行、且尚未命中的請求。請先將它移到 [Rule] 末尾,再檢查前面的具體規則。不要在 FINAL 後面繼續新增預期要生效的網域例外,也不要用第二條 FINAL 嘗試覆蓋第一條。
已經寫了 DIRECT,為什麼網站還是打不開?
先確認新請求記錄實際採用的是不是 DIRECT;如果是,代表規則已完成直連判斷,接著請檢查目前網路能否連到目標、DNS 是否回傳合理位址,以及目標服務是否有回應。DIRECT 只指定連線路徑,不會修復網路或伺服器故障。
改成 FINAL,DIRECT 會影響所有既有規則嗎?
不會改變先前已命中的規則,但會改變其餘所有請求的預設對外連線方式。修改前先確認目前有哪些請求依賴這條兜底規則。如果只想讓某個網域直連,應新增一條位置較前的 DOMAIN 或 DOMAIN-SUFFIX 例外,而不是擴大整條兜底規則的影響範圍。
訂閱更新後,自訂規則會被覆蓋嗎?
請先區分 Home 中更新的連線訂閱,以及 Config 中更新的遠端設定檔。兩者並非同一項目;遠端設定檔更新可能會取代相應的設定內容。更新前請保留副本,更新後確認目前選取的檔案及 [Rule],不要預設本機修改一定會保留。訂閱連結請向你的服務供應商取得。
REJECT 後頁面有些按鈕不能使用,該怎麼檢查?
先查看點擊按鈕時新增的請求,確認是否有認證、介面或資源網域遭到拒絕。暫時停用可疑規則後重新測試;確認相依關係後,縮小 REJECT 範圍,或在它前面新增明確例外,避免直接放行所有請求。