Shadowrocket(小火箭)的 .conf 是設定文字檔,不是連線方案。本文適合已有可用連線、準備閱讀或修改設定的使用者:先釐清四個分段的用途,再逐項修改設定副本,最後在 Global Routing 的 Config 模式確認規則。範例僅用來說明語法,網域與網址都是文件範例值,不能視為可用服務。
1. 先看分段標題,再確認每一行的格式
方括號代表一個分段的開頭。[General] 下方的設定由 General 管理,直到出現下一個分段標題為止。空白行只是方便閱讀,不能取代分段標題。編輯時請保留英文關鍵字、半形逗號、等號與方括號,避免輸入法將標點改成全形字元。
四個分段不是四種代理協定,也不是依檔案順序執行的四道網路關卡。General 提供全域參數,Rule 選擇要求的處理策略,Host 指定網域對應,URL Rewrite 則依照運算式處理符合條件的 URL。真正講究「由上而下」的是 Rule 內部的比對順序,不要將這項規則直接套用到整份檔案。
[General]
dns-server = system
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
[Host]
test.example.com = 192.0.2.10
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
2. General:全域參數不等於分流規則
General 常見的寫法是 參數名稱 = 參數值。例如 dns-server = system 代表使用系統 DNS。這項設定會影響解析行為,不代表「所有要求都直連」或「所有要求都走代理」。要求採用哪種策略,還要看目前的 Global Routing 模式與適用規則。
[General]
dns-server = system
修改 DNS 前,先確認問題發生在哪個步驟:是網域解析失敗,還是已取得目標位址但連線失敗。不要同時修改 DNS、規則與遠端連線參數,否則即使結果有所變化,也無法判斷是哪項設定造成的。現有設定可能包含其他 General 參數;本文的一行範例不能當作取代整個分段的依據。
- 保留原設定中有效的參數,只修改本次要確認的項目。
- 參數值使用半形字元;不要直接在值後方加上中文說明。
- 不要在 General 中加入
DOMAIN-SUFFIX或FINAL,這些項目屬於 Rule。 - 如果系統 DNS 與指定解析器回傳的結果不同,先記錄解析結果,再判斷是否需要調整。
3. Rule:一併確認比對範圍、策略與順序
Rule 的典型格式為 類型,比對內容,策略。DOMAIN-SUFFIX,example.com,PROXY 會比對 example.com 及其子網域,並套用 PROXY。比對內容不含 https://、路徑,也不是完整 URL。若只要比對單一主機名稱,使用 DOMAIN 更明確。
[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
在這組範例中,api.example.com 會先符合 DOMAIN,因此不會繼續比對後面的 DOMAIN-SUFFIX。其他 example.com 子網域則可符合後綴規則。如果調換兩行順序,範圍較廣的後綴規則會先比對,單一網域的例外設定便無法如預期生效。FINAL 用來處理前面都未符合的要求,通常放在最後。
依網域比對
- DOMAIN
- 比對完整網域,例如 api.example.com。
- DOMAIN-SUFFIX
- 比對 example.com 及其子網域,不是比對任意包含該字串的內容。
- DOMAIN-KEYWORD
- 依網域中的關鍵字比對,比對範圍可能比預期更廣。
將具體例外放在較廣泛的比對規則之前;網域規則不填寫 URL 路徑。
依位址比對與預設規則
- IP-CIDR
- 比對 IP 位址範圍;192.0.2.0/24 是本文使用的文件範例網段。
- GEOIP
- 依目標 IP 的地理位置資料庫比對,結果取決於資料庫記錄。
- FINAL
- 不填寫比對內容,直接設定 FINAL,PROXY 等預設策略。
no-resolve 可避免這條 IP 規則額外觸發網域解析,不代表停用所有 DNS。
DIRECT 代表直連,PROXY 代表交由代理策略處理;策略名稱不是伺服器位址。GEOIP 的比對結果取決於 IP 與資料庫資訊,無法保證某個中文網站一定符合 CN。若只想為已知網域設定例外,應優先使用清楚的網域規則,而不是依網頁語言推測 GEOIP。
4. Host:指定解析位址,不負責選擇策略
Host 用來建立指定網域與位址之間的對應,常見格式為 網域 = IP位址。這與 Rule 的「符合後採用哪種策略」是兩回事。即使將網域對應到指定位址,也不代表該要求會自動採用 DIRECT;仍須搭配目前的路由模式與規則確認處理結果。
[Host]
test.example.com = 192.0.2.10
這一行只設定 test.example.com 的對應,不會自動涵蓋 example.com 的所有子網域。如果網站使用動態位址或分散式入口,固定位址可能在服務調整後失效。因此請記錄新增原因,並準備移除對應後再確認一次。不要長期保留來源不明的舊 Host 項目。
依修改目的區分 Host 與 Rule
需要指定解析位址
- 在 Host 中填入完整網域與確定的目標位址。
- 確認該位址確實屬於要連線的服務。
- 先移除本文的文件範例位址,再進行實際連線。
需要改變處理策略
- 在 Rule 中加入 DOMAIN 或 DOMAIN-SUFFIX。
- 選擇 DIRECT、PROXY 或已定義且有效的策略。
- 將特定例外放在廣泛規則與 FINAL 之前。
分別確認解析目標與路由策略;不要用 Host 取代分流規則。
5. URL Rewrite:依 URL 比對,不是依網域分流
URL Rewrite 以運算式描述要比對的網址,再指定替換結果或對應動作。以下示範將 HTTP 重新導向至 HTTPS 的 302 重導向:正規表示式中的 \. 代表字面上的句點,(.*) 擷取路徑內容,替換網址中的 $1 則引用第一個擷取群組。
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
- 輸入範例:
http://example.com/help。 - 替換目標:
https://example.com/help。 ^與$分別限定比對內容的開頭與結尾,避免只比對到網址中間的一段。302代表重新導向回應狀態,不是代理連接埠,也不是 Rule 的策略名稱。
此範例比對的是以 HTTP 開頭的 URL,不應理解為可以直接讀取所有 HTTPS 路徑。HTTPS 路徑位於加密內容中,處理路徑時還有其他前提;只新增 URL Rewrite 分段並不會自動滿足這些前提。本文不需要修改憑證相關設定,也不建議為了驗證這條 HTTP 範例而擴大修改範圍。
6. 儲存後選擇 Config,再逐項驗證修改
編輯檔案與套用檔案是兩個步驟。在 Config 中儲存修改後,還要確認目前選取的是這份設定檔。驗證 Rule 時,回到 Home → Global Routing 並選擇 Config;如果目前仍是 Proxy 或 Direct,就不能依據連線結果判斷剛修改的分流規則是否正確。
-
保留原始內容
在 Config 中找到目前使用的本機設定檔,先留存副本或備份原始內容。記下目前的檔名,不要直接覆寫唯一可用的設定檔。
-
單項修改
開啟目標設定檔的編輯入口,只調整一個分段中的一個項目。例如先加入
DOMAIN,api.example.com,DIRECT,不要同時修改 Host 與 DNS。 -
儲存並套用
儲存後返回 Config,確認已選用目標設定檔。再前往 Home → Global Routing → Config,確認本次測試確實使用規則分流。
-
重新發出要求
重新發出目標要求,避免只觀察已建立的長連線。記錄要求網域、預期策略與實際結果;必要時重新連線後再測試。
-
還原並比對
移除剛加入的那一行,再對相同目標進行一次確認。如果結果與預期不同,請回頭檢查比對順序與目前選用的設定檔,不要繼續疊加修改。
Config
建議依照所選設定檔中的規則處理要求。符合 DIRECT 或 PROXY,取決於規則內容與順序,並非固定採用「其他流量直連」。
適用情境:驗證本文的 Rule 修改,以及日常規則分流。
Proxy
以代理模式處理要求,不會依 Rule 逐項選擇分流策略。可用來對照代理連線是否可用,但不能用來證明規則有正確符合。
適用情境:在已有服務的前提下,區分檢查連線問題與規則問題。
Direct
以直連模式處理要求,不能用此模式的結果判斷 PROXY 規則是否正確。
適用情境:確認相同目標在直連條件下的狀況。
Global Routing 中的 Scene 涉及場景設定,不應與 Config 的規則驗證混為一談。Settings → On Demand 管理按需連線條件,也不是編輯 Rule 的入口。如果連線會隨網路條件自動變化,測試前應先確認這些獨立設定,避免將連線狀態變化誤判為 .conf 語法錯誤。
7. 設定未生效時,依現象縮小檢查範圍
「檔案可以儲存」只能表示編輯操作已完成,不能證明每條規則都符合預期。檢查時先確認檔案與模式,再核對目標、順序及語法。以下檢查項目不需更換服務,可在現有可用連線下逐一確認。
| 現象 | 優先檢查項目 | 確認方式 |
|---|---|---|
| 新增 Rule 後沒有變化 | 目前使用的檔案與 Global Routing | 確認 Config 選取了正確檔案,並在 Home → Global Routing 選擇 Config。 |
| 特定網域的例外規則未生效 | 規則排列順序 | 將 DOMAIN 例外放在範圍較廣的 DOMAIN-SUFFIX 之前,並保留 FINAL 在最後。 |
| 只有一個網域無法連線 | Host 中的固定對應 | 移除該網域的舊對應後重新測試,不要同時更換 DNS。 |
| URL Rewrite 沒有變化 | 協定、主機名稱與運算式 | 確認要求使用 HTTP 或 HTTPS,並檢查句點跳脫與路徑是否符合。 |
| 儲存檔案後發生解析問題 | 分段標題與半形標點 | 檢查方括號、逗號與等號;還原最近一次修改後,重新開啟設定檔。 |
使用者現有的訂閱通常用於維護連線資訊,不能直接將「更新訂閱」視為「本機目前使用的 .conf 已更新」。如果設定檔來自遠端來源,也要區分遠端原始檔與本機副本;之後更新可能改變原有內容。保留本機修改紀錄,比反覆匯入同一份檔案更容易追查問題。