V2Rayのサブスクリプションを更新できない・解析結果が空になる原因と対処法

サブスクリプション更新に失敗する原因を、URLの期限切れ、応答形式の不一致、Base64の問題、プロキシ経由の通信に分けて解説。クライアントでの確認手順も紹介します。

この記事のポイント

「サブスクリプションの更新に失敗」「インポート後にノードが表示されない」「更新できたのに一覧が空」といった症状の確認に役立ちます。URL、応答内容、エンコード、通信経路の順に調べ、ダウンロードの失敗と解析の失敗を切り分けてから、v2rayNとv2rayNGで確認しましょう。使用中の設定は残し、サブスクリプションを何度も削除して試すのは避けてください。

まず「リクエスト失敗」と「解析結果が空」を切り分ける

サブスクリプションの更新は、ノードへの接続テストではありません。クライアントはサブスクリプションサーバーに内容をリクエストし、返されたテキストを設定として解析してから、該当するグループに登録します。ノードに接続できてもサブスクリプションのURLが有効とは限らず、更新に成功しても新しいノードの通信方式や認証パラメーターが使えるとは限りません。

サブスクリプションURLを読み込む サーバーにリクエストする 応答内容を受信する ノード設定を解析する サブスクリプショングループに登録する

更新時刻、グループ名、ログに最初に記録されたエラーを控えておきます。ログの場所はバージョンによって異なるため、メイン画面のログ欄またはログウィンドウを確認してください。後から表示される「使用可能な設定がありません」は、先行するリクエスト失敗の結果かもしれません。まず最初のエラーに対処しましょう。

URLの確認:アカウントページではなくサブスクリプションURLを使う

よくある間違いは、アカウント画面や購入ページのURL、ブラウザーでログイン後に遷移したURLをコピーしてしまうことです。これらのURLを開けても、通常はクライアントが必要とするサブスクリプションではなくWebページが返されます。サービス提供元のサブスクリプション欄から、使用中のクライアントに対応するURLをすべてコピーしてください。

  1. 既存の設定を残す

    現在のグループと更新結果を先に記録します。バックアップが必要な場合は、クライアントのエクスポート機能を使い、ファイルをローカルに保存してください。使えているノードを先に削除しないでください。

  2. グループ設定を開く

    v2rayNのメイン画面で「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、問題のグループを選択します。ノード個別のサーバーアドレスではなく、サブスクリプションURL欄を確認してください。

  3. URLをコピーし直す

    提供元のページからサブスクリプションURLをもう一度コピーします。先頭のプロトコル、末尾のトークン、途中にチャットアプリによる改行が挿入されていないかを確認してください。誤って含まれた引用符や前後の空白は取り除き、URL内部の文字は変更しないでください。

  4. 対象グループだけを更新する

    保存後、このグループだけを更新してログを確認します。画面によっては、グループを選択するか右クリックメニューから更新します。複数のサブスクリプションのエラーが混在しないよう、まず問題のグループだけに絞ってください。

URL内のクエリパラメーターは、認証に使われることがあります。&はパラメーターの区切り文字で、%2FなどはURLエンコードされた文字列です。推測で削除・変更しないでください。ページのソースから文字列として&をコピーすると、パラメーターが壊れることがあります。手作業で部分的に修正するのではなく、ページのコピー用ボタンから元のURLを取得してください。

応答の確認:HTTPの成功は形式の正しさを意味しない

HTTPステータスコードは、サーバーがリクエストを受け付けたかを判断する手がかりです。ただし、内容をインポートできることまでは保証しません。以下は標準的な応答ステータスの例であり、本サイトの実測値やノードの遅延時間ではありません。

200
リクエストは成功しても、本文の確認が必要
401
認証情報がない、または認証されていない
403
サーバーにアクセスを拒否された

ローカルのブラウザーでサブスクリプションを確認すると、プレーンテキスト、ダウンロード画面、ログインページなどが表示されることがあります。ブラウザーにはアカウントのCookieがあっても、クライアントにはない場合があります。そのため「ブラウザーで開ける」ことは手がかりにすぎず、クライアントからのリクエストが成功した証拠にはなりません。ブラウザーのログイン状態をサブスクリプションの認証と混同しないでください。

表示された内容考えられる原因次の確認事項
<!DOCTYPE html>またはログインフォームWebページ、認証ページ、エラーページを取得しているクライアント用のサブスクリプションURLを再取得し、アカウントの状態とアクセス制限を確認する
本文が空サブスクリプションにノードが割り当てられていない、またはサーバーが空の内容を返しているアカウントの有効期限、プランの状態、提供元の管理画面にあるノード一覧を確認する
複数行のvmess://、vless://形式のテキスト共有リンクを1行ずつ並べたサブスクリプションの可能性があるクライアントが該当プロトコルとリンクパラメーターに対応しているか確認する
長いエンコード済みテキストBase64形式のサブスクリプションか、別の内容の可能性があるローカル環境だけでデコードし、認識可能な共有リンクが得られるか確認する
YAML、JSON、または構造化されたエラーメッセージサブスクリプション形式の選択ミス、またはAPIのエラー応答提供元のページで、使用中のクライアントに対応する出力形式を選択する

拡張子が.txtだから形式が正しいとは限らず、URLに拡張子がないから無効とも限りません。インポート結果を決めるのは、応答本文とクライアントの解析機能です。リクエストヘッダーに応じてサーバーが異なる形式を返す場合もありますが、ヘッダーを手動で偽装するのは第一選択の対処法ではありません。

エンコードの確認:形式を確かめてからBase64を調べる

一般的なサブスクリプション形式には、共有リンクを1行ずつ並べたものと、リンク一覧全体をBase64エンコードしたテキストがあります。Base64はエンコード方式であり、暗号化ではありません。一部のvmess://共有リンクにもBase64が使われますが、サブスクリプション全体にかかる外側のエンコードとは別の層です。

コピー時の欠落、+が空白に置き換わること、全角の句読点が入ることなどで、エンコードが壊れる場合があります。改行を許容するかどうかはパーサーによって異なります。手作業でつなぎ合わせるより、元の内容をコピーし直すほうが確実です。ローカルでデコードした結果がさらに別のエンコード形式でも、サブスクリプションを「直す」ために何度もエンコードを重ねないでください。提供元に、クライアントが対応する標準形式で出力してもらいましょう。

ネットワークの確認:直接接続とプロキシ経由の更新を別々に試す

サブスクリプション更新の通信経路は、通常のWebページへのアクセス経路と異なる場合があります。v2rayNのサブスクリプションメニューには、プロキシを使わない更新と、プロキシ経由の更新があります。表記はバージョンによって異なります。システムプロキシを切り替えても、クライアント自身のサブスクリプション取得方法が変わるとは限りません。また、TUNが有効だと、直接接続を意図したリクエストにも影響することがあります。

  1. まずプロキシなしで試す:v2rayNの「サブスクリプショングループ」メニューから「すべてのサブスクリプションを更新(プロキシを使用しない)」、または対象グループの直接接続での更新を選び、結果を記録します。TUNを使用中の場合は、そのリクエストがTUN経由になっていないか確認してください。
  2. 次にプロキシ経由で試す:既存のノードで正常にインターネットへ接続できる場合に限り、「すべてのサブスクリプションを更新(プロキシを使用)」または対象グループの更新を選びます。古いノードがすべて使えない場合、この経路には利用可能な出口がない可能性があります。
  3. ローカルの待ち受けを確認する:「設定」→「パラメーター設定」を開き、実際のローカル待ち受けポートを確認します。ログにローカルループバックアドレスへの接続拒否が表示される場合は、コアが正常に動作しているか、ポートを変更していないか、ほかのプログラムが使用していないか確認してください。
  4. 別のネットワークで再確認する:可能であれば別のネットワークに切り替え、この条件だけを変更して試します。同じURLが別のネットワークで成功する場合は、元のネットワークのDNS、アクセス制限、接続品質を優先して確認してください。

証明書のエラーは別途対処が必要です。まずシステム時刻の自動同期を有効にし、サブスクリプションのドメイン名に誤りがないか、証明書の有効期限が切れていないか、現在のネットワークにログイン認証ページがないかを確認してください。TLS検証の無効化を恒久的な対処法にしないでください。URLの失効は解決できず、サブスクリプション内容の通信保護も弱まります。

エラー:401 Unauthorized

原因:リクエストの認証情報が不足している、期限切れ、またはサーバーに受け付けられていません。対処法:提供元の管理画面からサブスクリプションURLを再取得し、トークンが完全に含まれているか確認してください。古いリンクを繰り返し試すだけでは解決しません。

エラー:403 Forbidden

原因:サーバーがアクセスを拒否しています。アカウントの状態、アクセス元の制限、認証ページなどが関係している可能性があります。対処法:管理画面の状態を確認し、直接接続とプロキシ経由の結果を比較したうえで、制限について提供元に問い合わせてください。

エラー:404 Not Found

原因:リクエスト先のパスが存在しないか、サーバーが無効なURLを隠すためにこのステータスを返しています。対処法:現在のサブスクリプションURLをコピーし直し、古いドメインやパスを使っていないか、URLが途中で切れていないか確認してください。

上記は一般的なHTTPエラーの原文です。クライアントのログには、ステータスコードやローカライズされた説明が追加される場合があります。サーバーから返されたエラーページをBase64デコーダーに入力しないでください。解析できるサブスクリプション本文を受け取るには、まずリクエストのエラーを解決する必要があります。

クライアントで再確認:一度に変更する条件は1つだけ

v2rayNはデスクトップクライアント、v2rayNGはXrayコアを使用するAndroidクライアントです。サブスクリプションの取得と解析は主にクライアントが行うため、コアの変更はサブスクリプションエラー全般に有効な解決策ではありません。ログに特定の設定やコアの機能が関係していると明記されている場合に限り、互換性を確認してください。

よくある質問:更新完了後もノードが表示されない

更新成功と表示されるのに、一覧が空なのはなぜ?

更新したサブスクリプショングループを選択し、検索語とフィルターを解除してから、ログに記録されたインポート数を確認します。リクエストが成功しても、本文が空、形式が不一致、または項目がすべてフィルターされていれば、ノードは表示されません。応答本文と照らし合わせて判断してください。

ブラウザーでは開けるのに、クライアントでエラーになるのはなぜ?

ブラウザーにはログインCookieが保存されていたり、異なるプロキシ経路が使われていたりすることがあります。表示されたのがアカウントページではなくサブスクリプション本文かを確認し、クライアントの直接接続とプロキシ経由の更新をそれぞれ試してください。ブラウザーのログインURLをサブスクリプション欄に入力しないでください。

古いノードがすべて使えない場合、プロキシ経由で更新できる?

利用可能なプロキシ出口がない場合、プロキシ経由での更新では通常解決できません。まず直接接続を試すか、サブスクリプションURLにアクセスできる別のネットワークから更新してください。それでも失敗する場合は、URLへの接続可否とアカウントの状態を提供元に確認してもらいましょう。

サービス提供元への問い合わせには、どんな情報が役立つ?

クライアント名とバージョン、発生時刻、HTTPステータスコード、直接接続とプロキシ経由それぞれの結果、機密情報を隠したエラーログを伝えてください。サブスクリプションURL全体は、相手が指定する非公開の連絡手段でのみ共有し、公開の掲示板には投稿しないでください。

原因は大きく3点に絞れます。URLがまだ有効か、応答がクライアント対応のサブスクリプション形式か、リクエストの通信経路が到達可能か、です。この3点を分けて確認するほうが、更新を繰り返したりクライアントを再インストールしたりするより、問題を特定しやすくなります。クライアントのバージョンが古いと確認できた場合は、ダウンロードページから適切なインストーラーを選び、元の設定をバックアップしておきましょう。

v2rayN をダウンロードOSに合ったインストーラーを選択