Shadowrocket(小火箭)的 .conf 是依段落編排的文字設定檔,不是伺服器訂閱。閱讀時先辨認方括號中的段名,再查看參數、比對條件與策略;套用時也要確認 Home → Global Routing 已選擇 Config。本文適合已有自己的連線資料,準備檢查或修改設定檔的使用者,介紹四種常見段落的用途、可讀範例與逐項驗證方式。
1. 先辨認段名:.conf 不是伺服器清單
設定檔以 [General]、[Rule] 等段名區分內容。段名之後的項目都屬於該段,直到下一個段名出現為止。段名中的方括號、鍵名中的連字號,以及規則中的英文逗號都有語法用途,不能改成中文標點。[URL Rewrite] 中間的空格也要保留。
伺服器資料說明「連線到哪裡、使用什麼協定與驗證參數」;設定檔主要說明「如何解析、如何分流,以及是否改寫請求」。即使檔案中出現 PROXY,也不代表裡面已包含可用伺服器。以下內容假設使用者已有自己的服務供應商與訂閱,並已在 Home 選好伺服器。
| 段名 | 處理項目 | 無法取代的內容 |
|---|---|---|
[General] | DNS、IPv6 等全域參數 | 特定網域的流量分流規則 |
[Rule] | 網域、目標 IP 等比對條件與策略 | 伺服器位址與驗證資料 |
[Host] | 指定網域的本機解析對應 | HTTP 重新導向或連線策略 |
[URL Rewrite] | 可處理的 URL 與改寫動作 | 自動解密所有加密流量 |
本文片段僅供理解語法,並非可直接覆蓋現有檔案的完整設定。example.com 是示例網域;192.0.2.10 屬於文件專用示例位址範圍,不應用來測試實際服務。編輯前請保留原始檔案,也不要公開分享含有私人位址、驗證資訊或訂閱憑證的完整設定。
2. General:先確認全域參數,再修改分流規則
[General] 使用「鍵名 = 值」的格式。以下只示範三個常見參數的讀法,不代表適用於所有網路的建議組合。尤其是 DNS 與 IPv6,變更後可能影響解析結果或位址選擇,不能因為「暫時連得上」就認定設定普遍正確。
[General]
dns-server = system
ipv6 = false
bypass-system = true
General 參數
- dns-server
system表示使用系統 DNS。- ipv6
false表示在此設定中停用 IPv6 支援。- bypass-system
true表示略過部分系統流量。
這些參數會影響全域行為,並非依網域逐條比對的規則。
Rule 策略
- PROXY
- 交由代理策略處理,仍須有可用伺服器。
- DIRECT
- 採用直連策略,不透過代理伺服器轉送。
- REJECT
- 拒絕符合條件的請求。
全域參數與規則策略各有不同用途,排查時一次只修改其中一項。
例如,只有某個網域連線路徑不正確時,應先檢查 [Rule],不要直接更換 DNS。若多個網域都無法解析,再檢查 dns-server 與目前使用的網路。ipv6 = false 也不會統一變更裝置上的其他網路設定,因此不能據此斷定裝置上的所有 App 都不再使用 IPv6。
3. Rule:由上而下比對,FINAL 放在最後
[Rule] 常見格式為「規則類型,比對內容,策略」。FINAL 不需要比對內容,後面直接接策略。規則通常由上而下採用第一條符合的項目,因此越具體的例外越要放前面,兜底規則則放在最後。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN,api.example.com,DIRECT:只比對這個完整網域,作為下一條後綴規則的例外。DOMAIN-SUFFIX,example.com,PROXY:比對example.com及其子網域;後綴比對會檢查網域邊界,不是比對任意字串是否包含。IP-CIDR,192.0.2.0/24,DIRECT,no-resolve:比對指定的 IPv4 網段;no-resolve可避免只為檢查這條規則就主動解析網域。GEOIP,CN,DIRECT:依目標 IP 的地理位置資料判斷,不是依網頁語言或網域後綴判斷。FINAL,PROXY:前面的規則都未符合時,採用代理策略;這不代表請求一定能成功。
依照這組順序,api.example.com 會先符合完整網域規則;www.example.com 則會符合後綴規則。若調換前兩條,完整網域的例外就會被上方範圍較廣的後綴規則先行匹配。這是「規則明明寫了,看起來卻沒生效」的常見原因。
4. Host:變更解析結果,不會改變 URL
[Host] 可將指定網域對應至指定位址。以下這一行表示「將此網域解析為這個位址」,不是讓瀏覽器跳轉至 IP 位址,也不是直接指定 DIRECT 或 PROXY。
[Host]
lab.example.com = 192.0.2.10
解析位址變更後,瀏覽器網址列仍可顯示 lab.example.com;使用 HTTPS 時,請求所用的網域仍須與伺服器憑證正確相符。若將網域對應至只能回應其他網站的位址,可能會出現憑證錯誤、開啟錯誤網站或連線失敗,不會自動取得預期內容。
區分「連到哪個位址」與「採用哪條路徑」
Host 解析對應
- 確認完整網域是否拼寫正確。
- 確認對應的 IP 是否仍提供相應服務。
- HTTPS 仍須符合網域與憑證的要求。
Rule 流量分流策略
- 確認網域規則及其排列順序。
- 確認 IP 規則與解析後的位址。
- 使用 DIRECT 或 PROXY 指定連線策略。
Host 與 Rule 可以同時使用,但對應位址不能取代策略,策略也無法修正錯誤的對應位址。
本機對應會明確覆寫原有解析結果,服務位址變更後須重新確認。若問題只在新增 Host 後出現,請先移除該筆對應、儲存並重新建立連線,再測試同一個網域;不要同時修改 DNS、規則順序與伺服器,否則無法判斷是哪項操作讓問題排除。
5. URL Rewrite:比對式、目標與動作要一起看
[URL Rewrite] 用來定義 URL 改寫規則。以下範例會將特定 HTTP 網域的根路徑重新導向至 HTTPS,末尾的 302 表示暫時重新導向。此例僅用來說明語法與比對範圍,不代表應對所有網站套用同一條規則。
[URL Rewrite]
^http://example\.com/$ https://example.com/ 302
- 比對式:
^限定開頭,$限定結尾;\.表示一般句點,避免將網域中的句點視為正規表示式萬用字元。 - 目標位址:
https://example.com/是重新導向的目的地。此範例使用固定目標,不會保留其他路徑或查詢參數。 - 動作:
302是重新導向狀態碼,不是伺服器連接埠,也不是代理協定。
由於比對式包含結尾限定,這條規則不會比對 http://example.com/docs 或附帶查詢字串的網址。修改比對範圍前,應先確認是否需要保留路徑與參數;若將所有請求都導向同一個根路徑,可能會影響登入回呼、搜尋結果或 API 呼叫。
6. 啟用與驗證:先確認 Config 模式,再逐項測試
檔案已儲存、檔案已選用、規則正在參與流量分流,是三種不同狀態。編輯完成後,請在 Config 確認目前選用的檔案,再返回 Home 檢查 Global Routing。以下比較的是 Shadowrocket 本身的模式,僅適用於進入其處理範圍的連線,並不保證涵蓋裝置上的所有網路活動。
Config
建議依目前設定檔中的規則選擇策略。未符合規則的請求會依 FINAL 的內容處理,並沒有一律「其餘流量直連」的規定。
適用情境:驗證本文的 Rule 範例,以及日常依規則分流。
Proxy
以代理作為全域路由模式,不依 Config 的逐條分流結果選擇路徑。切換後可協助判斷問題是否與規則選擇有關。
適用情境:暫時對照代理路徑;不適合用來驗證 DOMAIN-SUFFIX 的匹配順序。
Direct
以直連作為全域路由模式。此時網站可以存取,不代表設定檔中的 PROXY 規則已生效。
適用情境:對照目前網路的直連狀況,區分代理路徑與目標服務問題。
Global Routing 中的 Scene 可依情境設定路由行為,不能直接視為 Config。初次檢查設定檔時,請先明確選擇 Config;若也啟用了 Settings → On Demand,請留意自動連線條件,避免將自動重新連線誤認為剛才修改檔案的效果。
-
保留原始檔
前往 Config,保留目前可用設定的副本,再編輯準備測試的檔案。不要直接用範例片段覆蓋全部內容。
-
選用檔案
在 Config 儲存修改,並確認目前選用標記所對應的檔名;遠端檔案也要留意後續更新是否會覆蓋本機修改。
-
確認模式
前往 Home → Global Routing,選擇 Config,再確認 Home 中選定的伺服器是使用者已有且可用的伺服器。
-
重新建立連線
若要排除舊連線的影響,請在 Home 關閉再開啟連線開關,接著重新送出目標請求;不要只重新整理仍沿用現有連線的頁面。
-
逐項重新測試
先使用 Home → Connectivity Test 檢查基本連線狀態,再測試特定網域;每次只修改一條規則或一個參數,並記錄結果。
Connectivity Test 的結果不能取代完整的應用程式層級驗證:測試成功不代表某條 URL Rewrite 已執行,也不代表特定網站的所有資源都採用相同策略。網站通常會請求多個網域;若主頁正常但圖片載入失敗,應分別檢查相關網域,不要只新增一條範圍過廣的規則。
7. 常見問題:設定檔正確,行為卻不如預期
我寫了 DIRECT,為什麼流量還是走代理?
先確認 Home → Global Routing 是否選擇 Config,再檢查目前選用的設定檔。接著查看該規則上方是否已有範圍較廣的 DOMAIN-SUFFIX 或其他比對項目。將具體例外移到廣泛規則之前,儲存後重新建立連線再測試。
更新訂閱後,Rule 會自動換成新規則嗎?
伺服器訂閱更新與設定檔更新是兩回事。Home 中的伺服器清單有變化,不代表 Config 中的規則檔也已更新。請分別檢查伺服器清單與目前設定檔;若設定檔來自遠端網址,更新前先儲存本機修改,避免內容之後遭到覆蓋。
Host 已設定 IP,為什麼 HTTPS 仍然出錯?
先確認該 IP 是否提供對應網域的服務,以及伺服器憑證是否涵蓋該網域。暫時移除 Host 項目,重新建立連線,再開啟同一個網址進行比較。不要把停用憑證驗證當成修正網域對應問題的方法。
只新增 FINAL,PROXY 就能連線嗎?
不行。FINAL 只指定兜底策略,不會提供伺服器位址、連接埠或驗證資料。請先確認 Home 中已有自己的伺服器並已選用,再執行 Connectivity Test。若連線本身失敗,繼續增加網域規則通常無法解決問題。
最後依序確認:目前使用的檔案、Global Routing 模式、規則順序、DNS 與 Host,以及特定請求的實際狀況。更多關鍵字用法請參閱規則參考;模式選擇請參閱代理模式說明。每次變更前後都保留檔案,比一次替換多組參數更方便復原與找出問題。