訂閱網址是取得內容的入口,Base64 是編碼方式,分享連結描述單一連線,而原生 JSON 則可能包含完整的核心執行設定。本文適合需要轉移訂閱、排查匯入失敗或保留自訂設定的使用者:先辨識輸入內容,再依欄位轉換,最後在用戶端檢查連線、傳輸與路由是否完整。
一、先分清網址、編碼與設定內容
「V2Ray 訂閱格式」並非單一的檔案規範。常見訂閱介面會透過 HTTPS 傳回一段文字,內容可能是多條分享連結,也可能是將這些連結整體以 Base64 編碼的結果。訂閱 URL 本身不等於節點設定;用戶端還必須向該網址發出請求並解析回應。
檔名也無法證明內容格式。網址即使以 .json 結尾,也可能傳回錯誤頁面;沒有副檔名的網址也可能傳回有效 JSON。請先查看回應內容,再決定使用「更新訂閱」、「從剪貼簿匯入」或「匯入自訂設定」。
服務提供者提供的相容訂閱
建議需要持續更新節點時,建議優先使用明確支援目標用戶端的訂閱。常見內容是以 Base64 編碼的分享連結清單,實際格式仍應以服務提供者的說明及回應內容為準。
適用情境:日常更新、多裝置分別匯入、節點位址變更
單條或多條分享連結
vmess://、vless:// 等連結適合轉移單一連線。多條連結通常會逐行排列;連結本身不會自動更新。
適用情境:臨時測試、轉移單一節點、核對連線欄位
原生 JSON 設定
完整設定可以描述入站、出站、DNS 與路由。JSON 只是語法容器,實際欄位必須符合目標核心及其版本;能成功解析,不代表一定能正常執行。
適用情境:固定路由、自訂 DNS、轉移完整執行環境
二、如何辨識及解碼 Base64 訂閱
傳統連結清單訂閱常見的處理方式是:先將每條分享連結各自放在一行,再把整段文字轉成 UTF-8 位元組,最後進行 Base64 編碼。解碼後應能辨認出協定前綴,而不是直接得到完整的核心設定。
以下 JavaScript 僅示範本機字串處理。程式可處理標準 Base64,也相容常見的 URL 安全字元表;移除的是編碼文字中的空白,不是分享連結內的字元。若長度異常或含有非法位元組,請停止檢查,不要反覆解碼試圖「修復」。
function decodeSubscription(encoded) {
const text = encoded.trim()
.replace(/\s/g, "")
.replace(/-/g, "+")
.replace(/_/g, "/");
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(text) ||
text.length % 4 === 1) {
throw new Error("Base64 文字格式異常");
}
const padded = text + "=".repeat((4 - text.length % 4) % 4);
const bytes = Uint8Array.from(atob(padded), ch => ch.charCodeAt(0));
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
}
function encodeSubscription(linkText) {
const bytes = new TextEncoder().encode(linkText);
let binary = "";
for (const byte of bytes) binary += String.fromCharCode(byte);
return btoa(binary);
}
- 解碼後若出現
vmess://或vless://:請逐行檢查分享連結。 - 原始內容若以
{或[開頭:先確認是否為 JSON,不要直接進行 Base64 解碼。 - 若出現 HTML 標籤、登入提示或介面錯誤:請檢查訂閱授權、到期狀態及網路請求結果。
- 外層解碼完成後,某條
vmess://連結的酬載仍可能是 Base64;這是連結本身的一層編碼,不代表外層訂閱解碼失敗。
三、將分享連結轉成 JSON:依語意對應欄位
轉換連結不只是替換前綴。常見的 VMess 分享格式會將一段 JSON 編碼後放在 vmess:// 之後;VLESS 分享連結則常採用 URI 結構,由使用者識別碼、主機、連接埠、查詢參數與備註組成。不同用戶端對擴充參數的支援可能有所差異。
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.com#format-demo
這是用來說明欄位的虛構連線;example.com 是文件中的示範網域,不能用於實際連線。此處的 encryption=none 對應 VLESS 使用者層級的設定,不代表停用 TLS;傳輸安全性由 security=tls 表示。
| 連結資訊 | 常見的 JSON 對應欄位 | 核對重點 |
|---|---|---|
| 主機與連接埠 | settings.vnext[].address、port | 連接埠應為數字,請勿將網域誤填為備註 |
| 使用者識別碼 | settings.vnext[].users[].id | 完整保留 UUID,不包含 URI 分隔符號 |
encryption=none | users[].encryption | 這是 VLESS 欄位,不可套用至 VMess |
security=tls | streamSettings.security | 請勿與 VMess 使用者的加密設定混淆 |
sni=example.com | tlsSettings.serverName | 保留伺服器要求的 TLS 名稱 |
type=tcp | streamSettings.network | 傳輸名稱及可接受的別名須依核心版本核對 |
以下是適用於支援這些欄位的 Xray 核心之結構範例。10808 僅繫結至回環位址,443 是遠端連接埠,兩者不可互換。此處使用傳統的 tcp 寫法;不同核心版本的傳輸命名及相容別名,請以各自文件為準。
{
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "7c9c1f0b-4bd8-4b44-8eb2-3eb2ac702783",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "example.com"
}
}
}
]
}
四、將 JSON 轉成分享連結:可能遺失哪些內容
從完整設定匯出分享連結時,轉換工具通常只會擷取一個代理出站。一份 JSON 可能包含多個 outbounds,其中也可能有直連或封鎖出站。轉換前應先選定目標代理的 tag,不能一律把陣列中的第一項當成節點。
轉換方式:分開處理連線轉移與完整設定轉移
只轉移連線
- 從目標出站擷取協定、伺服器、連接埠與身分欄位。
- 保留 TLS 名稱、傳輸路徑及伺服器要求的流控設定。
- 產生分享連結,並在目標用戶端重新設定本機代理與路由。
保留完整行為
- 保留原生 JSON,並確認目標核心能夠讀取。
- 核對入站連接埠、DNS、路由規則及外部資料檔案。
- 使用用戶端的自訂設定匯入入口,確認設定是否遭到改寫。
分享連結適合傳遞連線參數;若要保留完整執行行為,還須一併保留設定檔、相依資源與核心功能。
routing.rules、dns、本機監聽位址及應用程式分流設定,通常不包含在一般節點分享連結中。將 JSON 轉成連結,再由連結轉回 JSON,所得設定不一定與原始檔案相同;即使連線成功,也不代表分流結果一致。
- 先備份原始 JSON,並記下要轉移的出站
tag。 - 逐項比對伺服器位址、連接埠、身分、傳輸、TLS 與流控設定,不要只比對節點名稱。
- 備註與查詢參數須依 URI 規則編碼。請特別留意路徑中的
?、&、#,避免被誤認為連結分隔符號。 - 若轉換工具提示有不支援的欄位,請停止自動轉移並手動核對;不要讓工具默默刪除欄位後繼續使用。
五、將分享連結重新打包成訂閱:不會自動恢復更新
將多條分享連結逐行串接,再對整段文字進行 Base64 編碼,即可得到傳統連結清單訂閱的內容。但這只是一次性的快照。若要讓用戶端定期取得更新,還需要由自己或可信賴的服務提供者管理、且能持續存取的訂閱網址。
- 整理輸入:每行只保留一條完整連結,刪除空白行,不要將網頁標題或說明文字一併編碼。
- 編碼處理:統一使用 UTF-8,並檢查中文備註的編碼;不要使用只接受單位元組字元的方式處理中文字串。
- 檢查輸出:再次解碼編碼結果,確認連結數量、逐行順序及參數內容都保持一致。
- 更新方式:節點位址或憑證變更後,靜態快照不會隨原訂閱更新;必須重新產生並發布內容。
原生 JSON 也不能只靠「整份 Base64 編碼一次」就變成所有用戶端通用的訂閱。編碼不會改變內部資料結構。如果目標匯入入口只接受分享連結清單,收到解碼後的完整 JSON 仍可能無法匯入。
六、在 v2rayN 與 v2rayNG 中核對轉換結果
先匯入獨立的測試分組,避免更新訂閱時覆蓋現有手動設定。以下列出常見的操作入口;不同版本的選單排列與文字可能略有不同,請以目前介面為準,也不要將完整 JSON 貼入訂閱 URL 欄位。
- v2rayN 訂閱:開啟「訂閱分組」→「訂閱分組設定」,新增測試分組並填入可信的訂閱 URL,再執行該分組的更新指令。
- v2rayN 分享連結:複製連結,在主畫面使用「從剪貼簿批次匯入 URL」,並檢查新增項目所屬的分組。
- v2rayNG 分享連結:點選右上角「+」→「從剪貼簿匯入」,接著編輯新增項目,核對伺服器、連接埠與傳輸參數。
- v2rayNG 訂閱:在選單的「訂閱分組設定」中新增網址,返回後執行「更新訂閱」,確認更新的是測試分組。
- 原生 JSON:使用目前版本提供的自訂設定檔匯入入口,先檢查記錄中的設定解析結果,再啟動連線。
啟動後分三個層面檢查:第一,核心能否解析設定並監聽本機連接埠;第二,能否完成遠端交握;第三,應用程式流量是否進入代理並符合預期路由。清單中出現節點,只能證明解析器已儲存資料,不能取代後兩項檢查。
解碼後看得到連結,為什麼還是匯入失敗?
檢查是否把多條連結貼成一行,或連同引號、逗號一起複製。先只匯入其中一條,再確認目標核心是否支援該協定與傳輸方式;單條連結匯入失敗時,重新編碼整份清單也無濟於事。
匯入成功,但啟動時立即顯示連接埠遭占用,該怎麼辦?
檢查自訂 JSON 的 inbounds[].port。如果範例中的 10808 已被其他程序占用,請停止衝突程序或更換連接埠,並同步調整應用程式代理位址。無須因此修改遠端的 443。
轉換後 TLS 交握失敗,需要關閉憑證驗證嗎?
先比對伺服器位址、serverName、系統時間與傳輸設定。檢查轉換工具是否漏掉 SNI 或誤改 TLS 類型;應修正欄位,不要關閉憑證驗證來掩蓋設定不一致。
為什麼節點可以連線,台灣與中國大陸的分流卻變了?
分享連結通常不包含原本的 routing 和 dns。請在目標用戶端重新選擇路由設定,並檢查規則順序與資料檔案;若要重現原始設定,應轉移完整 JSON 並確認核心相容性。
更新訂閱後,手動修改的參數又被改回去了?
訂閱管理中的項目可能會在更新時重新建立。請先將要保留的設定複製到獨立的手動分組,再向服務提供者確認原始訂閱參數。不要將訂閱產生的項目當成長期保存本機修改的地方。
最後請保存三項資料:原始輸入的安全備份、轉換時採用的欄位對應方式,以及目標用戶端中的核對結果。日後發生問題時,才能明確判斷是訂閱回應改變、轉換時遺漏欄位,還是本機路由與連接埠設定遭到變更。