本文適合已在 Shadowrocket(小火箭)匯入自有連線參數,並準備調整分流規則的使用者。請先確認 Home → Global Routing 設為 Config,再於目前生效設定檔的 [Rule] 區段安排精確例外、範圍規則與 FINAL。閱讀後可依命中記錄判斷問題出在規則順序、策略選擇或連線本身,不必反覆更換設定檔試錯。
一、先確認 Global Routing:規則何時會參與判斷
新增規則不代表它已參與連線處理。Shadowrocket 的 Home 用於管理連線與全域路由模式,Config 用於管理設定檔,Settings 用於調整 App 設定。要驗證本文介紹的自訂規則,請先在 Home → Global Routing 選擇 Config,並確認 Config 中選取的檔案就是剛才修改的檔案。
Config
建議依目前設定檔中的規則選擇策略。某項請求可能使用 PROXY、DIRECT 或 REJECT,不要把 Config 理解為固定的「其餘流量直連」。
適用情境:日常分流、自訂規則驗證
Proxy
將代理設為全域路由方向,不依本文所述的逐條規則分流。可短暫用來比對連線結果,但不能用來驗證某條 DOMAIN-SUFFIX 是否命中。
適用情境:比對代理連線是否可用
Direct
使用直連的全域路由方向。即使設定檔中有 PROXY 規則,也不能預期此模式會依設定檔分流。
適用情境:比對直連結果
Global Routing 中的 Scene 用於依情境選擇路由,不應與個別規則的策略欄位混為一談。排查時先固定使用 Config,可減少切換情境造成的變數。Settings → On Demand 控制是否依條件發起連線,不負責決定某個網域使用 PROXY 或 DIRECT;自動發起連線與建立連線後的流量分流是兩回事。
二、由上而下匹配:精確例外須排在範圍規則之前
規則清單不是「越精確就會自動優先」的集合,而是依序進行判斷。Shadowrocket 由上而下檢查,第一條符合條件的規則會決定策略,後續規則不會再為這次匹配補充或覆寫結果。只在下方新增更精確的規則,無法修正上方已經命中的結果。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在這段規則中,account.example.com 先命中 DOMAIN,因此使用 DIRECT;media.example.com 未命中第一行,接著命中 DOMAIN-SUFFIX,因此使用 PROXY。若將前兩條對調,範圍較大的後綴規則就會先命中,覆蓋 account 這項例外。此處的 example.com 僅用於說明語法,不代表可用的代理服務。
整理規則時,可依序檢查「必須封鎖的精確目標、必須保留的精確例外、較廣的網域範圍、IP 位址範圍、後備規則」,但這不是不可變動的範本。若某個網域必須優先直連,就應明確將該例外放在會涵蓋它的規則之前。真正需要確認的是規則之間的涵蓋關係,而非只依關鍵字名稱排序。
三、DOMAIN-SUFFIX、IP-CIDR 與 GEOIP 的寫法
網域規則會判斷請求的主機名稱,位址規則則會判斷目標 IP。兩者可能指向同一項服務,但採用的匹配依據不同。不要將網域填入 IP-CIDR,也不要把包含通訊協定、路徑與查詢參數的完整網址填入 DOMAIN-SUFFIX。
| 關鍵字 | 語法範例 | 判斷範圍與注意事項 |
|---|---|---|
DOMAIN | DOMAIN,account.example.com,DIRECT | 匹配完整網域;不會自動涵蓋其他子網域。 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 匹配 example.com 本身及其子網域;不需加入萬用字元星號。 |
IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 匹配 IPv4 網段;遮罩長度是位址範圍的一部分。 |
GEOIP | GEOIP,CN,DIRECT | 依目標 IP 的地理位置資料庫分類;不是依網頁語言或網域後綴分類。 |
FINAL | FINAL,PROXY | 不指定匹配目標;接收前面規則都未命中的請求。 |
192.168.0.0/16 表示從 192.168.0.0 到 192.168.255.255 的位址範圍,不是單一裝置。若只要匹配某一台 IPv4 裝置,可使用該位址對應的 /32 規則。區域網路直連規則可避免將符合條件的本機目標交由代理處理,但裝置是否可連線,仍取決於目前網路、系統權限及目標服務本身。
GEOIP 的判斷結果取決於實際目標位址與資料庫內容。以 .com 結尾的網域可能解析至不同地區的位址,同一網域在不同網路中也可能使用不同的內容傳遞位址。若需求是「讓這個網域固定使用某種策略」,請優先採用清楚明確的網域規則,不要以猜測 GEOIP 結果取代明確條件。
四、PROXY、DIRECT、REJECT 與 FINAL 的關係
關鍵字決定「匹配什麼」,策略欄位則決定「匹配後如何處理」。例如 DOMAIN-SUFFIX,example.com,PROXY 的前兩段用來設定匹配範圍,最後一段才決定處理方式。FINAL 則是特殊的後備匹配規則,不是第四種連線策略。
- PROXY:交由代理路徑處理。仍須具備使用者自己的有效連線參數,以及可用的代理選項;規則本身不會建立服務。
- DIRECT:直接連線至目標。這不代表「優先直連,失敗後自動改用代理」;即使連線失敗,也不會因此繼續匹配下一條規則。
- REJECT:拒絕符合規則的請求。適合明確需要封鎖的目標;若誤用於登入、驗證或資源網域,可能導致頁面功能不完整。
- FINAL:為未命中其他規則的請求指定策略,例如
FINAL,DIRECT或FINAL,PROXY。
FINAL 應放在規則清單末尾,因為它沒有網域或位址條件,會接收一路匹配至此的其餘請求。若將它放在最上方,後面的具體規則就沒有匹配機會。一般規則清單保留一條明確的 FINAL 即可,不要堆疊多條 FINAL 來嘗試實現故障轉移。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
上例示範一組教學用的判斷流程:拒絕指定主機、保留登入例外、將其餘 example.com 請求交由代理處理,再判斷區域網路與 GEOIP 條件,最後將剩餘請求交由 PROXY。這不是適用於所有網路的通用設定。若希望未列出的目標直接連線,請將最後一行改為 FINAL,DIRECT,並留意未列入代理規則的目標也會因此直接連線。
五、修改目前的 Config:備份、儲存與重新驗證
開始前,請先備妥自己的服務商與連線參數,並確認所選連線可正常使用。買斷用戶端 ≠ 購買線路方案;本站不提供、不銷售,也不推薦節點或訂閱。修改規則只會改變既有連線的選擇邏輯,無法解決憑證過期、伺服器無法連線等根本問題。
-
備份目前的設定檔
進入 Config,確認目前選取的設定檔,先保留副本或匯出備份。記下原有的 [Rule] 內容與 FINAL 策略,避免修改失敗後只能重新整理規則。
-
固定路由模式
前往 Home → Global Routing → Config。記下目前使用的代理選項;測試期間先不要同時修改 Settings → On Demand 或切換網路。
-
編輯規則內容
返回 Config,開啟目前設定檔的編輯功能,找到 [Rule] 區段。將精確例外放在會涵蓋它的範圍規則之前;直接修改現有區段,不要重複新增第二個 [Rule] 區段。
-
儲存並選用設定檔
儲存修改,並確認 Config 仍選用這份檔案。若編輯的是副本,請先切換至副本,再回到 Home 檢查連線狀態,避免只修改了未生效的檔案。
-
發起新請求
重新建立測試連線,分別檢查精確例外、範圍規則與後備目標。必要時先儲存工作,再中斷並重新連線,以減少重用舊連線對判斷造成的干擾。
匯入訂閱與管理 Config 是不同的操作。更新既有伺服器訂閱主要會影響連線項目;更新遠端設定檔則可能取代規則內容。若本機修改之後消失,請確認更新的是哪一種項目。需要長期維護的自訂規則,應儲存在自己能掌控的本機設定檔副本中,並在每次套用遠端設定檔更新後重新比對差異。
六、驗證匹配結果:先看規則,再看網頁
網頁能否開啟,只能說明單次瀏覽的結果,不能單獨證明規則正確。單一頁面通常會連線至多個網域;主頁可能使用直連,圖片、驗證介面或媒體資源則可能採用其他策略。排查時,請在連線記錄中查看具體目標主機、命中規則及最終策略,不要只看頁面標題或載入速度。
| 驗證項目 | 依上述範例的預期結果 | 結果不符時,先檢查 |
|---|---|---|
account.example.com | 命中 DOMAIN,使用 DIRECT | 精確規則是否排在 DOMAIN-SUFFIX 之前 |
media.example.com | 命中 DOMAIN-SUFFIX,使用 PROXY | 是否選用了修改後的 Config,以及前面是否有覆蓋規則 |
192.168.1.20 | 命中區域網路 IP-CIDR,使用 DIRECT | 網段遮罩、規則順序與實際目標 IP |
| 前面所有規則都未命中的目標 | 命中 FINAL,使用 PROXY | FINAL 策略,以及前面是否已經有其他規則命中 |
表中的網域僅用於推演,不是實際可連線的測試服務。實際驗證時,請改用自己有權存取的目標,並依相同的涵蓋關係設定預期結果。每次只修改一個變數:先調整順序,再進行驗證;不要同時修改 DNS、代理協定、FINAL 與網路環境,否則很難判斷是哪項變更造成結果差異。
七、常見問題:規則已新增卻未按預期生效
新增了 DIRECT,為什麼仍然使用 PROXY?
先確認 Home → Global Routing 是否設為 Config,再確認 Config 選取的是否為剛修改的檔案。接著從 [Rule] 頂端開始,找出最先命中的規則;若 DOMAIN-SUFFIX 排在精確的 DOMAIN 之前,請將例外規則上移並儲存,再重新發起連線驗證。
FINAL,PROXY 會在代理失敗後自動改用直連嗎?
不會。FINAL 用來匹配前面規則都未涵蓋的請求,PROXY 則指定處理方向;代理連線失敗不會讓規則引擎回頭改用 DIRECT。請檢查所選連線是否可用,或依自己的存取需求明確修改策略。
新增 REJECT 後,為什麼頁面仍顯示舊內容?
頁面已有快取,不代表發出了新請求。請先確認目標主機與規則完全相符,再重新載入頁面並查看新的連線記錄;頁面也可能改用其他網域。不要只因舊頁面仍看得到,就判定 REJECT 沒有生效。
改用 IP-CIDR 後,為什麼網域存取沒有命中規則?
先確認實際目標 IP 是否屬於該網段。若規則帶有 no-resolve,不會只為了這條規則主動解析網域。若要固定某個網域的策略,請直接新增 DOMAIN 或 DOMAIN-SUFFIX 規則,並將它放在可能涵蓋該網域的規則之前。
同一條規則昨天有效,更新後怎麼變了?
檢查 Config 目前選取的檔案、遠端設定檔更新後的 [Rule] 內容,以及 Home → Global Routing 是否有變更。若規則未變,再檢查目標網域、解析位址與連線記錄;使用 GEOIP 或 IP-CIDR 時,位址變動本身就可能改變匹配結果。
最後應保留一份容易理解的規則清單:每項精確例外都有明確用途,每條範圍規則的涵蓋界線清楚,FINAL 也明確指定剩餘流量的去向。規則越多不代表越準確;能依目標請求逐行推導命中位置,才方便日後維護與排查問題。協定參數的詳細說明,請參閱技術參考;連線與設定問題則可查看疑難排解。