本文速覽

本文適合已在 Shadowrocket 使用自己的訂閱,並準備檢查本機設定檔的使用者。先釐清連線資料與 .conf 的用途,再認識四種段名、規則順序及改寫格式,最後一次只修改一項並驗證結果。範例僅說明語法,不是可直接套用於現有環境的完整設定。

1. .conf 管什麼:先分清設定檔與連線資料

Shadowrocket(小火箭)的 .conf 是文字設定檔,方括號中的段名會決定後續內容由哪類功能讀取。[General] 通常用來設定參數,[Rule] 用來依序排列規則,[Host] 用於本機網域對應,[URL Rewrite] 則描述 URL 比對與處理方式。不同段落的語法不能互換。

Home 中已有的連線資料,與 Config 中選取的設定檔並非同一回事。更新訂閱通常是同步連線項目;編輯本機 .conf 則是調整請求處理方式。訂閱更新不代表目前生效的規則檔也已更換;反過來,匯入 .conf 也不代表已備妥可用的連線資料。

4 種段名
本文檢查 General、Rule、Host、URL Rewrite
1 個兜底規則
FINAL 放在規則末尾,處理未比對到的請求
2 類資料
分別檢查 Home 連線項目與 Config 設定檔

開始編輯前,先在 Config 確認目前選取的檔案,並保留原檔副本。回到 Home 檢查 Global Routing:驗證 [Rule] 時請使用 Config。Proxy 與 Direct 會改變全域分流方式;Scene 則還涉及情境設定。這些狀態不能與 Config 中逐條比對規則的測試結果混為一談。

  1. 在 Config 確認選取的檔案,而不只是確認檔案已匯入。
  2. 開啟該檔案的編輯入口,確認段名使用半形方括號。
  3. 在 Home 確認已有連線項目,再將 Global Routing 設為 Config。
  4. 儲存修改後,重新建立測試連線,避免沿用修改前的長連線。

2. [General]:讀取全域參數,不在此處撰寫分流規則

[General] 使用 鍵 = 值 的格式。參數的作用範圍取決於各鍵的定義,並非「放在最上方就能覆蓋所有段落」。例如,DNS 參數會影響解析行為;繞過參數則關係到部分流量是否進入處理流程,兩者都不能取代 [Rule] 中的網域規則。

[General]
dns-server = system
skip-proxy = 127.0.0.1, localhost

此處的 dns-server = system 表示使用系統 DNS 設定,並非指定某一台固定伺服器。127.0.0.1 是本機迴路位址;將它列入 skip-proxy,與讓某個公網網站走 DIRECT 並不相同。這段內容只示範兩種參數寫法,不是通用的網路最佳化方案。

Settings → On Demand 管理的是依條件建立或中斷連線的行為,並非 [General] 的同義入口。排查設定時,若連線自動恢復,也應檢查 On Demand 的觸發條件;不要把自動重新連線誤認為 .conf 未儲存。

3. [Rule]:由上而下比對,FINAL 負責最後兜底

[Rule] 中的規則會依序判斷,通常由類型、比對值及策略組成。對於可完成比對的請求,最先符合的規則會決定策略;並非「網域越長就自動優先」,也不是「最後一行會覆蓋前面所有規則」。較具體的例外應放在較廣泛的規則之前。

[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

在上方範例中,api.example.com 會先符合 DOMAIN,並使用 PROXY;www.example.com 則可符合後面的 DOMAIN-SUFFIX,並使用 DIRECT。若將後綴規則移到精確網域規則之前,前者就會先符合,原本為 API 設定的例外也會失效。

關鍵字比對依據檢查重點
DOMAIN完整網域不填寫協定、連接埠或路徑
DOMAIN-SUFFIX網域及其子網域較具體的例外規則要放在前面
IP-CIDRIPv4 位址範圍確認位址、遮罩與解析條件
GEOIP目標 IP 的地理位置資料庫不是依網站顯示語言判斷
FINAL前面沒有符合規則的請求放在最後,不填寫網域

no-resolve 是 IP 規則的附加選項,表示不為這條 IP 規則額外發起網域解析。這不代表關閉整個 App 的 DNS,也不代表網域請求一定會符合該網段。判斷時須一併確認請求是否已取得目標 IP。

結論:規則未生效時,先檢查模式與最先符合的規則

先將 Home → Global Routing 設為 Config,再檢查目標規則之前是否有更寬泛的規則。確認請求符合哪一行後,再決定是否修改策略;不要先改連線協定或 DNS。

PROXY 與 DIRECT 表示策略,不是協定名稱。PROXY 所使用的連線也必須在現有環境中可用;將 FINAL 改成 PROXY 不會自動建立連線項目。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 等連線類型,與 DOMAIN-SUFFIX、IP-CIDR 等比對類型,分屬不同層次。

4. [Host]:指定解析位址,不直接選擇出站策略

[Host] 用於本機網域對應。以下將一個測試網域指向文件範例位址:左側填寫網域,右側填寫 IP 位址。此處的 192.0.2.10 屬於文件範例位址範圍,不應視為可連線的服務伺服器。

[Host]
demo.example.test = 192.0.2.10

Host 的作用是影響適用的解析結果,並不是填入網域就會自動直連。請求最終使用 DIRECT 或 PROXY,仍須配合 Global Routing、規則及實際出站路徑判斷;若網域交由遠端解析,也不能假設本機對應一定會決定最終目標位址。

Host 對應檢查

段名
[Host]
左側
demo.example.test
右側
192.0.2.10
處理對象
網域至位址的本機對應

網域後方不要加路徑,IP 位址中也不要附加連接埠。

Rule 策略檢查

段名
[Rule]
比對類型
DOMAIN
比對值
demo.example.test
策略範例
DIRECT

選擇 DIRECT 只代表採用直連策略,不會替目標提供可用位址。

Host 對應也不會改變 HTTPS 憑證必須符合網域的要求。即使解析到指定 IP,若目標伺服器沒有為該網域提供正確憑證,仍可能發生憑證錯誤。此時應檢查伺服器的網域設定,而不是將憑證錯誤歸因於規則優先順序。

5. [URL Rewrite]:分別檢查正規表示式、目標網址與狀態碼

[URL Rewrite] 常見的重新導向格式為「比對表達式、目標 URL、重新導向狀態碼」,各項以空白分隔。它處理的是 URL,不是單純比對網域;正規表示式中的句點、括號與邊界符號都有語法意義。

[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302

這條規則會比對以 http://example.com/ 開頭的網址,並將捕獲到的後續部分放入目標網址的 $1。例如輸入 http://example.com/docs?a=1 時,預期的重新導向目標為 https://example.com/docs?a=1。這是語法範例,不需要前往外部測試頁面。

能否處理 HTTPS URL,取決於是否在合法授權範圍內解密加密流量,以及相關設定是否完整。只新增 URL Rewrite 規則,不會自動取得 HTTPS 的路徑或內容。本文以 HTTP 輸入示範格式,不要求新增 HTTPS 解密設定或信任憑證。

6. 儲存後如何驗證:依功能分開測試

設定檔中的段落順序,不等於請求處理的完整執行順序。不能把四個段落由上而下解讀成固定流程。驗證時應先確認選取的檔案與全域模式,再分別檢查解析、規則比對及 URL 行為;每輪只變更一項因素。

備份原始檔案確認選取項目修改單一項目重新建立連線檢查結果
  1. 建立基準:保留一份可正常使用的設定,記錄測試網域、網路類型及 Global Routing 狀態。
  2. 檢查語法:確認方括號、等號、半形逗號與拼字無誤,並確認規則沒有放錯段落。
  3. 驗證規則:在 Config 模式下建立目標請求,並查看 App 提供的連線記錄,確認目標、策略與比對結果;若有記錄,應以記錄為準,不要只憑頁面開啟速度判斷。
  4. 驗證對應:使用自己管理且服務設定正確的網域,確認實際目標位址;不要用本文的文件範例位址測試連線。
  5. 驗證改寫:使用自己管理的 HTTP 測試入口,檢查目標位址與跳轉次數,避免舊快取掩蓋設定變更。
  6. 異常時還原:恢復原設定並重新建立連線。若還原後恢復正常,再單獨加入剛才修改的項目。

遠端設定與本機檔案也應分開管理。若編輯的檔案會被遠端更新覆蓋,請先另存獨立副本,並確認實際選取的是副本。訂閱更新與遠端設定更新應分別檢查,不能只因 Home 的連線項目有變化,就判定本機規則已遭替換。

7. 常見問題:檔案已儲存,為什麼結果仍不如預期?

把 FINAL 放在第一行,後面的規則還會生效嗎?

FINAL 應放在規則末尾,用來處理前面沒有符合的請求;提前放置會使後續規則無法發揮預期作用。請將精確例外移到較廣泛的規則之前,再把 FINAL 留在最後重新測試。

修改 Host 後,為什麼網站仍沒有直連?

Host 不會選擇出站策略。先檢查 Home → Global Routing,再查看 [Rule] 中該網域符合的策略;同時確認解析是否由本機處理,避免將遠端解析結果誤認為本機對應失效。

訂閱剛更新,為什麼 Config 中的規則沒有變?

連線訂閱與設定檔是不同類型的資料。請回到 Config 檢查選取的檔案及其來源;若要更新遠端設定,請操作對應的檔案,不要反覆更新 Home 中的連線訂閱。

儲存後沒有變化,需要刪除原檔嗎?

先不要刪除。確認修改的是目前選取的檔案,儲存後重新建立連線,再以新的請求測試。若連線自動恢復,請檢查 Settings → On Demand 的條件,並確保前後測試條件一致。

完整的排查記錄至少應包含:選取的設定檔、Global Routing 狀態、修改的段名與具體行、測試目標及觀察結果。分享記錄前,請移除訂閱網址、權杖與連線憑證;通常保留相關規則及已去識別化的目標資訊,就足以討論比對邏輯。