本文適合已在 Home 新增連線資訊,準備在 Config 閱讀或修改 .conf 檔案的使用者。先分清連線參數與設定規則,再逐段查看 DNS、比對順序、本機對應與請求改寫,最後透過單項修改及請求記錄確認設定是否生效。文中的網域與位址範例僅用來說明語法,並非可直接使用的服務設定。
一、.conf 檔案與 Home 連線資訊的差異
Shadowrocket(小火箭)的 .conf 檔案是以方括號標示區段的文字設定檔。每個區段從標題開始,到下一個區段標題前結束。空行用來分隔內容,不能取代區段標題;檔案也不是 JSON,不必在每行加上雙引號或於行尾加逗號。
Home 中的伺服器位址、連接埠、憑證及協定選項,決定連線如何建立;Config 中啟用的設定則決定請求如何處理。只有規則檔、沒有可用的連線參數,無法建立代理連線。訂閱需向你的服務商取得;連線訂閱與遠端 .conf 設定檔用途不同,不能只憑網址以 https 開頭就判斷是哪一種。
閱讀時可以先找出所有區段標題,再確認每一行屬於哪種語法。[General] 和 [Host] 常見的是以等號連接的鍵值;[Rule] 常見以英文逗號分隔欄位;[URL Rewrite] 則包含正規表示式、目標與動作。不同區段的格式不要混用。
二、[General]:先查看全域設定與 DNS
[General] 存放全域行為設定。排查「連線測試有回應,但網域無法開啟」時,應先查看這裡的 DNS 設定,而非立即更換所有規則。以下僅列出一個設定項目,用來說明鍵值語法,並非完整設定檔。
[General]
dns-server = system
dns-server 用來指定解析器來源,system 表示使用系統 DNS。這不代表「所有 DNS 請求都會透過代理」,實際解析路徑也與網路環境及其他 DNS 選項有關。將解析器改為某個公共位址,也無法單憑此項確認網域一定能成功解析。
全域設定速查卡
- 所在區段
- [General]
- 設定項目
- dns-server
- 範例值
- system
- 語法
- 鍵 = 值
先確認目前的值,再記錄修改前後的解析狀況。
規則測試前提檢查卡
- 連線資訊
- 在 Home 檢查
- 設定檔
- 在 Config 確認已啟用
- 路由模式
- Global Routing → Config
- 自動連線
- Settings → On Demand
On Demand 管理連線的觸發條件,不會取代 [Rule] 的比對規則。
修改前先保存原值。若更換解析器後所有網域都出現解析錯誤,應先還原該項並重新測試,避免同時更動出站策略、對應與改寫。如此才能判斷是解析器無法連線,還是請求已成功解析、但後續連線失敗。
三、[Rule]:依序理解比對與策略
[Rule] 會由上而下比對,命中後便採用對應策略。較具體的網域規則通常排在範圍較廣的 IP 或地理規則之前;FINAL 則放在最後處理其餘請求。以下規則僅供理解結構;其中的 PROXY 必須有可用的代理出站設定。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
| 關鍵字 | 範例說明 | 閱讀重點 |
|---|---|---|
DOMAIN-SUFFIX | 比對 example.com 及其子網域。 | 不是比對任意字串中是否包含指定內容。 |
IP-CIDR | 比對 192.0.2.0/24 位址範圍。 | no-resolve 表示不會為了比對這條規則而主動解析網域。 |
GEOIP | 依據 IP 地理資料庫比對 CN。 | 判斷依據是 IP 資料,而非網站使用的語言。 |
FINAL | 將先前未命中的請求交由 PROXY 處理。 | 沒有網域欄位,不應寫成三欄位格式。 |
DIRECT 表示直接連線,不代表停止連網;PROXY 表示使用代理策略,也不會自動產生連線參數。若原始檔案使用自訂策略名稱,請確認對應策略確實存在,不要只替換文字而忽略其定義。
判斷方式:先確認路由模式,再調整規則順序
驗證 [Rule] 時,先將 Global Routing 設為 Config,再查看請求命中了哪條規則。若目前是 Proxy 或 Direct,請先切回 Config 後重新測試,不能據此判定規則語法失效;Scene 也不等同於某一條固定的 FINAL 規則。
上例中的 192.0.2.0/24 是文件範例位址範圍,不是供日常存取使用的目標。網域規則與 IP 規則處理的問題不同:前者比對網域,後者比對位址。尤其使用 no-resolve 時,不應直接把「網域請求未命中某條 IP 規則」判定為解析故障。
四、[Host]:本機對應不等於分流規則
[Host] 用來設定本機名稱對應。以下將範例網域指向文件專用位址,僅用來展示格式;若直接用該位址存取真實服務,預期不會取得有效的服務回應。
[Host]
demo.example.com = 192.0.2.10
這行設定回答的是「這個網域會解析到哪個位址」,而非「這個請求要使用哪條連線」。完成對應後採用什麼策略,仍須依路由模式和規則判斷。它不會變更瀏覽器網址列中的網域,也不會自動變更 HTTPS 憑證驗證所使用的主機名稱。
- 測試位址遷移:確認目標伺服器位址正確後,可透過明確的網域對應測試新位址;測試完成後請刪除臨時項目。
- 出現憑證錯誤:確認目標伺服器是否為原網域提供有效憑證。不要把對應至任意位址當成解決憑證問題的方法。
- 對應後仍走代理:檢查
[Rule]中的網域規則與最終策略,不要透過修改[Host]取代策略設定。 - 只有一個網域異常:先檢查是否留有舊的對應設定,再排查公共 DNS,以免漏掉本機覆寫項目。
五、[URL Rewrite]:區分位址對應與請求改寫
[URL Rewrite] 會比對並改寫可處理的請求 URL,不是 DNS 設定,也不是網域分流規則。以下以將 HTTP 位址重新導向至 HTTPS 位址為例,說明「正規表示式、目標、動作」的寫法。
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
^與$用來限定比對範圍,避免只比對 URL 中的一部分。example\.com中的反斜線會讓點號表示字面上的點;未跳脫的點在正規表示式中則可比對其他字元。(.*)會擷取斜線之後的內容,目標中的$1則引用第一組擷取結果。302表示暫時重新導向。改寫後的請求仍須能解析網域並建立連線。
如果瀏覽器透過 HSTS 或自身的 HTTPS 優先機制,在送出請求前就升級了位址,上述 HTTP 規則可能沒有可比對的請求。此時應檢查實際送出的 URL,而非只依網址列最初輸入的內容判斷。
改寫與對應應分開驗證:[Host] 會影響名稱解析為位址的結果,[URL Rewrite] 則會影響符合條件的請求 URL。同時修改兩者會擴大排查範圍,尤其重新導向後主機名稱有所變更時,還須重新檢查該主機名稱的解析結果與策略。
六、在 Config 中修改、啟用與驗證
看過檔案不代表設定已生效。請在 Config 確認目前啟用的設定,再編輯副本;不要只憑檔名判斷目前使用的是哪一份。遠端設定更新也可能覆蓋本機修改,應將自行維護的內容與遠端來源分開管理。
- 保存原始內容。記錄目前的設定名稱、
dns-server值與 Global Routing 模式,並保留修改前的副本。 - 選擇一個測試目標。使用自己有權存取、且知道預期行為的網域。本文的 example.com 和文件專用 IP 僅用來說明語法,不能作為代理可用性的測試目標。
- 一次只改一處。例如只調整一條
DOMAIN-SUFFIX規則的位置,暫時不要同時更換 DNS 或新增改寫規則。 - 儲存並確認已啟用。必要時重新建立連線並送出新請求,避免將既有連線或快取結果誤認為新規則的測試結果。
- 核對請求記錄。比對實際網域、命中的規則、出站策略與錯誤類型。解析失敗、連線逾時及憑證錯誤屬於不同環節,應分別處理。
若修改後出現異常,先還原剛才變更的項目,再重複相同測試。只有還原後能穩定改變結果,才有依據繼續縮小排查範圍。訂閱更新成功只代表相應內容已取得並完成處理,不代表 Config 中的規則已變更;同樣地,遠端設定更新成功也不代表 Home 中的連線憑證已更新。
七、設定檔常見問題
修改了 [Rule],為什麼連線路由沒有改變?
先在 Config 確認修改的是目前啟用的檔案,再檢查 Global Routing → Config。接著重新送出請求,確認是否先命中上方範圍較廣的規則;若是,將具體規則移到該規則之前,再重新測試。
已經寫了 PROXY,為什麼還是連不上?
返回 Home 檢查目前選取的連線是否有效,並確認位址、連接埠與憑證都與服務商提供的資訊相符。PROXY 只指定處理策略,無法補齊 Shadowsocks、VMess、VLESS 或 Trojan 所需的連線參數。
更新訂閱會連手寫規則也一起更新嗎?
先確認更新的是連線訂閱還是遠端設定。連線訂閱主要用來管理伺服器項目;手寫規則則應在 Config 中核對。遠端設定請保留本機副本,並在更新後逐項比較自訂內容是否仍存在。
可以直接把幾份 .conf 檔首尾串接嗎?
不要直接串接。先依區段整理內容,檢查同名設定、重複對應、策略名稱與規則順序,並將 FINAL 留在規則末尾。合併後先用少量已知請求驗證,再逐步加入其他內容。
需要繼續排查,可參閱疑難排解;需要確認設定與關鍵字的意思,可查看功能與設定或術語表。閱讀與測試都應以自己的設定和請求記錄為依據,不要將範例檔案當成通用線路設定。