自訂規則須在啟用正確設定檔,並將 Global Routing 設為 Config 後才會生效。本文適合已匯入自己的伺服器資料、準備調整分流的使用者:先分清路由模式與規則策略,再依「具體例外在前、寬泛比對在後、FINAL 最後」的順序設定,最後以新連線確認實際結果。範例網域僅用於說明語法,並非服務位址。
一、先檢查 Global Routing,再確認規則是否生效
Shadowrocket(小火箭)的伺服器選擇、設定檔與全域路由屬於不同層級的設定。在 Home 選好伺服器,不代表要求一定會經過代理;Config 中儲存了規則,也不代表目前的路由模式正在使用這些規則。排查時,先前往 Home → Global Routing,確認目前選取的項目。
若要使用本文的規則分流,請選擇 Config(依設定檔路由)。Proxy(代理)與 Direct(直連)適合用來交叉檢查,不應根據這兩種模式的連線結果判斷某條設定檔規則是否命中。Scene(情境)用於情境式路由;若目前使用 Scene,也要確認該情境的設定,不能直接假設它等同於本文的 Config 測試條件。
Config:依設定檔分流
建議依據目前啟用的設定檔,決定要求採用哪種策略。本文所有規則順序與 FINAL 範例,皆以此模式為前提。
適用情境:日常分流、驗證自訂規則
Proxy:全域代理
讓納入用戶端處理的連線經由代理,用來確認現有伺服器是否能連線至目標,而非檢查分流清單的排序。
適用情境:暫時交叉測試、區分代理連線問題與規則問題
Direct:全域直連
讓納入用戶端處理的連線直接連至目標。此時網頁能開啟,不能據此推斷設定檔中的 PROXY 規則已生效。
適用情境:檢查本地網路的直接連線狀況
二、規則由上而下執行,不會自動依「精確度」排序
規則清單是一連串依序判斷的流程,不是會自動比較精確度的集合。要求符合前面的規則後,後續一般規則就不會再次選擇策略。因此,「完整網域比後綴更精確」只是編排規則時的依據,並不代表應用程式會自動替你調整優先順序。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在此範例中,目的地為 api.example.com 的要求會先符合第一行,採用 DIRECT;www.example.com 不符合第一行,但符合第二行,因此採用 PROXY;不符合這兩項條件的要求才會交由 FINAL 處理。這裡的 [Rule] 是文字設定檔中的規則區段標題,不需要重複加在每條規則前面。
三、DOMAIN-SUFFIX、IP-CIDR 與 GEOIP 各自比對什麼
一般條件規則通常寫成「規則類型,比對內容,策略」,並以英文半形逗號分隔。網域欄位只填主機名稱,不包含 https://、路徑或查詢參數。例如,網址中的 /account 不是 DOMAIN-SUFFIX 的比對對象;這類規則也不等同於網頁內容篩選。
| 關鍵字 | 寫法範例 | 比對方式 |
|---|---|---|
DOMAIN | DOMAIN,api.example.com,DIRECT | 比對完整主機名稱,不包含其下層子網域。 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 比對 example.com 本身及其子網域,不是比對任何包含此字串的網域。 |
IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 依 IPv4 位址範圍判斷;範例涵蓋 192.168.0.0 至 192.168.255.255。 |
GEOIP | GEOIP,CN,DIRECT | 依據目標 IP 的地理位置資料庫判斷,不依網頁語言或網域後綴判斷。 |
FINAL | FINAL,PROXY | 不填寫比對內容,用來接住前面規則未比對到的要求。 |
no-resolve 是附加選項,不是策略名稱。用於 IP 規則時,表示不會為了這條比對而主動將網域解析成 IP;若要求本身的目標就是 IP,仍可比對位址範圍。因此,包含此選項的 IP 規則未比對到某個網域要求,不能直接據此認定位址範圍寫錯。
- 完整網域的例外規則應放在相關 DOMAIN-SUFFIX 規則之前,例如先處理
api.example.com,再處理整個example.com。 - 區域網路位址範圍應依實際網路設定。
192.168.0.0/16並非所有家庭或辦公室網路都適用的通用值;網路也可能使用其他私有位址範圍。 - GEOIP 依賴資料庫與目標 IP。使用分散式服務的網域可能解析至不同地區,不能只憑網站名稱就判斷它必然符合
GEOIP,CN。 - 檢查文字設定檔時請使用英文標點;
FINAL,PROXY與使用中文逗號的文字並非相同語法。
四、PROXY、DIRECT、REJECT 與 FINAL 的組合方式
PROXY(代理)表示將符合條件的要求交由代理路徑處理;DIRECT(直連)表示直接連線至目標;REJECT(拒絕)表示阻擋符合條件的要求。規則中的 PROXY 不會建立伺服器,也不會提供連線憑證。使用前,使用者須先匯入自己的伺服器或訂閱資料,並確認相應的代理路徑可用。本網站不提供、不販售、不推薦節點、訂閱或服務供應商。
FINAL 用於後備,不代表「所有要求都強制採用這項策略」。只有前面的規則都未命中時,FINAL 才會生效。若要讓未命中的要求使用代理,請設定 FINAL,PROXY;若要讓未命中的要求直連,請設定 FINAL,DIRECT。兩者代表不同的分流選擇,沒有適用於所有網路的標準答案。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,DIRECT
這段設定示範四種結果:指定 API 直連、指定子網域範圍拒絕、其他範例網域走代理,以及未命中規則的要求直連。blocked.example.com 的 REJECT 必須放在整個 example.com 的代理規則之前,否則會先被較早的後綴規則比對到。這是教學用的精簡規則區段,並非適用於所有情境的完整設定。
- 為什麼不在最後同時設定兩條 FINAL?
- 前一條 FINAL 已經接住其餘要求,後一條不會成為第二次選擇。代理失敗也不代表要求會繼續往下嘗試另一條 FINAL;若要處理連線故障,應檢查代理或策略群組設定,而不是新增重複的後備規則。
五、在 Config 編輯規則,並以新連線驗證
先備份目前的設定檔,再修改一組能明確觀察結果的規則。以下路徑以行動版的 Home / Config 介面為例;不同平台的編輯入口可能有所差異,但核對重點始終是「正在編輯哪個檔案、目前啟用哪個檔案、Global Routing 使用哪種模式」。請勿將伺服器訂閱更新與規則檔編輯混為一談。
-
備份設定檔
前往 Config,確認目前啟用的設定檔,先儲存副本或匯出備份。重新下載遠端設定檔可能會覆蓋本機修改,因此測試前應保留可還原的版本。
-
編輯規則
在 Config 中,從該檔案的編輯入口前往規則編輯頁;使用純文字編輯時,找到
[Rule]。將具體例外放在寬泛規則之前,檢查清單末尾的 FINAL,並避免在既有規則區段中重複貼上區段標題。 -
確認路由模式
儲存並確認該設定檔已啟用,接著返回 Home → Global Routing → Config。在 Home 中也要確認已選取自己可用的伺服器,再開啟連線。
-
重新連線
關閉原本的測試頁面或應用程式連線,再重新連線至自己有權測試的目標。既有長連線可能繼續沿用先前的路徑;若頁面仍在重複使用原連線,單純重新整理並不能據此判定修改無效。
-
檢查連線記錄
開啟連線記錄,依目標主機名稱或 IP 找到剛產生的要求,確認實際採用的策略與可查看的規則資訊。每次只調整一處順序,並記錄修改前後的結果,避免多個變數同時變動。
例如,為自己管理的測試網域暫時新增一條精確的 REJECT 規則,並將它放在相關後綴規則之前;新連線應會遭到拒絕。改回 DIRECT 後,再確認直連是否成功。此流程應以連線記錄為準:網頁快取可能讓遭拒絕的頁面仍顯示舊內容,而頁面上的第三方資源也可能使用完全不同的網域。
六、自訂規則常見問題與排查順序
規則已儲存,為什麼仍然走代理?
先檢查 Home → Global Routing 是否仍設為 Proxy,再回到 Config 確認編輯的檔案就是目前啟用的檔案。確認這兩項無誤後,從規則頂端檢查是否有更早的後綴規則、位址範圍規則或其他規則已先比對到該要求。不要只檢查剛新增的那一行。
將 FINAL 改為 DIRECT 後,為什麼部分網站仍走 PROXY?
FINAL 只處理未命中的要求。檢查目標是否已符合前面的 DOMAIN 或 DOMAIN-SUFFIX;若要讓單一網域直連,請將完整網域的 DIRECT 例外規則放在相關寬泛規則之前。修改後重新建立連線,再確認結果。
使用 REJECT 後,為什麼頁面仍顯示部分內容?
先排除快取與既有連線,再查看實際發出要求的主機名稱。一個頁面可能同時使用主站、圖片、API 與靜態資源網域;拒絕其中一個網域不會自動涵蓋所有相關網域。依據連線記錄新增必要規則,不要直接拒絕整個位址範圍。
更新訂閱後,為什麼結果改變了?
先分清更新的對象:伺服器訂閱更新可能會變更伺服器項目與目前選擇;遠端設定檔更新則可能改動規則內容。返回 Home 確認選取的伺服器,再到 Config 檢查啟用中的檔案與規則順序。先對照備份確認變更,不要把所有問題都歸因於 FINAL。
規則符合 PROXY,但連線仍失敗,該怎麼辦?
規則命中只表示已完成路由選擇,不保證遠端連線成功。請確認現有伺服器參數、目前網路與目標服務狀態,並暫時使用 Global Routing → Proxy 對同一目標進行交叉測試。若兩種模式都失敗,應先檢查連線路徑,而不是繼續新增重複規則。
最後依固定順序檢查:先確認路由模式,再確認啟用中的設定檔,接著查看第一條命中的規則,最後檢查代理或目標的連線狀況。如此可將「未使用規則」、「規則順序不正確」與「策略正確但連線失敗」分成三類,避免反覆修改同一條 FINAL。