先釐清:訂閱網址、內容格式與代理協定

「訂閱匯入失敗」不一定代表網址失效。同一個連結可能回傳 Clash YAML、Base64 編碼的節點清單,甚至是登入頁面。用戶端取得內容後,還得判斷結構、解析節點,再交由核心建立連線。任何一步不相符,都可能導致匯入失敗或節點無法使用。

排查時,把以下三個層次分開檢查,比反覆按「更新訂閱」更有效。

  • 訂閱網址:下載設定檔的 HTTP 或 HTTPS 網址。路徑是否帶有 .yaml 副檔名,並不能證明回應內容的格式。
  • 內容格式:節點與設定採用的資料結構,例如 YAML、以 Base64 包裝的 URI 清單或 SIP008 JSON。
  • 代理協定:實際連線使用的是 Shadowsocks、VMess、Trojan 等哪一種協定。格式轉換不會把一種代理協定變成另一種。

YAML:完整設定檔不等於節點提供器

YAML 是設定檔的撰寫格式,不是代理協定。完整的 Clash 設定通常會包含 proxies、proxy-groups、rules 等欄位,也可能透過 proxy-providers 引用外部節點。除了伺服器位址與密碼,還能設定代理群組選擇、規則順序、DNS 與監聽連接埠等內容。

完整設定檔可包含分流邏輯

以下範例用於辨識設定結構。網域名稱與密碼僅供示範,無法用來連線;mixed-port: 7890 表示本機混合代理的監聽連接埠,不是遠端伺服器連接埠。

mixed-port: 7890
allow-lan: false
mode: rule
proxies:
  - name: "範例 SS 節點"
    type: ss
    server: node.example.com
    port: 443
    cipher: aes-128-gcm
    password: "demo-password"
proxy-groups:
  - name: "出口選擇"
    type: select
    proxies:
      - "範例 SS 節點"
      - DIRECT
rules:
  - DOMAIN-SUFFIX,example.org,DIRECT
  - MATCH,出口選擇

這裡的 443 是範例中的遠端連接埠。規則由上而下比對:連線至 example.org 及其子網域時直連,其他連線則由「出口選擇」群組決定。匯入後如果只看到一個節點,卻沒有相應的代理群組與規則,請確認用戶端是否將來源內容當成「匯入節點」,而非匯入完整設定檔。

只有 proxies 的檔案可能是提供器內容

節點提供器檔案通常會在頂層以 proxies: 儲存節點清單,再由主設定檔中的 proxy-providers 載入,並透過代理群組的 use 引用。這類檔案不含完整的分流策略,不能只因為「這是 YAML」就當成可直接切換使用的完整設定檔。

反過來說,完整設定檔也不應直接貼進只接受節點清單的入口。若要保留本機規則並只更新服務商提供的節點,應使用用戶端支援的提供器或覆寫方案,而不是每次更新後手動重改整份遠端設定檔。具體設定方式請參閱協定手冊。

Base64:經過一層編碼的節點連結清單

常見的「Base64 訂閱」通常會先將多筆節點 URI 逐行排列,再把整段文字進行 Base64 編碼。解碼後可能會看到以 ss://、vmess://、trojan:// 等開頭的連結。有些訂閱會直接回傳未編碼的明文連結。

  • Base64 不具加密功能:取得內容的人通常可以還原其中的伺服器位址、驗證資訊與節點備註。
  • 節點內容本身也可能經過編碼:例如某些 URI 的驗證欄位或酬載本身也使用 Base64;解開訂閱外層後,不代表所有欄位都已是明文。
  • 擴充欄位的支援程度不一:傳輸層、TLS、外掛參數或新協定欄位,必須同時獲得匯入器與核心支援,才可能完整保留。

Base64 只是外層包裝,通常不包含 Clash 的 rules 與 proxy-groups。將其轉換為 Clash 設定時,新出現的「自動選擇」、「故障轉移」或分流規則,多半來自轉換範本,而非從原始節點清單還原而來。

SIP008:Shadowsocks 的結構化伺服器清單

SIP008 是 Shadowsocks 生態系中的線上設定交付規範,以 JSON 表示伺服器清單。它不是涵蓋所有代理協定的通用訂閱標準,也無法描述 Clash 的策略群組與網域規則。常見的 SIP008 v1 文件會包含 version 與 servers 欄位,伺服器項目則列出位址、連接埠、加密方法、密碼與備註。

{
  "version": 1,
  "servers": [
    {
      "id": "c71e2e80-925f-4cf6-a437-ef9b79e9cb17",
      "remarks": "範例 SS 節點",
      "server": "node.example.com",
      "server_port": 443,
      "method": "aes-128-gcm",
      "password": "demo-password"
    }
  ]
}

轉換為 Clash 節點時,通常會將 server_port 對應至 port、將 method 對應至 cipher、將 remarks 對應至 name,再補上 type: ss。這是欄位對應,不是協定轉換。

如果項目包含 plugin 與 plugin_opts,還要確認目標核心支援的外掛及其參數格式。轉換器能輸出 YAML,不代表外掛交握一定相容。只有伺服器支援相應的連線方式,且用戶端設定正確,才能建立連線。

Clash 系用戶端可直接匯入哪些格式

請區分「核心讀取設定」與「圖形用戶端協助轉換」。Clash 與 mihomo 主要使用 Clash 風格的 YAML 設定檔;部分圖形用戶端另提供分享連結匯入、訂閱辨識或範本合併功能。不能因為某個用戶端支援 Base64,就推定所有 Clash 用戶端都支援。

取得的內容 適用的匯入入口 需要確認的事項
Clash 完整 YAML 匯入設定檔或遠端設定 核心是否支援相關協定與設定欄位
YAML 節點提供器 主設定檔中的 proxy-providers 代理群組是否透過 use 引用提供器
Base64 或明文 URI 清單 用戶端明確支援的節點匯入功能,或可信任的轉換流程 是否需要補上代理群組、規則與 DNS
SIP008 JSON 明確支援 SIP008 的匯入或轉換入口 SS 加密方法與外掛參數是否相容

各用戶端的選單名稱並不一致。操作時,請先區分「匯入設定檔」、「新增遠端設定」與「匯入節點」這三種用途,不要把節點分享連結貼進只接受 HTTPS 訂閱網址的欄位。初次安裝可先依照快速入門教學匯入設定,再處理格式相容問題。

訂閱轉換會遺失什麼:節點以外的資訊最容易消失

「轉換成功」只代表目標檔案已產生,不代表原始設定已完整複製。請先確認來源格式是否包含目標資訊,再檢查轉換器是否確實保留。

從完整 YAML 轉換為節點連結

  • 規則與順序:DOMAIN-SUFFIX、IP-CIDR、MATCH 等規則通常不會包含在單一節點 URI 中。
  • 代理群組關係:select、url-test、fallback 的層級,以及測速網址、間隔等設定通常都無法保留。
  • 本機執行參數:DNS、TUN、監聽位址、混合連接埠、控制介面等設定不屬於節點分享內容。
  • 外部參照:規則集、節點提供器及其更新策略,可能在匯出時遭到忽略,或只保留當下展開後的節點快照。

從節點清單轉換為完整 YAML

轉換器必須另外決定節點要放進哪個群組、哪些網域直連,以及預設流量要走哪裡。不同範本會產生不同結果。同一批節點轉成兩份設定檔後,造訪同一個網站可能會走不同出口,原因通常是規則有差異,而不是節點本身改變了。

節點名稱也值得檢查。重新命名、去重或依地區分組,可能使原有規則引用失效;有些名稱經過 URI 編碼,轉換時也必須正確解碼。若匯入時顯示「找不到代理」,請先比對 proxy-groups 與 rules 中引用的名稱,不要急著刪除所有規則。

轉換無法憑空補上伺服器不支援的功能

將 Shadowsocks 項目改寫為 Trojan 或其他協定欄位,不會讓原伺服器支援該協定。同樣地,來源內容若缺少 TLS 伺服器名稱、傳輸路徑或必要的驗證欄位,轉換器也無法憑空推算。請重新取得正確的目標訂閱,不要為了讓檔案能儲存就隨意補上參數。

可重複使用的訂閱辨識與轉換流程

  1. 保留原始來源:記下訂閱入口的格式說明與取得時間,並備份目前可用的設定檔。不要直接覆寫舊設定檔的唯一副本來進行測試。
  2. 確認回應內容:檢查下載是否成功。以 <!DOCTYPE html> 或登入表單開頭的回應是網頁,不是可用的代理設定;即使 HTTP 狀態碼為 200,也不能排除這種情況。
  3. 檢查結構,而非檔名:頂層包含 proxies: 等欄位通常表示 YAML;包含 version 與 servers 的 JSON 可能是 SIP008;一長串編碼文字則應在本機解碼後檢查結構。
  4. 優先使用原生入口:如果服務商提供適用於相應核心的 Clash 或 mihomo 格式,請優先重新取得。只有在沒有合適入口時,才考慮可信任的本機或自架轉換工具。
  5. 保留更新管道:匯出一次 YAML 得到的是設定快照,不會自動追蹤原網址的後續變更。遠端轉換網址則可能仰賴轉換服務持續運作,並讓該服務取得原始訂閱內容。
  6. 匯入後逐項核對:比較來源與目標的節點數、協定種類、代理群組與最終預設規則,再測試一個應直連的目標及一個應走代理的目標。

例如來源清單有 12 個項目,目標只剩 9 個,就應確認另外 3 個是否因不支援該協定、欄位缺漏、重複篩除或名稱衝突而遭略過。這個數字只是核對方法的範例,不代表轉換工具的正常損耗範圍;不應在未查明原因時,就將節點減少視為理所當然。

匯入失敗或更新無效:依錯誤發生的層次排查

出現 YAML 語法錯誤

先檢查錯誤行附近的縮排、冒號與引號。YAML 縮排必須使用空格,不能用 Tab 代替。範例中的密碼加上引號,是為了避免特殊字元被解讀為結構符號。如果實際回應是 JSON 或 HTML,調整 YAML 縮排並沒有幫助,應回頭檢查訂閱入口。

設定檔可匯入,但沒有節點或無法連線

先確認檔案是否只有提供器內容,以及主設定檔是否有引用該提供器。若節點存在卻無法連線,請接著檢查核心記錄中的「不支援的代理類型」、「未知的加密方法」或外掛參數錯誤。格式正確不代表連線可用,後者還取決於伺服器狀態、網路路徑與帳戶是否有效。

剛修改的規則,更新一次就恢復原狀

遠端設定更新通常會直接取代下載內容。在遠端設定檔上直接編輯,可能會在下次更新時被覆蓋。需要長期保留的規則,應放進用戶端支援的覆寫、合併或獨立主設定檔機制,並確認最終載入順序。規則會由上而下比對,因此將自訂規則加在 MATCH 後面,通常不會得到預期結果。