撰寫規則時,先決定匹配對象,再選擇出站策略,最後確認規則順序。本文適合已在 Shadowrocket(小火箭)加入自己的伺服器,並準備編輯 Config 的使用者。閱讀後,你將能分辨網域規則與 IP 規則、寫出含 FINAL 的基本規則段,並透過連線記錄確認是否命中預期項目。文中的網域與保留地址僅用於說明語法,並非可供連線的服務。
一、規則生效條件與匹配順序
規則須寫在設定檔的 [Rule] 區段。本文列出的普通規則會由上而下依序檢查,命中後便採用該條指定的策略,不會繼續尋找後方「更精確」的項目。因此,例外規則應放在範圍較廣的規則之前,FINAL 則應置於末尾。
開始測試前,請在 Home → Global Routing 選擇 Config,並確認 Config 中目前啟用的檔案就是剛才修改的檔案。選擇 Proxy 或 Direct 時,不應再用本文的逐條規則結果解讀所有請求;Scene 涉及情境選擇,也不適合作為基本規則測試的起點。
規則決定流量如何處理,不會補上伺服器參數,也不保證目標可連線。即使命中 PROXY,若自己的伺服器地址、連接埠或驗證參數不正確,仍可能連線失敗。測試時應分別記錄「命中了什麼」與「連線是否成功」。
二、DOMAIN、DOMAIN-SUFFIX 與 DOMAIN-KEYWORD
網域規則的基本格式為 規則類型,匹配內容,策略,欄位之間以半形逗號分隔。匹配內容是主機名稱,不是完整 URL;請勿在網域欄位填入 https://、路徑、查詢參數或 :443。同一主機上的不同網頁路徑,無法透過這三種規則區分。
| 規則 | 匹配範圍 | 不匹配的範例 |
|---|---|---|
DOMAIN,example.com,DIRECT | 只匹配完整主機名稱 example.com | www.example.com |
DOMAIN-SUFFIX,example.com,PROXY | example.com 及其子網域,例如 img.example.com | notexample.com |
DOMAIN-KEYWORD,example,REJECT | 匹配網域中含有 example 字串的目標 | sample.test |
DOMAIN-SUFFIX 依網域層級匹配,通常最適合用來表示「此網域及其所有子網域」。不要寫成 *.example.com,直接填入 example.com 即可。DOMAIN-KEYWORD 的匹配範圍較廣,例如也可能匹配 myexample.test,使用前應確認不會誤匹配無關目標。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在這個獨立範例中,account.example.com 先命中第一條規則,因此使用 DIRECT;img.example.com 則命中第二條,使用 PROXY。如果調換前兩行,帳戶子網域會先命中後綴規則,後面的精確規則就不會生效。這是「規則順序」造成的結果,不代表 DOMAIN 的優先級低於 DOMAIN-SUFFIX。
結論:例外規則優先,範圍規則在後
同一網域下需要採用不同策略時,請將特定主機的 DOMAIN 放在 DOMAIN-SUFFIX 之前;只有明確需要依字串匹配時,才使用 DOMAIN-KEYWORD。
三、IP-CIDR、GEOIP 與 no-resolve
IP-CIDR 匹配目標 IPv4 地址所屬的網段,不匹配網頁名稱。斜線後的數字代表前綴長度:/32 表示單一 IPv4 地址,/24 則表示包含 256 個地址的網段。地址數包含網路地址等,並不等於可用伺服器的數量。
IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
IP-CIDR,198.51.100.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
上方的 192.0.2.8 與 198.51.100.0/24 是文件保留地址,僅用來示範格式。no-resolve 表示不為了匹配這條 IP 規則而額外觸發網域解析;若匹配階段已取得可用的目標 IP,仍可據此判斷。它不會關閉所有 DNS,也不是「網域和 IP 都自動匹配」的開關。
- 直接連線至 IP:目標地址可直接用於 IP 規則匹配,不必先透過網域取得地址。
- 連線至網域:能否命中 IP 規則,取決於匹配時可用的 IP 資訊、DNS 行為與
no-resolve,不能只看網域後綴推斷。 - GEOIP:
GEOIP,CN,DIRECT會依據所使用的地理資料庫對目標 IP 的分類進行匹配,不代表所有中文網站,也不代表所有以.cn結尾的網域。 - 地址可能變動:同一網域可能解析出不同地址;使用固定的
IP-CIDR時,請確認網段仍涵蓋實際目標。
若要讓特定網站採用指定策略,通常優先使用明確的網域規則,會更容易驗證。若要管理已知的地址或網段,再使用 IP 規則。地理資料庫的分類可能與服務實際部署位置不同,不能將 GEOIP 視為網站身分的證明。
四、PROXY、DIRECT、REJECT 與 FINAL 的差異
規則末尾的策略決定「命中後如何處理」。PROXY 表示透過代理出站,實際使用的伺服器仍取決於目前選擇及相關設定;DIRECT 表示直接連線至目標;REJECT 表示拒絕該請求。這些不是三種協定,也不能取代伺服器設定中的 Type、地址或連接埠。
| 寫法 | 含義 | 驗證重點 |
|---|---|---|
DOMAIN,example.com,PROXY | 該主機透過代理出站 | 命中規則後,確認實際使用的伺服器 |
DOMAIN,example.com,DIRECT | 該主機直接連線 | 目前網路能否直接連線至目標 |
DOMAIN,example.com,REJECT | 拒絕該主機的請求 | 確認拒絕是否符合原本的預期 |
FINAL,PROXY | 前面未命中的請求使用 PROXY | 確認兜底策略是否符合預期 |
FINAL 沒有「匹配內容」欄位,格式為 FINAL,策略,不要寫成 FINAL,example.com,PROXY。若將它放在中間,剩餘請求便會提前由它處理,後面的普通規則也無法按預期生效。兜底策略要選 DIRECT 或 PROXY,取決於自己的使用需求,沒有適用於所有設定的固定答案。
五、在 Config 中儲存並驗證基本設定
請先保留原設定檔的副本,再修改本機測試檔案。不要將下方規則段直接覆蓋完整設定檔的所有內容;它只展示 [Rule] 區段。若原檔案已經有這個區段,請在同一區段內調整,避免重複建立多個 [Rule] 區段而造成混淆。
-
保留副本
進入
Config,確認目前啟用的檔案,先備份內容,再準備獨立的本機測試設定。記下原本的 Global Routing 選項,以便測試後還原。 -
編輯規則
在
Config開啟測試檔案的編輯功能,找到[Rule],填入下方的基本範例。確認逗號、欄位數量與 FINAL 的位置後儲存。 -
啟用設定
在
Config選取已儲存的測試檔案,再前往Home → Global Routing → Config。確認 Home 中選取的是自己已有且參數正確的伺服器。 -
建立新請求
重新發起目標連線,並在 App 的連線記錄中確認目標、匹配規則與所用策略。既有的長連線不適合用來驗證剛修改的規則;必要時,請關閉目標 App 後再重新開啟。
-
逐條新增
確認基本設定的運作符合預期後,每次只新增一條規則並重複驗證。若結果有所變化,先移除剛新增的規則,而不是同時修改 DNS、伺服器與多組規則。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
這個範例的預期順序是:帳戶子網域先使用 DIRECT,其他 example.com 子網域使用 PROXY,接著才檢查地址規則與 GEOIP,最後由 FINAL 處理未匹配的請求。範例網域僅用來推演匹配結果;實際測試連線時,請改用自己有權存取且確切知道主機名稱的目標。
- 保留測試記錄:至少記下目標主機、命中的項目、實際策略與連線結果。
- 區分主機:同一個頁面可能同時向圖片、登入及 API 等不同主機發出請求;首頁命中預期規則,不代表所有附屬請求都會使用相同策略。
- 檢查是否被覆蓋:若設定檔來自遠端更新,請確認更新是否會取代本機修改,並另外保留自訂內容。
六、規則未生效與 timeout 的排查順序
「頁面無法開啟」不足以證明規則語法有誤。先確認目前使用的檔案與 Global Routing,再查看實際目標及命中的規則,最後檢查出站連線。不要一看到連線失敗就立即把所有規則改成 PROXY,否則會無法分辨問題出在匹配還是連線。
錯誤:timeout
原因:連線測試或請求未能在等待時間內完成;單憑這個結果,無法判斷問題出在規則、目標網路還是所用伺服器。
處理方式:先確認該請求實際命中的策略;若為 PROXY,請使用 Home → Connectivity Test 檢查目前的伺服器,並確認自己的地址、連接埠與驗證參數。
| 現象 | 優先檢查項目 | 調整方式 |
|---|---|---|
| 所有請求都使用相同的出站方式 | Home → Global Routing 是否選為 Config | 切回 Config 模式,再確認目前啟用的檔案 |
| 精確網域規則未命中 | 前面是否已有後綴或關鍵字規則 | 將需要優先執行的精確規則移到前面 |
| 後半段規則一直沒有生效 | FINAL 是否放在中間 | 將 FINAL 移至普通規則之後 |
| 主頁正常,但圖片或 API 失敗 | 失敗的請求是否來自另一個主機名稱 | 依實際目標補充規則,不要只根據網址列判斷 |
| IP 規則未如預期命中 | 確認實際目標地址、網段與 no-resolve | 核對匹配時可用的地址資訊,不要把網域歸屬等同於 IP 歸屬 |
最後檢查文字格式:使用半形逗號,保留 DOMAIN-SUFFIX 等關鍵字原文,不要把說明文字貼進規則行。DOMAIN 等三欄位規則與 FINAL 所需的欄位數不同;若新增了命名策略,也要確認目前設定中確實存在該名稱。還原原設定後若恢復正常,可作為縮小排查範圍的線索,但仍應透過逐條還原,找出具體原因。