この記事の概要

v2rayN、v2rayNG、v2flyNGでサブスクリプションを更新できない場合の対処法を解説します。まず「内容を取得できない」ケースと「取得できたがノードを認識できない」ケースを切り分け、リンクの権限、レスポンス形式、更新時の通信経路、証明書を確認しましょう。既存の利用可能な設定は残し、一度に変更する条件は一つだけにします。更新ログでエラーが発生した段階を確認してください。

更新に失敗した段階を特定する

サブスクリプションの更新は、クライアントがサーバー一覧を取得する処理であり、ノードへの接続テストではありません。クライアントはサブスクリプションURLにアクセスしてレスポンスを受け取り、内容を解析して該当グループに保存します。その後、XrayまたはV2Flyのコアがノード設定を使って接続します。そのため、更新が成功してもすべてのノードが接続できるとは限らず、既存ノードが使えてもサブスクリプションURLが有効とは限りません。

サブスクリプションURL ネットワークリクエスト レスポンス内容 形式の解析 グループへの保存

URLと権限、内容の形式、更新時の通信経路、TLS証明書の順に確認します。確認しやすく、変更の手間が少ない項目を先に扱う順序です。すべてのネットワーク環境で同じ原因が多いという意味ではありません。まずクライアントのログを開き、更新した時刻とエラーの詳細を記録しましょう。前回の接続ログをサブスクリプションのエラーと取り違えないようにしてください。

URL切れや権限の変更:サブスクリプションURLを確認する

サブスクリプションURLにはアカウントのトークンが含まれることがあります。サブスクリプションのリセット、プランの期限切れ、アカウント状態の変更、提供元によるAPIの変更などで、古いURLが使えなくなる場合があります。ブラウザーでアカウントページにログインできても、ウェブセッションが有効だと分かるだけです。クライアントのリクエストでは同じログイン状態が引き継がれないことがあります。コピーするのは提供元が案内するサブスクリプションURLであり、管理画面のURLではありません。

  1. 現在の一覧を残す

    現在のグループ名とノード数を記録します。バックアップをエクスポートする場合は、管理されたローカル環境に保存してください。元のグループは削除せず、トークンを含むURLを公開画像に載せないでください。

  2. URLを取得し直す

    提供元のサブスクリプション管理ページを開き、アカウント状態を確認してから、使用するクライアントに対応した形式のURLをコピーします。クエリパラメーターはすべて残し、コピー時に混入した空白、改行、引用符を取り除いてください。

  3. グループ設定を確認する

    v2rayNでは通常、「サブスクリプショングループ」→「サブスクリプショングループ設定」から対象グループのURLを確認できます。Android版では、メイン画面のメニューから「サブスクリプショングループ設定」を開き、該当項目を編集します。メニュー名はバージョンによって多少異なる場合があります。

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

    保存後、対象グループだけを更新して、すぐにログを確認します。すべての配信元を一度に更新すると、あるグループの成功ログに別のグループのエラーが埋もれることがあります。

URLを再発行すると、通常は古いトークンが無効になり、ほかのデバイスでも設定の変更が必要です。403が返っても、すぐにプランの期限切れと判断しないでください。接続元の制限、防御用ページ、リクエスト頻度の制限でも同じステータスが返ることがあります。ステータスコードと提供元のアカウントページの情報をあわせて確認しましょう。

ノードが空になる場合:レスポンス内容と形式を確認する

HTTPリクエストが成功したという表示は、内容を取得できたことを示すだけで、ノード一覧を取得できたとは限りません。ログインページ、メンテナンスのお知らせ、防御用の認証ページ、JSON形式のエラーメッセージなどが、ステータス200で返る場合もあります。「解析結果が空」と表示されたら、クライアントの更新より先に内容の種類を確認してください。同じエラーページを何度貼り付けても結果は変わりません。

200
リクエスト成功後も本文の確認が必要
401
通常、有効な認証情報が必要
403
サーバーが今回のアクセスを拒否
実際の内容見分けるポイント対処方法
サブスクリプションURL通常はHTTPSで始まり、一覧の取得に使うサブスクリプショングループのURL欄に入力して更新する
単一の共有リンクvmess:// または vless:// で始まることが多いクリップボードからインポートする。リモートのサブスクリプションURLには使わない
Base64でエンコードされた一覧デコードすると、通常は複数の共有リンクになるクライアントが該当するサブスクリプションのエンコード形式とプロトコルに対応しているか確認する
その他の設定テキストYAMLまたは完全なJSON設定の場合がある使用中のクライアントに対応したサブスクリプション形式を提供元に確認する
ウェブページまたはエラーメッセージHTMLタグ、ログイン案内、アクセス権限の説明などが含まれるノードではなく、URL、権限、アクセス制限を修正する

Base64はエンコード方式であり、暗号化方式でもプロトコル名でもありません。長い文字列に見えても、内容が完全で有効だとは限りません。見た目だけで文字を追加しないでください。内容を確認する場合は、管理されたローカル環境で行い、コピーが途中で切れていないことを確認してから、デコード結果に共有リンクが含まれているか調べましょう。

「クライアントが共有リンクの形式を解析できる」ことと、「選択したコアで設定を実行できる」ことは別です。Android版のv2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。REALITYなどの機能を使う場合は、実際のコアとバージョンが対応しているか確認してください。クライアントを入れ替えても、無効なトークンは直らず、任意の設定ファイルが対応するサブスクリプション形式に自動変換されるわけでもありません。

プロキシを経由せず更新される場合:直結とプロキシ経由を個別に試す

サブスクリプションのリクエストが、ブラウザーと同じ通信経路を使うとは限りません。クライアントによっては更新方法を個別に設定でき、システムプロキシが有効でも「プロキシを使用しない」を選ぶと直結します。反対に、更新に必要な既存ノードが使えない状態では、プロキシ経由の更新も失敗し、「使えるノードを取得するには先に更新が必要」という循環に陥ることがあります。

  1. 直結で更新を試す

    v2rayNの「サブスクリプショングループ」メニューから、対象のサブスクリプションにある「プロキシを使用せず更新」を選びます。タイムアウト、名前解決の失敗、HTTPステータスのどれが発生したかを記録し、「失敗」とだけ記録しないでください。

  2. プロキシが使えることを確認する

    すでに動作を確認したノードを選び、コアが起動していて通常のHTTPSリクエストが完了することを確認します。遅延テストの結果だけでは、ウェブページへのアクセスが正常とは判断できません。

  3. プロキシ経由で更新する

    同じメニューから「プロキシ経由で更新」を選びます。Android版では、まず既存の利用可能な設定で接続し、メイン画面のメニューからサブスクリプションを更新して、今回のログで結果を確認してください。接続アイコンだけでリクエストの経路を判断することはできません。

  4. 2回の結果を比較する

    プロキシ経由では成功し直結では失敗する場合、直結時のネットワークと名前解決を重点的に確認します。直結では成功しプロキシ経由では失敗する場合、プロキシのアウトバウンド設定とサブスクリプションのドメインへのアクセス制限を確認してください。両方失敗する場合は、URLと証明書を続けて確認します。

デスクトップ版のローカルプロキシポートを確認する場合は、「設定」→「パラメーター設定」に表示されている実際の待ち受け値を確認してください。たとえば画面上の設定が 127.0.0.1:10808 の場合に限り、そのポートを確認します。10808は、すべてのバージョンやプロトコルに共通する既定値ではありません。HTTPSのサブスクリプションがアクセスするリモートの443番ポートと、ローカルプロキシの待ち受けポートは別のものです。

証明書やネットワークのエラー:ログの内容に応じて対処する

TLS証明書の検証は、サブスクリプション内容の解析より前に行われます。証明書エラーが起きると、クライアントは本文を取得できていない可能性があります。まずシステムの日付、タイムゾーン、自動時刻同期を確認し、次にサブスクリプションのドメイン名と証明書チェーンを確認しましょう。ノード設定の「証明書検証をスキップ」を、サブスクリプションのダウンロード修復に使わないでください。別のリクエスト層に適用される設定である可能性があります。

エラー: x509: certificate has expired or is not yet valid

原因と対処:証明書の有効期間と現在時刻が一致していません。端末の時刻が誤っているか、サーバーの証明書が期限切れの可能性があります。まずシステム時刻を同期し、再発する場合は提供元に証明書の更新を依頼してください。

エラー: x509: certificate signed by unknown authority

原因と対処:端末が証明書の発行元を信頼していないか、ネットワーク機器によって証明書が差し替えられている可能性があります。システムの信頼ストアを更新し、信頼できるネットワークで再確認してください。サーバー側で証明書チェーンを正しく設定する必要がある場合もあります。出所が不明なルート証明書はインポートしないでください。

エラー: Could not resolve host

原因と対処:現在の名前解決経路でサブスクリプションのドメイン名を解決できません。ドメイン名の綴りを確認し、ネットワークに接続できていることを確かめてから、別の信頼できるネットワークでの名前解決結果と比較してください。

エラー: Connection refused

原因と対処:接続先のポートで接続が拒否されています。接続先はサブスクリプションサーバーかローカルプロキシの可能性があります。まずログのホスト名とポートを確認し、サービスの状態またはプロキシの待ち受け設定を調べてください。

エラーの表現はOSやリクエスト処理コンポーネントによって異なります。上記はよくあるログの文言であり、一字一句一致する必要はありません。「接続がリセットされた」やタイムアウトと表示されても、その一文だけで証明書の問題とは断定できません。エラーが発生した段階とあわせて判断してください。

更新復旧後の確認と記録

修正後は少なくとも「更新結果の確認」と「ノードへの実接続確認」をそれぞれ一度行います。まず対象グループに想定した項目が表示されているか確認し、その中のノードを1つ選んで接続をテストしましょう。更新に成功しても接続できない場合は、成功した更新の記録を残し、ノードのパラメーター、コアの対応状況、システムプロキシ、ルーティングを確認してください。

  1. 更新結果を確認する

    今回のログに解析エラーが残っていないこと、検索条件で一覧が隠れていないこと、正しいグループに属していることを確認します。ノード数の変化が、配信元から実際に提供されている内容と一致するかも確認してください。

  2. ノードを1つ検証する

    追加された項目を1つ選んで接続し、通常のHTTPSページにアクセスします。遅延テストと実際のアクセス結果は分けて記録し、テスト値だけで結論を出さないようにしてください。

  3. 機密情報を除いて記録する

    クライアントのバージョン、OS、更新時刻、直結またはプロキシ経由の別、HTTPステータス、エラーの原文を記録します。送信前にトークン、ノードのパスワード、サブスクリプション本文全体を削除してください。

まだ解決しない場合は、「同じURLを直結で更新するとタイムアウトし、既存ノード経由では403が返る」のように、条件と結果を対比して説明してください。「サブスクリプションがおかしい」とだけ伝えるより、ネットワークと権限の問題を切り分けやすくなります。更新ボタンを短時間に何度も押さないでください。429や明確なレート制限のメッセージが表示された場合は、サーバーの案内に従って待ってから再試行してください。