本文適合已在 Shadowrocket(小火箭)匯入自己的設定檔,並準備調整分流規則的使用者。請先確認 Global Routing 設為 Config,再區分網域條件與 IP 條件,最後依照「具體例外優先、較廣範圍其次、以 FINAL 收尾」排列規則。以下範例僅用於說明語法,不含可用的連線參數;測試時請替換成自己有權存取的目標。
先確認規則的生效條件
規則會決定連線採用哪種策略,不會建立伺服器,也不會決定伺服器本身是否可用。Home 用於選擇伺服器及管理連線,Config 用於管理設定檔,Settings 用於調整 App 設定。編輯檔案後,也要確認該檔案已設為目前使用的設定;只儲存尚未啟用的檔案,不會改變正在使用的規則。
在 Home → Global Routing 中選擇 Config,才能依目前設定套用本文討論的分流規則。Proxy 代表整體使用代理,Direct 代表整體直接連線;Scene 則須配合已設定的場景條件確認,不能只因選單中出現 Scene,就認定某份規則已生效。排查時先固定使用 Config,減少切換場景造成的變因。
結論:先確認生效中的設定
測試前記下目前的設定名稱與 Global Routing 選項;若這兩項尚未確認,先不要新增規則,否則無法判斷結果變化是來自切換檔案,還是比對條件。
規則寫法與策略名稱
在設定文字的 [Rule] 區段中,一般條件規則通常以英文逗號分隔三個欄位:規則類型、比對值、策略。網域欄位不要填入完整網址:網域條件不包含 https://、路徑、查詢參數或連接埠。以下兩行分別表示「指定網域直接連線」及「其他連線使用代理」。
[Rule]
DOMAIN,example.com,DIRECT
FINAL,PROXY
| 欄位或策略 | 說明 | 確認事項 |
|---|---|---|
DOMAIN | 規則類型,依完整網域比對。 | 不是協定類型,也不是伺服器名稱。 |
example.com | 該列使用的比對值。 | 不能填入含路徑的網址。 |
DIRECT | 直接連線至目標。 | 連線仍會受到目前網路、DNS 與目標可連線性的影響。 |
PROXY | 使用代理策略。 | 確認 Home 中目前選取的預設伺服器。 |
REJECT | 拒絕符合條件的連線。 | 符合規則後無法存取,可能正是預期結果。 |
若目前設定使用自訂策略群組名稱,規則末尾必須填入設定中實際存在的名稱。初次測試請先使用 DIRECT 與 PROXY,不要在同一次修改中同時新增策略群組、調整 DNS 並重新排列規則。本文範例僅為片段;若現有設定已包含 [Rule],請編輯原有區段,不要重複新增同名區段。
如何區分三種網域條件
DOMAIN 適合設定單一主機的例外;DOMAIN-SUFFIX 適用於某個網域及其子網域;DOMAIN-KEYWORD 則會比對網域是否包含指定字串。這三種條件比對的是網域資訊,不是網頁標題、頁面內容或 URL 路徑。
| 規則範例 | 會比對 | 不會比對 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | api.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、api.example.com | notexample.com、example.com.test |
DOMAIN-KEYWORD,example,DIRECT | api.example.com、notexample.com | 除 example.org 外,不含該字串的網域,例如 sample.test |
使用 DOMAIN-SUFFIX 時直接填入 example.com,不必加上 *.。它會依網域邊界判斷後綴,而非單純比對字串結尾。相較之下,DOMAIN-KEYWORD,example,DIRECT 的比對範圍明顯較廣,可能涵蓋與目標網站無關的網域;若只想比對某個網站及其子網域,建議優先使用明確的後綴條件。
- 同一網域下的
/news與/account路徑,無法透過上述三種條件分開比對。 - 存取
example.com:443時,網域欄位仍填example.com,不要加上:443。 - 直接存取 IP 位址時,不要預期網域規則一定會符合;請確認請求是否帶有可供比對的網域資訊。
GEOIP 與 IP-CIDR 的比對方式
GEOIP 會依目標 IP 在地理資料庫中的歸屬進行判斷。例如,GEOIP,CN,DIRECT 表示將資料庫判定為 CN 的目標 IP 交由 DIRECT 處理。此條件不會依據網域後綴、網頁語言或公司註冊地判斷,也無法保證同一網域的所有解析結果都屬於同一地區。
IP-CIDR 則直接指定 IPv4 位址範圍。斜線後方是前綴長度:/32 代表單一 IPv4 位址,/24 則涵蓋 256 個位址。以下使用專供文件範例的位址區段說明語法,這些位址並非可用的服務位址。
IP-CIDR,192.0.2.7/32,DIRECT
IP-CIDR,198.51.100.0/24,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY
192.0.2.7/32只涵蓋192.0.2.7,不包含192.0.2.8。198.51.100.0/24的位址範圍為198.51.100.0至198.51.100.255。- IPv6 範圍應使用對應的
IP-CIDR6類型,不能將 IPv6 位址直接套用為 IPv4 的IP-CIDR範例。 - 網域請求是否需要先解析才能判斷 IP 條件,取決於設定中的解析方式。解析失敗與規則未符合是兩種不同問題。
部分 IP 條件可使用 no-resolve,例如 IP-CIDR,192.0.2.0/24,DIRECT,no-resolve。這會避免僅為了評估該規則而觸發網域解析,並不代表全域停用 DNS;若當下沒有可用的目標 IP,就不能期待這條規則透過解析網域而符合。排查時請先保留原設定的相關選項,不要批次新增或刪除。
依序比對,FINAL 放在最後
本文提到的一般規則會依由上而下的順序檢查;符合某條規則後,就會採用該列的策略,不會因為後面出現「更精確」的條件而自動改用其他策略。因此,規則類型名稱不代表優先順序:DOMAIN 不會天然優先於排在它前面的 DOMAIN-SUFFIX。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
- 要求
api.example.com時,第一行已符合,因此使用 PROXY。 - 要求
www.example.com時,第一行不符合,第二行符合,因此使用 DIRECT。 - 目標 IP 為
192.0.2.8,且前面的網域規則都未符合時,範例中的網段規則即可符合。 - 其他連線會繼續比對 GEOIP;若仍未符合,則由
FINAL,PROXY作為最後處理規則。
若交換前兩行,api.example.com 會先符合後綴規則,原本要保留的單一網域例外便會失效。同樣地,FINAL 是無條件的最後處理規則,應放在規則末尾;排在它後面的一般規則,無法改變已確定的結果。不要試圖新增第二條 FINAL 來修正前面的順序錯誤。
結論:先列例外,再列較廣範圍
若要讓某個子網域採用不同策略,請將它的 DOMAIN 條件放在相關 DOMAIN-SUFFIX 前面;儲存後分別測試該子網域與另一個一般子網域,確認兩者確實採用不同策略。
依照五個步驟修改並驗證
以下流程假設使用者已擁有自己的伺服器或訂閱,且能完成基本連線。規則檔案與 Home 中的伺服器列表用途不同:更新伺服器資訊,不代表正在編輯的規則檔案已切換;同樣地,調整分流也無法修復失效的連線憑證。
-
備份設定
進入 Config,先保留目前設定的副本,並記下正在使用的檔案名稱。若使用遠端設定,請確認後續更新是否會覆蓋本機修改。
-
確認連線模式
在 Home → Global Routing 選擇 Config,並確認 Config 中選取的正是待測試檔案;同時確認 Home 中選取的預設伺服器。
-
一次只改一項
在 Config 中開啟目標設定的編輯功能,進入文字編輯器並找到
[Rule],只新增一條已知目標的 DOMAIN 規則,或只調整一處順序,然後儲存修改。 -
重新建立連線
儲存後重新建立 VPN 連線,並讓測試 App 發出新的請求。既有的長時間連線可能仍沿用原本路徑;反覆重新整理同一頁面,不一定會建立新連線。
-
比對結果
參照連線記錄中可查看的目標、策略與錯誤訊息,確認實際結果。Connectivity Test 可協助檢查基本連線能力,但無法單獨證明某個網站符合了哪條規則。
規則符合但無法存取時的排查方式
符合規則只代表選擇了某條連線路徑,不保證該路徑能成功連到目標。請先確認「策略是否選對」,再檢查「選定的路徑是否可用」。以下是連線診斷時可能出現的系統錯誤原文,並非規則解析器的固定錯誤訊息;出現位置與完整描述可能因連線類型而異。
錯誤:Connection refused
原因:目標或中間設備主動拒絕連線,可能是服務未在監聽或連接埠填寫錯誤;不能因此判定 DOMAIN 語法有誤。
處理方式:先確認記錄中的實際連線目標;若使用 PROXY,請檢查自己已有伺服器的位址與連接埠;若使用 DIRECT,請確認目標服務是否允許透過該連接埠存取。
錯誤:Operation timed out
原因:連線未能在等待期限內完成,可能是伺服器無法連線、目標沒有回應或網路丟棄資料所致;僅憑逾時無法判斷是哪條規則造成。
處理方式:先確認最後採用的策略,再透過相同網路測試基本連線能力;維持設定不變,逐項檢查,避免同時切換 DNS、伺服器與規則順序。
沒有錯誤訊息,但策略不如預期
- 所有請求都走相同路徑:返回 Home → Global Routing,確認目前不是 Proxy 或 Direct,並檢查正在使用的設定。
- 單一網域例外失效:檢查它前面是否已有範圍較廣的 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或 FINAL 提前符合。
- IP 規則未符合:確認實際目標是否為 IPv6、解析結果是否已變更,以及該規則是否使用了
no-resolve。 - 同一頁面出現多種策略:頁面可能同時連線至主網站、圖片與 API 等多個網域;請逐一檢查各項請求,不要將整個頁面視為單一連線。
- 儲存後結果沒有變化:確認已選取修改後的檔案,並重新建立測試連線;不要用舊連線的結果驗證新規則。
測試完成後,請刪除臨時規則,或將其調整為明確需要的範圍,再儲存備份。最基本的排查記錄應包含目標網域、實際目標 IP、預期策略、實際策略及錯誤原文;透過這些資訊才能分辨是比對範圍、規則順序或網路連線能力所造成的問題。