Shadowrocket 規則會決定連線採用哪種策略,不會提供可用伺服器。本文適合已匯入伺服器、準備使用 Config 分流的使用者:先分清 Global Routing 與設定檔,再了解六種規則關鍵字,最後透過精簡範例檢查匹配順序、DNS 條件與實際連線出口。文中的網域與位址僅用於說明語法,不是可用的連線路徑。
1. 先選擇 Config,再確認規則是否生效
Shadowrocket(小火箭)的規則並非建立連線後就一定會逐條執行。先在 Home 查看 Global Routing:若要套用目前設定檔中的規則,請選擇 Config;再到 Config 確認目前啟用的是剛編輯的設定檔,而非另一個同名檔案。
| 選項 | 用途 | 檢查規則時的注意事項 |
|---|---|---|
Config | 依目前設定檔分流 | 驗證本文規則範例的前提。 |
Proxy | 全域使用代理連線 | 在此模式下,無法驗證某條規則是否選擇 DIRECT。 |
Direct | 全域直接連線 | 在此模式下,無法判斷 PROXY 規則是否正確。 |
Scene | 依場景條件套用相應設定 | 先確認目前場景,避免將場景切換誤判為規則失效。 |
Home 用於選擇伺服器及建立連線,Config 用於管理設定檔,Settings 則提供 App 設定。Settings → On Demand 會影響依條件建立連線的行為,不會自動將 DOMAIN-SUFFIX 規則改成其他策略。排查時,先分清「是否已建立連線」與「連線建立後採用哪條規則」,不要同時修改這兩類設定。
2. 規則由上而下檢查,首次命中即決定策略
常見規則行以英文逗號分隔,基本格式為「規則類型、匹配內容、策略」。FINAL 不含匹配內容,格式為「FINAL、策略」。規則依序檢查,命中後便採用對應策略,不會再往下尋找看似更精確的規則。因此,將精確例外放前面、較廣的範圍放後面,並把 FINAL 留在最後,是整理設定的重要原則。
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
這三行規則中,api.example.com 命中第一行,採用 PROXY;www.example.com 不符合第一行,但符合第二行,因此採用 DIRECT。若將第二行移到第一行前面,api.example.com 也會先被後綴規則匹配,原本的精確例外便不會生效。順序錯誤不一定會造成語法錯誤,卻會直接改變匹配結果。
3. DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD 的匹配範圍
網域規則匹配的是連線可取得的網域資訊,不是完整網頁網址。填寫匹配內容時,不要加上通訊協定、連接埠、路徑或查詢參數。例如,瀏覽含有 /account 路徑的頁面時,DOMAIN 仍只會判斷主機名稱,無法區分同一主機上的不同頁面。
| 關鍵字與範例 | 會匹配 | 不會匹配或注意事項 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | 不包含 www.example.com。 |
DOMAIN-SUFFIX,example.com,PROXY | example.com、www.example.com、a.b.example.com | 不包含 notexample.com;後綴匹配會依網域標籤邊界判斷。 |
DOMAIN-KEYWORD,metrics,REJECT | 網域中含有 metrics 的連線 | 匹配範圍可能很廣,不代表只匹配名為 metrics 的子網域。 |
若只想讓 api.example.com 使用代理,建議使用 DOMAIN,而不是將 api 設為 DOMAIN-KEYWORD;後者可能也會匹配其他不相關的網域。若要涵蓋某個網域及其所有子網域,再使用 DOMAIN-SUFFIX;不要以萬用字元 *.example.com 取代此處的後綴語法。
- 匹配完整主機名稱:使用
DOMAIN。 - 匹配主網域及其子網域:使用
DOMAIN-SUFFIX。 - 確實需要依字串擴大匹配範圍:使用
DOMAIN-KEYWORD,並留意誤匹配的可能。 - 只知道目標 IP,沒有可用的網域資訊時:改檢查 IP 類規則,不要假設網域規則一定會參與匹配。
4. IP-CIDR、GEOIP 與 DNS 的關係
IP-CIDR 依 IP 位址網段匹配,GEOIP 則依 IP 地理資料庫中的歸屬結果匹配。兩者判斷的都是位址資訊,不是網頁語言、帳號地區,也不是網域結尾的國家或地區後綴。網域使用某種後綴,不能據此判定它會命中 GEOIP 的哪個地區代碼。
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
192.0.2.0/24 是文件範例網段;/24 代表前 24 位元為網路前綴,範圍涵蓋 192.0.2.0 至 192.0.2.255,並非可用的伺服器位址。IP-CIDR 匹配整個位址範圍,不只匹配文字中出現的 192.0.2.0。IPv6 網段應使用相應的 IP-CIDR6 規則類型,不要將 IPv6 位址直接填入 IPv4 範例。
網域規則未命中,而後續 IP 規則需要位址資訊時,DNS 狀態可能影響匹配過程。GEOIP 結果也取決於實際目標位址與資料庫內容,無法保證涵蓋某類網站的所有資源。排查時應記錄具體網域、實際位址與命中策略,而不只是記下「某個 App 無法開啟」。
5. 透過精簡規則集了解 FINAL 與策略結果
以下是供閱讀與測試的完整規則段落,不是適用所有網路環境的設定建議。使用前請保留完整設定檔與伺服器設定,只在副本中調整規則;不要把只有 [Rule] 的片段當成包含所有連線參數的新設定檔。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
DOMAIN-KEYWORD,metrics,REJECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
blocked.example.com會先命中 REJECT,不會繼續匹配後面的 example.com 後綴規則。api.example.com命中第二行,採用 PROXY;實際能否連線仍取決於代理伺服器狀態。metrics.example.com會先命中 DOMAIN-SUFFIX,因此採用 DIRECT,而非後面的 REJECT。- 其他網域若含有 metrics,且未被前面的規則匹配,才會命中 DOMAIN-KEYWORD。
- 前面所有規則都未命中的連線,會由
FINAL,PROXY作為兜底;FINAL 不應放在仍需檢查的規則之前。
若要讓 metrics.example.com 也遭到拒絕,可在後綴規則前新增精確的 DOMAIN 例外;若將整條關鍵字規則往前移,所有含有 metrics 的網域都可能提早遭到拒絕。修改前應先確認所需匹配範圍,再決定要「新增精確例外」或「移動廣泛規則」,避免為了修正單一網域而擴大影響範圍。
6. 在目前設定檔中修改並驗證
-
保留原始設定
進入 Config,先複製目前可用的設定檔,再開啟待修改檔案的編輯功能。記下檔名與原本的 Global Routing 設定,方便還原。
-
檢查規則段落
在設定文字中找到 [Rule],以英文逗號逐行編輯;精確例外放在相應的廣泛規則前,FINAL 放在最後。不要重複貼上多個 [Rule] 段落來取代順序整理。
-
啟用設定並選擇模式
儲存後,在 Config 確認使用此設定檔;接著返回 Home → Global Routing → Config。只儲存檔案但未選用,無法驗證剛才的修改。
-
確認連線出口
在 Home 選擇現有伺服器並執行 Connectivity Test,先確認代理連線具備建立連線的條件。伺服器與訂閱資訊請向服務提供者取得,規則文字無法取代這些參數。
-
重新建立連線並驗證
重新送出目標請求,並在 App 的連線記錄中檢查目標、命中規則與連線出口策略。每次只修改一項;舊連線可能仍在使用,必要時先停止舊請求,再重新連線測試。
Connectivity Test 檢查的是連線能力,無法單獨證明某個網站命中了指定規則。驗證規則時應以具體請求的記錄為準。也要分清伺服器訂閱與規則設定:更新 Home 中的伺服器清單,不代表目前 Config 中的規則也同步更新;遠端設定檔再次更新後,也應確認本機修改是否保留。
7. 分辨規則錯誤與連線出口錯誤
規則已命中 PROXY,但網頁仍無法開啟,不一定是語法錯誤。以下列出連線記錄中常見的網路錯誤片段;完整錯誤訊息可能包含位址、連接埠與底層說明。遇到錯誤時,先確認它發生在連線至目標,還是連線至代理伺服器的階段。
錯誤:connection refused
原因與處理方式:連線端點拒絕建立連線,常見原因包括目標連接埠未監聽或遭主動拒絕。先從連線記錄確認失敗的端點,再檢查相應伺服器或目標服務的位址與連接埠,單靠移動 FINAL 無法修復。
錯誤:i/o timeout
原因與處理方式:網路操作未能在等待時間內完成。先透過 Home 的 Connectivity Test 檢查所選伺服器,再確認該請求實際採用 DIRECT 或 PROXY,分別排查直接連線或代理連線路徑。
例如,服務提供者指定的伺服器連接埠為 443,就應確認伺服器設定中的連接埠確實是 443;不可因為某份規則範例出現 443,就擅自替換原有連接埠。DOMAIN-SUFFIX 本身不包含連接埠欄位;伺服器監聽連接埠與網域匹配條件屬於不同層次。
8. 規則設定常見問題
已設定 DOMAIN,為什麼還是採用其他策略?
先前往 Home → Global Routing 確認已選擇 Config,再到 Config 檢查啟用中的設定檔。接著從該規則上方逐行檢查,特別留意更早出現的 DOMAIN-SUFFIX、DOMAIN-KEYWORD 與 FINAL;已被前面規則匹配的連線不會繼續往下比對。
GEOIP,CN,DIRECT 可以取代所有網域規則嗎?
不行。GEOIP 依據目標 IP 在資料庫中的歸屬結果判斷,同一項服務可能使用不同地區的資源。若要固定某個網域採用的策略,請將明確的 DOMAIN 或 DOMAIN-SUFFIX 規則放在 GEOIP 前面,再透過連線記錄確認結果。
訂閱更新了,為什麼規則還是舊的?
先確認更新的是哪一項。Home 中伺服器訂閱的更新主要作用於伺服器項目;規則則來自目前的 Config。請到 Config 檢查實際設定內容與啟用狀態,不要以伺服器名稱變更作為規則已更新的證明。
將 FINAL 改成 DIRECT 就能修復連線嗎?
這只會改變前面未命中規則的連線所採用的兜底出口,無法修復伺服器參數或 DNS 故障。先確認目標確實命中 FINAL;若只需為單一網域設定例外,優先新增範圍明確的規則,而非改變所有未匹配連線的策略。