Shadowrocket(小火箭)會先判斷請求是否符合規則條件,再決定交由哪種策略處理。本文適合已備妥自己的服務資料、準備編輯 Config 的使用者:先認識六種關鍵字,再依照「具體例外優先、寬泛匹配其次、FINAL 收尾」的順序排列規則,最後透過新連線確認結果。範例僅說明語法與匹配範圍,不提供服務資料。
1. 規則格式:匹配類型、匹配內容、處理策略
常見規則會寫在設定檔的 [Rule] 區段。除了 FINAL 等特殊形式外,每行通常由「關鍵字、匹配內容、策略」組成,欄位之間以英文逗號分隔。域名匹配內容只填主機名稱,不要加入通訊協定前綴、網頁路徑或連接埠。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
這裡的 DIRECT 表示直接連線,PROXY 表示交由代理策略處理,REJECT 則表示拒絕符合條件的請求。規則只決定處理方式,不會建立伺服器,也不會補上認證資料。使用 PROXY 前,請先在 Home 確認已有的伺服器及其連線狀態;若使用自訂策略群組,規則末尾的名稱必須與設定中的定義相符。
重點:先正確設定匹配對象
只處理單一主機名稱時,先使用 DOMAIN;確實需要涵蓋整個域名及其子域名時,再改用範圍較大的 DOMAIN-SUFFIX,不要一開始就使用寬泛的關鍵字匹配。
2. DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 的適用範圍
這三種規則都用於匹配域名,但涵蓋範圍各不相同。DOMAIN 完整匹配主機名稱;DOMAIN-SUFFIX 匹配指定域名本身及其子域名;DOMAIN-KEYWORD 則檢查域名是否包含指定字串。這些規則不是網頁網址篩選器,無法透過 /video/ 這類路徑區分同一主機上的不同頁面。
| 規則範例 | 會匹配 | 不會匹配或需留意 |
|---|---|---|
DOMAIN,example.com,PROXY | example.com | 不包含 www.example.com |
DOMAIN-SUFFIX,example.com,PROXY | example.com、www.example.com、a.b.example.com | 不匹配 notexample.com |
DOMAIN-KEYWORD,example,PROXY | example.com、myexample.net | 可能涵蓋與目標網站無關的域名 |
例如,若要讓登入介面直接連線、同一域名下的其他請求走代理,可將 DOMAIN,account.example.com,DIRECT 放在 DOMAIN-SUFFIX,example.com,PROXY 前面。這裡仰賴的是規則排列順序,而非「完整域名天生優先級較高」。
- 不要寫成
DOMAIN,https://example.com,PROXY:匹配值應為example.com。 - 不要用
*.example.com取代後綴規則;若要涵蓋整個域名,直接使用DOMAIN-SUFFIX,example.com,PROXY。 - 網頁可能同時連線至主站、圖片域名與介面域名;主站符合規則,不代表所有資源都會套用相同策略。
3. GEOIP 與 IP-CIDR:依目標 IP 歸屬與位址範圍匹配
GEOIP 會依據地理資料庫中目標 IP 的歸屬進行匹配。例如,GEOIP,CN,DIRECT 表示將資料庫判定為歸屬 CN 的目標位址交由 DIRECT 處理。它不會依網頁使用的語文、域名後綴或伺服器營運者所在地判斷;資料庫記錄也不等於即時實際位置。
IP-CIDR 依 IPv4 位址範圍進行匹配。192.168.1.0/24 涵蓋 192.168.1.0 至 192.168.1.255,可用來說明規則範圍;但在實際區域網路中,哪些位址能指派給裝置,仍受網路設定限制。IPv6 位址範圍應使用 IP-CIDR6,不要將 IPv6 位址放進 IPv4 範例。
[Rule]
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
/32代表單一 IPv4 位址,/24則代表 256 個位址;前綴長度越大,範圍越小。no-resolve是選用參數:匹配這條 IP 規則時,不主動為域名觸發解析;這不代表停用整個 App 的 DNS。- 若請求只有域名,沒有可用的目標 IP,含有
no-resolve的 IP 規則可能無法匹配;已有目標 IP 的請求仍可參與判斷。 - 設定區域網路直連規則時,應填入符合自身環境的網段;不要因為範例使用
192.168.1.0/24,就認定所有家庭網路都相同。
混用域名規則與 IP 規則時,應先列出明確的域名例外,再加入範圍較大的 IP 歸屬規則。這樣可避免目標因解析出的位址歸屬而提早套用其他策略。存取同一域名時,DNS 回傳的位址可能不同,因此 GEOIP 的判斷結果也可能隨目標位址改變。
4. 規則由上而下、命中即停止:為何 FINAL 要放最後
在一般線性規則清單中,請求會依排列順序逐條匹配;一旦符合某條規則,就採用該條指定的策略,不會繼續往下尋找「更精確」的規則。FINAL 不需要域名或位址條件,會接手此前未匹配的請求,因此必須放在規則清單末尾。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
- 存取
account.example.com:符合第一行,使用 DIRECT,後續的後綴規則不會再執行。 - 存取
images.example.com:第一行不符合,第二行符合,使用 PROXY。 - 存取目標位址
192.168.1.20:符合區域網路位址範圍,使用 DIRECT。 - 其他請求:先由 GEOIP 判斷;仍未符合任何規則時,最後使用 FINAL 指定的 DIRECT。
若將後綴規則放在完整域名例外之前,account.example.com 就會先套用 PROXY。若把 FINAL,DIRECT 放在最前面,後續規則便無法處理一般請求。若要「只代理指定網站」,可用域名規則列出目標,再以 FINAL,DIRECT 結尾;若要讓其他請求走代理,則需明確改成 FINAL,PROXY,兩者涵蓋範圍不同。
5. 在 Config 編輯規則,讓新連線套用設定
將規則寫入檔案,不代表該檔案已經生效。還要確認目前選用的設定檔,以及 Home 中的 Global Routing。若要依設定檔分流,請選擇 Config;Proxy 與 Direct 不適合用來逐條驗證本文的規則清單,Scene 則涉及情境選擇,不適合用於單純的基礎規則測試。
-
保留原始設定
進入 Config,先備份目前檔案,或保留原始文字。確認要編輯的是目前正在使用的檔案,而不是另一份同名設定檔。
-
編輯規則區段
在 Config 點選目標檔案,進入 Edit Plain Text,找到
[Rule]。將具體例外放在前面,只在末尾保留所需的 FINAL 兜底規則;檔案中的其他必要設定區段也請保留。 -
儲存並選用設定檔
儲存修改並返回 Config,確認已選取剛編輯的檔案。遠端設定再次更新時,可能會覆蓋本機修改;測試前請保留自行新增的規則文字。
-
確認模式
返回 Home → Global Routing → Config,並確認自己的代理伺服器狀態。訂閱更新只會更新已有的服務資料,不代表會替你編寫或啟用本機規則。
-
驗證新連線
儲存後重新建立連線,再發出目標請求。檢查連線記錄中的目標主機、目標 IP 與實際採用的策略,不要只憑網頁是否開啟來判斷規則有沒有匹配。
驗證時一次只修改一個條件。例如,先讓單一完整域名使用 DIRECT,確認結果後再擴大為 DOMAIN-SUFFIX。瀏覽器快取、既有長連線及網站使用的其他資源域名,都可能影響觀察結果;重新發出請求時,必須確實建立網路連線,單靠快取頁面無法證明新規則已生效。
6. 規則未生效與網路錯誤:分開排查
「網頁無法開啟」不一定是規則語法錯誤。請先確認請求實際採用的策略,再檢查 DNS 與連線過程。以下列出的是 Apple 網路層可能回傳的英文錯誤訊息;App 或系統可能以本地化文字顯示,因此不一定每次都會在 Shadowrocket 中看到完全相同的提示。
錯誤:The request timed out.
原因與處理方式:請求未能在限定時間內完成,可能是目標無法連線,或所選伺服器的連線有問題;先檢查連線記錄中的 DIRECT 或 PROXY,再分別檢查對應的連線路徑,不要直接擴大規則範圍。
錯誤:A server with the specified hostname could not be found.
原因與處理方式:目標主機名稱解析失敗;先確認域名拼寫及目前設定中的 DNS,待解析恢復後,再檢查 GEOIP 或 IP-CIDR 是否取得匹配所需的目標位址。
| 觀察到的狀況 | 優先檢查項目 | 下一步 |
|---|---|---|
| 所有請求都使用相同策略 | Global Routing 是否設為 Config;FINAL 是否誤放在最前面 | 修正模式或規則順序,再建立新連線 |
| 主站符合預期,但圖片不符合 | 圖片請求是否使用了其他主機名稱 | 依據連線記錄補上實際資源域名,不要盲目使用關鍵字 |
| 完整域名例外未能匹配 | 前面是否已有範圍較廣的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD | 將具體例外移到範圍較廣的規則之前 |
| 域名請求未匹配 IP 規則 | 目標 IP 是否可用;是否使用了 no-resolve | 分辨 DNS 解析問題與規則條件不符 |
重點:用一筆新請求確認三項資訊
每次修改後,記錄「目標主機、實際策略、對應規則順序」。確認請求確實進入預期策略後,再排查該連線路徑的問題;不要將連線失敗與規則未匹配混為一談。