本文適合已完成首次連線、準備編輯 Config 的使用者。先分清比對條件與執行策略,再透過六種規則了解由上而下的比對流程。範例僅用於說明語法,並非可直接取代現有設定的完整配置;若要使用代理連線,須先備妥自己的服務商、伺服器與訂閱。
一、先確認 Global Routing,再修改 Config
Shadowrocket(小火箭)的規則會回答兩個問題:連線符合哪些條件,以及符合條件後要採用哪種策略。規則不會建立伺服器,也無法讓無法使用的伺服器變得可用。開始修改前,請先確認 Home 中已選取可用伺服器,並完成基本連線測試。
Home 用來管理伺服器與連線狀態,Config 用來管理配置檔,Settings 則管理 App 設定。若要依配置規則分流,請在 Home → Global Routing 中選擇 Config。只編輯檔案而未啟用對應配置,無法據此判斷規則是否有效。
| 模式 | 主要用途 | 本文的檢查方式 |
|---|---|---|
Config | 依目前配置中的規則決定策略。 | 測試規則時使用此模式。 |
Proxy | 以代理方式處理流量,而非依本文所述的網域規則逐條分流。 | 可用來比較代理連線是否可用。 |
Direct | 以直連方式處理流量。 | 無法用來驗證某條 PROXY 規則是否命中。 |
Scene | 依已設定的 Scene 決定路由行為。 | 先檢查 Scene 設定;若要了解單一規則檔,請使用 Config。 |
On Demand 決定何時建立或中斷連線,無法取代網域與 IP 規則。若連線會自動恢復,請另外檢查 Settings → On Demand。不要將自動連線的情況誤認為是某條 DOMAIN 規則所觸發。
二、規則結構與比對順序
多數基本規則採用「類型、比對值、策略」的逗號分隔格式。規則放在配置的 [Rule] 區段中,通常會由上而下依序檢查。第一條符合條件的規則會決定該連線採用的策略,後續更精確的規則不會自動覆蓋它。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在這段範例中,login.example.com 會先符合第一行,採用 DIRECT。www.example.com 不符合第一行,接著符合第二行,採用 PROXY。其他未符合任何規則的連線則由 FINAL 處理。若將第二行移到第一行之前,登入網域也會先符合後綴規則。
這些數字說明本文涵蓋的基礎概念,不代表 Shadowrocket 只支援六種規則。編輯時請使用半形逗號,每行撰寫一條規則;避免從富文字複製全形標點或隱藏字元。
三、DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD
網域規則比對連線所關聯的主機名稱,不會比對網頁路徑。請填入 example.com,不要填入包含通訊協定、連接埠與路徑的完整網址。即使某個詞出現在 URL 中,也不代表 DOMAIN-KEYWORD 會因網址路徑而命中。
| 寫法 | 會比對 | 不會比對 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,PROXY | example.com、api.example.com | notexample.com |
DOMAIN-KEYWORD,example,PROXY | 主機名稱中包含 example 的網域 | 只有網頁路徑包含 example 的請求 |
DOMAIN:指定單一主機的精確例外
DOMAIN 適合用來調整單一主機,例如讓 login.example.com 直連,同時讓其他子網域繼續使用代理。它不會自動涵蓋該主機的下層網域。精確例外應放在涵蓋範圍較大的規則之前。
DOMAIN-SUFFIX:根網域及其子網域
DOMAIN-SUFFIX 適合依網域邊界管理一組主機。填入 example.com 即可,不必加上 *.。此規則會涵蓋根網域與子網域,但不會將 notexample.com 視為相同後綴。
DOMAIN-KEYWORD:主機名稱子字串
DOMAIN-KEYWORD 的比對範圍較廣,容易涵蓋預期之外的網域。除非確實需要依子字串比對,否則優先使用 DOMAIN 或 DOMAIN-SUFFIX。關鍵字規則若放在前面,後面的精確規則同樣不會取得優先權。
四、GEOIP 與 IP-CIDR:依目標 IP 判斷
IP 規則使用目標位址,而非網址文字。存取網域時,可能需要先取得 DNS 解析結果才能進行 IP 比對。解析結果變動、位址資料庫差異及 CDN 調度,都可能影響實際比對結果。
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
GEOIP,CN,DIRECT 表示目標 IP 在使用的位址資料庫中歸屬 CN 時,採用 DIRECT。它只依據目標 IP 在位址資料庫中的歸屬,不會分析網頁內容或判斷業者所在地。中文網站可能使用不同地區的位址,同一個網域也可能解析出多個位址。
- IP-CIDR:
192.168.0.0/16涵蓋一段 IPv4 私有位址範圍,常用於明確的區域網路直連需求。請依實際網路範圍填寫。 - 前綴長度:IPv4 的
/32只比對單一位址,/24則涵蓋 256 個位址。數字越小,涵蓋範圍通常越大,請勿任意縮短前綴。 - no-resolve:此附加參數可避免僅為檢查這條 IP 規則而主動解析網域。它不會關閉全域 DNS,也無法保證網域請求一定會命中此規則。
- 範例位址:
192.0.2.0/24是文件專用的示例網段。此處用來展示語法,不代表需要在實際配置中拒絕某個真實服務。
如果目標使用 IPv6,只有 IPv4 的 IP-CIDR 規則不足以涵蓋該連線,請另外檢查相應的 IPv6 規則與網路設定。不要因為 IPv4 範例正確,就認定所有位址類型都已處理。
五、PROXY、DIRECT、REJECT 與 FINAL 的搭配
比對類型與策略是兩個不同層次的概念。DOMAIN-SUFFIX 決定「比對哪些網域」,PROXY 則決定「命中後如何處理」。將規則最後一欄從 DIRECT 改為 PROXY,只會改變連線方式,不會擴大網域比對範圍。
| 策略 | 執行方式 | 檢查重點 |
|---|---|---|
PROXY | 交由代理連線處理。 | 確認目前選用的伺服器或相關策略可正常使用。 |
DIRECT | 直接連線至目標。 | 確認目前網路可直接存取目標。 |
REJECT | 拒絕符合條件的連線。 | 確認拒絕範圍不會涵蓋必要的 API。 |
FINAL 是兜底規則,不含獨立的網域或 IP 比對值,格式為 FINAL,策略。請將它放在規則區段的最後。若將 FINAL 放在中間,後續規則便無法處理已由它兜底的連線。
[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
這段範例先處理明確例外,再處理較廣的範圍,最後設定兜底。ads.example.com 會遭拒絕;login.example.com 會直連;其他屬於 example.com 的網域則交由代理處理。即使這些網域解析至 CN 位址,也已由前面的網域規則決定策略,不會繼續比對 GEOIP。
六、在 Config 中儲存、啟用與驗證
修改前請保留目前可正常使用的配置副本。伺服器訂閱更新與規則檔更新是兩回事:Home 中的伺服器清單成功更新,不代表 Config 中的規則也已變更。由遠端維護的配置也可能在更新時覆蓋本機修改,編輯前請確認檔案來源。
- 確認基準狀態。在 Home 選取伺服器,開啟連線開關並執行 Connectivity Test。測試成功只代表相應的測試連線可用,不表示所有網站都能存取。
- 找到目前使用的配置。進入 Config,確認目前啟用的檔案。透過該檔案的編輯入口檢查
[Rule]區段,保留其他配置區段,不要用本文片段取代整份檔案。 - 一次只修改一個變數。新增需要的 DOMAIN 或 DOMAIN-SUFFIX 規則,並放在相關的寬泛規則與 FINAL 之前,然後儲存。
- 確認生效條件。啟用修改後的配置,並在 Home → Global Routing 中選擇 Config。必要時請重新建立連線。
- 重新送出請求。關閉原有頁面或相關 App 的連線後再測試。既有的長連線可能沿用建立時的連線方式,無法代表新規則的結果。
- 記錄實際狀況。參考連線記錄或日誌,核對目標主機名稱、目標 IP 與採用的策略。若問題仍未改善,請還原上一份可用配置,再檢查 DNS 或連線路徑。
測試時也要區分連接埠與規則範圍。HTTPS 常用的目標連接埠是 443,但 DOMAIN,example.com,DIRECT 本身並未限制「只比對 443」。如果網頁正常,另一項使用不同連接埠的服務卻無法使用,請檢查服務是否正在監聽及網路是否連通,而非直接判定網域規則失效。
七、連線失敗時,先分清錯誤訊息與規則命中
錯誤訊息描述連線失敗的某個環節,無法直接證明某條規則寫錯。以下兩種是網路診斷時可能出現的錯誤文字,並非 Shadowrocket 專用的規則語法提示。請一併檢查失敗的目標與實際連線方式,判斷原因。
錯誤:Connection refused
原因:目標端或中間設備主動拒絕連線,也可能是該連接埠沒有服務在監聽。
處理方式:先確認連線失敗的目標是代理伺服器還是網站,再核對相應的位址與連接埠;確認規則命中後,檢查該連線路徑上的服務狀態。
錯誤:Operation timed out
原因:連線未能在等待時間內完成,可能與網路路徑、過濾或目標無法連線有關。
處理方式:先在 Home 執行 Connectivity Test,再分別檢查 DIRECT 與 PROXY 路徑;一次只調整一條目標規則,避免同時更換 DNS 與伺服器。
REJECT 的預期結果就是阻止連線。若必要資源遭到拒絕,請縮小拒絕規則的範圍,或將明確允許的精確例外放在它之前。反覆重試不會讓已命中的 REJECT 規則自動改用 PROXY。
八、規則設定常見問題
為什麼新增 DOMAIN 規則後,子網域還是沒有變化?
DOMAIN 只會比對填入的主機名稱。若要涵蓋根網域及其子網域,請改用 DOMAIN-SUFFIX,並確認該規則位於其他可能命中的規則之前。若只需為單一子網域設定例外,新增專用的 DOMAIN 規則即可。
規則寫在最後一行,為什麼一直沒有生效?
先確認它是否位於 FINAL 之後。請將具體規則移到 FINAL 之前,再檢查前面的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD 是否已經命中。規則並非依「越後面優先權越高」的方式覆蓋。
GEOIP 已設定 CN,為什麼這個網站還是走 PROXY?
先檢查前面是否已有網域規則指定 PROXY,再確認目標的實際解析位址及其在位址資料庫中的歸屬。GEOIP 依據 IP 位址資料庫判斷,而非網頁內容。若要固定某個已知網域的連線方式,可在前面新增明確的 DOMAIN 規則進行驗證。
訂閱更新成功,為什麼規則仍是舊的?
伺服器訂閱與 Config 檔案需要分開檢查。請先到 Config 確認目前啟用的檔案及其規則內容,再判斷是否需要更新對應的遠端配置。更新前請儲存本機修改,不要將訂閱更新誤當成規則更新。
瀏覽器可以正常使用,但 App 裡的圖片仍無法開啟,該怎麼辦?
檢查圖片請求實際使用的主機名稱,不要只測試主網站。重新送出請求後查看連線記錄,確認是否使用其他資源網域、不同的目標 IP,或有 API 遭到 REJECT,再為明確目標新增範圍最小的例外規則。