Shadowrocket(小火箭)會依序判斷規則,命中後採用對應策略。本文適合已經有可用設定、想調整分流的使用者;操作示範以 iPhone / iPad 的 Home、Config 介面為例,規則概念也適用於 Mac、Windows、Android、Linux 版,實際編輯位置請以各平台介面為準。閱讀本文後,你將能區分網域與 IP 匹配、寫出最基本的 Rule 區段,並透過連線記錄確認命中結果。
一、先確認 Global Routing 設為 Config
規則存在於設定檔中,不代表目前的連線一定依規則分流。在 Home 檢查 Global Routing:若要依目前設定檔中的 Rule 執行,請選擇 Config。Proxy 表示所有連線都採用代理策略,Direct 表示所有連線都直連;Scene 用於選擇情境,不是另一種規則關鍵字。開始排查前,先固定使用 Config,避免情境切換影響判斷。
- 進入 Config,先備份目前的設定檔,再確認要編輯的是目前選取的檔案,而不是另一份同名副本。
- 返回 Home,將 Global Routing 設為 Config,並確認現有代理連線可正常使用。
- 編輯規則後儲存設定檔;必要時重新建立連線,再送出新的測試請求。
- 查看連線記錄,核對目標網域或 IP、命中的規則與最終策略,不要只憑網頁能否開啟來判斷。
Settings → On Demand 管理的是自動建立連線的條件,不會決定特定網域要走 PROXY 還是 DIRECT。測試規則時若要手動中斷連線,請先留意 On Demand 是否會再次觸發連線,避免誤以為儲存規則後開關自行變動。
二、規則的三個部分:類型、匹配值、策略
大多數基本規則由英文逗號分隔三個欄位:規則類型、匹配值、策略。例如 DOMAIN,example.com,DIRECT 表示目標網域完全符合 example.com 時採用直連。FINAL 沒有匹配值,因此寫作 FINAL,PROXY,不要比照三欄格式多加空欄位。
| 策略 | 處理方式 | 適用範圍 |
|---|---|---|
PROXY | 交由代理策略處理。 | 仍須有可用的代理及其參數;規則本身不會建立連線服務。 |
DIRECT | 直接連線至目標。 | 不代表繞過系統通道,也不保證目前網路可以連上目標。 |
REJECT | 拒絕符合條件的連線。 | 命中後請求失敗是預期結果,僅應用於明確要封鎖的目標。 |
規則末尾也可以引用設定檔中已定義的策略群組。剛入門時先使用上述基本策略,不要任意填入不存在的群組名稱。PROXY 是策略識別字,Global Routing 中的 Proxy 則是運作模式,兩者的位置和作用不同,不能互換使用。
三、DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 有何不同
這三種規則都針對網域,但匹配範圍不同。DOMAIN 比對完整網域;DOMAIN-SUFFIX 比對指定網域本身及其子網域;DOMAIN-KEYWORD 則檢查網域是否包含指定字串。它們不會檢查網頁內容,也不會依 URL 路徑區分同一網站的不同頁面。
| 規則範例 | 會匹配 | 不會匹配 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、img.example.com | notexample.com |
DOMAIN-KEYWORD,example,PROXY | example.com、myexample.net | sample.net |
- 不要填入通訊協定:匹配值請寫
example.com,不要寫https://example.com。 - 不要填入頁面路徑:
/login、查詢參數和 URL 片段都不是這三種規則的匹配值。 - 不要加萬用字元:若要涵蓋整個網域及其子網域,請使用
DOMAIN-SUFFIX,example.com,DIRECT,不必加上*.。 - 謹慎使用過短的關鍵字:
DOMAIN-KEYWORD,ad,REJECT可能誤擋含有這兩個字母的正常網域,不能把它當成精確的廣告網域清單。
若只想讓 api.example.com 走代理,而同一網域下的其他連線直連,請將精確的 DOMAIN 規則放在範圍較廣的 DOMAIN-SUFFIX 之前。只要連線提供網域資訊,就能透過規則順序設定例外;若應用程式直接連到 IP,則需另外檢查 IP 規則。
四、GEOIP 與 IP-CIDR:匹配目標 IP
GEOIP,CN,DIRECT 會依 IP 地理資料庫中的地區歸屬判斷目標位址,不是依網域後綴或服務商總部所在地判斷。網域請求進入 IP 類規則時,可能需要先解析位址;結果也會受到 DNS 回傳值與資料庫資訊影響,因此同一服務的不同入口不一定會命中相同的 GEOIP 規則。
GEOIP,CN,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR,192.0.2.0/24,REJECT
IP-CIDR 使用網路位址加上前綴長度。192.168.0.0/16 涵蓋從 192.168.0.0 到 192.168.255.255 的位址;IPv4 的 /32 只匹配單一位址。上方的 192.0.2.0/24 是文件範例網段,不是真實服務位址,不能用來證明實際網站可連線。
- 只寫
192.168.0.0/16不會涵蓋所有私有 IPv4 位址;若還有其他內部網路範圍,請依實際網路另行設定。 - IPv6 網段請使用對應的
IP-CIDR6類型,不要把 IPv6 位址填入 IPv4 範例後,期待得到相同的匹配結果。 - 選用參數
no-resolve可避免該 IP 規則額外觸發網域解析,例如IP-CIDR,192.168.0.0/16,DIRECT,no-resolve;它不代表全域停用 DNS。 - 若希望網域請求解析後匹配特定 IP 範圍,請先了解解析行為,再決定是否使用
no-resolve;不要把它當成每條規則都必須加上的尾碼。
結論:網域範圍明確時,優先使用網域規則
先用 DOMAIN 或 DOMAIN-SUFFIX 表達具體需求,再以 GEOIP、IP-CIDR 處理地區與網段策略。這樣可降低解析位址變動造成的判斷落差,也更容易從連線記錄說明命中原因。
五、將 FINAL 放在最後:從特定例外到預設策略
Shadowrocket 會依序檢查規則,由第一條符合的規則決定處理策略,不會因為下方某條規則「更精確」就自動改用該規則。FINAL 用來處理前面都未匹配的連線,應放在規則區段最後。若放在最前面,下方為特定網域設定的規則就不會生效。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
DOMAIN-KEYWORD,blocked-demo,REJECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
這是教學用的 Rule 區段,不是包含代理參數、DNS 等內容的完整設定檔。若現有設定檔已包含 [Rule],請編輯該區段中的項目,不要重複加入多個同名區段。範例網域僅用來說明匹配關係,實際使用時請替換成要處理的目標。
- 請求
api.example.com時,第一條 DOMAIN 規則命中並採用 PROXY,不會再繼續檢查後面的網域後綴規則。 - 請求
img.example.com時,第一條規則不匹配,第二條 DOMAIN-SUFFIX 規則命中並採用 DIRECT。 - 若網域包含
blocked-demo,且未命中前兩條規則,就會命中 REJECT;請勿用其他網域測試這條規則。 - 其他連線接著檢查指定網段與 GEOIP;只有這些條件都不符合時,才由 FINAL 交由 PROXY 處理。
若希望預設直連,可將最後一條改成 FINAL,DIRECT,但這會影響所有未命中的連線,不只是目前測試的網站。修改前請先列出必須走代理的網域,並將相關規則放在 FINAL 之前。
六、規則沒有生效:先區分匹配問題與連線問題
網頁無法開啟,不代表規則一定寫錯。先查看連線記錄:目標是否符合預期、命中了哪條規則,以及最後採用哪個策略。只有命中項目或策略不如預期時,才優先檢查設定檔選擇、規則範圍與順序;若命中正確但連線失敗,則應繼續檢查網路和現有代理參數。
Connection timed out
原因:連線未能在等待時間內完成,問題可能出現在直連目標或代理連線階段,並非專門表示規則語法錯誤。
解決方式:先從記錄確認使用的是 DIRECT 還是 PROXY,再透過目前網路測試相應目標或現有代理;不要只靠移動 FINAL 來掩蓋問題。
Connection refused
原因:目標連線遭到拒絕,常見原因是該位址的連接埠沒有服務監聽,或對端主動拒絕連線。
解決方式:核對記錄中的目標位址與連接埠;若 PROXY 連線失敗,再檢查現有代理的位址、連接埠及服務狀態。
HTTPS 常見的目標連接埠是 443,但 DOMAIN 規則並不是「只匹配 443 連接埠」的規則。代理伺服器本身的連接埠也不能直接照抄為 443,請以你現有服務的實際參數為準。若 PROXY 命中正確但仍無法連線,還需依使用的通訊協定核對參數,而不是修改網域關鍵字。
- 總是命中 FINAL:檢查匹配值是否誤加通訊協定或路徑,並確認連線記錄中確實包含網域資訊。
- 例外規則未生效:檢查上方是否已有範圍較廣的 DOMAIN-SUFFIX、DOMAIN-KEYWORD,或更早出現的 FINAL。
- 修改後仍看到舊結果:確認變更儲存於目前使用的設定檔,再建立新連線;瀏覽器重複使用中的連線可能仍沿用原有路徑。
- 過一段時間又恢復原狀:確認設定檔是否來自遠端更新。訂閱中的代理清單與 Config 中的規則設定不屬於同一層內容,不要預設更新代理清單就會更新規則。
七、常見問題:網域、通訊協定與訂閱的差異
設定了 DOMAIN,為什麼子網域沒有一起生效?
DOMAIN 只匹配完整網域。若要同時涵蓋主網域和所有子網域,請改用 DOMAIN-SUFFIX;若只有一個子網域需要例外處理,請將它的 DOMAIN 規則放在後綴規則之前。
GEOIP,CN,DIRECT 為什麼沒有讓所有中文網站直連?
GEOIP 判斷的是 IP 所屬地區,不是頁面語言。先查看目標解析位址與命中記錄;若要指定特定網站直連,請使用該網站的實際網域設定 DOMAIN-SUFFIX,並放在 GEOIP 之前。
把 FINAL 改成 PROXY,就能修正通訊協定參數嗎?
不能。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 是代理通訊協定,不是規則類型。FINAL 只決定未命中連線採用的策略,不會修正密碼、身分憑證、TLS 或傳輸設定。
更新自己的訂閱後,手動規則會保留嗎?
先確認更新的是 Home 中的代理訂閱,還是 Config 中的遠端設定檔。遠端設定檔更新可能會取代檔案內容;修改前請在 Config 備份,更新後再檢查 Rule 區段。不要假設所有更新入口都採用相同的合併方式。
日常維護請依照「備份、修改單一規則、送出新請求、查看命中結果」的順序進行。每次只調整一個變數,比同時修改 DNS、Global Routing 和多條規則更容易找出原因。本文以使用者已有自己的服務與訂閱為前提;本站不提供、不販售也不推薦節點或訂閱,取得用戶端與取得線路服務是兩回事。