TROUBLESHOOTING · 故障排除
Clash 訂閱更新失敗的常見原因與自動更新設定方法
訂閱更新失敗多與網路環境、連結失效或用戶端快取有關。依序排查原因,並開啟定時自動更新,讓節點列表保持最新。
訂閱更新是怎麼一回事
訂閱地址本質上是服務商產生的一個 URL,請求之後會回傳一份 Clash 設定:通常是 YAML 文字,也可能是 base64 編碼的節點清單。用戶端按下「更新」時,會依序完成四步:向訂閱地址發出 HTTPS 請求、下載回傳內容、解析成設定、寫入本機並設為目前設定。
這四步裡任何一步出錯,畫面上都只會顯示「更新失敗」四個字。排查因此有固定順序:先確認網路能不能連通訂閱地址,再確認連結本身是否有效,最後處理用戶端的快取與解析問題。照這個順序走,絕大多數失敗都能在幾分鐘內定位到具體環節。
常見原因與排查順序
一、網路無法連通訂閱地址
訂閱網域被封鎖、DNS 被污染,是更新失敗最常見的原因。判斷方式很直接:把訂閱連結貼到瀏覽器網址列打開。能回傳一大段文字,表示網路層是通的;長時間轉圈或直接報錯,表示這條地址在目前網路下根本連不到伺服器。
- 用戶端已有可用節點時,先連上節點、開啟系統代理,再更新訂閱。Clash Verge Rev 的訂閱設定裡提供「使用系統代理」開關,打開後更新請求會走目前的代理,成功率明顯提高。
- 手邊沒有可用節點時,在能連上網路的環境(例如手機行動網路)用瀏覽器打開訂閱連結,把內容存成
.yaml檔,再用用戶端的「匯入本機檔案」方式加入。 - 把系統 DNS 改成
223.5.5.5或119.29.29.29這類公共 DNS,排除污染導致的解析錯誤。
二、訂閱連結失效
套餐到期、流量用盡、服務商重設訂閱 token,都會讓舊連結變成失效連結。瀏覽器打開後回傳的不是設定內容,而是 401、403 或一行英文錯誤訊息,基本可以判定連結已失效。
處理方式:登入服務商的會員後台,重新複製訂閱地址;在用戶端裡刪除舊訂閱項目,依新地址重新加入。注意有些服務商會區分 Clash、Clash Meta 等不同格式的連結,複製時要選 Clash 或 mihomo 對應的那一條。
三、用戶端快取與解析失敗
有兩種典型情況。一是更新看似成功,節點列表卻沒有變化——這是用戶端快取了舊設定,刪除訂閱後重新加入即可。二是直接報解析錯誤,常見原因是訂閱回傳的內容不是 Clash 格式:部分服務會依 User-Agent 區分回傳內容,用戶端識別不到時,可能回傳其他協定的節點清單,Clash 自然無法解析。
處理方式:確認訂閱地址帶有 target=clash 之類的格式參數;沒有的話用訂閱轉換工具產生 Clash 格式連結。另外,mihomo(Clash Meta)核心對新欄位的相容性最好,舊核心解析失敗的設定,換用 mihomo 核心的用戶端往往一次就能通過。
四、系統時間偏差導致 TLS 驗證失敗
系統時間與標準時間差太多,HTTPS 交握時憑證會被判定為不在有效期內,日誌裡會出現 certificate expired 或 x509 字樣。開啟系統的自動校時功能,校準後重試即可。這類問題在長期關機的裝置、重灌過主機板的機器上比較常見。
開啟定時自動更新
節點列表會隨服務商的調整不斷變化,全靠手動更新總會忘記。各用戶端的自動更新設定位置如下:
- Clash Verge Rev(Windows / macOS / Linux):在「訂閱」頁找到對應項目,點編輯圖示,在「更新間隔」填入分鐘數,例如
1440表示每天一次;留空或填0表示不自動更新。建議同時開啟「使用系統代理」。 - Clash for Android:在「設定」頁點訂閱項目右側的選單,選擇編輯,設定「自動更新間隔」,單位同樣是分鐘。注意系統背景限制:應用程式被清除後計時器會停止,間隔幾天手動補一次會更穩妥。
- Clash for Windows:Profiles 頁右鍵訂閱項目可設定更新間隔。該用戶端已停止維護,長期使用者建議改用 Clash Verge Rev。
- ClashX Meta(macOS):選單列圖示的設定選單裡提供手動更新與自動更新選項。
mihomo 命令列情境沒有介面開關,訂閱就是設定檔本身,用 cron 定時下載再熱載入即可:
# 每天 06:00 更新設定並通知 mihomo 熱載入
0 6 * * * root curl -fsSL "https://example.com/sub?target=clash" -o /etc/mihomo/config.yaml.tmp \
&& mv /etc/mihomo/config.yaml.tmp /etc/mihomo/config.yaml \
&& curl -fsS -X PUT "http://127.0.0.1:9090/configs" \
-H "Content-Type: application/json" \
-d '{"path":"/etc/mihomo/config.yaml"}'
兩個細節:先下載到暫存檔再用 mv 覆蓋,避免網路中斷時把可用設定寫成半個檔案;PUT /configs 觸發 mihomo 熱載入新設定,不需要重啟程序,前提是 external-controller 已開啟且監聽 9090 埠。
注意
自動更新間隔不宜太短。節點列表多數一天才變動一次,720 到 1440 分鐘已經足夠;請求太頻繁可能觸發服務商的限流機制,反而讓訂閱地址被列入黑名單。
手動更新與結果驗證
排查期間以手動更新為主:桌面用戶端在訂閱或設定頁點「更新」按鈕,Clash for Android 在設定頁下拉即可刷新。每次更新後核對三件事:
- 訂閱項目旁的時間戳是否更新到剛才;
- 代理頁的節點列表有沒有出現新節點、移除已下線的節點;
- 任選一個節點做延遲測試,確認能測出數值而不是逾時。
如果更新成功、時間戳也變了,但所有節點全部逾時,問題就不在訂閱,而是節點可用性或本機網路環境的問題。依照初次連線的標準流程逐項驗證:換節點、換網路、檢查系統代理與 TUN 模式的狀態。
常見問題
點更新沒有任何提示,也沒有報錯?
打開用戶端的日誌面板(Clash Verge Rev 在「日誌」頁)再點一次更新,把錯誤原文對照前文四種原因分類:出現 timeout 是網路問題,出現 401 或 403 是連結問題,出現 yaml 或 parse 字樣是格式問題,出現 certificate 是系統時間問題。
瀏覽器能打開訂閱,用戶端卻更新失敗?
優先開啟「使用系統代理」再更新;其次檢查是否同時開啟 TUN 模式與系統代理而產生衝突,關掉其中一個再試;仍然失敗就要懷疑 User-Agent 識別問題,換一條帶格式參數的訂閱連結。
自動更新會覆蓋我選好的節點嗎?
訂閱更新是覆蓋式的,節點列表會整體替換。多數用戶端會記住目前選取的節點名稱,更新後自動重新選取同名節點;只有節點被改名或下線時才需要重新選擇。
有多個訂閱,能合併在一起嗎?
mihomo 核心支援 proxy-providers,可在一份設定裡引用多個訂閱地址並聚合成代理群組;部分圖形化用戶端也提供多訂閱合併功能。合併後記得幫代理群組取容易區分的名稱,避免選節點時混淆來源。