V2Rayのサブスクリプションが無効・解析できないときの確認リスト:リンク形式から更新プロキシまで順番にチェック

サブスクリプション更新エラーやノード一覧が空の場合に、リンクの有効性、エンコード形式、更新時のプロキシ利用、クライアントのバージョン互換性を順番に確認します。v2rayNとv2rayNGそれぞれの確認箇所も紹介します。

サブスクリプションの更新は、単一の操作ではありません。クライアントはまずリンクを読み込み、ドメインを解決して HTTPS 接続を確立し、レスポンス本文を取得します。続いてエンコードとノードのプロトコルを判別し、最後に VMess や VLESS などの項目を現在のサブスクリプショングループへ書き込みます。どの段階で失敗しても、画面上では「更新に失敗」や「ノード数 0」と表示されることがあります。そのため、何度も更新ボタンを押すのではなく、まず失敗した段階を特定することが重要です。

この記事の要点

このチェックリストは、v2rayN、v2rayNG、v2flyNGでサブスクリプションを更新できない、解析後に空になる、古いノードが残るといった問題に対応します。「リンクのレスポンス、ネットワーク経路、本文形式、クライアント互換性、ノードの利用可否」の5段階で確認すれば、サーバー側の無効化、プロキシ経路の障害、ローカルの解析エラーを切り分けられます。

まず障害がどの段階で起きているかを確認

操作を始める前に、更新日時、クライアントのバージョン、使用中のサブスクリプショングループ、エラー原文を記録します。先に元のグループを削除しないでください。古いノード、グループ設定、更新ログが判断材料になります。クライアントでログをコピーできる場合は、更新を押す5秒前からエラー表示後10秒までの範囲を保存します。

サブスクリプションアドレスを読み込む ドメインを解決する 接続を確立する レスポンス本文を読み込む ノード項目を解析する サブスクリプショングループに書き込む

ブラウザーとクライアントの両方で同じサブスクリプションアドレスを開けない場合は、まずリンクの状態、ドメイン解決、アクセス権を確認します。ブラウザーではテキストを取得できるのに、クライアントで Base64、JSON、プロトコル形式のエラーが出る場合は、問題は本文の解析層に近いと考えられます。更新が成功しノードも追加されたのに、すべてのノードで遅延テストに失敗する場合は、サブスクリプション自体は読み込めています。次はノードのアドレス、ポート、トランスポート層、ルーティング設定を確認します。

結論:本文を取得できないのか、本文を解析できないのかを先に分ける

前者ではネットワーク、権限、HTTP ステータスを確認し、後者ではエンコード、プロトコルの項目、クライアントのバージョンを確認します。両者を混同すると、DNS を変更したりクライアントを再インストールしたりしても、実際の原因に届かないことがあります。

サブスクリプションリンク、レスポンス状態、有効期限を確認

サブスクリプションリンクには、アクセストークン、ユーザー識別子、デバイス用パラメーター、有効期限などが含まれる場合があります。コピー時に1文字欠けたり、末尾に空白が入ったり、チャットツールでクエリパラメーターが切り取られたりすると、サーバーはエラーページを返します。元の管理画面から完全なアドレスをコピーし、手入力で組み立てないでください。複数のアドレスを1つの入力欄に入れるのも避けます。

  1. 先頭と末尾を確認

    アドレスが https:// で始まり、先頭の前後や末尾の後ろに空白、改行、全角の句読点がないことを確認します。クエリパラメーターを含めて完全にコピーし、特に疑問符の後ろにあるトークンを省略しないでください。

  2. 単独でアクセス

    現在の端末のブラウザーでリンクを開き、テキストが直接返るか、ファイルのダウンロードが始まるか、ログインページへ移動するか、401、403、404、429 などのステータスが表示されるかを記録します。

  3. 有効期限を確認

    サブスクリプションの提供元の管理画面を開き、アカウント状態、有効期限、通信量の残量、サブスクリプションが再生成されていないかを確認します。アドレスがリセットされると、古いトークンは通常使えなくなります。

  4. キャッシュの影響を除外

    60秒空けてからもう一度リクエストします。最初に 429 が返った場合、連続クリックするとレート制限の時間が延びるだけです。サーバーが次のリクエストを受け付けるまで待ちます。

エラー:The remote server returned an error: (403) Forbidden.

原因と対処:サーバーが現在のトークン、送信元アドレス、またはリクエスト方法を拒否しています。有効なサブスクリプションアドレスを再コピーし、サブスクリプションがリセットされていないか、アクセス制限を受けていないか確認します。

エラー:The remote server returned an error: (404) Not Found.

原因と対処:パスが存在しないか、アドレスが途中で切れています。完全なパスとクエリパラメーターを確認し、ブラウザーのアドレスバーに表示されたリダイレクト後のページアドレスをそのまま使わないでください。

エラー:Response status code does not indicate success: 429

原因と対処:短時間にリクエストしすぎてサーバーの制限に達しています。連続更新を止め、数分待ってから1回だけ更新します。

ブラウザーで「開ける」ことは、レスポンスを解析できることを意味しません。正常なサブスクリプション本文は、長いエンコード済みテキスト、プロトコルリンクの一覧、またはクライアントが対応する構造化データであることが一般的です。ナビゲーション、認証画面、ログインフォーム、エラー説明が含まれているなら、それはWebページのレスポンスです。クライアントが HTTP 200 を受け取っても、本文の種類が合わず解析エラーになることがあります。

サブスクリプション更新時のネットワーク経路を確認

「現在のノードでネットワークに接続できる」ことと、「サブスクリプションの更新リクエストが現在のノードを経由する」ことは別です。ブラウザーの通信はシステムプロキシ経由でも、サブスクリプション更新は直接接続になっている場合があります。逆に、コアが起動していない状態でプロキシ経由の更新を有効にすると、待ち受けていないローカルポートへリクエストが送られることもあります。

テスト条件 更新結果 優先して確認する項目
直接接続で更新成功 プロキシ経由の更新に失敗 コアの状態、ローカルプロキシポート、更新プロキシ設定を確認
直接接続に失敗し、プロキシでは成功 プロキシ経路のみ到達可能 プロキシ経由の更新を維持し、起動時に利用可能な古いノードを用意
どちらの方法でもタイムアウト 約 10~30 秒後に失敗 ドメイン解決、サーバーへの到達性、システムファイアウォールを確認
すぐに接続拒否 1秒未満でエラーが返る ローカルアドレスには到達できるが、対象ポートを待ち受けるプロセスがない

v2rayNで2つの経路をテスト

  1. コアを確認

    まず、まだ利用できる古いノードを選択してコアを起動し、メイン画面下部の状態を確認します。一般的なローカル SOCKS ポートは 10808、HTTP ポートは 10809 ですが、実際の値は「設定」→「パラメーター設定」にあるローカル待ち受け設定を優先します。

  2. 直接接続をテスト

    「サブスクリプショングループ」を開き、「すべてのサブスクリプションを更新(プロキシを使用しない)」を実行します。所要時間、HTTP ステータス、ノード数の変化を記録します。

  3. プロキシ接続をテスト

    もう一度「サブスクリプショングループ」を開き、「すべてのサブスクリプションを更新」を実行します。現在のプロキシ設定でリクエストを送信し、直接接続の結果と比較します。

  4. ポートを確認

    「設定」→「パラメーター設定」を開き、サブスクリプション更新に使うローカルアドレスと実際の待ち受けポートが一致していることを確認します。変更後にコアを再起動し、もう一度更新します。

v2rayNGとv2flyNGのネットワーク確認

Android 端末では、まずメイン画面の接続スイッチが有効になっていることを確認してからサブスクリプションを更新します。v2rayNG は Xray コア、v2flyNG は v2fly コアを使用しますが、サブスクリプションのリクエスト結果はアプリのネットワーク、プロキシ状態、システムによるバックグラウンド通信の制限にも左右されます。一般的なローカル SOCKS 待ち受けポートは 10808 ですが、確認時はアプリの設定画面に表示されるポートを優先してください。

エラー:A task was canceled.

原因と対処:リクエストがクライアントの待ち時間を超えたか、接続途中で切断されています。直接接続とプロキシ経由の更新を切り替え、DNS、ネットワークの安定性、ローカルコアが継続して動作しているかを確認します。

エラー:No connection could be made because the target machine actively refused it

原因と対処:更新リクエストが待ち受けていないローカルプロキシポートを指定しています。127.0.0.1 の SOCKS または HTTP ポートを確認し、コアを再起動します。

結論:ネットワーク条件は一度に1つだけ変える

まず直接接続とプロキシ経由の更新を比較し、次に異なるネットワークを比較します。アドレス、DNS、コア、グループを同時に変更すると、復旧しても本当の原因を特定できません。

サブスクリプション本文のエンコードとプロトコル形式を確認

接続に成功した後、クライアントはレスポンス本文の形式を判別する必要があります。よくあるのは、Base64 でエンコードされた複数行のノードリンク、またはプロトコル名から始まるリンクを直接含む形式です。デコード後も各レコードは対応するプロトコルの必須項目を満たす必要があります。VMess にはエンコードされた JSON が含まれることが多く、VLESS では通常、ユーザー識別子、サーバー、ポート、トランスポートパラメーターを URI に記述します。

認識可能な項目の構造例:
vmess://エンコード済みノード設定
vless://ユーザー識別子@サーバーアドレス:ポート?type=ws&security=tls
trojan://認証情報@サーバーアドレス:ポート?security=tls

確認ポイント:
1. 各レコードが1行で完結しているか
2. プロトコルの接頭辞が半角文字か
3. ポートが 1~65535 の整数か
4. クエリパラメーターの区切りに & を使っているか
5. レスポンスにWebページ、エラー説明、空白の内容が混入していないか

標準 Base64 では、英字、数字、プラス、スラッシュ、末尾のイコール記号が使われます。URL セーフな形式では、ハイフンやアンダースコアが使われることがあります。クライアントは一般的な形式に対応していることが多いものの、コピー時の切り捨て、本文冒頭への案内文の挿入、誤った改行変換によって長さが壊れることがあります。「修復」のために文字を適当に追加しないでください。デコードできても、ノード項目が完全とは限りません。

エラー:Invalid length for a Base-64 char array or string.

原因と対処:エンコードされた本文が途中で切れた、余分な文字が混入した、またはパディングの長さが不正です。元のレスポンスを再取得し、コピー手順、サーバー出力、中間ページを重点的に確認します。

エラー:Unexpected character encountered while parsing value

原因と対処:パーサーが JSON を期待しているのに、HTML、プレーンテキストの案内、破損した内容を読み込んでいます。レスポンスの冒頭を確認し、ページタグやエラー文があればサーバーのレスポンス層に戻って対処します。

エラー:unsupported scheme

原因と対処:項目のプロトコル接頭辞が現在のクライアントに対応していないか、空白や句読点で壊れています。元の項目を確認し、クライアントを更新してから再インポートします。

ノード名に含まれる中国語、空白、特殊記号は、正しくエンコードする必要があります。1件だけ失敗する場合は、サブスクリプション本文を行単位で確認し、いつも同じ項目の近くで失敗していないかを見ます。異常な1件を削除すると残りをインポートできるなら、ネットワークと全体のエンコードはおおむね正常で、問題はそのノードの項目またはエスケープ方法に絞れます。

クライアントのバージョン、コア、グループ設定

同じサブスクリプションが旧バージョンでは失敗し、新バージョンでは成功する場合、プロトコル項目、共有リンク形式、コアの対応状況が変わった可能性があります。v2rayN 7.x と初期の 6.x では、画面や一部の設定入口が異なります。v2rayNG 1.10.x には、一部の 1.8.x より新しい Xray コアとインポート処理が含まれています。確認記録には「最新版」ではなく、完全なバージョン番号を記載してください。

項目 v2rayN v2rayNG / v2flyNG
バージョンの確認場所 「ヘルプ」→「バージョン情報」 サイドメニュー→「バージョン情報」
サブスクリプションの入口 「サブスクリプショングループ」→「サブスクリプショングループ設定」 サイドメニュー→「サブスクリプショングループ設定」
更新の入口 「サブスクリプショングループ」→「すべてのサブスクリプションを更新」 メイン画面右上のメニュー→「サブスクリプションを更新」
コアの主な役割 設定に応じて対応するコアを選択して呼び出す v2rayNG は Xray、v2flyNG は v2fly を使用
  1. バージョンを記録

    クライアントの完全なバージョンとコアのバージョンを記録します。たとえば「7.x」だけでは解析動作を比較できないため、バージョン情報画面に表示されるすべての番号を残してください。

  2. クライアントを更新

    当サイトのダウンロードページから現在の安定版を入手し、古いプロセスを終了してから、対象プラットフォームに合わせて更新します。上書き後に障害の状況を失わないよう、元の設定のコピーを保存してください。

  3. グループを新規作成

    すぐに古いグループを変更しないでください。「サブスクリプショングループ」→「サブスクリプショングループ設定」でテスト用グループを新規作成し、同じアドレスを貼り付けて1回更新します。

  4. フィルターを無効化

    一時的に、包含、除外、正規表現フィルター、重複除去の条件をすべて空にします。ノード数が 0 から具体的な数に戻るなら、原因はグループのフィルターであり、サブスクリプション解析ではありません。

  5. 件数を比較

    サーバーに表示されるノード数、クライアントのインポート数、フィルターで除外された数を記録します。たとえば提供元が24件、クライアントへの書き込みが0件なら、まず形式またはフィルターを確認します。23件が書き込まれるなら、単一の異常レコードを確認します。

グループフィルターは「更新成功なのに一覧が空になる」代表的な原因です。包含ルールは名前が一致するノードだけを残し、除外ルールは一致するノードを取り除きます。正規表現でドットやワイルドカードの範囲を広くしすぎると、すべての項目が除外されることがあります。テスト時はフィルターをすべて空にしてから、ルールを1つずつ戻し、毎回ノード数の変化を記録します。

結論:ノード数が 0 なら、まず「元の件数」と「フィルター後の件数」を見る

元の件数が 0 ならレスポンスまたは解析の問題で、元の件数が 0 より多いのに結果が 0 ならグループフィルターの問題です。この2つの数字は、「更新成功」という表示より診断に役立ちます。

更新は成功したのにノードが使えない

サブスクリプションを更新できたことから分かるのは、クライアントが設定を取得して解析できたことだけです。すべてのノードがオンラインであるとは限りません。次に、サーバーアドレスの解決、対象ポート、トランスポート方式、TLS パラメーター、システム時刻、ルーティングを確認します。この段階では、リンクはすでに役割を果たしているため、サブスクリプションリンクを変更し続けないでください。

エラー:failed to find an available destination

原因と対処:対象アドレスの解決に失敗したか、ルーティング後に利用できる出力先がありません。ノードのドメイン名、DNS の結果、ルーティングルールを確認し、コアを再起動します。

エラー:connection refused

原因と対処:対象ホストには到達できますが、設定されたポートでサービスが待ち受けていません。サブスクリプション内のポートが古くなっていないか確認し、提供元ページの現在のノード情報と照合します。

エラー:TLS handshake timeout

原因と対処:TLS ハンドシェイクが待ち時間内に完了していません。サーバー名、システム時刻、パケットロス、中継経路を確認し、遅延テストだけを繰り返さないでください。

遅延テストの結果も種類を分けて読み取る必要があります。TCP 遅延で確認できるのは対象ポートへの接続確立だけで、VMess、VLESS、TLS、WebSocket のセッション全体を検証できるわけではありません。実際の接続テストでは認証、トランスポート層のカプセル化、ルーティングも通過するため、「TCP は 80 ミリ秒なのにアクセスできない」場合は、ポート以降のプロトコルパラメーターに問題があることが多いです。

接続を最小構成で検証

  1. 項目が完全で名前も分かりやすいノードを1つ選び、複雑なルーティングルールを一時的に無効にします。
  2. コアを起動し、ローカル SOCKS または HTTP ポートが待ち受け状態になっていることを確認します。
  3. 干渉する通信を避けるため、テスト対象のアプリ1つだけをプロキシ経由にします。
  4. 後続の再試行ではなく、ログに最初に現れたエラーを確認します。
  5. ルーティングルールを戻して再テストします。この時点で失敗するなら、問題は分岐条件または出力先のタグに絞られます。

10分でできる再利用可能な確認手順

複雑な問題は段階的に調べるのが適していますが、日常のトラブル対処には決まった順序が必要です。以下の手順では、発生しやすく低コストな確認を先に行い、いきなりクライアントを再インストールしたり、設定をすべて作り直したりする事態を避けます。各手順の結果、特にレスポンスステータス、所要時間、ノード数、エラー原文を記録してください。

  1. 状況を保存

    クライアントとコアのバージョンを記録し、古いグループ、更新日時、ノード数、最初のエラーログを保存します。

  2. リンクを再コピー

    元の管理画面から完全なサブスクリプションアドレスをコピーし、先頭と末尾の空白、改行、トークン、有効期限を確認します。

  3. レスポンスを確認

    返っているのがサブスクリプション本文であり、ログインページ、認証画面、空ページ、401、403、404、429 のいずれでもないことを確認します。

  4. 経路を切り替え

    直接接続での更新とプロキシ経由の更新をそれぞれテストし、1080810809 などのローカルポートが実際の設定と一致しているか確認します。

  5. グループを新規作成

    空のテストグループに同じアドレスをインポートし、包含、除外、正規表現フィルター、重複除去の条件を無効にします。

  6. ノードを検証

    更新に成功したら TCP と実際の接続をテストし、DNS、ポート、TLS、トランスポート層、ルーティングの順に切り分けます。

手順が2番目で止まるなら、通常はリンクまたはアカウント状態の問題です。3番目ならサーバーのレスポンスまたはアクセス制限、4番目ならネットワーク経路またはローカルポート、5番目なら形式、バージョン、フィルターの問題が考えられます。最初の5段階をすべて通過して初めて、ノードのプロトコルやサーバー設定を詳しく調べます。

ログを保存 リンクを検証 レスポンスを確認 更新経路を切り替え 空のグループにインポート ノード接続をテスト

よくある質問

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

まず、現在のサブスクリプショングループが有効か、包含・除外・正規表現フィルターですべてのノードが削除されていないかを確認します。次に更新ログの元の項目数を確認します。元の件数が 0 ならレスポンス本文を、0 より多いならフィルターと書き込み処理を確認します。

ブラウザーではサブスクリプションリンクを開けるのに、なぜ v2rayN ではエラーになるのですか?

ブラウザーに表示されているのは、サブスクリプション本文ではなく、ログインページ、エラーページ、リダイレクト後のWebページかもしれません。HTTP ステータス、レスポンスの冒頭、コンテンツタイプを確認します。本文が正常なら、v2rayN の直接接続更新とプロキシ経由更新の結果を比較してください。

サブスクリプションの更新は、直接接続とプロキシ経由のどちらを選ぶべきですか?

決まった答えはなく、現在のネットワークからサブスクリプションサーバーへ到達できるかで決まります。まず両方を1回ずつ試します。直接接続で成功するなら、プロキシへの依存を増やす必要はありません。プロキシでしか成功しない場合は、更新前に利用可能なノードがあり、ローカルプロキシポートが待ち受けていることを確認します。

v2rayNG に切り替えても解析に失敗します。サブスクリプションが無効になったということですか?

1回の失敗だけで判断することはできません。まずレスポンスステータスと本文を確認し、v2rayNG のバージョン、Xray コアのバージョン、エラー原文を記録します。v2rayN、v2rayNG、v2flyNG が異なるネットワークでも同じ破損した本文を取得する場合に、サブスクリプション生成側の問題である可能性が高まります。

古いノードには接続できるのに、なぜサブスクリプションの更新に失敗するのですか?

古いノードはローカルキャッシュから読み込まれますが、サブスクリプションの更新ではサブスクリプションサーバーへ再アクセスする必要があります。ノードサーバーとサブスクリプションサーバーは別の対象です。古いノードが使えるのはプロキシ経由の更新テストには役立ちますが、サブスクリプションリンクが有効だという証明にはなりません。

v2rayN をダウンロード