訂閱格式解析:Clash 訂閱與其他連結格式如何互相轉換

整理常見訂閱連結的格式差異與適用用戶端,說明訂閱轉換原理與自建轉換服務的做法,並介紹如何避免節點資訊遺失及隱私風險。

先釐清訂閱網址、節點連結與設定檔

「訂閱」並不是單一檔案格式。使用者貼到用戶端的通常是一個 HTTPS 網址,用戶端向該網址發出請求後,伺服器才會回傳 Base64 文字、Clash YAML、JSON 或其他結構。網址只是取得內容的入口,回應本文的格式才決定用戶端能否解析。因此,同一個訂閱網址在瀏覽器中看似只是一串字元,交給不同用戶端卻可能出現「不支援的格式」、「設定解析失敗」,或匯入後沒有節點。

另一個容易混淆的概念是單一節點連結。以 ss://trojan://vmess://vless:// 開頭的內容,通常只描述一個代理節點;訂閱本文則可能將數十個節點連結合併成一份清單。Clash 原生設定進一步加入代理群組、規則、DNS、監聽連接埠等欄位,已不只是節點集合,而是一份可直接驅動代理核心的完整設定。

內容形式 常見特徵 主要用途 能否直接保留規則
訂閱網址 https:// URL,可能帶有驗證參數 定期擷取遠端內容 取決於伺服器回傳格式
單一節點 URI ss://trojan:// 分享單一節點的連線參數 不能
Base64 節點集合 解碼後通常每行一個 URI 批次分發節點 通常不能
Clash YAML 包含 proxiesproxy-groupsrules 供 Clash 或相容核心載入 可以
sing-box JSON 包含 inboundsoutboundsroute 供 sing-box 及相關用戶端載入 可以,但欄位架構不同

Clash YAML 與常見節點連結各自儲存哪些內容

Clash 設定由四類資訊組成

一份基礎 Clash 設定通常同時儲存監聽設定、節點、代理群組與分流規則。傳統 Clash 常見的本機混合連接埠是 7890,控制連接埠常見為 9090;這些數字只是常用預設值,用戶端也可能改用其他連接埠。節點位於 proxies,選擇、自動測速或故障轉移邏輯位於 proxy-groups,網域與網段的處理順序位於 rules

mixed-port: 7890
mode: rule
proxies:
  - name: "Tokyo-01"
    type: trojan
    server: edge.example.net
    port: 443
    password: "example-password"
    sni: edge.example.net
proxy-groups:
  - name: "節點選擇"
    type: select
    proxies:
      - "Tokyo-01"
      - DIRECT
rules:
  - DOMAIN-SUFFIX,example.org,節點選擇
  - GEOIP,CN,DIRECT
  - MATCH,節點選擇

這段範例說明了為什麼「將 Clash 轉成節點連結」通常會遺失資訊。Trojan URI 可以容納伺服器、連接埠、密碼、SNI 等連線參數,卻沒有統一位置儲存完整的 proxy-groupsrules。若轉換器只輸出單一節點 URI,代理群組的選擇邏輯、自動測速間隔及規則順序都會被捨棄。

節點 URI 之間也不是完全等價

轉換時不能只看協定名稱,還要核對傳輸層、TLS、Reality、WebSocket 路徑、gRPC 服務名稱、UDP 與用戶端指紋等參數。協定相同但擴充欄位不同,轉換結果也可能只能「成功匯入」,實際連線仍會逾時。

訂閱轉換服務的實際工作流程

訂閱轉換不是簡單地修改副檔名。轉換程式會先取得來源訂閱,再判斷內容屬於 YAML、JSON、Base64 節點清單或數個明文 URI;接著將不同輸入解析成內部節點物件,執行篩選、重新命名與排序,最後依照目標用戶端的欄位規則重新序列化。若目標是完整 Clash 設定,還要套用代理群組與規則範本。

  1. 擷取來源內容:向訂閱網址發出 HTTP 請求,處理重新導向、壓縮回應與字元編碼。
  2. 識別輸入格式:檢查回應標頭、文字結構與協定前綴,而不是只依據 URL 檔名。
  3. 解析節點參數:將伺服器、連接埠、驗證、TLS 與傳輸層欄位整理成統一結構。
  4. 執行篩選:依據節點名稱、地區關鍵字或正規表示式保留及排除項目。
  5. 套用範本:產生代理群組、測速群組、規則提供器與預設兜底規則。
  6. 輸出目標格式:產生 Clash YAML、單一連結集合或其他用戶端可讀取的結構。

為什麼轉換後的節點數量會改變

數量減少不一定是網路故障。轉換器可能主動略過無法識別的協定、缺少必要欄位的節點或名稱重複的項目。例如來源訂閱包含 86 個節點,其中 8 個使用目標核心不支援的協定,3 個缺少連接埠,2 個在去重後合併,最後輸出 73 個節點是可以解釋的結果。較穩妥的檢查方式,是比較轉換記錄中的「讀取、略過、輸出」三組數字。

數量增加則常見於範本展開或訂閱合併。兩個來源訂閱分別有 40 和 35 個節點,合併後可能產生 75 個節點,但代理群組中的引用數量會更多,因為同一個節點可以同時出現在「手動選擇」、「自動測速」和「故障轉移」三個群組中。代理群組的引用數不能視為實際節點數。

用戶端 User-Agent 會影響回傳內容

部分訂閱服務會根據請求的 User-Agent 回傳不同格式。用戶端宣告為 Clash 時會取得 YAML,使用一般瀏覽器存取時則可能取得 Base64 文字或管理頁面。因此,瀏覽器中看到的內容與用戶端實際下載的內容不一致並不罕見。排查時應在用戶端記錄中確認回應狀態碼與解析錯誤,而不是只靠瀏覽器頁面判斷。

將其他格式轉換為 Clash 設定

只有節點連結時,需要補齊代理群組與規則

將一組 ss://trojan://vless:// 連結轉換成 Clash YAML,第一步只是產生 proxies。如果設定沒有 proxy-groups,使用者就無法在介面中依群組選擇;如果沒有 rules,規則模式也缺少流量去向。最小可用範本通常至少包括一個手動選擇群組、一條區域網路直連規則和一條最終 MATCH 規則。

規則順序必須維持由具體到寬泛。DOMAIN,api.example.com,DIRECT 應放在 DOMAIN-SUFFIX,example.com,節點選擇 之前,而 MATCH 必須位於最後。若轉換工具重新排序規則,可能導致原本應直連的網域先命中後綴規則。

確認目標核心是傳統 Clash 還是 mihomo

「Clash 格式」本身也存在功能差異。傳統 Clash 設定常見的欄位不代表 mihomo 的全部功能;mihomo 增加或擴充了規則提供器、DNS、TUN、Sniffer 及新協定相關欄位。將 mihomo 設定匯入舊核心時,可能在不認識的代理類型或欄位處直接報錯,也可能忽略部分選用項目。

檢查項目 轉換後應核對的內容 常見現象
協定支援 目標核心是否能識別節點 type 匯入失敗或節點未顯示
TLS 參數 sni、憑證驗證與指紋是否保留 握手失敗、連線逾時
傳輸層 WebSocket 路徑、請求標頭、gRPC 服務名稱 連接埠可連通但代理無法使用
代理群組引用 群組內名稱是否與節點名稱完全一致 設定驗證提示找不到代理
規則提供器 遠端網址、行為類型、更新間隔 規則集下載失敗
DNS 與 TUN 位址段、監聽連接埠與網路介面設定是否衝突 啟用 TUN 後無法解析網域

從 Clash YAML 匯出其他格式時會遺失什麼

從完整 YAML 匯出為單一連結集合時,最先遺失的是全域設定。mixed-port: 7890、區域網路存取開關、執行模式、外部控制器、DNS 與 TUN 設定都不屬於單一節點 URI。接著遺失的是節點之間的組織關係,包括選擇群組、負載平衡群組、自動測速群組及其測試 URL、間隔與容差。

規則同樣無法自然附加到節點 URI 上。網域分流、IP 網段、程序名稱規則、規則提供器與最終兜底策略,必須由目標用戶端重新設定。若轉換目標是另一種完整設定格式,例如 sing-box JSON,轉換器可以嘗試對映這些結構,但雙方的路由語意並非逐項對應,仍需人工複核。

名稱與字元編碼也可能改變

自建訂閱轉換服務的部署思路

自建服務的主要目的,是讓訂閱內容在受控環境內完成解析。部署位置可以是本機、家用伺服器或私有雲主機。無論採用哪種實作,都應將「轉換介面」和「管理介面」分開考量:前者處理來源網址與輸出格式,後者負責範本、篩選規則與執行記錄。

本機執行適合單人維護

本機服務可以只監聽迴路位址,例如 127.0.0.1:25500,避免同一區域網路中的其他裝置直接存取。用戶端訂閱網址指向本機介面,再由轉換程式取得遠端訂閱。這種方式不需要將來源訂閱提交到公開網站,但電腦休眠或服務停止時,用戶端自動更新會失敗。

伺服器部署需要限制存取範圍

伺服器方案方便多部裝置更新,但應啟用 HTTPS、介面驗證、請求大小限制與存取記錄輪替。若轉換介面允許任何使用者提交 URL,還要防止它被用來存取內部網路位址。至少應拒絕迴路位址、鏈路本地位址與私有網段目標,並限制重新導向後的最終位址。

快取策略也要謹慎。假設上游訂閱每 6 小時更新一次,可將轉換快取設為 15 至 60 分鐘,避免每次用戶端啟動都重複請求;但快取檔案中包含完整節點憑證,必須同時設定儲存權限與過期清理。記錄中不應記錄完整查詢字串,只保留請求時間、輸出類型、狀態碼與去識別化的工作識別碼即可。

範本應納入版本管理

轉換服務升級後,預設代理群組名稱或欄位行為可能改變。建議為範本保留明確版本,例如 clash-template-2026-05.yaml,每次修改先在測試設定中驗證,再替換正式範本。節點訂閱與規則範本分開儲存,可以避免上游更新時覆蓋本地分流邏輯。

轉換完成後的五步驗證

  1. 執行語法驗證:先在用戶端匯入但不要立即啟用,確認 YAML 縮排、重複名稱與代理群組引用沒有錯誤。
  2. 核對節點數量:記錄來源節點數、略過數與輸出數,重點查看不支援的協定及缺少必要欄位的項目。
  3. 測試單一節點:選擇一個已知可用的節點進行延遲測試,再存取 HTTPS 頁面確認 TLS 與傳輸參數正常。僅看到 80 ms200 ms 的延遲數值,不能取代實際連線測試。
  4. 檢查規則命中:開啟用戶端連線記錄,分別存取預期直連與代理的網域,確認命中的規則和代理群組符合範本設計。
  5. 驗證 DNS 與 TUN:先測試系統代理,再視需要啟用 TUN。若系統代理正常而 TUN 異常,應檢查 DNS 劫持、虛擬網路介面權限與路由衝突,不要直接歸因於節點轉換。

在桌面用戶端中,設定入口名稱會因版本不同而變化,常見路徑是「設定」→「訂閱」更新遠端檔案,再到「代理」選擇代理群組;部分用戶端會將更新週期放在「設定」→「參數設定」。更新後應確認目前啟用的設定確實已切換到新檔案,避免實際測試的仍是舊快取。

常見轉換失敗現象與排查順序

訂閱網址能開啟,但用戶端卻提示解析失敗

先確認回應是否為用戶端需要的格式。瀏覽器顯示正常網頁,只能說明 HTTP 請求成功;若回傳的是登入頁、額度提示或 HTML 錯誤頁,Clash 仍無法解析。接著檢查回應狀態碼、重新導向後的網域與內容開頭。YAML 中混入定位字元、縮排層級錯誤或引號未閉合,也會導致整份設定載入失敗。

可以匯入,但所有節點都逾時

全部逾時時,通常應優先檢查轉換參數,而不是逐一更換節點。核對伺服器位址、連接埠、TLS 的 sni、WebSocket 路徑、gRPC 服務名稱與 Reality 公鑰等欄位。如果來源格式使用了目標格式無法表達的擴充參數,轉換器可能輸出看似完整但無法連線的節點。

更新後原有規則與分組消失

這通常是將「節點訂閱」直接當成「完整設定」覆蓋了本機檔案。正確做法是讓遠端節點透過代理提供器載入,或在轉換階段固定套用本機範本。節點資料負責變動,規則與分組由範本維護;兩者分離後,上游更新就不會直接重寫本機分流結構。

節點名稱正常,但代理群組卻是空的

檢查代理群組是靜態列出節點名稱,還是透過提供器引用。靜態名稱必須逐字相符,包括空格、大小寫與轉換器追加的序號。使用正規表示式篩選時,也應確認地區名稱是否在重新命名步驟後改變。例如先將「Hong Kong」改成「香港」,原本只比對 Hong Kong 的篩選表示式就會得到空結果。

選擇轉換方式時的實際建議

如果訂閱提供者已提供 Clash 或 mihomo 專用網址,優先直接使用該格式,減少中間對映。只有在來源格式與目標用戶端不相容、需要合併多個來源,或確實需要自訂分組與規則時,才加入轉換步驟。轉換鏈路越長,排錯時需要檢查的快取、範本與欄位對映就越多。

臨時遷移少量節點時,可以在本機完成單一連結轉換;長期使用多個訂閱,適合建立固定範本並記錄轉換器版本;需要跨裝置自動更新時,可以部署具備驗證機制的私有服務。無論選擇哪種方式,最終判斷標準都不是「成功產生檔案」,而是語法可載入、節點參數完整、規則命中正確,且更新流程可以重複驗證。

下載用戶端