V2Rayのサブスクリプション形式を解説|Base64・JSON設定・共有リンクの変換方法

Base64サブスクリプション、JSON設定、VMess・VLESS共有リンクの違いと、v2rayNでのインポート・相互変換方法を解説。

この記事の要点

まず、手元にあるものがサブスクリプションURL、単一の共有リンク、コアの実行設定のどれかを見分けてから、適切な方法でインポートしましょう。ノードの移行やサブスクリプション形式のエラーを確認したい方に向けて、Base64エンコードとプロトコルのパラメーターの違い、v2rayNへのサブスクリプションの登録やノードのエクスポート方法を解説します。JSONを共有リンクに変換すると、ルーティング、DNS、複数のアウトバウンド設定を引き継げない点も確認できます。

まず確認:サブスクリプションURL・共有リンク・実行設定の違い

まずはテキストの先頭を確認し、拡張子を変更するのは後にしましょう。https://で始まるURLは、サブスクリプションの取得先の場合もあれば、アカウントページの場合もあります。vmess://またはvless://で始まる文字列は、通常、単一ノードの共有リンクです。波括弧で始まり、inboundsとoutboundsを含むJSONは、コアの実行設定である可能性があります。ファイル名だけで判断せず、内容も確認してください。

サブスクリプションURL

おすすめ

クライアントがURLにアクセスし、提供元が現在配布しているノード一覧を取得します。ノードの変更後に再取得できますが、返される形式がクライアントに対応している必要があります。

向いている用途:継続的な利用、ノードや設定の更新。

単一ノードの共有リンク

サーバーアドレス、認証情報、通信パラメーターを1つのテキストにまとめたものです。インポートすると独立したノードとして登録され、提供元が設定を変更しても自動では更新されません。

向いている用途:一時的なテスト、少数ノードの移行、パラメーターの個別確認。

ネイティブJSON設定

コアの動作を直接定義する形式です。待ち受けポート、DNS、ルーティング、複数のアウトバウンドなどが含まれる場合があります。対応するコアと設定構文を確認してください。

向いている用途:実行時の動作を一通り保持したい場合、管理者からカスタム設定を受け取った場合。

ここでサブスクリプションURLをおすすめするのは、継続的に更新しながら使う場合です。JSONより高機能という意味ではありません。サブスクリプションは通常ノードの配布に使われ、完全な設定ファイルは動作全体を定義します。用途が異なります。

Base64サブスクリプション:エンコードされるのはノード一覧であり、暗号化トンネルではない

従来のV2Rayサブスクリプションでは、複数の共有リンクを改行で連結し、テキスト全体をBase64でエンコードする形式がよく使われます。デコードすると、VMessとVLESSが混在する場合も、同じプロトコルだけの場合もあります。Base64はバイト列を印字可能な文字列に変換するエンコード方式です。ノードの認証情報を秘匿するものではなく、接続時に使うプロトコルも変わりません。

3 → 4
標準Base64では3バイトを4文字に変換
1行
従来形式の一覧では、通常1行に共有リンクが1つ含まれます
443
後述するTLSノードの例で使うサーバーポート

「サブスクリプションの応答が長い文字列だった」からといって、データが壊れているとは限りません。一方、「ブラウザーでURLを開けた」からといって、形式が正しいとも限りません。サーバーがログインページ、有効期限切れの通知、アクセス認証ページを返している場合、クライアントはノードとして解析できません。

VMess・VLESSの共有リンクに含まれる情報

従来形式のVMess共有リンクは、vmess://にBase64エンコードされたJSONを続ける構造が一般的です。JSONにはadd、port、id、netなどのフィールドが含まれます。これは「共有用の接続情報」であり、inboundsやルーティングを含むコアの完全な設定ではありません。共有データ内のvは共有形式のバージョンを表すことが多く、v2rayNのアプリバージョンではありません。

VLESS共有リンクは通常、URI形式です。認証情報はアドレスの前に、通信方式やセキュリティの設定はクエリパラメーターに、注釈は#の後に記載されます。以下は学習用の例で、サンプルドメインとデモ用UUIDを使っています。実際の接続先ではありません。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=node.example.com&path=%2Fgateway&sni=node.example.com#format-demo
フィールドサンプル値確認ポイント
サーバーとポートnode.example.com:443サーバー側の待ち受けアドレスを指定します。ローカルのプロキシポートではありません。
encryptionnoneVLESSプロトコル層の暗号化設定を表します。この例では、通信経路の保護にTLSも使用しています。
securityとsnitls、node.example.com通信のセキュリティ方式とTLSのサーバー名を指定します。サーバー側の要件に合わせてください。
typeとpathws、%2FgatewayWebSocketを選択します。パスをデコードすると/gatewayになります。
hostnode.example.comこの例でWebSocketに使うHostです。すべての環境でサーバーアドレスとして流用できるわけではありません。

サーバー、ポート、UUIDだけをコピーしないでください。SNI、通信パス、Hostが欠けると、ノードのインポートには成功してもハンドシェイクで失敗することがあります。REALITYなどの設定では公開鍵やshort IDなども必要です。元のリンクの値を維持し、選択したコアが対応しているか確認してください。securityの値を変えるだけでは変換できません。

v2rayNでは、データの種類に応じてインポート方法を選ぶ

インポートする前に、元のテキストを保存しておきましょう。以下ではv2rayNの中国語版でよく使われるメニュー名を示します。バージョンによって、コマンドが上部メニューまたは右クリックメニューにある場合があります。表示名が多少異なる場合は、「サブスクリプショングループ」「クリップボードから一括インポート」「カスタム設定」の用途に沿って探し、別々の方法を混同しないでください。

  1. サブスクリプションURLを登録:「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、グループを追加して、名前とサブスクリプションURLを入力して保存します。次に「サブスクリプショングループ」から「現在のサブスクリプションを更新(プロキシを使用しない)」を実行します。利用可能な既存のプロキシ経由でサーバーにアクセスする必要がある場合は、「現在のサブスクリプションを更新(プロキシを使用)」を選びます。
  2. 共有リンクをインポート:完全なvmess://またはvless://の文字列をコピーし、「サーバー」→「クリップボードからURLを一括インポート」を開きます。複数をインポートする場合は1行に1つずつ記載し、チャットの時刻、番号、説明文を混ぜないでください。
  3. 完全なJSONをインポート:まず設定がXray用かV2Fly用かを確認します。「サーバー」から「カスタム設定サーバーを追加」を選び、設定ファイルを指定してコアの種類を確認してください。サブスクリプションURLの入力欄に完全なJSONを貼り付けないでください。
  4. インポート結果を確認:まず一覧のノード数を確認し、ノードの編集画面でアドレス、ポート、通信方式、セキュリティ設定を確認します。ノードを1つ選んで有効なサーバーに設定し、ログに設定の解析エラーやハンドシェイクエラーが出ていないか確認してください。

共有リンク・Base64・JSONの変換で引き継げる範囲

まず、残したい情報を確認しましょう。ノード一覧をBase64にする場合は、通常、テキストの外側の表現が変わるだけです。一方、完全なJSONを単一の共有リンクにする場合は、実行設定全体を1つのノードに縮小することになります。この2つの変換を混同しないでください。

変換の方向操作方法失われる可能性がある情報
共有リンク → Base64リスト完全なリンクを1行ずつ連結し、UTF-8テキストをBase64でエンコードします。エンコード自体でフィールドが失われることはありませんが、更新可能なサブスクリプションサービスが自動で作られるわけではありません。
Base64リスト → 共有リンク外側のエンコードをローカルでデコードし、各行のプロトコル接頭辞とパラメーターを維持します。手動での改行、切り詰め、文字の置換によってリンクが壊れることがあります。
共有リンク → コアJSONクライアントで解析し、ローカルのinbounds、DNS、ルーティングと組み合わせて実行設定を生成します。生成結果はクライアントの設定に左右され、1つに固定されません。
コアJSON → 共有リンク共有形式で表現できるプロキシのアウトバウンドを1つ選び、対応する形式に変換します。待ち受け、DNS、ルーティング、複数アウトバウンド間の関連などは、通常すべてを引き継げません。

v2rayNからノードをエクスポートして移行する

サーバー一覧で対象ノードを選び、右クリックメニューの「サーバーを共有」から「共有URLをクリップボードにコピー」を選びます。バージョンによっては、共有コマンドが右クリックメニューに直接表示されます。複数を共有した場合は、ローカルのテキストエディターで行数を確認してから、移行先にインポートしてください。カスタム設定のノードは、標準の共有リンクとしてエクスポートできない場合があります。

任意のJSONをそのままvmess://にできない理由

どちらもJSONを使うからといって、フィールド構造まで同じとは限りません。以下はXray設定に含まれるアウトバウンドの一部であり、単体で動作する完全な設定でも、従来形式のVMess共有ペイロードでもありません。Base64でエンコードしてプロトコル接頭辞を付けても、正しい共有フィールドにはなりません。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.com",
            "port": 443,
            "users": [
              {
                "id": "b85a420b-f879-44e5-88eb-7ddc1d26908e",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.com"
        },
        "wsSettings": {
          "path": "/gateway",
          "headers": {
            "Host": "node.example.com"
          }
        }
      }
    }
  ]
}

デスクトップとAndroid間の移行:元データを再利用し、対応状況を個別に確認

複数の端末で使う場合は、まず提供元のサブスクリプションURLを保存し、それぞれの端末に登録しましょう。v2rayNはデスクトップ向けクライアントです。Android版のv2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。サブスクリプションを解析できることと、すべてのノードが使用中のコアに対応していることは、別々に確認が必要です。

移行方法:通常のノードとカスタム設定を分けて扱う

通常のサブスクリプションと共有ノード
  • 移行先の端末で、元のサブスクリプションURLを再登録します。
  • 少数のノードだけを移行する場合は、完全な共有リンクをエクスポートします。
  • システムプロキシ、アプリごとのプロキシ、ルーティングを端末ごとに設定します。
完全なJSONとカスタムルーティング
  • まず移行先クライアントが対応している設定のインポート方法を確認します。
  • コアの種類、ファイルパス、待ち受けポートを確認します。
  • VLESSやREALITYなどの機能を使う場合は、コアの対応状況を項目ごとに確認します。

同じサブスクリプションを使っていても、すべての設定が共通になるわけではありません。端末ごとに接続方法、DNS、ルーティングを確認してください。

完全な設定には、デスクトップ上の絶対パスやローカルリソースが指定されている場合もあります。Android端末へ移行するときに、これらのパスをそのまま使うことはできません。両端末で同じコアを使う場合でも、コアのバージョンと設定フィールドの互換性を確認してください。「ファイルを開けた」だけで動作確認済みと判断しないでください。

サブスクリプション形式のよくある質問と対処方法

サブスクリプションの更新は成功したのに、一覧が空なのはなぜ?

該当するサブスクリプショングループに切り替え、一覧のフィルターを解除してから、ログに記録された有効なノード数を確認してください。応答がログインページ、空の内容、または非対応の設定形式であれば、ダウンロードに成功してもインポートできるノードがない場合があります。提供元のページに戻り、現在のクライアントに対応するサブスクリプションURLをコピーし直してください。

長いBase64文字列を受け取った場合、どこに貼り付ければいい?

まずローカルでデコードし、内容を確認します。1行ごとの共有リンクになっている場合は、デコードした一覧をすべてコピーして「サーバー」→「クリップボードからURLを一括インポート」を使います。完全なJSONの場合は、対応するコアのカスタム設定として扱い、プロトコル接頭辞を付けないでください。

リンクに変換した後、インポートはできるのに接続できないのはなぜ?

元ノードと新しいノードの編集画面を開き、セキュリティ方式、SNI、Host、パス、関連するプロトコルパラメーターを1つずつ比較してください。特に、%2Fが%252Fに二重エンコードされていないか、チャットアプリによって&以降のクエリパラメーターが切り捨てられていないか確認しましょう。

サブスクリプションの更新で手動編集したノードは上書きされる?

同じサブスクリプショングループにあるノードは、更新時に置き換えられたり再作成されたりする場合があります。編集内容を長期保存する場合は、共有リンクをエクスポートして独立した手動グループにインポートし、次回の更新後に状態を確認してください。サブスクリプションの項目を、変更されないローカル設定のバックアップとして扱わないでください。

ノード一覧をBase64にすれば自動更新される?

いいえ。Base64で変わるのはテキストの表現だけです。自動更新には、クライアントからアクセスできるサブスクリプションURLと、そのURLから継続的に管理された互換データが返されることが必要です。ローカルのエンコード済みテキストしかない場合は、静的なノード一覧としてインポートしてください。提供元の変更が後から反映されることはありません。

最後に「URLの入手元が正しいか → 応答内容が互換性のある形式か → 必要なフィールドが揃っているか → コアが対応しているか」の順で確認しましょう。まず形式の問題を解決してから接続を確認します。元のサブスクリプションと、個人情報を伏せたエラー記録を残しておくと、変換方法を次々に試すより原因を特定しやすくなります。

v2rayNをダウンロード対応環境とインストーラーを確認