· 訂閱格式 · 約 12 分鐘

V2Ray 訂閱連結格式解析:Base64、原生 JSON 與 vless:// 分享連結轉換

說明 Base64 訂閱、原生 JSON 設定與 vmess/vless 分享連結的格式差異,以及如何在 v2rayN、v2rayNG 匯入並互相轉換。

本文重點

先分清訂閱網址、訂閱回應內容與節點分享連結,再用一組 VLESS + WebSocket + TLS 範例對照 URI 與 Xray JSON 欄位。本文適合遇到「訂閱網址能開啟卻無法匯入」、「Base64 解碼後仍不是設定檔」或需要遷移節點的使用者。讀完即可判斷該使用哪種匯入方式,並了解轉換時可能遺失的路由、DNS 與本機監聽設定。

訂閱網址、Base64 與 JSON 的層級差異

訂閱網址通常是 HTTPS URL,必須由用戶端連線存取後才會取得節點資料。URL 本身不是 Base64,也不是節點設定;真正需要辨識的是伺服器回傳的回應本文。同一個訂閱網址可能依請求參數或用戶端識別資訊回傳不同內容,因此不能只看網址結尾判斷格式。

訂閱網址回應本文格式辨識節點解析核心執行
內容形式辨識線索適用匯入方式與限制
訂閱網址以 https:// 開頭,可能包含存取權杖新增至訂閱設定,以保留後續更新功能
Base64 訂閱本文解碼後通常是以換行排列的分享連結通常由用戶端的訂閱更新功能解析;不是完整的執行設定
單一節點分享連結以 vless:// 或常見的 vmess:// 開頭適合從剪貼簿匯入節點;通常不包含本機路由設定
核心原生 JSON包含 inbounds、outbounds 等欄位使用與核心相符的自訂設定匯入方式,並受核心支援範圍限制

Base64 只是位元組編碼,並非加密。取得訂閱本文的人通常可以還原伺服器位址與身分資訊。JSON 也只是資料語法:以大括號開頭的文字,可能是節點描述、API 錯誤訊息,或完整的核心設定。必須檢查內部欄位,不能把「合法 JSON」直接當成「可執行設定」。

Base64 訂閱解碼與重新編碼

常見的 Base64 訂閱會先以換行符號串接多條分享連結,再將整段 UTF-8 文字編碼。解碼後若看到多行 vless:// 或 vmess://,表示外層訂閱已還原;不必再對每條 VLESS 連結解碼。有些服務會直接回傳明文連結清單,遇到這種情況就略過外層解碼。

  1. 先確認取得的是回應本文,而不是瀏覽器登入頁面、存取限制提示或附有狀態碼的錯誤訊息。
  2. 對疑似 Base64 的本文移除空格與換行,支援 URL 安全變體中的 -、_,再補上結尾填充字元。
  3. 將解碼後的位元組以 UTF-8 讀取,逐行檢查通訊協定前綴,並保留每條連結中的參數。
  4. 重新編碼前,先確認用戶端確實需要 Base64 清單;本機編碼產生的只是靜態文字,不會建立可自動更新的 HTTPS 訂閱服務。

以下是可在本機瀏覽器開發者工具中使用的原生 JavaScript 函式。函式透過位元組陣列處理中文備註,避免直接用 btoa 編碼中文時出錯。它只會轉換傳入的文字,不會發出網路請求;請使用可信任的內容作為輸入。

function decodeSubscription(source) {
  const compact = source.trim().replace(/\s+/g, "")
    .replace(/-/g, "+").replace(/_/g, "/");
  if (!/^[A-Za-z0-9+/]*={0,2}$/.test(compact)) {
    throw new Error("輸入不是有效的 Base64 字元序列");
  }
  const padded = compact + "=".repeat((4 - compact.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);
}

const sampleText = "範例節點";
console.log(decodeSubscription(encodeSubscription(sampleText)));

解碼函式發生錯誤時,不要反覆套用多層轉換。先檢查本文是否遭到截斷、是否包含引號或網頁標籤,再確認內容是不是明文清單。即使解碼成功,仍須由用戶端驗證每條連結的通訊協定、必要欄位與傳輸設定。

vless:// 與 vmess:// 的欄位結構

VLESS 分享連結通常採用 URI 格式:使用者資訊欄位放 UUID,主機與連接埠描述伺服器,查詢參數描述傳輸方式與安全層,井字號後則是節點備註。以下範例使用文件專用網域與示範 UUID,只供欄位對照,不代表可連線的服務。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.net&path=%2Fws&sni=example.net#WS-TLS-demo
443
本範例的伺服器端 TLS 連接埠
10808
下方設定的本機 SOCKS 連接埠

path=%2Fws 解碼後為 /ws。查詢參數中的路徑、備註與特殊字元應使用百分比編碼;不要將整條 URI 一次編碼,也不要先解碼完整 URI 再手動拆分,否則路徑中的 & 等字元可能被誤認為參數分隔符。IPv6 位址放在主機欄位時,也必須加上方括號。

VLESS 分享連結

身分
UUID 位於 @ 之前
傳輸方式
type=ws
安全層
security=tls
路徑
path=%2Fws

本範例使用 WebSocket 與 TLS,不應額外加入 Vision flow。

常見的 VMess 分享格式

外層格式
vmess:// 後方接 Base64
伺服器
JSON 中的 add、port
身分
JSON 中的 id
傳輸方式
JSON 中的 net、path

這是常見的用戶端分享格式慣例,不是可直接交由核心執行的 JSON。

常見 VMess 分享 JSON 中的 v 代表分享格式版本,不是 VMess 通訊協定版本;ps 通常代表備註。其結構與核心出站設定中的 settings.vnext 不同。VMess 分享格式也有不同變體;遷移時建議優先使用來源與目標用戶端的匯入、匯出功能,不要假設所有 vmess:// 內容的內部結構都完全相同。

將 VLESS 連結轉換為 Xray 原生 JSON

要將分享連結轉換成完整 JSON,必須補上連結中沒有的本機入站與出口標籤。以下設定對應前面的 VLESS 範例,採用 Xray 設定格式;本機僅監聽 127.0.0.1:10808。實際使用前,請替換成已獲授權的真實伺服器參數;範例網域本身無法提供代理服務。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "example.net",
            "port": 443,
            "users": [
              {
                "id": "9f2a54d1-8bc6-4d71-a903-0be458e623fd",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "tlsSettings": {
          "serverName": "example.net"
        },
        "wsSettings": {
          "path": "/ws",
          "headers": {
            "Host": "example.net"
          }
        }
      }
    }
  ]
}

在 v2rayN 與 v2rayNG 選擇匯入方式

先分清楚「保留訂閱關係」與「匯入單一節點」。解碼訂閱後逐條匯入雖然能建立節點,但通常會失去訂閱來源與自動更新關係。若要持續更新伺服器清單,應保留原始訂閱 URL,而不只是目前匯出的分享連結。

v2rayN:分別處理訂閱、剪貼簿與自訂設定

  1. 訂閱 URL:開啟「訂閱分組」→「訂閱分組設定」,新增分組並填入備註與 URL,儲存後使用「訂閱分組」中的更新訂閱功能。更新完成後,請檢查新增的節點;不要將 URL 當成單一節點網址填入。
  2. 分享連結:複製完整的 vless:// 或 vmess:// 文字,再選擇「伺服器」→「從剪貼簿匯入批次 URL」。匯入後編輯節點,確認位址、連接埠、TLS、SNI 與傳輸路徑。
  3. 完整 JSON:使用「伺服器」→「新增自訂設定伺服器」等自訂設定匯入方式,選擇與檔案相符的核心,再依介面指示選取設定檔。請勿將整份 JSON 貼到訂閱 URL 欄位。

v2rayNG:先建立訂閱群組,再更新訂閱

  1. 在主畫面選單中開啟「訂閱群組設定」,按新增按鈕填入訂閱名稱與網址,儲存後返回主畫面並執行「更新訂閱」。
  2. 若要匯入單一分享連結,請複製完整文字,再點選主畫面的「+」→「從剪貼簿匯入」。確認產生的設定類型與來源相符後再連線。
  3. 匯入 Xray 原生 JSON 時,請使用「+」選單中的自訂設定匯入功能,並依使用的版本選擇檔案或剪貼簿方式。不要把常見的 VMess 分享 JSON 當成完整自訂設定匯入。

不同發行版本的選單文字可能略有差異,請依「訂閱群組」、「剪貼簿連結」、「自訂設定」這三種功能尋找。使用 v2flyNG 時,也要另外確認訂閱中的通訊協定與傳輸方式是否相容;v2rayNG 能辨識某個 Xray 節點,不代表另一個核心的用戶端也能執行相同設定。

JSON 反向匯出與轉換時的資訊損失

「互相轉換」不代表三種格式一定能完整往返。單一節點連結主要描述遠端連線,而完整 JSON 可能包含多個入站、出站、DNS、路由、策略與記錄設定。將 JSON 匯出為一條 VLESS 連結,本質上是選擇其中一個出站並擷取連線參數;其他本機行為通常無法寫入連結。

轉換方向通常可保留需要另外處理
連結清單與 Base64 互轉原始連結文字與排列順序字元編碼、換行與 URL 安全變體
VLESS 連結轉 JSON位址、身分、常見傳輸與安全參數補上入站、出口標籤與本機路由
JSON 出站轉分享連結目標用戶端支援的單一節點欄位選擇出站、處理擴充欄位,並另存 DNS 與分流規則
VMess 轉 VLESS僅能參考共通的位址與傳輸資訊伺服器必須實際提供 VLESS,不能只改前綴切換通訊協定

遷移時,建議先在來源用戶端選取節點並使用匯出分享連結功能,再到目標用戶端檢查欄位。若手邊只有包含多個出站的 JSON,先依據 outbounds 中的 tag 與 protocol 確認目標,避免把直連或阻斷出站誤認為伺服器。涉及擴充參數時,請保留原始 JSON 備份,並在目標端檢查實際產生的設定。

訂閱解碼與匯入常見問題

訂閱網址在瀏覽器中能開啟,為什麼用戶端更新失敗?

先確認回傳內容確實是節點清單,而不是登入頁面或 API 錯誤 JSON。接著檢查完整 URL 是否包含權杖與查詢參數。若目前網路無法直接連線至該網址,且已有可用節點,可選擇透過代理更新;不要把尚未匯入的節點當成更新所需的唯一網路出口。

Base64 解碼成功,卻顯示沒有可匯入的伺服器?

檢查解碼結果中每一行的通訊協定前綴。外層 Base64 解碼成功,只代表內容可以還原,不代表用戶端支援其中格式。若結果是 JSON,請進一步判斷它是分享欄位物件還是完整設定;若是 HTML,應回頭檢查訂閱請求,不要繼續編碼。

分享連結能匯入,但連線仍逾時,該怎麼辦?

開啟節點編輯畫面,對照來源檢查連接埠、傳輸路徑、TLS 與 SNI。本文範例的遠端連接埠是 443,本機 10808 僅為 SOCKS 監聽連接埠,兩者不能互換。接著查看核心記錄,判斷是網域解析、連線逾時還是 TLS 交握錯誤;「匯入成功」只表示解析器接受了這些欄位。

為什麼轉換後中國大陸直連規則消失了?

節點分享連結通常不包含完整的本機路由設定。請在目標用戶端另外還原路由;若使用自訂 JSON,請確認 routing.rules 與出口標籤相符。需要設定 domainStrategy 時,應放在 routing 層級,而不是塞進單一規則。

最後驗證時,每次只調整一個層級:先確認內容格式正確,再檢查欄位是否完整,最後才確認網路與核心是否正常運作。這樣能分別處理「訂閱取得失敗」、「連結解析失敗」與「節點連線失敗」,避免在編碼工具與代理設定之間反覆嘗試。

用戶端下載v2rayN / v2rayNG