先釐清需要遷移的四類內容
Clash for Windows(以下簡稱 CFW)停止維護後,遷移重點不是把舊程式資料夾整份複製到新客戶端,而是分別處理訂閱來源、設定加工邏輯、代理設定與 Windows 整合。本文以遷移至 Clash Verge Rev 為主軸。其他採用 mihomo 核心的客戶端也可依照相同順序檢查,但選單名稱、腳本入口與資料目錄不能直接照搬。
客戶端與核心是兩個不同層次的軟體。介面負責下載訂閱、開機啟動與切換系統代理;mihomo 核心則負責讀取最終設定、監聽連接埠並執行分流。舊客戶端的介面設定檔,不等於新核心可直接讀取的 YAML 檔案。
| 舊客戶端中的內容 | 遷移方式 | 需要重新檢查 |
|---|---|---|
| Profiles 中的訂閱 | 重新匯入原始訂閱網址 | 有效期限、回應格式、節點與策略組 |
| Parsers 與自訂規則 | 整理原有用途,改寫成目標客戶端的覆寫設定 | 執行順序、規則順序、策略組名稱 |
| System Proxy 與監聽連接埠 | 在新客戶端中重新設定 | 實際監聽位址、HTTP 與 SOCKS 連接埠 |
| Service Mode、TUN、開機啟動 | 重新安裝或啟用相應功能 | 服務權限、DNS、路由與啟動方式 |
如何挑選替代客戶端
- 想保留桌面版訂閱管理與覆寫工作流程:可優先考慮 Clash Verge Rev,並確認目前版本的腳本、合併設定與服務模式說明。
- 更重視不同裝置上的操作一致性:可比較 FlClash 等客戶端,但別預設其覆寫腳本與 CFW Parsers 相容。
- 只需要一般訂閱與規則模式:先從匯入訂閱、選擇策略組與設定系統代理開始,不必為了遷移而立刻啟用 TUN。
各客戶端的下載入口請見客戶端比較。安裝前先確認 Windows 架構與版本說明,安裝後在「關於」頁面記下客戶端版本與核心版本。遇到問題時,提供這兩項資訊會比只寫「最新版」更有幫助。
備份舊設定,保留可還原的連線方式
先確認 CFW 仍可正常使用,再進行備份。一般安裝方式的資料位於使用者目錄下的 .config/clash,但可攜式模式或自訂啟動參數可能會改變路徑。請從舊客戶端的設定目錄入口確認實際資料夾,不要只依照網路上的路徑自行搜尋。
- 保存原始訂閱網址,並記下訂閱名稱、更新時間與更新間隔。網址通常包含存取憑證,請只保存在可信任的本機位置。
- 備份本機 YAML、Parsers 內容與相關腳本。記下每段加工邏輯的用途,例如「將開發網站加入指定策略組」,不要只保存程式碼。
- 記下目前模式、選取的策略組、HTTP/SOCKS 連接埠、是否允許區域網路連線,以及 TUN 和 DNS 的自訂項目。
- 記下開機啟動、服務模式與系統代理狀態。先截圖,再結束舊客戶端,避免讀取尚未寫入磁碟的設定。
- 將備份複製到獨立資料夾。不要讓新客戶端直接使用舊客戶端的資料目錄,也不要在首次測試前解除安裝舊程式。
開始測試新客戶端前,先關閉 CFW 的系統代理與自動啟動,並確認其核心程序已結束。即使兩個客戶端使用不同連接埠,也可能輪流改寫 Windows 系統代理;同時執行兩個 TUN 執行個體,還可能讓路由與 DNS 行為難以判斷。
先匯入原始訂閱,再檢查產生的設定
在 Clash Verge Rev 的「訂閱」頁面使用匯入功能,貼上原始訂閱網址,再選取匯入的設定。不同版本的按鈕可能標示為「匯入」或「新增」,請以目前版本為準。此時先不要加入舊腳本,目的是確認新客戶端能下載訂閱,且 mihomo 能接受其內容。
不要混淆這三種網址
- 訂閱網址:回傳節點或完整設定,通常含有權杖,可作為更新來源。
- 服務商會員中心:開啟的是登入頁面,複製到訂閱欄位後通常會出現 HTML 解析錯誤。
- 本機匯出的 YAML:可用於離線排查,但通常不會自動恢復原訂閱的更新關係。
匯入後檢查節點數量、策略組與規則是否存在。節點數不同不一定代表資料遺失:回傳內容可能受訂閱參數、User-Agent 或服務商範本影響。先比對原始回應,再考慮調整要求標頭;不要將含有憑證的網址交給不明的線上轉換服務。
分三個層面驗證
- 下載層:訂閱更新成功,回應內容不是登入頁面、過期提示或空白內容。
- 設定層:核心成功啟動,記錄中沒有未知欄位、策略組參照不存在或 YAML 型別錯誤。
- 連線層:選取一個可用節點,實際發出請求測試。延遲測試成功只代表測試目標可連線,不能取代瀏覽器存取與分流驗證。
如果原訂閱必須透過 CFW 的 Parsers 才能正常使用,請先區分「格式轉換」與「追加規則」。一般追加規則可以在下一步重新建立;若回傳格式根本不適用 mihomo,應向訂閱提供者索取相容格式,而不是靠複製舊資料夾解決。
遷移 Parsers:保留邏輯,不照搬入口語法
CFW 的 Parsers 可依訂閱 URL 比對,再修改 YAML 或執行 JavaScript。Clash Verge Rev 的合併設定與腳本設定,使用各自的呼叫慣例與作用範圍。舊程式碼中的 parsers、reg、yaml 等外層結構,不能當成一般 mihomo 欄位貼進最終設定。
建議先將舊邏輯分成三類:新增或刪除規則、修改 DNS 等頂層欄位、改寫節點或策略組。每次只遷移一類,套用後查看客戶端提供的最終設定或執行設定,再處理下一類。需要精確的欄位說明時,請參閱規則語法與DNS 設定。
範例:將 GitHub 網域加入現有策略組
以下範例適用於使用 function main(config) 作為入口的 Clash Verge Rev JavaScript 腳本設定,並非 CFW Parsers 的完整替代檔案。範例假設訂閱中已有名為「節點選擇」的策略組;使用前請核對實際名稱,大小寫與空格都必須完全一致。
function main(config) {
const groups = Array.isArray(config["proxy-groups"])
? config["proxy-groups"]
: [];
if (!groups.some(group => group.name === "節點選擇")) {
throw new Error("找不到策略組:節點選擇");
}
if (!Array.isArray(config.rules)) {
throw new Error("目前設定缺少 rules 清單");
}
const customRule = "DOMAIN-SUFFIX,github.com,節點選擇";
config.rules = [
customRule,
...config.rules.filter(rule => rule !== customRule)
];
return config;
}
這段腳本會將規則放在最前面,並避免重複加入完全相同的項目。它只處理 github.com 及其子網域;GitHub 使用的其他資源網域不會因此自動納入。遷移時請保留明確的比對範圍,不要把單一範例擴大成未經驗證的完整網站規則集。
規則順序與合併方式是關鍵
- 規則通常依序比對:自訂規則若放在最終兜底的
MATCH後面,通常不會被執行。 - 陣列不一定會自動追加:不同合併入口可能會取代整個
rules陣列。修改後請確認原訂閱規則仍然存在。 - 訂閱層級與全域覆寫的範圍不同:只適用於特定訂閱的策略組規則,應綁定該訂閱,避免切換後參照到不存在的群組。
- 每次更新都會重新產生設定:直接修改快取或產生的檔案,更新後很容易遺失;請透過客戶端支援的持續性覆寫入口保存變更。
重新設定系統代理與連接埠,確認只有一個核心在監聽
不要因為舊介面的設定,就認定新客戶端也會使用 7890。以下以 127.0.0.1:7890 作為混合代理連接埠範例,實際操作請以新客戶端顯示的數值為準。mihomo 的 mixed-port 可在同一個連接埠接收 HTTP 與 SOCKS 代理要求;分開設定的 HTTP、SOCKS 監聽則可能使用不同連接埠。
先確認監聽正常,再啟用系統代理
在 PowerShell 中執行以下命令,查看範例連接埠的監聽程序。若新客戶端提示連接埠已被占用,請先用程序 ID 找出對應程式,不要直接結束不明的系統程序。
Get-NetTCPConnection -State Listen -LocalPort 7890 |
Select-Object LocalAddress, LocalPort, OwningProcess
Get-Process -Name "*clash*", "*mihomo*" -ErrorAction SilentlyContinue |
Select-Object Id, ProcessName, Path
確認監聽正常後,在新客戶端啟用「系統代理」。Windows 11 可前往「設定」→「網路和網際網路」→「Proxy」檢查手動代理位址;Windows 10 的對應路徑為「設定」→「網路和網際網路」→「Proxy」。連接埠應與新客戶端的 HTTP 或混合代理連接埠一致。
如果只在本機使用,通常不需要啟用允許區域網路連線。遷移時不要只為了排除連線錯誤,就將監聽位址改成所有網路介面,也不要將控制介面開放給區域網路。控制介面位址與金鑰屬於另一組設定,並非系統代理連接埠。
使用明確指定代理的要求,隔離問題
curl.exe --proxy http://127.0.0.1:7890 --head --max-time 15 https://example.com/
curl.exe --proxy socks5h://127.0.0.1:7890 --head --max-time 15 https://example.com/
範例設定了 15 秒逾時,並明確指定代理,不受瀏覽器是否讀取系統設定影響。第二條命令中的 socks5h 會讓目標網域交由代理端解析。收到 HTTP 回應表示這條測試路徑已建立,但仍需在連線面板檢查命中的規則、策略組與出口節點。
若瀏覽器可以連線、終端機卻不行,請繼續檢查終端機環境變數與應用程式本身的設定。HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 可能仍指向舊連接埠;WinHTTP 代理也與 Windows 使用者層級的系統代理分開管理。不要以為切換一次系統代理,就代表所有應用程式都已完成遷移。
基礎連線正常後,再處理 TUN 與 DNS
系統代理測試通過後,再決定是否需要 TUN。TUN 透過虛擬網卡與路由接管流量,可涵蓋部分不遵循系統代理設定的應用程式,但不代表所有流量都一定會經過遠端代理。最終流向仍取決於規則、路由排除項目與直連策略。
- 先關閉舊客戶端的 TUN,並確認舊核心與舊服務不會自動重新啟動。
- 依照新客戶端目前版本的說明安裝或啟用服務模式。舊 CFW 的服務不能直接當成新客戶端的服務使用。
- 先保留新客戶端產生的 TUN 基本設定,不要同時搬入舊虛擬網卡參數、DNS 劫持規則與自訂路由。
- 啟用 TUN 後,測試一般網站、區域網路裝置與休眠喚醒。企業 VPN 與其他虛擬網卡也應分別測試,避免同時啟用後難以找出衝突來源。
DNS 需要個別核對 enhanced-mode、fake-ip-filter、上游解析器與客戶端產生的覆寫。舊設定使用 fake-ip,不代表應原封不動複製所有舊 DNS 欄位;支援的欄位應以目前 mihomo 版本為準。若涉及規則化解析,也要檢查網域規則與 DNS 要求路徑之間的關係。
啟用 TUN 後若只有公司內網網域無法連線,請優先檢查企業 DNS 與分流需求;若只有區域網路位址無法連線,則檢查路由與直連規則。不要一開始就把整個內網範圍導向遠端節點。關閉 TUN、改用系統代理重新測試,是區分訂閱問題與虛擬網卡問題的有效方法。
更新驗證、故障排除與舊客戶端清理
不能只以「網頁能開啟」作為遷移完成的標準。至少手動更新一次訂閱、重新啟動一次客戶端,並確認 Windows 登入後能自動啟動。只有更新後自訂規則仍然保留,才表示覆寫已納入持續性流程。
| 狀況 | 優先檢查項目 | 下一步 |
|---|---|---|
| 匯入後沒有節點 | 訂閱回應、有效期限、格式 | 暫停覆寫,單獨驗證原始訂閱 |
| 套用設定失敗 | 腳本錯誤、規則目標、欄位型別 | 停用最近新增的修改項目 |
| 更新後規則消失 | 是否修改了產生的檔案 | 改用持續性腳本或合併設定 |
| 本機連接埠連線遭拒 | 核心狀態、實際連接埠、占用程序 | 先恢復監聽,再檢查網路 |
| 重新啟動後代理位址變回舊值 | 舊客戶端自動啟動、舊服務、其他代理程式 | 只保留一個代理管理入口 |
| 啟用 TUN 後內網無法使用 | 路由、DNS、企業 VPN | 改回系統代理,逐項重新測試 |
遷移完成前檢查清單
- 訂閱可手動更新,節點與策略組符合預期。
- 自訂規則命中正確,規則中的策略組名稱確實存在。
- 正常結束並重新啟動後,系統代理連接埠沒有被舊程式改回。
- 需要代理的瀏覽器、終端機或其他應用程式都已分別測試。
- 若已啟用 TUN,區域網路、DNS、休眠喚醒與其他 VPN 都已分別檢查。
- 原始訂閱網址、覆寫腳本與設定記錄已保存在獨立備份中。
完成以上檢查後,再解除安裝舊客戶端,並透過舊客戶端提供的管理方式移除不再需要的服務。若需要暫時復原,請先關閉新客戶端的系統代理與 TUN,結束其核心後再啟動舊客戶端;不要讓兩套程式同時接管網路。遷移後的日常設定可參閱連線驗證教學,訂閱維護步驟請見訂閱匯入說明。