Shadowrocket .conf 設定檔結構詳解:General、Rule、Host、URL Rewrite 各段寫法

逐段解析 Shadowrocket 設定檔:[General] 管理全域參數、[Rule] 控制分流、[Host] 設定本機對應、[URL Rewrite] 改寫請求,並附範例與常見錯誤。

本文速覽

Shadowrocket(小火箭)的 .conf 檔案以不同區段管理設定,不是一份伺服器清單。本文適合已有自己的伺服器或訂閱、需要看懂現有設定的使用者:先確認目前使用的設定檔與 Global Routing,再逐一檢查全域參數、規則順序、本機對應和請求改寫,最後透過單項變更驗證結果。

一、先確認 .conf 檔案是否影響目前連線

重點是:編輯檔案,不代表目前連線已依該檔案進行分流。先在 Config 確認選取的設定檔,再返回 Home 檢查 Global Routing。若要測試 [Rule],應選擇 Config;Proxy 和 Direct 是整體路由模式,不能用來判斷某條分流規則是否正確。

Home 主要用來選擇伺服器及控制連線,Config 用來管理設定檔,Settings 用來管理 App 設定。伺服器訂閱更新和編輯 .conf 是兩回事:前者主要更新伺服器項目,後者則定義解析、分流等行為。訂閱已成功匯入,不代表設定檔中引用的策略名稱一定存在。

Global Routing 選項檢查時的意義
Proxy以整體代理模式測試目前伺服器,不適合用來驗證個別分流規則。
Direct以整體直連模式測試網路,不能據此判定 PROXY 規則失效。
Config依目前設定檔執行分流,是本文驗證規則時使用的選項。
Scene依場景設定決定路由行為;疑難排解時,先確認實際選取的場景。
  1. 在 Config 備份目前檔案,再開啟要修改的副本。
  2. 在 Home 選取已知可用的伺服器,使用 Connectivity Test 檢查基本連線能力。
  3. 將 Global Routing 設為 Config,儲存變更,並確認選取的仍是測試檔案。
  4. 重新建立連線,使用相同的目標網址比較修改前後的狀況。

二、區段標題與基本寫法:先看懂結構,再修改內容

區段標題使用英文半形方括號,標題下方的各行都屬於該區段,直到出現下一個區段標題。[General] 常見寫法是鍵值對,[Rule] 則以逗號分隔規則欄位。各區段的格式不盡相同,也不能用中文逗號取代英文逗號。

[General]
dns-server = system
ipv6 = false

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

[Host]
lab.example.com = 192.0.2.10

[URL Rewrite]
^http://www\.example\.com/ https://www.example.com/ 302

這段範例用於說明語法,不是適用於所有網路的建議設定。example.com 是示範網域,192.0.2.0/24 是文件專用的示範網段,不是可連線的真實伺服器。實際使用時,請依自己管理的網域和網路修改;不需要的 Host 和 URL Rewrite 行可直接刪除。

備份檔案 確認區段名稱 修改單一項目 啟用設定檔 驗證規則命中

請將檔案儲存為純文字 .conf,避免文字編輯器自動替換標點符號。註解另起一行較方便檢查;複製規則時,別把說明文字一併貼進欄位。檔案能匯入只代表基本格式獲接受,仍須確認策略引用及實際運作結果。

三、[General]:全域參數不是分流規則

[General] 會影響整份設定檔的整體行為。上方範例中的 dns-server = system 表示使用系統 DNS;ipv6 = false 則用來控制此設定檔的 IPv6 行為。不要將停用 IPv6 當成通用解法,也別同時更換 DNS、修改規則和切換伺服器,否則無法判斷是哪項變更影響結果。

General 檢查項目

區段標題
[General]
DNS 範例
dns-server = system
IPv6 範例
ipv6 = false
欄位格式
鍵 = 值

每次只修改一個參數,先記下原值再測試。

連線行為檢查項目

連線入口
Home 頂端開關
依需求連線
Settings → On Demand
規則測試
Home → Global Routing → Config
選取設定檔
在 Config 確認目前檔案

On Demand 負責依條件管理連線,不會取代 Rule 分流。

DNS 查詢成功、目標連線成功,以及最後採用正確策略,是三個不同的檢查項目。網域無法開啟時,先確認解析是否回傳預期的位址,再檢查連線記錄。即使解析成功,伺服器無法連線、目標連接埠不通或選錯策略,仍會造成存取失敗。

四、[Rule]:由上往下比對,FINAL 放在最後

[Rule] 決定連線使用哪種策略。一般規則通常由規則類型、比對內容和策略組成;FINAL 不含比對內容欄位。規則會依序檢查,連線一旦符合前面的規則,就不會因為後面有更具體的規則而重新選擇。因此,具體例外應放在較寬泛的條件之前。

[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
關鍵字範例說明
DOMAIN精確比對 api.example.com,優先於下方的網域後綴規則。
DOMAIN-SUFFIX比對 example.com 及其子網域,不是比對任意位置是否包含該文字。
IP-CIDR比對指定的 IPv4 網段;no-resolve 可避免為比對此規則而主動觸發網域解析。
GEOIP依 IP 地理資料庫比對 CN,結果取決於 IP 位址和資料庫內容。
FINAL前面的規則都未符合時使用 PROXY,應放在規則清單最後。

依照這個順序,api.example.com 會先符合 DOMAIN;其他符合後綴條件的子網域則使用 DIRECT。若對調前兩行,較寬泛的後綴規則會先符合,原本的精確例外便無法生效。這裡的 PROXY 是策略引用,不是協定名稱,也不是伺服器位址。

結論:先調整規則順序,再新增例外

若某個網域一直使用錯誤的策略,先檢查它上方是否已有 DOMAIN-SUFFIX 或 FINAL 規則命中。將精確規則移到較寬泛的規則之前,再重新發起連線驗證;不要重複新增相同規則。

若使用自訂策略群組名稱,必須確認目前設定檔確實有定義該名稱。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 是伺服器連線協定,不能只把協定名稱填在規則末尾,就取得對應的連線出口。規則負責選擇策略,伺服器項目則負責協定參數,兩者應分開檢查。

五、[Host]:本機對應不等於強制直連

[Host] 用來指定網域的本機對應,常見於受控環境下的固定位址測試。下方範例將 lab.example.com 對應至文件專用的示範位址 192.0.2.10。這項設定沒有指定連接埠,也沒有指定 DIRECT 或 PROXY;實際對外連線方式仍須依路由模式和規則判斷。

[Host]
lab.example.com = 192.0.2.10

若設定對應後連線逾時,先確認目標 IP 是否確實可連線,再檢查存取連接埠及規則命中情況。不要只因 DNS 結果改變,就認定設定正確。測試結束後應刪除臨時對應,避免真實伺服器位址變更後,舊的固定對應仍覆蓋正常解析結果。

六、[URL Rewrite]:比對 URL,不是變更連線出口

[URL Rewrite] 會使用正規表示式比對請求 URL,再指定替換目標與動作。下方範例將以 http://www.example.com/ 開頭的請求,以 302 重新導向至固定的 HTTPS 首頁。302 是 HTTP 狀態碼,不是連接埠號碼;此寫法也不會保留原路徑和查詢參數。

[URL Rewrite]
^http://www\.example\.com/ https://www.example.com/ 302
  1. ^ 限定從 URL 開頭開始比對,避免誤中其他位置相同的文字。
  2. \. 表示網域中的句點字元;在正規表示式中,未跳脫的 . 代表任意字元。
  3. 第二個欄位是固定目標位址,第三個欄位 302 指定重新導向動作。
  4. 先用受控的測試位址驗證單一規則,確認不會反覆重新導向後再保留。

改寫規則不是代理策略,也無法修復伺服器連線失敗。範例選用 HTTP 請求作為比對對象;不要因此假設所有 HTTPS 請求的完整路徑都能直接讀取和改寫。加密請求的可見性與憑證處理屬於另一層設定,不應為了測試這條 HTTP 範例而額外變更憑證設定。

若要保留路徑,必須明確設計擷取群組與替換參照,並分別測試首頁、子路徑及含查詢參數的請求。不要將範圍過大的正規表示式直接套用到所有網站;登入、付款或含簽章的 URL 對路徑和參數變動相當敏感,替換錯誤可能導致請求驗證失敗。

七、儲存後如何驗證:依現象找原因,不要整份替換

每次驗證都維持相同的網路、伺服器和測試目標,每次只修改一項設定。先用 Connectivity Test 排除基本連線問題,再查看目標請求的連線記錄及命中策略。延遲測試通過,不代表目標網站一定能存取;既有連線也可能沿用舊狀態,請先關閉目標頁面,再重新發起請求。

檔案已儲存,為什麼規則還是沒生效?

先在 Config 確認目前選取的檔案,再前往 Home → Global Routing 選擇 Config。重新建立連線後,存取相同目標;若仍使用錯誤策略,檢查該規則之前是否已有更寬泛的規則命中。

為什麼新增 Host 後,HTTPS 還是出錯?

確認對應 IP 上的服務是否接受原網域,並提供與原網域相符的憑證。Host 只會變更位址對應,不會改變憑證身分。先移除該對應並比較結果,不要用停用憑證驗證來掩蓋設定錯誤。

訂閱更新成功,為什麼 PROXY 還是連線失敗?

返回 Home 檢查目前選取的伺服器,並執行 Connectivity Test。訂閱更新成功只代表已成功取得項目;伺服器是否可連線、驗證參數是否正確,以及規則引用的策略是否存在,都需要分別確認。

一加入 URL Rewrite 就反覆重新導向,該先刪除哪一項?

先移除剛新增的那條改寫規則,保留其他設定重新測試。接著確認替換目標是否仍符合相同運算式,以及網站本身是否又重新導向回原位址;縮小比對範圍後,再單獨啟用該規則。

最後要區分兩種更新:伺服器訂閱更新後,檢查目前選取的項目是否有變動;遠端設定更新後,檢查本機編輯內容是否遭到覆蓋。需要長期保留的調整,應存入獨立的本機副本並記錄修改目的。要回復時,還原上一份已驗證的設定,比繼續堆疊未驗證的參數更容易找出原因。

免費下載 Shadowrocket