先分清訂閱網址、訂閱回應、單一節點分享連結與核心設定,再選擇正確的匯入方式。本文適合遇到「無法識別訂閱內容」、「不能把 JSON 當成節點匯入」或需要在不同裝置間移轉設定的使用者。依步驟辨識 Base64 外層、了解 VMess 與 VLESS 的欄位差異,並確認轉換時哪些連線參數能保留,哪些 DNS 與路由設定必須另外移轉。
一、辨識格式:訂閱網址不等於節點設定
V2Ray 訂閱並非固定格式的核心設定檔。一般所說的「訂閱連結」通常是 HTTPS 網址;用戶端連線取得文字後,會將內容解析為節點清單。回傳內容可能是逐行排列的分享連結,也可能是將整份連結清單以 Base64 編碼。網址能開啟,只代表成功取得回應,不代表目前的用戶端一定能使用該內容。
| 項目 | 辨識方式 | 適用入口 | 保存內容 |
|---|---|---|---|
| 訂閱網址 | 以 https:// 開頭的服務網址 | 訂閱群組設定 | 遠端更新來源 |
| Base64 訂閱內容 | 解碼後通常是多行分享連結 | 由訂閱更新功能解析 | 多個節點的參數 |
| VMess 分享連結 | vmess:// 加上編碼資料 | 從剪貼簿匯入 | 通常是一個節點 |
| VLESS 分享連結 | vless:// 加上使用者資訊與查詢參數 | 從剪貼簿匯入 | 通常是一個節點 |
| 核心 JSON | 包含 inbounds、outbounds 等欄位 | 自訂設定入口 | 連線、入口、DNS、路由等設定 |
例如,https://subscription.example.com/list?token=demo 是網址格式示例,並非可用的訂閱。不要將它當成 VLESS 伺服器網址填入,也不要把原生 JSON 貼到訂閱網址欄位。訂閱網址中的權杖通常與帳號權限相關,排除問題時應遮蔽完整路徑與查詢參數,而不只是隱藏網域名稱。
二、解開 Base64:分清訂閱外層與 VMess 內層
常見的 Base64 訂閱有兩層結構:外層會將整份連結清單編碼;內層的每一條 vmess:// 連結也可能包含一份以 Base64 編碼的 JSON。解開外層後只會得到節點連結,不會直接取得完整的核心執行設定。VLESS 通常使用 URI 結構,不能照搬 VMess 的內層解碼方式。
訂閱回應內容
↓ 將整段內容以 Base64 解碼
vmess://一段已編碼的節點 JSON
vless://使用者識別碼@伺服器:連接埠?參數#備註
↓ 只解碼 vmess:// 後方的內容
VMess 節點欄位:add、port、id、net、tls 等
先查看回應的實際文字,再決定是否解碼。如果內容已以 vmess:// 或 vless:// 開頭,就按逐行連結處理;如果開頭是 HTML 標籤、登入提示或 JSON 錯誤訊息,問題多半出在訂閱請求、授權或伺服器回傳內容,重複解碼也無法修復。
- 換行:每一行放一條完整連結。複製時不要在連結中間換行,也不要把多條連結直接接成一行。
- 字元:Base64URL 使用
-、_取代標準 Base64 的+、/;有些輸出會省略結尾的=。 - 文字:中文備註應以 UTF-8 還原;若直接將二進位結果當成一般文字顯示,可能會出現亂碼。
- 解碼次數:取得連結清單後就停止解碼外層;不要只因為內容看起來是英數混合字串,就繼續重複處理。
以下是可在本機空白頁面中的瀏覽器開發人員工具使用的原生 JavaScript 函式。這段程式只示範文字編碼與解碼,不會發出網路請求,也不會自動讀取剪貼簿。請只用示例文字測試編解碼結果;處理真實訂閱時,也要留意瀏覽器擴充功能與主控台記錄。
function encodeUtf8Base64(text) {
const bytes = new TextEncoder().encode(text);
let binary = "";
for (const byte of bytes) binary += String.fromCharCode(byte);
return btoa(binary);
}
function decodeUtf8Base64(text) {
let value = text.trim().replace(/\s+/g, "")
.replace(/-/g, "+").replace(/_/g, "/");
if (value.length % 4 === 1) {
throw new Error("Base64 長度異常,請檢查複製的內容");
}
value += "=".repeat((4 - value.length % 4) % 4);
const bytes = Uint8Array.from(atob(value), ch => ch.charCodeAt(0));
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
}
const sample = "訂閱格式示例";
console.log(decodeUtf8Base64(encodeUtf8Base64(sample)) === sample);
三、核對節點欄位:VMess JSON 與 VLESS URI
常見的 VMess 分享格式會在 vmess:// 後放入經過編碼的節點描述 JSON。這是用戶端約定的分享格式,不等同於 Xray 或 V2Ray 核心 JSON。以下的 v 是分享格式識別欄位;v: "2" 不是用戶端版本號,也不代表必須安裝特定版本的核心。
{
"v": "2",
"ps": "VMess-WS-TLS 範例",
"add": "node.example.com",
"port": "443",
"id": "11111111-2222-4333-8444-555555555555",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "edge.example.com",
"path": "/ws",
"tls": "tls",
"sni": "edge.example.com"
}
將上述 JSON 完整文字以 UTF-8 編碼成 Base64,再在前方加上 vmess://,即可建立這種分享格式。示例網域與使用者識別碼僅供說明,無法用來連線。真實節點的位址、UUID、傳輸方式與 TLS 設定必須和伺服器端相符,不能只修改備註就拿來使用。
VMess + WS + TLS
- 伺服器連接埠
443- 傳輸欄位
net: ws- 請求路徑
/ws- HTTP Host
edge.example.com- TLS SNI
edge.example.com
Host 用於 WebSocket 請求,SNI 用於 TLS 握手;示例中兩者相同,不代表可以互相取代。
VLESS + TCP + TLS
- 伺服器連接埠
443- 傳輸參數
type=tcp- 協定參數
encryption=none- 傳輸安全性
security=tls- TLS SNI
node.example.com
VLESS 的協定加密欄位與 TLS 所屬層級不同,不能因此移除 TLS 設定。
相應的 VLESS 範例由使用者資訊、位址、查詢參數與片段備註組成。備註含空格或中文時,應進行 URI 百分比編碼;IPv6 位址則需放在方括號內。參數順序通常不影響意義,但參數名稱和值都不能任意修改。
vless://[email protected]:443?encryption=none&security=tls&sni=node.example.com&type=tcp#VLESS-TLS
四、匯入 v2rayN:先新增訂閱群組,再更新節點
遠端訂閱應新增至訂閱群組;單一或多條分享連結則使用剪貼簿匯入。以下依 v2rayN 常見的繁體中文介面說明;桌面版與 WPF 版的入口位置可能不同,更新功能也可能位於群組的右鍵選單。請以實際選單中的同名功能為準,不要因按鈕位置不同就改用自訂設定入口。
-
新增群組
開啟「訂閱群組」→「訂閱群組設定」,新增一筆資料。填寫備註,將完整的 HTTPS 訂閱網址貼到網址欄位,然後儲存。
-
更新訂閱
返回「訂閱群組」,選擇「更新全部訂閱(不透過代理)」。如果目前網路必須透過已可用的代理才能存取訂閱,則選擇相應的透過代理更新選項。
-
核對節點
查看更新結果,確認目標群組中已出現節點。開啟節點編輯視窗,核對協定、伺服器位址、連接埠、傳輸方式與 TLS;不要只憑備註是否相同來判斷。
-
選擇伺服器
在節點清單中按右鍵,選擇「設為作用中伺服器」。更新訂閱只是取得設定,不代表目前的連線已切換至新節點。
-
驗證連線
使用用戶端提供的連線測試功能,再以瀏覽器實際瀏覽需要驗證的網站。如果失敗,先檢查記錄中的握手、驗證或解析錯誤,不要立刻重複轉換格式。
匯入靜態分享連結時,請複製包含前綴的完整連結,然後選擇「伺服器」→「從剪貼簿匯入批次 URL」,常見快捷鍵為 Ctrl+V。批次文字請維持每行一條。若只有 Base64 內容而沒有遠端網址,先在本機還原連結清單,再使用這個入口,較容易找出問題。
- 再次更新可能覆寫變更:訂閱節點由遠端維護,手動修改的內容可能在下次更新時被取代。需要長期保留的修改,請另存為獨立項目。
- 請勿照抄本機入口:示例設定常使用
127.0.0.1:10808;實際監聽連接埠應在目前用戶端設定中確認,不能根據訂閱節點的443推斷。 - JSON 請使用專用入口:完整核心設定請使用「伺服器」中的新增自訂設定功能;它與一般節點項目的編輯、匯出功能可能不同。
五、匯入 v2rayNG:保留更新來源,區分靜態複製
v2rayNG 是 Android 上使用 Xray 核心的用戶端。常見介面中,遠端訂閱由右上角選單管理,靜態連結則從主畫面的加號匯入。兩種方式最後都會顯示節點,但只有前者會保留訂閱來源;複製桌面版匯出的分享連結,不會自動帶入桌面版的更新排程或群組關係。
-
新增來源
開啟右上角「⋮」→「訂閱群組設定」,點選「+」,填寫備註與完整訂閱 URL,儲存後返回主畫面。
-
取得節點
開啟「⋮」→「更新訂閱」。如果目前版本提供更新目前群組與更新全部群組兩種選項,請選擇包含目標訂閱的範圍,並查看更新提示。
-
匯入靜態項目
如果取得的是分享連結,請先複製完整文字,再點選主畫面的「+」→「從剪貼簿匯入」。不要連同訂閱網頁的登入說明一起複製。
-
啟動並驗證
選取目標節點、啟動連線,並確認系統顯示的 VPN 授權提示。執行實際連線測試,再以應用程式確認能否存取;只顯示 TCP 延遲,不代表代理請求已成功。
跨裝置移轉方案:共用來源,分別確認設定
桌面版:v2rayN
- 將原始 HTTPS 網址儲存至訂閱群組。
- 確認目前的核心支援節點所需協定。
- 另外設定系統代理、DNS 與路由規則。
Android 版:v2rayNG
- 新增相同的訂閱網址,不要只複製節點備註。
- 更新後核對重要參數,並確認節點可用。
- 另外確認 VPN 授權與個別應用程式的代理範圍。
使用相同來源較方便維護,但回傳清單可能因帳號、請求條件或伺服器策略而異;兩端的清單與設定不會自動同步。
六、執行格式轉換:先確認哪些資訊可以保留
分享連結與 Base64 連結清單之間,通常只是文字包裝格式不同。原生 JSON 與分享連結則無法一對一互換:完整設定可能包含多個出站、直連與封鎖規則、DNS、入口監聽及出站選擇邏輯。一條節點連結通常只能描述某個代理出站的連線參數,無法取代完整設定備份。
保留原始訂閱網址
建議在兩端分別新增同一個遠端來源。只要網址未變,就能繼續接收遠端維護的節點更新;是否允許多台裝置使用,仍須依服務提供者的帳號規則而定。
適用情境:需要持續更新,並在多台裝置上使用。
匯出節點分享連結
在節點的右鍵選單或分享入口中,選擇匯出分享 URL、複製連結等功能。匯入另一端後逐項核對參數;匯出的內容是靜態節點快照,不包含訂閱權杖或自動更新關係。
適用情境:臨時移轉少數節點,或核對單一連線參數。
保留完整核心 JSON
使用自訂設定入口移轉,並核對核心相容性、本機路徑、監聽位址與連接埠。不要直接將用戶端執行時產生的設定視為可跨平台通用的備份。
適用情境:需要保留多個出站、DNS 或複雜路由設定。
轉換連結清單與 Base64 訂閱內容
- 整理目標用戶端支援的完整分享連結,每行一條,並移除聊天記錄中的引號、編號與說明文字。
- 將整份文字以 UTF-8 轉換為 Base64,即可取得常見的 Base64 訂閱內容。反向操作只需解碼一次,即可還原逐行排列的連結。
- 匯入用戶端前,先確認第一行的協定前綴、總行數與中文備註是否正常。編碼成功不代表每個節點都能連線。
- 若要透過 URL 更新,還需要一個實際回傳該內容且由你控管的 HTTPS 服務。產生 Base64 文字本身不會建立訂閱網址。
原生 JSON 與單一節點連結互轉
從 JSON 擷取節點時,先在 outbounds 中找出實際使用的 VMess 或 VLESS 出站,再依所用核心的設定結構讀取伺服器、使用者驗證資料與 streamSettings。不要預設第一個出站就是目標:它可能是直連,也可能是依賴其他出站的鏈式連線。Xray 與 V2Ray 的設定功能及不同版本欄位並不完全相同。
- 連結轉成 JSON:建議先讓用戶端匯入連結,再由用戶端產生執行設定。如此會一併套用本機入口、DNS 與路由設定,而不是只輸出單獨的出站片段。
- JSON 轉成連結:只有在該出站的參數能獨立表達時才匯出。如果匯入的是自訂設定,用戶端不一定提供通用的單一節點分享功能。
- 無法透過連結保留的項目:入口監聽、網域分流、DNS 策略、規則順序與鏈式出站關係,通常不會隨一般分享連結移轉。
- 轉換後再次核對:比較位址、連接埠、UUID、傳輸方式、路徑、Host、SNI、TLS 或 REALITY 參數,再進行連線測試。
七、排除匯入失敗:依序檢查回應、解析與連線
先確認問題發生在哪個環節。更新訂閱出錯,可能是請求根本沒有成功;顯示「匯入 0 個項目」,可能是文字格式不受支援;節點已出現但無法存取,則應檢查連線參數與代理生效範圍。若把這三類問題混為一談,就可能反覆編碼、切換核心,卻始終沒有修正真正的錯誤。
| 狀況 | 優先檢查 | 處理方式 |
|---|---|---|
| 更新回應為 401 或 403 | 訂閱權杖、授權狀態與存取條件 | 向服務提供者重新取得有效網址,不要修改 Base64 內容 |
| 內容以 HTML 開頭 | 登入頁面、重新導向頁面或請求遭封鎖的頁面 | 檢查最終回應與訂閱入口,不要把網頁原始碼當成節點 |
| Base64 解碼失敗 | 複製內容遭截斷、字元格式不同或缺少補位 | 確認內容完整,將 Base64URL 正規化後再以 UTF-8 解碼 |
| 更新成功但匯入 0 個項目 | 確認回傳內容是否為支援的連結清單 | 檢查解碼後的協定前綴,確認伺服器輸出格式 |
| 節點存在但握手失敗 | TLS、SNI、系統時間與傳輸參數 | 逐項核對節點欄位,勿混淆格式問題與連線問題 |
| 連線正常但部分應用程式無法使用 | 系統代理、VPN 與個別應用程式規則 | 檢查本機代理接管範圍,不必重新編碼訂閱 |
為什麼更新訂閱後,節點數量和之前不同?
伺服器可能調整了節點,用戶端也可能篩除不支援或重複的項目。先查看更新記錄與實際回傳內容,再比對協定支援情況。不要只因數量不同就認定轉換時遺失了節點,也不要手動將舊節點重新加入由訂閱自動維護的群組。
JSON 可以成功解析,為什麼用戶端仍然拒絕?
JSON 格式合法只代表語法正確。VMess 分享 JSON、訂閱介面的 JSON 錯誤回應與核心設定都可能通過語法解析,但用途各不相同。還需要確認設定結構、協定支援與入口類型;原生設定應透過自訂設定入口檢查。
只備份分享連結,可以還原 DNS 與路由分流嗎?
通常不行。分享連結主要保存節點連線參數。移轉前也應記錄用戶端的 DNS、系統代理、路由模式與自訂規則,並另外保存完整設定。匯入後先用單一節點測試連線,再還原分流設定,較容易區分是節點還是規則造成問題。