訂閱網址用來更新節點,Base64 用來包裝文字,分享連結描述單一節點,原生 JSON 則描述核心執行設定。本文適合遇到「訂閱抓得到卻無法匯入」、「JSON 轉成連結後分流規則不見」的使用者:先辨識輸入格式,再檢查協定、傳輸與安全性欄位,最後透過用戶端匯入並驗證,避免把編碼轉換誤當成設定轉換。
一、訂閱網址、回應內容與節點格式
「V2Ray 訂閱」並非所有用戶端都採用的統一檔案標準。一般所說的訂閱,通常是一個 HTTPS 網址,由用戶端向該網址發出請求,取得多個節點後存入訂閱群組。網址可能帶有存取權杖;能否匯入,取決於伺服器回傳的內容,以及用戶端支援的解析方式。
| 輸入類型 | 常見結構 | 包含內容 | 使用入口 |
|---|---|---|---|
| 訂閱網址 | HTTPS URL | 取得內容的位置與存取憑證 | 訂閱群組設定 |
| Base64 訂閱 | 編碼後的一整段文字 | 通常是逐行排列的分享連結 | 訂閱更新或支援此格式的匯入工具 |
| 分享連結 | vmess://、vless:// | 單一節點的連線參數 | 從剪貼簿或 QR 碼匯入 |
| 原生 JSON | inbounds、outbounds 等物件 | 入站、出站,以及選用的 DNS、路由設定 | 自訂設定入口,或直接交由對應核心處理 |
有些訂閱會直接回傳明文連結清單,有些則會依請求參數或用戶端識別資訊回傳不同格式。因此,「副檔名是 JSON」或「瀏覽器顯示一串亂碼」都不足以判斷是否相容。應檢查實際回應內容,而非只看網址名稱。若回傳登入頁面、到期提示或錯誤 JSON,重新編碼也無法產生有效節點。
二、Base64 訂閱與 VMess 的雙層包裝
常見的 Base64 訂閱製作流程是:以換行分隔多個分享連結,將整段 UTF-8 文字編碼為 Base64,再作為回應本文傳回。用戶端解開外層後,才會逐行解析各個節點。不能只在一段 Base64 文字前加上 vmess://,否則整份清單會被誤認為單一 VMess 節點。
- 取得回應本文後,先排除 HTML 頁面、權限錯誤與空內容。
- 若本文已是以協定前綴開頭、逐行排列的內容,直接視為明文連結清單處理。
- 若本文是 Base64,請解碼外層,確認結果為可辨識的分享連結。
- 逐行解析節點;遇到
vmess://時,再依其格式解碼內層負載。
常見的 VMess 分享格式,是在 vmess:// 後接上一段以 Base64 編碼的 JSON。這裡的 JSON 是分享格式欄位,並非 V2Fly 或 Xray 的完整設定。下方範例是 VMess 連結解碼後的物件;v 的值 2 代表分享格式的版本標記,不是核心版本。
{
"v": "2",
"ps": "教學節點",
"add": "example.com",
"port": "443",
"id": "0f3a10d2-7f3b-4b58-a3f6-9a6fcbec8431",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/ws",
"tls": "tls",
"sni": "example.com"
}
範例網域、UUID 與路徑僅用於說明結構,無法直接連線。aid: "0" 是現代 VMess AEAD 常見的設定,不應照搬舊教學將它改為 64。scy 是 VMess 內容加密選項,tls 則是傳輸安全選項,兩者不是同一個開關。不同產生工具對數字、字串與擴充欄位的處理方式仍可能不同。
- 外層解碼失敗:整份訂閱無法解碼,或解碼後不是節點清單。
- 內層解析失敗:清單可以展開,但其中某個 VMess 負載不是有效的 JSON。
- 字元編碼錯誤:中文備註出現亂碼,常見原因是直接將 UTF-8 位元組當成字元處理。
三、VLESS 連結的查詢參數與傳輸欄位
常見的 VLESS 分享連結接近一般 URI 格式:UUID 放在使用者資訊欄位,主機與連接埠放在位址部分,傳輸、安全性、路徑等則放在查詢參數中,備註位於 # 之後。下方是 VLESS + WebSocket + TLS 的教學連結,其中 %2Fws 解碼後為 /ws。
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fws&sni=example.com#VLESS-WS-TLS
VMess 分享欄位
- 伺服器
add = example.com- 遠端連接埠
port = 443- 傳輸與路徑
net = ws、path = /ws- 內容加密
scy = auto- 傳輸安全性
tls = tls、sni = example.com
這些簡短欄位必須對應至核心設定,不能直接當成出站物件使用。
VLESS 查詢參數
- 伺服器
example.com:443- 傳輸
type=ws- 請求路徑
path=%2Fws- 協定加密欄位
encryption=none- 傳輸安全性
security=tls、sni=example.com
VLESS 本身不提供內容加密;此範例由 TLS 提供安全傳輸。
URI 參數中的特殊字元必須正確轉義。例如路徑包含 & 時,應編碼為 %26,否則會被解讀為下一個參數的分隔符號。IPv6 主機位址必須以方括號括住。備註含有中文時,使用百分比編碼更利於在不同用戶端間傳遞;只修改備註通常不影響連線,但修改路徑、SNI 或 Host 會影響實際交握。
四、為什麼原生 JSON 不能直接當成訂閱
原生設定是供核心執行使用,可包含多個入站與出站,以及 DNS、路由、日誌設定。以下 VMess 設定範例用來說明層級:本機 SOCKS 入站監聽 127.0.0.1:10808,遠端出站連線至 example.com:443。10808 是範例本機連接埠,不是訂閱網址的連接埠,也不是每個用戶端都固定使用的值。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "0f3a10d2-7f3b-4b58-a3f6-9a6fcbec8431",
"alterId": 0,
"security": "auto"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "example.com"
},
"wsSettings": {
"path": "/ws",
"headers": {
"Host": "example.com"
}
}
}
}
]
}
此處的 settings.vnext 存放 VMess 伺服器參數,streamSettings 則存放傳輸與安全性參數。VLESS 使用不同的協定設定結構,不能只把 protocol 從 vmess 改成 vless。Xray 與 V2Fly 的設定語法雖有共通之處,但擴充能力與欄位演進並不相同;JSON 語法正確,不代表目標核心一定能執行。
轉換範圍:遷移節點與遷移完整設定
只遷移節點
- 從代理出站擷取伺服器、連接埠與 UUID。
- 保留 WebSocket 路徑、Host 與 TLS 的 SNI。
- 產生目標用戶端支援的分享連結。
- DNS、路由與本機監聽連接埠由目標用戶端設定。
遷移完整設定
- 保留出站標籤與路由參照關係。
- 確認 DNS、入站監聽與日誌設定。
- 檢查目標核心支援的所有欄位。
- 使用自訂設定入口,並確認實際執行日誌。
一般節點分享連結不包含整套 DNS 與路由規則;完整設定轉成連結再匯入,通常無法無損還原。
五、v2rayN、v2rayNG 與 v2flyNG 的匯入限制
用戶端負責解析訂閱與管理節點,核心則負責實際連線。v2rayN 是桌面用戶端,可依設定使用支援的核心;v2rayNG 是使用 Xray 核心的 Android 用戶端;v2flyNG 則是使用 V2Fly 核心的 Android 用戶端。三者都能解析 VMess 連結,不代表它們對所有 VLESS、REALITY 或完整 JSON 設定的支援度都相同。
| 用戶端 | 常見輸入 | 原生設定處理方式 | 優先確認項目 |
|---|---|---|---|
| v2rayN | 訂閱網址、支援的節點分享連結 | 使用自訂設定入口,並選用相符的核心 | 匯入工具與所選核心是否都支援節點欄位 |
| v2rayNG | 訂閱網址、剪貼簿與 QR 碼節點 | 使用該版本提供的自訂設定功能 | Xray 版本,以及傳輸和安全性參數是否完整 |
| v2flyNG | 訂閱網址、支援的節點分享連結 | 依目前版本提供的入口處理 V2Fly 設定 | 不要將 Xray 專用設定直接交給 V2Fly |
以下步驟以 v2rayN 7.x 中文介面的常見選單為例;不同小版本的選單文字可能有所調整。先判斷手上的是訂閱網址還是節點文字,再選擇相應入口,比反覆嘗試同一個匯入按鈕更有效。
-
辨識輸入內容
HTTPS 訂閱網址請從訂閱群組匯入;以
vmess://或vless://開頭的文字則使用節點匯入。包含inbounds、outbounds的 JSON,應先視為完整設定處理。 -
新增訂閱
在「訂閱群組」→「訂閱群組設定」中新增群組,填入名稱與訂閱網址。儲存後,從「訂閱群組」執行更新;依網路連線情況,選擇透過代理或不透過代理更新。
-
匯入單一節點
複製完整連結,在「伺服器」→「從剪貼簿匯入批次 URL」中匯入。多筆連結請逐行排列。v2rayNG 則可在主畫面點選「+」→「從剪貼簿匯入」進行相應操作。
-
確認欄位
開啟節點編輯視窗,核對伺服器、443 遠端連接埠、UUID、傳輸、路徑、Host 與 SNI。REALITY 節點還須確認公鑰、short ID、指紋與 Flow,不能只看節點名稱。
-
測試連線
選取節點並進行測試,再檢查日誌。若日誌顯示不支援的協定或欄位,請檢查核心;若出現位址、憑證或交握錯誤,則檢查節點設定。最後再啟用所需的系統代理或 TUN 模式。
六、格式轉換方案:保留更新功能或匯出快照
分享連結轉成 Base64 訂閱,本質上是「排列文字後再編碼」;Base64 訂閱轉成分享連結,則是「解碼後逐行拆分」。兩種轉換只會改變外層包裝,不會把 VMess 變成 VLESS,也不會自動補齊伺服器參數。訂閱提供者更換節點後,本機匯出的檔案不會同步更新。
保留原訂閱網址
建議目標用戶端支援原訂閱格式時,直接新增訂閱群組即可繼續取得伺服器維護的節點清單,避免每次更新都要重新複製檔案。兩端更新時間不同,清單仍可能暫時不一致。
適用情境:日常使用、桌面與 Android 共用節點來源
匯出分享連結快照
只需遷移少量節點時,可使用用戶端提供的分享或匯出功能,再於目標端匯入。匯出後請逐項確認傳輸與安全性欄位;不支援的擴充參數可能在再次匯出時遺失。
適用情境:遷移單一節點、排查特定連結的解析問題
遷移原生 JSON
若需保留路由、DNS 或多個出站,應檢查完整設定與核心的相容性,而非先轉成分享連結。也要避免本機連接埠與用戶端現有監聽設定衝突。
適用情境:已有完整設定、需要控制核心執行細節
本機編碼範例:先處理 UTF-8 位元組
以下是原生 JavaScript 的本機編碼與解碼函式,可用來了解一般 Base64 的處理方式。函式不會發出網路請求,也不會解析節點或產生原生設定。輸入內容應是已確認有效的連結清單;請勿將正式訂閱貼到陌生網站的主控台。
function encodeList(text) {
const bytes = new TextEncoder().encode(text);
const binary = Array.from(bytes, byte =>
String.fromCharCode(byte)
).join("");
return btoa(binary);
}
function decodeList(encoded) {
let normalized = encoded.trim()
.replace(/\s+/g, "")
.replace(/-/g, "+")
.replace(/_/g, "/");
normalized += "=".repeat((4 - normalized.length % 4) % 4);
const binary = atob(normalized);
const bytes = Uint8Array.from(binary, char =>
char.charCodeAt(0)
);
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
}
- 編碼前請以換行連接各個節點,避免兩條 URI 緊貼在一起。
- 解碼函式支援常見的 URL 安全字元替換與缺少補位的情況;內容不合法時仍會擲回錯誤。
- 若解碼結果是單一 JSON 物件,請進一步判斷它是分享負載還是完整設定,不要直接當成節點清單匯入。
- 若要將本機文字轉成可更新的訂閱,還需要部署可供存取的服務並管理存取權限;單靠編碼不會產生訂閱網址。
七、格式轉換與訂閱匯入常見問題
訂閱可以開啟,為什麼用戶端顯示零個節點?
先在本機檢查回應內容的開頭。若是 HTML、到期通知或錯誤物件,請處理訂閱權限;若是 Base64,解碼後確認是否包含逐行排列的協定連結。若回傳的是完整 JSON,請改用相符的自訂設定入口,或向提供者索取用戶端支援的訂閱格式。
JSON 編碼後,為什麼還是無法匯入?
Base64 不會改變內部結構。包含 outbounds 的設定物件,編碼後仍然是設定物件,不會自動變成連結清單。請先擷取代理出站,並對應伺服器、使用者、傳輸與安全性欄位,再透過支援這些欄位的工具或用戶端匯出分享連結。
成功匯入後,為什麼仍無法連線?
成功匯入只代表解析器接受了文字。請開啟節點編輯視窗,核對遠端連接埠、UUID、WebSocket 路徑與 SNI;再查看日誌是否有憑證、交握或不支援欄位的錯誤。請勿將本機 SOCKS 的 10808 填入遠端伺服器連接埠。
換了裝置後,原本的分流規則到哪裡去了?
一般節點連結通常只包含節點參數。請在目標用戶端的路由設定中重新設定規則,或遷移完整且相容的自訂設定。確認出站標籤與路由參照一致;只遷移伺服器位址和 UUID,無法還原整套分流規則。
訂閱網址已經傳給別人,修改備註有用嗎?
修改節點備註無法撤銷存取權限。請在訂閱提供者的管理入口重設訂閱權杖或網址,再到用戶端的訂閱群組替換舊網址並更新。若節點憑證也已外洩,還需要請伺服器管理者更換相應憑證。
最後依三個層次逐一檢查:先確認取得的回應內容,再確認用戶端能否解析,最後確認核心是否能連線。記錄用戶端版本、所選核心、節點傳輸類型與錯誤日誌,比一再嘗試 Base64 編碼更容易找出問題。若需要基礎設定說明,可繼續閱讀本站快速入門;協定與安全性欄位則可參考協定詳解。