本文適合需要判斷訂閱內容、遷移單一節點或排查匯入失敗的 v2rayN、v2rayNG 與 v2flyNG 使用者。讀完即可分辨聚合訂閱、完整設定與分享連結,了解三者能轉換到什麼程度,並依用戶端入口完成匯入與驗證。
三種格式各自解決不同問題
「訂閱」常被當作泛稱,但實際取得的內容可能分屬三個層級。base64 聚合訂閱是多條分享連結的封裝;VMess 或 VLESS 分享連結通常只描述一個出站節點;原生 JSON 則可能是包含入站、出站、DNS、記錄與路由規則的完整執行設定。先判斷層級,再選擇匯入方式,比反覆嘗試不同按鈕更有效。
在瀏覽器開啟訂閱網址後看到一長串英文字母、數字和少量等號,不代表內容已損壞。它可能是整份文字經過 base64 編碼的結果。解碼後若每行以 vmess:// 或 vless:// 開頭,就是常見的聚合訂閱。這裡的編碼只是用來封裝文字,不等於加密,也不會改變節點本身的參數。
base64 聚合訂閱
推薦一個網址可回傳多個節點,用戶端更新時能一次替換整份伺服器清單,適合持續維護。
適合:日常更新訂閱、同步多台裝置的節點清單
VMess 或 VLESS 分享連結
一條連結描述一個節點,方便臨時匯入、複製到另一台裝置,或比對參數差異。
適合:遷移單一節點、手動測試、核對參數
原生 JSON 設定
可同時描述入站監聽、多個出站、DNS 與路由,結構最完整,但取決於核心欄位的相容性。
適合:精細分流、伺服器端設定、進階排錯
| 格式 | 常見開頭 | 承載範圍 | 典型匯入結果 |
|---|---|---|---|
| base64 聚合 | 沒有固定協定標頭 | 多條分享連結 | 產生一組伺服器記錄 |
| VMess 分享連結 | vmess:// |
單一 VMess 節點 | 產生一筆伺服器記錄 |
| VLESS 分享連結 | vless:// |
單一 VLESS 節點 | 產生一筆伺服器記錄 |
| 原生 JSON | { |
完整或局部核心設定 | 作為自訂設定執行或解析 |
結論:先辨識承載層級,再決定轉換方式
需要長期更新一批節點時,保留訂閱網址;只遷移一個節點時,使用分享連結;涉及 DNS、入站連接埠和路由規則時,保存原生 JSON。三者並不只是檔案副檔名不同。
base64 聚合訂閱的內部結構
典型聚合訂閱的原始回應是一段 base64 文字。解碼後通常會得到 UTF-8 文字,每行放置一條分享連結,換行符號可能是 LF 或 CRLF。用戶端更新訂閱時,會先請求網址,再解碼文字,接著依協定標頭逐行解析。無法辨識的行通常會被略過,因此「更新成功但節點數量為零」往往表示解碼後的協定不受目前用戶端支援,或伺服器回傳了登入頁面、提示頁面等非訂閱內容。
dmxlc3M6Ly9mNDdhZDQ4YS1hZWMxLTQwZTQtYTgzOC0wNjE2N2VhZDc4OTVA
ZXhhbXBsZS5pbnZhbGlkOjQ0Mz9lbmNyeXB0aW9uPW5vbmUmc2VjdXJpdHk9
dGxzJnR5cGU9d3MmcGF0aD0lMkZhcGkjVExTLVdTLUV4YW1wbGU=
上面的內容只是格式示意。要判斷是否屬於 base64,可以先觀察字元是否主要落在 A-Z、a-z、0-9、加號、斜線和等號的範圍內,再進行解碼。僅憑字元外觀無法確認有效性,因為一般隨機文字也可能符合這些範圍。更可靠的方式是檢查解碼結果是否為可讀文字,以及每行是否具有受支援的協定標頭。
VMess 分享連結本身也常包含一層 base64 編碼,內部通常是描述位址、連接埠、使用者識別碼、傳輸方式和 TLS 參數的 JSON 物件。因此,一份 VMess 聚合訂閱可能先將單一節點 JSON 編碼成 vmess:// 連結,再把多條連結串接後整體編碼。排查時應逐層處理,不能把整份訂閱直接當成單一 VMess 節點解碼。
VMess 與 VLESS 分享連結如何描述節點
分享連結的用途,是讓用戶端重建一個出站節點。VMess 常見形式是在協定標頭後接一段經 base64 編碼的 JSON;VLESS 則更接近標準 URI,使用者識別碼放在使用者資訊部分,伺服器位址和連接埠位於主機部分,傳輸、安全性與流控參數位於查詢字串,井字號後的文字則作為節點名稱。兩種連結都可能包含敏感的連線憑證,不應貼到公開網頁或公開記錄中。
- 讀取協定標頭,確認使用 VMess 或 VLESS 解析器。
- 擷取伺服器網域、連接埠與使用者識別碼,並確認連接埠是 1 至 65535 的整數。
- 讀取傳輸類型,例如 TCP、WebSocket、gRPC,並依類型解析路徑或服務名稱。
- 讀取 TLS、伺服器名稱與應用層協定參數,避免只遷移位址和連接埠。
- 解碼節點備註,處理百分比編碼後再顯示於伺服器清單中。
VLESS URI 結構示意
以下範例使用無法解析的保留網域,重點在於欄位位置。security=tls 表示傳輸安全設定,type=ws 表示 WebSocket,path 是請求路徑,sni 是 TLS 交握使用的伺服器名稱。參數名稱是否區分大小寫,應依用戶端實作處理,不建議手動改寫未知欄位。
vless://[email protected]:443?encryption=none&security=tls&sni=edge.example.invalid&type=ws&path=%2Fproxy#TLS-WS-Example
VMess 與 VLESS 也不能只替換協定名稱就完成互轉。兩者的驗證模型和參數集合不同,VLESS 的 flow 等欄位沒有可直接對應的 VMess 欄位。只有在伺服器同時提供兩種入站設定時,才能分別產生兩條可連線的分享連結;單純改寫 URI 不會讓伺服器增加另一種協定支援。
原生 JSON 與用戶端訂閱的關係
原生 JSON 面向 V2Ray 或 Xray 核心,頂層常見欄位包括 log、dns、inbounds、outbounds 和 routing。其中,分享連結大多只能對應到某個 outbounds 項目。若 JSON 還包含依網域、IP、連接埠或入站標籤執行的路由規則,匯出為單一節點連結後便無法維持原有行為。
推薦方案:訂閱管理節點,用戶端管理本機策略
桌面版 v2rayN
- 透過訂閱群組維護伺服器清單
- 依需求將本機 SOCKS 連接埠設為 10808
- 另行保存路由規則,並測試規則命中結果
Android 版 v2rayNG 或 v2flyNG
- 匯入同一個訂閱網址
- 依用戶端支援範圍解析節點
- 在裝置端個別設定路由與 DNS
節點參數可以隨訂閱同步;本機監聽、應用程式範圍和路由策略則應由每台裝置分別管理。
最小設定不等於訂閱
以下 JSON 同時定義一個本機 SOCKS 入站和一個 VLESS 出站。即使將出站欄位轉換成分享連結,監聽位址 127.0.0.1、連接埠 10808 與路由行為也不會進入連結。目標用戶端會以自身預設值或現有設定補上這些內容。
{
"inbounds": [
{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.invalid",
"port": 443,
"users": [
{
"id": "f47ad48a-aec1-40e4-a838-06167ead7895",
"encryption": "none"
}
]
}
]
}
}
]
}
inbounds決定本機程式如何將流量交給核心。outbounds決定流量透過哪個遠端協定,或直接連線離開。routing會依網域、IP、連接埠和標籤選擇出站。dns決定名稱解析方式,但不會自動成為節點分享參數。
用戶端匯出的 JSON 也可能包含程式產生的標籤、統計策略或特定核心欄位。將其匯入另一款用戶端前,應確認目標用戶端採用的核心及版本是否能辨識這些欄位。v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心;兩者對基礎 VMess、VLESS 與常見傳輸的支援範圍有所重疊,但不應假定新欄位和擴充能力完全一致。
匯入、轉換與更新的實際操作
日常使用時,優先讓用戶端直接讀取訂閱網址,而不是手動解碼後逐條匯入。直接訂閱能保留更新入口;伺服器端調整節點名稱、位址或連接埠後,用戶端可重新取得清單。手動轉換適合檢查內容、遷移少量節點,或找出某筆記錄解析失敗的原因。
| 目標操作 | 建議入口 | 完成後的檢查 |
|---|---|---|
| v2rayN 新增訂閱 | 「訂閱群組」→「訂閱群組設定」→「新增」 | 更新訂閱後,檢查群組名稱與節點數量 |
| v2rayN 匯入單一節點 | 複製分享連結後,使用「伺服器」→「從剪貼簿匯入批量 URL」 | 核對位址、連接埠、傳輸與 TLS 參數 |
| v2rayNG 新增訂閱 | 開啟側邊選單的「訂閱群組設定」,新增網址後執行更新 | 確認目前群組已切換至新訂閱 |
| v2rayNG 匯入單一節點 | 複製連結,點選右上角「+」,選擇「從剪貼簿匯入」 | 開啟節點詳細資料,檢查伺服器名稱與傳輸方式 |
| v2flyNG 匯入訂閱 | 進入訂閱群組設定,填寫名稱與完整網址後更新 | 確認節點協定在 v2fly 核心支援範圍內 |
選單文案可能會隨用戶端版本調整,但操作順序基本一致:先儲存訂閱網址,再主動更新,最後選擇節點並啟動連線。測試時不要只看「已啟動」狀態,也應檢查核心記錄、實際延遲與目標網頁的存取結果。延遲測試失敗不一定代表節點完全無法使用,也可能是測試網址無法連線或 DNS 解析異常。
訂閱更新成功,為什麼清單還是空的?
先在訂閱群組中確認目前選取的群組,再查看更新結果是否顯示解析出 0 筆記錄。若為 0,將回應內容複製到本機文字工具檢查:base64 解碼後應出現逐行排列的分享連結,而不是登入頁面、錯誤提示或 HTML 原始碼。
複製 VLESS 連結後提示格式錯誤,該怎麼辦?
檢查連結是否以 vless:// 開頭,使用者識別碼、網域和連接埠之間是否完整,以及查詢參數中的 & 是否被聊天工具截斷。重新複製原始純文字,不要手動刪除百分比編碼。
base64 解碼後出現亂碼,是編碼不相容嗎?
先確認輸入內容沒有遺漏結尾字元,再分別嘗試標準 base64 與 URL 安全變體。解碼後的位元組通常以 UTF-8 讀取;若仍無法閱讀,內容可能經過壓縮、採用其他訂閱協定,或回傳的根本不是聚合文字。
可以把完整 JSON 直接貼到訂閱網址欄嗎?
不能把設定正文當成網址。訂閱網址欄需要可請求的 URL;完整 JSON 應透過用戶端提供的自訂設定匯入入口處理,並檢查其中的入站連接埠是否與現有程式衝突。
同一個訂閱在兩個用戶端顯示的節點數量不同?
分別記錄更新後的總數,並檢查被略過節點的協定與傳輸參數。v2rayNG 與 v2flyNG 使用不同核心,遇到只有一方支援的欄位時,解析或執行結果可能不同。不要用改名的方式強行轉換協定。
轉換時需要保留的欄位與安全界線
可靠的轉換應先解析成結構化物件,再依目標格式重新序列化,而不是對字串進行尋找與替換。至少要保留協定、伺服器位址、連接埠、使用者識別碼、傳輸類型、TLS 狀態、伺服器名稱、路徑或服務名稱、流控參數與節點備註。任何連線關鍵欄位缺失,都可能產生「可以匯入但無法連線」的記錄。
- 將原始內容複製到本機受控環境,判斷它是訂閱回應、分享連結還是完整 JSON。
- 解碼並解析成欄位物件,對連接埠、使用者識別碼和必要參數進行型別檢查。
- 依目標用戶端與核心能力篩選可表達的欄位,記錄無法對應的項目。
- 產生目標格式後重新解析一次,比較位址、連接埠、安全層與傳輸層是否一致。
- 在用戶端中建立獨立測試群組,不要覆蓋仍可使用的原訂閱。
- 連線後檢查核心記錄,並分別驗證 DNS、TCP 與所需的 UDP 情境。
結論:轉換前保留原訂閱,轉換後回讀欄位
最穩妥的驗收方式不是看到「匯入成功」,而是再次解析產生的結果並逐項比對。確認位址、連接埠、使用者識別碼、TLS 伺服器名稱和傳輸路徑全部一致後,再進行連線測試。
訂閱網址和分享連結都可能直接包含存取憑證。截圖排錯時應遮蓋完整訂閱 URL、使用者識別碼和驗證欄位;分享記錄時只保留錯誤類型、時間與必要的網路狀態。若訂閱網址已進入公開記錄,應在服務提供者後台更換訂閱憑證,再刪除用戶端中的舊網址並執行一次完整更新。