訂閱網址與設定格式:先分清下載入口和回傳內容
訂閱連結是取得設定的入口,不代表某一種檔案格式。用戶端存取同一個 HTTPS 網址,可能收到 Clash YAML、Base64 編碼的節點清單,也可能收到 sing-box JSON。有些服務會依網址參數、帳戶設定或請求標頭中的 User-Agent 回傳不同內容。因此,連結能在瀏覽器中開啟,不代表能直接匯入目前使用的用戶端。
排查時分三個層面檢查:請求是否成功、回傳內容的格式為何,以及目標核心是否能解析其中的協定和欄位。HTTP 200 只表示請求收到回應;回傳內容仍可能是登入頁面、流量到期通知或錯誤 JSON。將這些回應交給設定解析器,常見結果就是匯入失敗、節點數為零或顯示缺少欄位。
三種常見格式各自包含哪些資訊
| 格式 | 常見結構 | 通常包含 |
|---|---|---|
| Clash YAML | proxies、proxy-groups、rules | 節點、策略群組、分流規則;完整設定也可包含 DNS 與監聽設定 |
| Base64 節點清單 | 解碼後是逐行排列的協定分享連結 | 節點連線參數;通常不含完整的 DNS、規則與 TUN 設定 |
| sing-box JSON | inbounds、outbounds、route | 入站、出站、路由;完整設定也可包含 DNS 等模組 |
Clash YAML:完整設定和節點提供者並不相同
完整的 Clash 設定可描述節點、策略群組和規則。以下是僅供直連使用的結構範例,混合代理連接埠為 7890,且只監聽本機。此範例用於展示欄位位置,不會提供遠端代理連線。若本機已有程式占用該連接埠,請先變更連接埠。
mixed-port: 7890
allow-lan: false
mode: rule
proxies: []
proxy-groups:
- name: 手動選擇
type: select
proxies:
- DIRECT
rules:
- MATCH,手動選擇
另一種 YAML 只在頂層包含 proxies,用來做為 proxy-providers 的節點來源。它不是完整的執行設定;主設定必須透過提供者名稱引用,並在策略群組中使用。類似地,規則提供者檔案常以 payload 開頭,也不能當成節點訂閱匯入。
「Clash 格式」也有核心能力上的差異。mihomo 延續 Clash 設定體系,但增加了協定支援和擴充欄位。能由 mihomo 解析的設定,不代表原版 Clash 也能解析。判斷相容性時應查看實際使用的核心,而不只是圖形用戶端的名稱。
Base64:編碼容器,不是獨立的代理協定
常見的 Base64 訂閱會將多行 ss://、vmess://、trojan:// 等分享連結一併編碼。解碼只會還原文字,不會自動產生策略群組或分流規則。有些訂閱直接回傳明文 URI 清單;單一分享連結內部也可能再次使用 Base64,因此要區分外層訂閱編碼和協定本身的編碼。
Base64 也不具備保密性。解碼後可能直接看到伺服器位址、連接埠和驗證資訊。訂閱網址中的權杖和下載後的設定都應視為憑證妥善保管,不宜放進公開截圖、聊天紀錄或問題回報附件。
sing-box JSON:設定結構須符合目標版本
sing-box 通常使用 JSON 描述設定,但不是任何 JSON 節點陣列都構成完整的 sing-box 設定。以下同樣是僅供直連使用的結構範例:在本機監聽 7890,並將連入這個混合入站的連線交給 direct 出站。
{
"inbounds": [
{
"type": "mixed",
"tag": "local-mixed",
"listen": "127.0.0.1",
"listen_port": 7890
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"final": "direct"
}
}
此範例應與前面的 YAML 分開測試,避免同時啟動並占用相同連接埠。實際訂閱通常包含 TLS、DNS、路由規則和選擇器;這些模組各有版本需求。轉換目標應盡可能明確指定用戶端使用的 sing-box 版本,而不是籠統地選擇「JSON」。
訂閱轉換流程:解析、對應與補齊
轉換器通常會先讀取來源內容,解析為內部節點物件,再依目標設定格式輸出。節點清單缺少的策略群組、規則、DNS 和監聽項目,往往會由轉換範本補齊。因此,轉換結果同時取決於訂閱內容、所選範本,以及轉換器支援的協定版本。
- 辨識來源格式。判斷內容是完整設定、節點提供者、明文 URI 清單,還是需要先解碼的 Base64 文字。
- 解析協定參數。擷取伺服器、連接埠、驗證資訊、傳輸層、TLS 及協定專用選項。
- 對應目標欄位。將節點寫入 Clash 的
proxies或 sing-box 的outbounds,並處理名稱引用。 - 產生執行設定。依範本建立策略群組、路由與 DNS,最後使用目標核心檢查設定。
例如,Clash 節點使用的 server 和 port,在 sing-box 中通常對應 server 和 server_port。但這不表示只要替換鍵名就能完成轉換:策略群組引用、TLS 物件、傳輸設定和規則動作都有結構差異。
格式互轉時最容易遺失的欄位與語意
節點成功匯入,不代表連線參數完整
伺服器和連接埠正確只是第一步。TLS 的伺服器名稱、憑證驗證設定、ALPN,以及 WebSocket 的路徑和 Host 請求標頭,都可能影響交握。Reality 的公開金鑰和 short ID、協定專用的 UDP 選項,也需要轉換器明確支援。若不認得的欄位遭到靜默刪除,設定可能通過語法檢查,卻無法連線。
- 驗證與編碼:密碼或使用者名稱中的特殊字元可能涉及 URI 百分比編碼;重複解碼會改變原始值。
- 傳輸層:WebSocket、gRPC 等傳輸參數必須逐項對應,不能只保留節點類型。
- TLS:保留伺服器名稱與驗證策略。遇到憑證錯誤時,應先排查原因,不應一律關閉驗證來修正轉換問題。
- UDP:節點協定、伺服器端和目標核心都必須支援相應功能;格式轉換本身不會增加 UDP 支援。
規則、DNS 與 TUN 不能只按名稱照搬
Clash 的 proxy-groups 與 sing-box 的選擇器、延遲測試出站並非完全等價。即使都能「自動選擇」,探測網址、測試間隔和切換方式也可能不同。節點重新命名後,也必須同步更新所有策略群組和規則中的引用,否則可能找不到出站或策略群組為空。
Clash 的 rules、規則提供者,以及 sing-box 的路由規則、規則集,也不能直接互相貼上使用。必須核對規則順序、網域比對語意和最終回退目標。DNS 的 Fake-IP 範圍、網域過濾與解析出口同樣會影響實際連線;光比較節點數量,無法發現這些差異。
TUN 更接近執行環境設定,而不是節點屬性。在 macOS 上,虛擬網卡授權、路由接管和用戶端服務元件由各用戶端管理。從完整設定轉換而來的 TUN 欄位,即使語法正確,也不代表目標 Mac 用戶端已完成授權。初次驗證時,應先確認本機代理入站可用,再依用戶端流程啟用 TUN。
在 Mac 上匯入與驗證的順序
先確認核心,再選擇訂閱入口
- 在用戶端的「關於」或核心資訊頁面記下核心名稱和版本。用戶端版本與核心版本應分開記錄;介面路徑則以實際使用的用戶端為準。
- 在服務的訂閱管理頁面選擇對應格式。使用 mihomo 的用戶端,優先選擇明確標示 Clash Meta 或 mihomo 的入口。
- 在用戶端的訂閱或設定頁面新增遠端網址,執行更新,再選取剛匯入的設定。不同用戶端的選單名稱可能有所不同。
- 查看更新記錄與設定檢查結果。記下節點數、失敗欄位和錯誤行號,再判斷是否需要轉換。
使用核心檢查,不要用副檔名代替驗證
如果 Mac 已安裝對應的命令列核心,可以在終端機執行下列檢查。命令假設目前目錄中的檔案分別名為 config.yaml 和 config.json,且執行檔已加入 PATH。圖形用戶端內建的檢查功能也能達到相同目的,不必為了驗證而替換其核心檔案。
mihomo -t -f config.yaml
sing-box check -c config.json
檢查通過表示目標核心接受這份設定,不代表遠端節點可連線、帳戶有效或規則符合預期。若檢查失敗,請保留原始設定,針對第一個明確錯誤進行修正,避免同時修改節點、DNS 和規則而失去比對基準。
如果用戶端顯示的實際混合連接埠是 7890,可使用下列命令明確指定 HTTP 代理,測試本機入站和一次 HTTPS 存取。這個命令不受終端機是否讀取 macOS 系統代理設定影響。
curl --proxy http://127.0.0.1:7890 --head --max-time 15 https://example.com
測試時也要查看用戶端連線記錄,確認套用的規則和最終出站。收到 HTTP 回應不代表流量一定經過遠端節點:若命中 DIRECT,流量仍會直接連線。這個命令也無法證明 TUN 已接管終端機,因為命令中已明確指定代理。
常見匯入問題與轉換後檢查清單
「解析失敗」或「匯入後沒有節點」
先確認回傳內容是否為 HTML 登入頁面或錯誤訊息,再檢查設定層級。完整設定入口若收到只有 payload 的規則檔案,或節點提供者入口收到完整設定,都可能導致匯入失敗。YAML 也應檢查縮排,避免使用定位字元;JSON 則應檢查結尾多餘的逗號和字串引號。不要只把 YAML 文字的副檔名改成 .json 後再匯入。
「節點數量正確,但部分節點無法連線」
選擇一個無法連線的節點,比對轉換前後的協定、連接埠、TLS 和傳輸欄位。若錯誤集中在某一種協定,應先確認目標核心和轉換器是否支援該協定。若所有節點都無法連線,再檢查帳戶狀態、本機網路、系統時間和 DNS,避免將所有問題都歸咎於格式。
「手動修正後,下次更新又恢復原樣」
遠端訂閱更新通常會重新產生或覆寫設定。若要長期保留規則、策略群組或 DNS 調整,應使用用戶端支援的覆寫、合併或擴充功能,或在可控的轉換範本中維護。修改前先確認合併順序和陣列處理方式,避免自訂規則被附加在最終兜底規則之後,導致規則無法命中。
- 保留原始訂閱網址與原始回應,並另存轉換後的檔案,以便還原。
- 核對節點數量、名稱與策略群組引用,分辨主動過濾和意外遺失。
- 確認監聽位址、實際連接埠、區域網路存取開關及控制介面設定。
- 分別驗證一般 HTTPS、所需的 UDP 情境,以及代理與直連規則。
- 執行一次訂閱更新,確認自訂設定仍然有效。
選擇格式的關鍵,在於讓「來源內容、轉換器、目標核心」彼此相符。完整的 Clash YAML 和 sing-box JSON 可承載執行策略;Base64 節點清單通常只提供連線資料。需要互轉時,應分別檢查節點對應與策略重建,再處理 macOS 系統代理或 TUN 接管。