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

解析三種常見訂閱形式的結構差異,說明 v2rayN 與 v2rayNG 分別支援哪些格式,以及如何手動轉換分享連結與 JSON 設定、排查匯入失敗。

本文摘要

先分清訂閱網址、訂閱回傳內容與單一節點分享連結,再以 VLESS over TCP + TLS 為例說明欄位對應。適合訂閱更新後沒有節點、JSON 無法從剪貼簿匯入,或節點匯入後仍無法連線時參考。文中的網址、UUID 與連接埠僅用於說明格式,並非可連線的服務。

三種格式:網址、節點清單與完整設定

「V2Ray 訂閱」並非單一檔案規格。平常收到的訂閱網址通常是 HTTPS URL,用戶端存取後才會取得節點清單。回傳內容可能是逐行排列的分享連結,也可能是將這份清單以 Base64 編碼後的文字。網址用於取得與更新,內容則用來描述節點,兩者不能互相取代。

形式常見結構匯入方式保留內容
Base64 訂閱解碼後為多行分享連結訂閱群組中的 URL主要包含節點連線參數
VLESS 分享連結vless://UUID@主機:連接埠?參數#名稱從剪貼簿匯入通常描述單一節點
原生 JSON包含 inbounds、outbounds 等鍵自訂設定功能可包含入站、DNS、路由與多個出站

Base64 是編碼,不是加密;能解碼的人通常也能看到伺服器位址與身分憑證。請勿將訂閱網址、解碼後的節點清單或完整設定貼到公開討論區。訂閱網址中的權杖也可能讓他人持續取得更新內容,別因為它看起來不像密碼就公開。

判斷方式:先看解碼後的第一層內容

若出現多行協定連結,就視為節點清單;若出現含入站、出站的物件,就視為完整設定。不要依檔案副檔名或文字長度判斷格式。

v2rayN 與 v2rayNG:選對匯入方式

v2rayN 是桌面用戶端,v2rayNG 則是使用 Xray 核心的 Android 用戶端。兩者常見的訂閱流程都是匯入節點清單;可解析的協定與參數,還取決於用戶端和核心版本。支援 JSON 不代表訂閱更新功能可以直接接受任意 JSON。

訂閱 URL

建議

將服務提供者給的訂閱網址存入訂閱群組。之後更新時仍會存取這個網址,適合節點會變動的服務。

適用情境:需要定期更新的節點清單

單一分享連結

複製完整的 vless:// 或 vmess:// 連結,再透過剪貼簿匯入。匯入一次不代表建立了可更新的訂閱。

適用情境:測試單一節點與核對參數

自訂 JSON

使用用戶端提供的自訂設定功能,並確認設定適用於所選核心。完整設定可能會接管 DNS 與路由,不能只檢查伺服器位址。

適用情境:需要保留完整路由或特殊出站的設定

  1. 建立訂閱群組

    在 v2rayN 主畫面前往「訂閱分組」→「訂閱分組設定」,新增群組並填入訂閱 URL。這裡要填的是網址,不是整段 Base64 內容。

  2. 更新節點

    返回「訂閱分組」選單,選擇「更新全部訂閱(不通過代理)」;若網址需要透過現有代理才能存取,再試試相應的「通過代理」更新選項。不同版本的標點與項目名稱可能略有差異。

  3. 測試單一連結

    在 v2rayN 選擇「伺服器」→「從剪貼簿匯入批次 URL」。在 v2rayNG 開啟主畫面的「+」→「從剪貼簿匯入」,只複製協定連結本身,不要包含引號或說明文字。

  4. Android 訂閱

    在 v2rayNG 主畫面點選右上角選單,進入「訂閱分組設定」,按「+」新增網址並儲存,再返回主畫面選單執行「更新訂閱」。如果使用的版本選單名稱不同,請以訂閱群組與更新功能為準。

v2flyNG 使用 v2fly 核心,不應直接套用所有適用於 Xray 的擴充參數。尤其是 REALITY、特定流控等功能,必須先確認核心是否支援;本文的欄位轉換範例以 Xray 為準,不保證可跨核心相容。

Base64 解碼與重新編碼:只轉換外層包裝

常見 Base64 訂閱的產生方式是:將每條節點連結各自放在一行,再把整份 UTF-8 文字編碼。因此,正確解碼後通常仍會看到連結,而不是 JSON。有些服務提供者會直接回傳明文連結清單,這種情況不必再解碼。

在 Mac 上,可以先複製 Base64 訂閱內容,再於終端機執行以下指令。指令會讀取剪貼簿並將結果輸出到目前的終端機,不會代你存取訂閱網址。輸出內容包含憑證,操作時請避免分享終端機畫面。

pbpaste | base64 -D

反向操作時,先將分享連結逐行存入本機純文字檔,再對檔案進行編碼。以下指令假設目前目錄已有 nodes.txt;產生的是靜態文字檔,並不會自動建立可供用戶端更新的訂閱 URL。

base64 -i nodes.txt -o subscription.txt

vless:// 轉 JSON:逐欄位對應

以下以 TCP + TLS 示範最基本的欄位對應。伺服器網域是文件範例,UUID 也僅供說明格式,兩者都無法直接連線。實際使用時,必須取得服務提供者提供的相符位址、連接埠、UUID 與 TLS 參數;不能只替換網域就假設可以使用。

vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=node.example.com#Example-TLS
443
範例遠端 TLS 連接埠
10808
範例本機 SOCKS 連接埠
36
含連字號的範例 UUID 字元數

這些數字是用來解說設定,不是速度測試結果,也不是所有用戶端的預設值。遠端連接埠與本機監聽連接埠位於連線兩端,不必相同。以下是用來說明欄位的 Xray 設定,監聽位址限定為本機回送位址。

{
  "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": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.com",
            "port": 443,
            "users": [
              {
                "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.com"
        }
      }
    }
  ]
}
連結欄位JSON 位置注意事項
UUIDsettings.vnext[0].users[0].id身分憑證,不可任意修改
主機與連接埠settings.vnext[0].address 與 portJSON 中的連接埠使用數字
encryption=noneusers[0].encryptionVLESS 欄位,不代表停用 TLS
type=tcpstreamSettings.network傳輸類型,須與伺服器端一致
security=tlsstreamSettings.security此處選擇 TLS 傳輸安全層
snitlsSettings.serverName可能與連線位址不同
#Example-TLS用戶端節點備註不參與協定交握

使用 WebSocket、gRPC、REALITY 或 Vision 時,還需要對應路徑、服務名稱、公鑰、短 ID、指紋或 flow 等欄位。不要在 TCP 範例中隨手加入 flow=xtls-rprx-vision 就以為轉換完成;傳輸方式、伺服器設定與核心支援情況都必須一併確認。

JSON 轉分享連結:哪些內容會遺失

反向轉換時,先找出目標出站,再讀取其協定、伺服器、使用者與傳輸設定。上方的 JSON 只有一個 VLESS 出站,因此可還原成對應連結;若設定包含多台伺服器或多位使用者,就必須分別產生連結,無法用單一 URI 表示所有物件。

  1. 確認目標為 protocol: "vless",再讀取 vnext 中的位址、連接埠與使用者 UUID。
  2. 將傳輸網路與安全類型分別填入 type 和 security,再補上協定所需的查詢參數。
  3. 將查詢參數值與備註進行百分比編碼。例如路徑 /edge?x=1 應寫成 %2Fedge%3Fx%3D1,避免問號被誤判為分隔符號。
  4. 若伺服器位址是 IPv6,URI 中的位址必須加上方括號;不要直接用冒號拆分整個位址。
  5. 重新匯入目標用戶端後,逐項核對節點編輯頁面,再實際測試連線。

結論:節點互轉不等於設定遷移

若要保留 DNS、路由分流、多個出站之間的選擇關係或本機入站,請保存原始 JSON。分享連結只適合移轉其中能表示的節點參數。

即使連結匯入成功,用戶端仍會使用自己的系統代理、TUN、DNS 與路由設定。原始 JSON 中「中國大陸直連,其餘流量走代理」的規則,不會隨著單一 VLESS 節點自動遷移。系統代理決定哪些應用程式將請求交給用戶端,路由規則則決定請求接手後走哪個出站,兩者屬於不同層面。

匯入失敗與連線失敗:分階段排查

先確認問題發生在哪個階段:訂閱請求失敗、內容解析失敗,或節點已出現在清單中卻無法連線。節點出現代表至少通過部分格式解析,不代表 UUID、TLS 參數或遠端服務一定正確。

訂閱更新成功,為什麼還是沒有節點?

確認目前選取的訂閱群組與清單篩選條件,再查看更新記錄是否顯示有效節點數為零。如果回傳內容其實是登入頁面、到期通知或完整 JSON,請先向服務提供者確認適用於該用戶端的訂閱格式,不要反覆編碼同一份內容。

貼上 JSON 後,為什麼顯示沒有有效設定?

一般的剪貼簿節點匯入功能通常會依分享連結格式解析。完整 JSON 應透過自訂設定功能匯入;同時檢查逗號、雙引號與頂層結構。JSON 不允許註解或結尾多餘的逗號;語法正確後,仍須確認設定符合所選核心。

連結可以匯入,卻顯示 TLS 交握失敗?

先確認遠端連接埠、security、SNI 與系統時間,再對照伺服器端要求檢查傳輸類型。不要把停用憑證驗證當成一般修復方式;位址能解析與憑證名稱相符,是兩項不同的檢查。

訂閱網址逾時,需要先啟用 TUN 嗎?

不必先調整 TUN。若已有可用節點,可以試試用戶端提供的透過代理更新選項;若沒有可用節點,先確認目前網路能否連上訂閱網址。若記錄顯示本機連接埠已被占用,請先關閉重複執行的用戶端,或調整監聽連接埠。

轉換後節點可以連線,為什麼應用程式仍無法連線?

確認應用程式是否使用系統代理,以及實際代理連接埠是否與用戶端設定一致。命令列工具不一定會讀取系統代理,不能只靠瀏覽器測試判斷所有應用程式。啟用 TUN 前,先確認權限、路由與 DNS;避免同時變更多項設定,導致排查失去線索。

下載v2rayN依平台選擇用戶端