本文適合需要在 v2rayN、v2rayNG 與 v2flyNG 之間遷移節點,或正在排查訂閱格式錯誤的使用者。重點說明三類格式的實際結構、辨識方式、用戶端匯入流程,以及哪些轉換能直接完成、哪些必須由伺服器端提供相應的協定參數。
三類格式不在同一個設定層級
「訂閱」經常被當成所有設定檔的統稱,但嚴格來說,訂閱是一種批次分發機制,分享連結是單一節點的便攜表示方式,原生 JSON 則是核心在執行時讀取的完整設定。三者可能包含部分相同欄位,卻不能只依檔案副檔名判斷是否等價。
常見的 base64 訂閱回應,會先將多條 vmess、vless 等分享連結逐行排列,再把整段 UTF-8 文字編碼為 base64。用戶端更新訂閱時,會先下載回應、解碼文字,再逐行解析節點。base64 只改變文字的表示方式,不負責加密,也不會自動補齊協定欄位。
訂閱網址
推薦由固定網址持續回傳節點清單,適合統一維護、批次更新與多端同步。
適合:日常使用、節點較多、參數會定期調整
vmess/vless 分享連結
一條連結通常代表一個出站節點,方便複製,但不會承載完整的 DNS 與路由設定。
適合:單一節點遷移、臨時匯入、逐項核對參數
原生 JSON
可描述入站、出站、DNS、路由、日誌與策略,欄位最完整,但取決於特定核心的語法。
適合:自訂設定、複雜分流、核心層級部署
vmess 分享連結本身也經常包含一段 base64。經典格式是在 vmess:// 後放入編碼後的 JSON 物件,其中可能包含位址、連接埠、使用者識別碼、傳輸方式、TLS 設定與備註。這裡的 base64 只作用於單一節點物件,與「整份訂閱再次編碼」的外層 base64 並非同一層。
vless 分享連結通常使用 URI 查詢參數直接表示設定,例如伺服器位址、連接埠、加密標記、傳輸類型、TLS 或 REALITY 參數。它更接近可讀的鍵值結構,但路徑、主機名稱與備註中的特殊字元必須進行 URL 編碼。
| 格式 | 典型開頭 | 主要內容 | 能否表示完整路由 |
|---|---|---|---|
| base64 訂閱 | 通常沒有固定協定標頭 | 多條分享連結或節點紀錄 | 通常不能 |
| VMess 分享連結 | vmess:// |
單一 VMess 出站節點 | 不能 |
| VLESS 分享連結 | vless:// |
單一 VLESS 出站節點 | 不能 |
| 原生 JSON | { |
核心完整執行設定 | 可以 |
辨識 base64、分享連結與 JSON 的操作方式
判斷格式時,應先查看解碼前後的第一層結構,不要只依檔名判斷。訂閱介面即使以 .txt 結尾,也可能回傳 base64;沒有副檔名的網址也可能直接回傳逐行分享連結。正確流程是確認回應為文字,再檢查協定標頭、JSON 結構與換行方式。
- 先查看明文前綴。若以
vmess://或vless://開頭,通常可以按照單一節點分享連結處理。 - 再查看 JSON 頂層欄位。出現
inbounds、outbounds、routing與dns時,通常更接近 Xray 或 V2Fly 核心的原生設定。 - 確認是否為可解碼文字。若內容主要由字母、數字、加號、斜線與結尾等號組成,可嘗試依標準 base64 解碼,再檢查結果是否為逐行連結。
- 確認回應未被網頁包裝。若開頭是
<html、錯誤訊息或登入頁面,表示取得的不是可匯入訂閱資料。
以下是解碼後可能出現的逐行結構。範例網域與使用者識別碼僅用於說明欄位位置,不能用來連線。
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=edge.example.com&path=%2Fws#Example-VLESS
vmess://eyJ2IjoiMiIsInBzIjoiRXhhbXBsZS1WTWVzcyIsImFkZCI6Im5vZGUuZXhhbXBsZS5jb20iLCJwb3J0IjoiNDQzIn0=
第一行是可直接閱讀的 VLESS URI。問號前是使用者識別碼、伺服器與連接埠,問號後是傳輸與安全參數,井號後是節點備註。第二行的 VMess 資料仍需再解碼一次;這正是外層訂閱編碼與內層節點編碼可能疊加的情況。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks"
}
],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "node.example.com",
"port": 443
}
]
}
}
]
}
這類 JSON 已包含本機入站與遠端出站的層級,不應當成一般訂閱逐行解析。完整可執行設定還需要合法的使用者參數與相符的傳輸設定;範例只展示結構辨識方式。
v2rayN、v2rayNG 與 v2flyNG 的匯入差異
用戶端是否支援某種協定,與能否辨識某種文字格式是兩個問題。用戶端可能成功解碼訂閱,卻因目前核心不支援節點使用的傳輸或安全特性而無法連線。排查時應分別確認「解析成功」與「核心可用」。
以 v2rayN 7.x 介面為例,批次訂閱通常透過「訂閱群組」→「訂閱群組設定」新增。儲存網址後返回主介面,再執行更新訂閱。單一分享連結可先複製,再使用從剪貼簿匯入伺服器的功能。匯入後應核對位址、連接埠、傳輸類型、TLS、SNI 與路徑,而不是只看節點名稱。
推薦方案:訂閱負責節點,用戶端負責本機策略
桌面版 v2rayN
- 透過訂閱群組維護節點清單
- 依本機需求設定系統代理伺服器與路由
- 使用日誌確認 10808、10809 等本機連接埠狀態
Android 版 v2rayNG 或 v2flyNG
- 匯入同一個相容的訂閱網址
- 更新後重新選擇有效節點
- 依用戶端核心能力篩選協定與傳輸方式
訂閱用於同步遠端節點參數,本機 DNS、分應用程式規則與系統代理狀態仍應分別設定。
v2rayNG 使用 Xray 核心,適合匯入由該核心支援的 VMess、VLESS 及相關傳輸設定。常見流程是開啟訂閱群組設定,新增訂閱網址並執行更新;單一連結則可透過右上角的新增入口,從剪貼簿匯入。v2rayNG 1.9.x 不同小版本的選單文字可能略有調整,但訂閱群組與剪貼簿匯入是兩個獨立入口。
v2flyNG 使用 V2Fly 核心,應優先匯入伺服器端明確標示為 V2Fly 相容的設定。若訂閱中混入僅由其他核心實作的欄位,連結可能會被讀取,但在連線階段仍可能回報不支援的傳輸或安全參數。不能透過修改節點備註或刪除未知欄位來推斷協定相容性。
| 輸入內容 | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| base64 節點訂閱 | 可作為訂閱群組更新 | 可作為訂閱更新 | 可匯入相容節點 |
| 單一 VMess 連結 | 可從剪貼簿匯入 | 可從剪貼簿匯入 | 可匯入相容連結 |
| 單一 VLESS 連結 | 取決於所選核心與參數 | 取決於 Xray 支援情況 | 取決於 V2Fly 支援情況 |
| 完整核心 JSON | 按自訂設定處理 | 不等同於一般節點訂閱 | 不等同於一般節點訂閱 |
格式轉換的可行方式與資訊遺失
格式轉換首先要區分「編碼轉換」與「協定轉換」。將 base64 解碼為逐行分享連結只是還原文字,不會改變節點協定;將 VLESS 改寫為 VMess 則涉及伺服器端驗證與協定實作,不能只靠替換連結前綴完成。
將 base64 訂閱轉換為明文連結清單通常是可逆的:依 UTF-8 解碼後保留每一行,再按原順序編碼即可。請注意,標準 base64 與 URL 安全變體對字元的處理不同,錯誤刪除結尾補位符號可能導致解碼失敗。
- 將 base64 訂閱轉為分享連結清單:解碼外層文字、統一換行符號、移除空行,再逐一辨識協定標頭。這個過程一般不會遺失節點欄位。
- 將分享連結匯入用戶端:用戶端解析單一節點參數,並在本機產生相應的出站設定。用戶端自己的 DNS、路由與日誌設定不會來自分享連結。
- 將分享連結轉為原生 JSON:可以產生一個出站物件,但仍需補充本機入站、DNS、路由、日誌與策略,才可能成為完整的執行設定。
- 從原生 JSON 擷取分享連結:只適用於結構明確的單一出站。多個出站、負載分配、路由規則、DNS 伺服器與策略物件,無法完整裝入一條普通連結。
- VMess 與 VLESS 互轉:只有在伺服器端同時提供兩種協定的監聽與驗證參數時,才能分別產生相應連結。用戶端無法自行推導另一種協定設定。
結論:先確定目標層級,再執行轉換
只是遷移節點時,保留分享連結即可;需要複製整套 DNS 與路由行為時,應遷移原生 JSON,或在目標用戶端重新設定本機策略。將完整 JSON 壓縮成單一連結,必然會捨棄部分執行邏輯。
轉換 VLESS URI 時,還要保留查詢參數的大小寫與值域。例如 type=ws、security=tls、sni=edge.example.com 和 path=%2Fws 分別描述傳輸、安全層、伺服器名稱與路徑。遺漏任何一個關鍵欄位,都可能表現為握手失敗或連線後沒有流量。
VMess 連結的 JSON 欄位存在不同的歷史表示方式,連接埠可能是字串,也可能被解析為數字。處理時應先依用戶端可接受的結構輸出,不應只根據欄位名稱機械拼接。遇到匯入成功但節點參數為空的情況,應重新解碼連結,逐項核對位址、連接埠、使用者識別碼、傳輸類型與 TLS 欄位。
訂閱轉換失敗的常見問題
訂閱更新失敗不一定是格式問題。網路逾時、網址回傳登入頁面、回應被截斷、字元編碼錯誤與用戶端核心不相容,都可能產生相似提示。最有效的排查方式,是先確認下載到的原始內容,再進行節點解析與連線測試。
開啟訂閱網址後只有一長串字元,這樣正常嗎?
如果字元主要由字母、數字、加號、斜線與結尾等號組成,可能是標準 base64。解碼後應出現逐行分享連結;若結果仍是亂碼,請檢查回應編碼與內容是否完整。
連結可以匯入,但更新後節點數量為零,該怎麼辦?
先確認回應不是網頁錯誤頁面,再檢查解碼結果是否包含用戶端可辨識的協定標頭。v2rayN 7.x 可開啟日誌查看訂閱解析提示,並確認訂閱群組沒有啟用錯誤的篩選條件。
為什麼同一個訂閱在兩個用戶端中的節點數量不同?
用戶端可能依核心能力篩除不相容節點,也可能採用不同的備註去重規則。請分別記錄更新前後的節點數量,再比較被忽略連結的協定與傳輸參數。
將原生 JSON 編碼成 base64,就能當成訂閱嗎?
不能直接等同。常見 base64 訂閱的解碼結果是逐行分享連結,而完整 JSON 是單一設定物件。除非接收端明確支援這種回應結構,否則仍會解析失敗。
如果訂閱更新逾時,可以先連線到一個已確認可用的節點,再檢查更新請求是否允許經過目前的代理伺服器。在 v2rayN 中也應核對本機監聽連接埠是否被占用;常見設定使用 10808 作為 SOCKS 連接埠、10809 作為 HTTP 連接埠,但實際值應以「設定」→「參數設定」中的目前設定為準。
- 回應以 HTML 標籤開頭:檢查訂閱網址是否跳轉至登入或錯誤頁面。
- base64 無法解碼:檢查複製內容是否缺少結尾字元,或回應是否被截斷。
- 節點匯入後位址為空:檢查 VMess 內層 JSON 欄位是否完整。
- VLESS 匯入後握手失敗:核對連接埠、SNI、傳輸類型、路徑與安全參數。
- 更新後出現重複節點:檢查多個訂閱群組是否引用同一個資料來源,並核對備註去重設定。
建立可維護的訂閱與設定遷移流程
穩定的遷移流程應保留原始訂閱網址、解碼後的節點清單與用戶端本機設定這三類資訊。訂閱網址負責後續更新,節點清單便於定位解析問題,本機設定則包含不會隨分享連結遷移的系統代理、DNS、路由分流與連接埠等內容。
更換用戶端或核心前,先記錄目前可用節點的協定、伺服器連接埠、傳輸類型與安全參數,再使用目標用戶端匯入同一個訂閱。更新完成後不要立即批次修改所有節點,應先選取一個 VMess 或 VLESS 節點進行延遲測試與實際連線,確認日誌沒有協定欄位錯誤。
- 記錄訂閱網址所屬群組、更新方式與最近一次成功更新的時間。
- 擷取一條已知可用的連結,核對協定、位址、連接埠、使用者識別碼與傳輸參數。
- 在目標用戶端新增訂閱,不要覆蓋現有的可用群組。
- 執行一次手動更新,並記錄更新前後的節點數量。
- 選擇單一節點進行測試,檢查核心日誌、DNS 解析與本機監聽連接埠。
- 確認連線正常後,再還原路由分流、自動更新與系統代理設定。
對於只需要在 v2rayN 與 v2rayNG 之間同步節點的情境,優先保留訂閱網址,不必反覆匯出完整 JSON。對於依賴複雜網域分流、多個出站與自訂 DNS 的情境,應將節點遷移與路由遷移拆成兩個步驟,避免誤以為分享連結已包含所有行為。
最終判斷標準不是檔案能否被「匯入」,而是欄位是否完整解析、目前核心是否支援、連線日誌是否正常,以及本機代理與路由是否依預期生效。先辨識資料層級,再選擇相應的匯入口,便能減少大多數訂閱轉換問題。