Clash 訂閱格式詳解:YAML 設定、Base64 連結與通用訂閱互轉方法
拿到的訂閱連結用戶端認不出?先分清 Clash YAML、Base64 節點清單與各協定專用格式的差異,再介紹訂閱轉換的運作原理、常用參數與隱私注意事項。
拿到的訂閱連結用戶端認不出?先分清 Clash YAML、Base64 節點清單與各協定專用格式的差異,再介紹訂閱轉換的運作原理、常用參數與隱私注意事項。
把一條訂閱連結丟進瀏覽器打開,回傳的內容形態並不統一。多數排障問題的起點,其實是沒先分清回傳的到底是哪種格式,就直接假設用戶端「應該認得」。目前流通的訂閱內容大致分三類,處理邏輯完全不同。
判斷方法很直接:用瀏覽器或 curl 打開訂閱連結,看回傳內容第一行。如果是 port:、mixed-port:、proxies: 這類 YAML 鍵值對,就是 Clash 原生設定;如果是一長串沒有換行、全是字母數字加等號結尾的字元,大概率是 Base64;如果每行都以協定名加 :// 開頭,則是裸文本節點清單。
提示:很多面板同時提供多種格式的訂閱位址,差異通常只在 URL 參數或路徑後綴上(例如 ?clash=1 或 /clash),遇到無法識別的訂閱前先檢查面板後台是否已經提供了 Clash 專用連結,往往比手動轉換更省事。
能被 Clash 核心直接使用的訂閱,骨架大致如下:
port: 7890
socks-port: 7891
mode: rule
log-level: info
proxies:
- name: "hk-01"
type: ss
server: example.com
port: 443
cipher: aes-256-gcm
password: "your-password"
proxy-groups:
- name: "auto"
type: url-test
proxies:
- hk-01
url: "http://www.gstatic.com/generate_204"
interval: 300
rules:
- DOMAIN-SUFFIX,google.com,auto
- GEOIP,CN,DIRECT
- MATCH,auto
其中 proxies 描述節點本身的連線參數,proxy-groups 把節點組織成策略組(自動測速、手動選擇、負載平衡等),rules 決定流量按什麼條件分配到哪個策略組。三段缺一不可,如果訂閱回傳的 YAML 只有 proxies 而沒有後兩段,多數用戶端會自動補一套預設策略組和規則,但具體行為因用戶端而異,建議匯入後打開設定檢視器確認。
如果使用的是 Clash Meta(mihomo)核心,還可能出現 proxies 裡帶 tfo、smux、reality-opts 等擴充欄位,這些是原版 Clash 不識別的新協定參數,匯入原版核心會直接報錯或跳過對應節點,這也是判斷「要不要換核心」的一個直接訊號。
Base64 格式的訂閱本質上只是「把一堆分享連結打包成一段文字」,方便用戶端一次性拉取更新,它並不是加密,只是編碼。解碼之後,常見節點連結大致是這樣的結構:
ss://[email protected]:443#hk-01
vmess://eyJ2IjoiMiIsInBzIjoiaGstMDIiLCJhZGQiOiJleGFtcGxlLmNvbSIsInBvcnQiOiI0NDMi...}
trojan://[email protected]:443?sni=example.com#hk-03
逐條轉換的思路是固定的:
手動做這件事對單個節點沒問題,但訂閱通常包含幾十上百個節點,逐條手改基本不現實,實際操作中幾乎都依賴訂閱轉換服務完成批量轉換,下一節具體說明。
把 Base64/裸文本訂閱轉換成 Clash 能識別的 YAML,常見做法分兩類,各有取捨。
部分 Android 用戶端在「新增設定」或「匯入訂閱」環節內建了格式偵測邏輯:貼上連結後用戶端先嘗試按 Clash YAML 解析,失敗則自動按 Base64 解碼再逐條轉換生成本機設定。這條路徑不依賴第三方服務,資料全程在本機處理,是隱私角度最乾淨的方案,但轉換能力取決於用戶端本身對協定欄位的支援程度,遇到較新的傳輸層參數(例如某些 hysteria2 混淆參數)可能轉換不完整或直接丟棄對應節點。
另一種做法是把原始訂閱連結交給一個轉換服務,由伺服端完成解碼與格式重寫,再把生成的 Clash YAML 連結交給用戶端訂閱。這類服務通常支援自訂參數,常見的有:
這條路徑的優勢是轉換能力更強、範本可重複使用,適合需要統一多個訂閱來源命名規則、合併去重的場景;代價是原始訂閱連結(包含帳號身分資訊)會經過第三方伺服器,存在隱私暴露面,選擇時要留意服務是否公開聲明日誌政策,更謹慎的做法是自建開源轉換服務,把中轉環節控制在自己手裡。
注意:訂閱連結裡通常帶有使用者唯一識別碼(token 或使用者名稱密碼),一旦經第三方轉換服務中轉,等同於把帳號憑證暴露給了該服務。不清楚轉換服務背景時,優先選擇用戶端內建轉換或本機部署的轉換工具,避免把訂閱原文交給不受控的第三方。
訂閱轉換成功匯入,不代表節點一定能正常連線。以下幾種情況在實際使用中出現頻率較高。
轉換後節點數量比原訂閱少,通常是轉換服務或用戶端不支援某個協定欄位導致整條節點被跳過,而不是報錯中斷。排查方法是先看原始 Base64 解碼後的節點總數,再對比生成的 YAML 裡 proxies 條目數,如果確實少了,檢查缺失節點的協定類型是否偏冷門(例如某些實驗性傳輸層組合),換一個轉換範本或更新到支援該協定的最新核心版本往往能解決。
如果使用了遠端規則範本(config 參數指定的範本),策略組的節點篩選條件是按節點名關鍵字比對寫死的,新節點名稱如果不符合範本裡的關鍵字規則(比如範本只篩「HK|SG|JP」開頭的節點),就不會被自動歸入對應策略組。這種情況需要檢查範本裡的篩選正規表達式,或者乾脆去掉遠端範本,讓轉換服務用預設的「全部節點入一個自動測速組」策略。
部分協定(尤其是 Trojan 和 VMess 的 WebSocket+TLS 組合)對 SNI 和 skip-cert-verify 欄位比較敏感,轉換服務如果沒有正確解析原始連結裡的 sni 或 allowInsecure 參數,生成的節點會連線逾時或握手失敗。這種情況建議手動打開生成的 YAML,對照原始分享連結的參數,補全或修正 servername 與 skip-cert-verify 欄位。
轉換生成的訂閱連結本質上是「即時代理請求」,每次用戶端刷新訂閱時,轉換服務都會重新拉取原始訂閱並重新轉換一遍。如果原始訂閱本身設有更新頻率限制(常見的是幾小時一次),用戶端刷新過於頻繁會被原始面板判定異常請求而拒絕回應,進而導致轉換服務回傳空節點清單。用戶端裡的訂閱刷新間隔建議設定在 6~12 小時,避免手動頻繁點擊刷新。
訂閱格式的轉換看起來是個格式轉換的小問題,但背後牽涉的是節點資訊在多方之間的流轉路徑。弄清楚每一步資料經過了誰的伺服器、以什麼形式暴露,比單純讓「連結能用」更值得花時間確認。