Shadowrocket 設定檔 .conf 結構解析:General、Rule、Host、URL Rewrite 各段用途

逐段解析 .conf 設定檔:General 管理全域參數與 DNS,Rule 負責分流,Host 設定本機對應,URL Rewrite 改寫請求,並說明編輯後如何套用。

本文重點

本文適合已在 Shadowrocket(小火箭)匯入服務商訂閱,並想了解或修改本機設定的使用者。先分清連線參數與分流設定,再透過精簡的 .conf 範例辨識四個設定段,最後依序「備份、編輯、選用、測試」,確認修改結果,避免混淆 DNS、規則與請求改寫問題。

一、先分清 .conf、訂閱與目前連線

.conf 是文字設定檔,方括號中的名稱代表設定段。每個設定段都有自己的語法:[General] 常用鍵值對,[Rule] 使用逗號分隔規則,[Host] 儲存名稱對應,[URL Rewrite] 使用比對運算式、目標位址與動作。不可直接將某一段的寫法複製到另一段。

在 Home 匯入訂閱,主要是取得可用的連線項目;在 Config 選用設定檔,則是決定流量的處理方式。兩者彼此相關,但不是同一項操作。若已有自己的服務商與訂閱,請向服務商取得訂閱連結,並確認連結提供的是連線資訊還是完整設定檔。不要只憑副檔名判斷內容。

4 個設定段
本文解析 General / Rule / Host / URL Rewrite
3 個頁面
Home 管連線,Config 管設定檔,Settings 管設定
4 種模式
Global Routing:Proxy / Direct / Config / Scene

要測試 [Rule] 的分流行為,請在 Home → Global Routing 選擇 Config。Proxy 與 Direct 並非驗證該設定段規則的相同環境;Scene 還需檢查目前場景採用的設定。只儲存檔案而未確認目前模式,常會讓人誤以為「規則完全沒有變化」。

二、General:先看全域參數,再檢查 DNS

[General] 管理全域行為,包括 DNS 等設定。閱讀這一段時,先辨識等號左側的鍵,再查看右側的值。欄位名稱、英文標點與布林值都應維持原樣;不要把中文說明寫進值中,也不要以全形逗號取代半形逗號。

[General]
dns-server = system

這裡的 dns-server = system 表示使用系統 DNS。這不代表每條連線都直接連出,也不等於替所有請求指定代理。DNS 處理的是「如何解析名稱」,Rule 處理的是「連線採用哪種策略」;實際解析位置也可能受規則選項、代理協定與其他 DNS 設定影響。

General 閱讀重點

設定段
[General]
範例鍵
dns-server
範例值
system
格式
鍵 = 值

先保留可正常運作的 DNS 設定,每次只修改一個欄位。

Rule 閱讀重點

設定段
[Rule]
比對項目
DOMAIN-SUFFIX / IP-CIDR / GEOIP
策略
DIRECT / PROXY / REJECT
預設處理
FINAL,PROXY

DNS 設定不能取代策略,分流順序應在 Rule 中檢查。

若遇到「連線項目可用,但網域無法開啟」,先查看記錄,判斷是解析失敗,還是取得 IP 後連線失敗。前者應優先檢查 DNS;後者還要檢查命中的策略、目標連接埠與伺服器狀態。HTTPS 常用連接埠為 443,但服務商連線使用的連接埠不一定是 443,兩者不可混為一談。

三、Rule:依序比對,FINAL 放在最後

[Rule] 中的規則會由上而下依序比對,命中後便採用相應策略,不會為了尋找「更精確」的條件而繼續往下比對。因此例外規則應放在較寬泛的規則之前;FINAL 負責處理其餘流量,應放在最後。

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

此處的網域與 192.0.2.0/24 都是說明用範例,不代表任何線路資源。第一條規則拒絕指定主機;第二條規則讓 example.com 及其子網域直接連線。由於精確的拒絕規則在前,存取 blocked.example.com 時不會被後面的網域後綴規則放行。

關鍵字或策略用途檢查重點
DOMAIN-SUFFIX比對網域後綴及其子網域參數不含通訊協定、連接埠或路徑
IP-CIDR比對 IPv4 位址範圍no-resolve 可避免為這條規則主動解析網域
GEOIP依 IP 地理位置資料庫比對不是依網頁語言或網域後綴判斷
DIRECT直接連線至目標仍受本機網路與目標可連線性影響
PROXY透過代理策略連出確認已有可用的連線項目
REJECT拒絕符合條件的連線確認是否誤擋正常服務所需的網域
FINAL處理未命中前面規則的流量不填寫網域參數,並放在最後

結論:先找出第一個命中項目,再修改規則

發生分流錯誤時,先透過連線記錄確認實際主機名稱與命中策略,再將必要的精確規則移到較寬泛的規則之前;不要只在 FINAL 後面追加規則。

四、Host:變更名稱解析,不改變 URL

[Host] 用於設定本機名稱對應。以下範例將 lab.example.com 對應至文件專用位址 192.0.2.10。此位址不是可連線的測試服務;使用時應替換為自己有權管理且確實可連線的目標位址。

[Host]
lab.example.com = 192.0.2.10

若將網域指向某台伺服器後出現憑證錯誤,不能只因 IP 可連線就認定 Host 設定正確。該伺服器還必須正確處理原主機名稱與 TLS。若應用程式自行解析名稱或採用特定連線方式,也不要假設所有請求都會受到相同的本機對應影響;應以實際連線記錄為準。

五、URL Rewrite:比對請求網址並執行指定動作

[URL Rewrite] 處理 URL 比對與改寫,不是「將網域交給哪個連線」的分流表。以下透過 HTTP 轉向 HTTPS 的範例,說明其三個部分:正規表示式、目標位址與動作碼。

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

^ 和 $ 分別限制比對的起點與終點,\. 表示字面上的句點,(.*) 擷取後續內容,目標中的 $1 則引用第一組擷取結果。302 代表轉向動作;不要將此處的動作碼誤寫成 Rule 的 PROXY。

HTTPS 路徑預設無法直接讀取

上述範例比對的是 HTTP 請求。對已加密的 HTTPS 流量,一般代理轉送無法讀取完整路徑;若要改寫 HTTPS 請求內容,還需要符合 MITM 條件、設定目標範圍並信任憑證。不要為了測試單一規則而擴大到所有網域,也不要匯入來源不明的憑證。

排查時先確認原始請求確實是 HTTP,再檢查是否有舊的轉向快取。若瀏覽器因 HSTS 直接使用 HTTPS,HTTP 規則可能根本沒有比對機會。調整 Rule 順序無法解決此情況,因為兩個設定段處理的對象不同。若無法確認改寫行為,應先停用該規則並還原原始存取路徑。

六、編輯後如何套用:儲存、選用並重新建立連線

設定檔出現在 Config 清單中,不代表已經選用;文字儲存成功,也不代表既有的長連線會重新建立。建議先複製目前可正常運作的設定檔作為本機備份,再依照以下方式逐一驗證變更。不同平台的選單呈現可能不同,以下依 Home、Config、Settings 各頁面的用途說明。

  1. 確認檔案:在 Config 找到目前選用的檔案,記下名稱,再開啟編輯入口。請勿誤改其他尚未選用的檔案。
  2. 一次只修改一處:先修改一條規則或一組鍵值,保留原有設定段名稱與英文標點。檢查是否有重複的 FINAL,或規則是否放錯設定段。
  3. 儲存並選用:儲存編輯內容,返回 Config 確認該檔案仍是目前使用的設定檔。若出現語法提示,請先修正,不要繼續將它當成有效設定檔測試。
  4. 確認模式:返回 Home → Global Routing,選擇 Config,並確認目前的連線項目可用。
  5. 建立新連線:若可接受短暫斷線,請重新連線,再讓測試應用程式重新送出請求。必要時關閉舊頁面或重新啟動測試應用程式,以避免重複使用既有連線。
  6. 確認結果:以相同目標重複送出請求,查看命中的規則、策略與錯誤類型。不要只憑「網頁好像變快了」判斷設定是否生效。
備份原始檔案修改單一項目儲存並選用重新建立連線檢查記錄

遠端設定檔與本機編輯應分開管理。重新下載遠端檔案可能會覆蓋本機修改;更新 Home 中的連線訂閱,也不等於更新 Config 中的規則。若要長期維護自訂規則,請另存副本,並記錄每次修改的欄位與預期結果。訂閱更新後,也要確認設定檔引用的策略名稱仍然存在。

On Demand 不負責選擇規則

Settings → On Demand 管理依條件連線的行為,不是讓 .conf 生效的開關。排查時若發現手動中斷後又自動連線,請檢查 On Demand 條件;若連線維持正常但分流不符,則返回 Global Routing 與 Config 檢查。

七、常見問題:依據現象找出設定段

檔案已儲存,為什麼新增的規則仍未生效?

依序確認 Config 目前選用的檔案、Home → Global Routing 是否設為 Config,以及新規則是否排在 FINAL 之前。接著讓測試應用程式重新建立連線,並查看實際命中的規則。不要用修改前已建立的下載連線來驗證新規則。

修改 Host 後,為什麼 HTTPS 仍然出現錯誤?

檢查對應的 IP 是否提供原網域的服務,以及憑證是否涵蓋原網域。Host 只會改變名稱對應,不會改變請求中的主機身分。請先還原原本的對應進行比較,再決定是否繼續使用該目標位址。

訂閱更新後,自訂設定檔需要重新匯入嗎?

先判斷更新的是 Home 中的連線清單,還是 Config 中的遠端檔案。前者不需要照樣重新匯入本機設定檔,但要檢查已刪除或更名的策略參照;後者可能覆蓋本機修改,請先與備份比對,再決定是否選用。

URL Rewrite 沒有效果,需要修改 DNS 嗎?

先檢查原始請求的通訊協定、完整比對條件、擷取群組與動作碼,再排除轉向快取及 HSTS。只有記錄顯示解析失敗時,才應優先處理 DNS;不要靠更換 DNS 掩蓋正規表示式未命中的問題。

維護 .conf 的關鍵在於分清各段職責:General 決定全域參數,Rule 決定策略,Host 提供名稱對應,URL Rewrite 處理符合條件的請求網址。每次只修改一個環節,並保留可還原的副本,才能將設定變更與連線結果對照。

Shadowrocket 全平台下載與設定教學

iPhone / iPad 版在 App Store 售價 $2.99,一次性購買;系統需求以 App Store 頁面標示為準。Mac(Apple 晶片 / Intel)、Windows、Android、Linux 版免費。下載用戶端與購買線路方案是兩回事:購買用戶端不等於購買線路方案,訂閱請向你的服務商取得。

Shadowrocket 全平台下載