設定 Shadowrocket(小火箭)規則時,應先確認比對對象,再檢查排列順序,最後核對命中後採用的策略。本文適合已備有自己的服務商設定或訂閱,並準備修改 Config 的使用者。閱讀後可分辨網域規則與 IP 規則、撰寫最基本的規則段,並從連線紀錄找出「規則未生效」的原因。本網站不提供、不銷售,也不推薦節點或訂閱。
規則格式:類型、比對值與策略
常見規則以英文逗號分隔,例如 DOMAIN-SUFFIX,example.com,DIRECT。第一欄決定檢查項目,第二欄是比對條件,第三欄則指定命中後如何處理連線。規則並非網頁 URL 篩選器:網域欄位不填 https://、路徑、查詢參數或連接埠。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,tracker,REJECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
以下是語法說明範例,並非適用於所有網路的完整設定。[Rule] 是規則區段;修改現有設定時,應編輯原有區段,不要重複新增。example.com 與 192.0.2.0/24 是文件中的範例值,不能用來確認實際服務是否可連線。
DIRECT:直接連線至目標,仍會受到目前網路環境影響。PROXY:交由代理策略處理;使用前請確認目前設定中的策略引用,以及 Home 上可選用的項目。REJECT:拒絕符合條件的連線,不代表移除網頁中的特定元素。- 自訂策略名稱必須與設定中的定義一致;名稱拼錯和比對條件錯誤是兩種不同問題。
FINAL 沒有比對值,因此寫作 FINAL,PROXY,不能照三欄格式補成 FINAL,example.com,PROXY。範例中的 no-resolve 是 IP 規則的附加參數,不是第四種策略。
DOMAIN 系列:精確、後綴與包含比對
網域規則主要用來決定「這個名稱應採用哪種策略」。三種規則的差異在於比對範圍,而非優先順序。以下以同一個網域為例;表格中的「命中」表示符合比對條件,該規則是否實際生效,仍取決於前面是否已有規則先行命中。
| 規則範例 | 可比對 | 無法比對 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、www.example.com | notexample.com、example.com.other.test |
DOMAIN-KEYWORD,example,DIRECT | example.com、notexample.com | 網域中不含 example 的目標 |
DOMAIN-SUFFIX 會依網域標籤邊界比對,不是「結尾字元相同就算符合」。一般直接填入 example.com 即可,不必加上 *.。若只想處理 api.example.com,不希望影響其他子網域,使用 DOMAIN 會更容易確認比對範圍。
應用程式可能同時連線至主站、登入、圖片與 API 等多個網域。只替主站新增一條規則,不能據此推斷其他請求也會符合。請依連線紀錄逐項確認,不要一味擴大關鍵字範圍。
GEOIP 與 IP-CIDR:位址歸屬與位址範圍
GEOIP,CN,DIRECT 會依所使用的地理資料庫,檢查目標 IP 的地區歸屬。判斷依據不是網頁語言、網域後綴、使用者所在位置或服務商註冊地。網域可能解析至不同地區的位址,因此「中文網站一定會命中 CN」並不是可靠的排錯依據。
IP-CIDR 依 IPv4 位址與前綴長度判斷範圍。例如 192.0.2.0/24 涵蓋 192.0.2.0 至 192.0.2.255;192.0.2.8/32 則只比對單一位址。IPv6 位址範圍應使用相應的 IP-CIDR6,不要將 IPv6 位址填入 IPv4 範例。
IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
IP-CIDR,192.0.2.0/24,PROXY,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
上例將單一位址的例外規則放在較大的位址範圍之前:目標為 192.0.2.8 時,第一行已經命中,第二行不會再改變結果。若將兩行對調,範圍較廣的 /24 就會先套用至這個位址。
no-resolve表示不為該 IP 規則主動觸發網域解析;它不等於「關閉所有 DNS」。- 若請求本身以 IP 為目標,或比對時已有可用的目標 IP,仍可能命中帶有
no-resolve的規則。 - 如果只有網域名稱、尚無可用 IP,就不應期待這條規則為了比對而額外解析;請求可能會繼續檢查後續規則。
- 同一服務使用的位址可能變動。不要將單次解析取得的 IP 當成永遠不變的設定依據。
命中順序:具體例外在前,FINAL 在後
規則會依序檢查,第一條命中的規則就會決定該連線採用的策略,下方看起來「更精確」的規則不會覆蓋它。DOMAIN 不會自動排在 DOMAIN-SUFFIX 前面,IP-CIDR 也不會因為範圍較小而自動取得優先權。
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
依照此順序,login.example.com 會使用 DIRECT,img.example.com 會使用 PROXY,不符合前兩行條件的目標則交由 FINAL 處理。若將後綴規則移至第一行,登入網域也會先命中該規則,精確網域例外便不再生效。
建議先列出少數明確的例外,再加入範圍較廣的網域或位址規則,最後保留一條用途清楚的 FINAL。這種排列方式較容易維護,但不代表所有設定都必須依規則類型機械式分組。
在 Config 修改並驗證規則
測試前請先保留原有設定,並確認目前啟用的設定與正在編輯的檔案相同。訂閱中的伺服器項目更新,與 Config 中規則檔案的修改是兩回事;重新整理 Home 中已有的訂閱,不能取代對目前啟用規則的檢查。
-
保留原有設定
進入 Config,先保留可還原的設定副本,再開啟目標設定的編輯入口。找到
[Rule],確認要修改的是規則區段。 -
新增單條規則
先新增一條比對範圍明確的
DOMAIN規則,並放在可能先行命中的後綴或關鍵字規則之前。每次只修改一項條件,然後儲存。 -
啟用規則設定
在 Config 確認已選取剛儲存的設定,再前往 Home → Global Routing → Config。Proxy 與 Direct 是全域模式,不能用來驗證這裡逐條規則的分流結果。
-
建立新連線
重新開啟目標頁面或重新送出應用程式請求,並檢查連線紀錄中的目標、命中規則與策略。既有長連線可能會持續使用,不能只查看修改前已開啟的頁面。
-
確認命中結果
若紀錄顯示命中其他規則,先檢查該規則的位置;若已命中預期規則但仍連線失敗,再檢查對外連線。完成驗證後,再逐條新增其他條件。
Global Routing 中的 Scene 應配合場景設定,確認目前實際採用的策略;首次驗證時可明確切換至 Config,以減少變數。Settings → On Demand 用於設定依條件建立 VPN 連線的行為,不會改變 DOMAIN-SUFFIX 的比對範圍,也不能取代選擇啟用中的設定。
請以新連線的紀錄作為測試依據,不要只憑頁面是否能開啟來判斷。頁面快取可能讓失敗看起來像成功;背景 API 連線失敗時,主頁面也可能顯示正常,卻無法完成登入。
分開排查規則未生效與連線失敗
「命中哪條規則」和「命中後是否連得上」是兩個不同問題。以下列出網路連線中可能出現的錯誤原文範例,並非規則語法錯誤;確認命中的規則與策略後,才適合進一步檢查這些連線錯誤。
錯誤:Connection refused
原因與解決方式:連線端點拒絕了請求,常見原因是位址、連接埠或監聽服務不符。請先核對連線紀錄中實際連線的端點,再依自己的既有設定確認連接埠與服務狀態;修改 DOMAIN-SUFFIX 無法修正連接埠問題。
錯誤:Operation timed out
原因與解決方式:操作未能在期限內完成,可能與網路路徑、目標或代理連線有關。請先確認命中的策略,再分別檢查目標連線與既有代理連線;不能只憑這則錯誤就判定 GEOIP 資料或規則順序有問題。
設定了 DOMAIN,為什麼子網域沒有一起套用?
DOMAIN 只會比對填入的完整網域。若要同時涵蓋主網域及其子網域,請改用 DOMAIN-SUFFIX,example.com,DIRECT,並確認上方沒有其他規則先行命中。
FINAL 放在最前面會怎樣?
它會接管所有執行到該行的請求,後續規則將無法如預期生效。請將預設規則移至規則區段末尾,再建立新連線並檢查命中紀錄。
帶有 no-resolve 的 IP-CIDR 為什麼沒有命中?
先確認這次請求是否有可用的目標 IP,再檢查位址是否落在前綴範圍內。若只有網域名稱且沒有可用 IP,這條規則不會為了比對而主動解析;不要直接將未命中判定為前綴語法錯誤。
REJECT 已命中,為什麼頁面還有類似內容?
REJECT 拒絕的是符合條件的連線,不會依網頁內容分類。請先確認內容是否來自其他網域或本機快取;若同一網域也承載必要的 API,擴大拒絕範圍可能影響正常功能。
最後依序確認:啟用中的 Config、Global Routing 模式、請求目標、第一條命中的規則、最終策略,以及實際連線結果。關於關鍵字,可參閱規則關鍵字術語;涉及解析行為時,請參閱DNS 設定說明,避免混淆解析問題與規則範圍。