v2rayN、v2rayNG、v2flyNGでサブスクリプションを更新できない場合の対処法を解説します。まず「内容を取得できない」ケースと「取得できたがノードを認識できない」ケースを切り分け、リンクの権限、レスポンス形式、更新時の通信経路、証明書を確認しましょう。既存の利用可能な設定は残し、一度に変更する条件は一つだけにします。更新ログでエラーが発生した段階を確認してください。
更新に失敗した段階を特定する
サブスクリプションの更新は、クライアントがサーバー一覧を取得する処理であり、ノードへの接続テストではありません。クライアントはサブスクリプションURLにアクセスしてレスポンスを受け取り、内容を解析して該当グループに保存します。その後、XrayまたはV2Flyのコアがノード設定を使って接続します。そのため、更新が成功してもすべてのノードが接続できるとは限らず、既存ノードが使えてもサブスクリプションURLが有効とは限りません。
URLと権限、内容の形式、更新時の通信経路、TLS証明書の順に確認します。確認しやすく、変更の手間が少ない項目を先に扱う順序です。すべてのネットワーク環境で同じ原因が多いという意味ではありません。まずクライアントのログを開き、更新した時刻とエラーの詳細を記録しましょう。前回の接続ログをサブスクリプションのエラーと取り違えないようにしてください。
- 接続がタイムアウトする、またはドメイン名を解決できない:有効なレスポンスをまだ取得できていない可能性があります。まずネットワークとDNSを確認してください。
- 401、403、404が返る:サーバーからレスポンスを受け取っています。アクセス権限、アクセス制限、URLを確認してください。
- 更新完了と表示されるが件数がゼロ:レスポンス本文、形式の対応状況、選択中のグループや絞り込み条件を確認してください。
- 一覧は表示されるがノードを使えない:ノードのパラメーター、コアの対応状況、ルーティングを確認してください。サブスクリプションを何度もリセットする必要はありません。
URL切れや権限の変更:サブスクリプションURLを確認する
サブスクリプションURLにはアカウントのトークンが含まれることがあります。サブスクリプションのリセット、プランの期限切れ、アカウント状態の変更、提供元によるAPIの変更などで、古いURLが使えなくなる場合があります。ブラウザーでアカウントページにログインできても、ウェブセッションが有効だと分かるだけです。クライアントのリクエストでは同じログイン状態が引き継がれないことがあります。コピーするのは提供元が案内するサブスクリプションURLであり、管理画面のURLではありません。
-
現在の一覧を残す
現在のグループ名とノード数を記録します。バックアップをエクスポートする場合は、管理されたローカル環境に保存してください。元のグループは削除せず、トークンを含むURLを公開画像に載せないでください。
-
URLを取得し直す
提供元のサブスクリプション管理ページを開き、アカウント状態を確認してから、使用するクライアントに対応した形式のURLをコピーします。クエリパラメーターはすべて残し、コピー時に混入した空白、改行、引用符を取り除いてください。
-
グループ設定を確認する
v2rayNでは通常、「サブスクリプショングループ」→「サブスクリプショングループ設定」から対象グループのURLを確認できます。Android版では、メイン画面のメニューから「サブスクリプショングループ設定」を開き、該当項目を編集します。メニュー名はバージョンによって多少異なる場合があります。
-
対象グループだけ更新する
保存後、対象グループだけを更新して、すぐにログを確認します。すべての配信元を一度に更新すると、あるグループの成功ログに別のグループのエラーが埋もれることがあります。
URLを再発行すると、通常は古いトークンが無効になり、ほかのデバイスでも設定の変更が必要です。403が返っても、すぐにプランの期限切れと判断しないでください。接続元の制限、防御用ページ、リクエスト頻度の制限でも同じステータスが返ることがあります。ステータスコードと提供元のアカウントページの情報をあわせて確認しましょう。
ノードが空になる場合:レスポンス内容と形式を確認する
HTTPリクエストが成功したという表示は、内容を取得できたことを示すだけで、ノード一覧を取得できたとは限りません。ログインページ、メンテナンスのお知らせ、防御用の認証ページ、JSON形式のエラーメッセージなどが、ステータス200で返る場合もあります。「解析結果が空」と表示されたら、クライアントの更新より先に内容の種類を確認してください。同じエラーページを何度貼り付けても結果は変わりません。
| 実際の内容 | 見分けるポイント | 対処方法 |
|---|---|---|
| サブスクリプションURL | 通常はHTTPSで始まり、一覧の取得に使う | サブスクリプショングループのURL欄に入力して更新する |
| 単一の共有リンク | vmess:// または vless:// で始まることが多い | クリップボードからインポートする。リモートのサブスクリプションURLには使わない |
| Base64でエンコードされた一覧 | デコードすると、通常は複数の共有リンクになる | クライアントが該当するサブスクリプションのエンコード形式とプロトコルに対応しているか確認する |
| その他の設定テキスト | YAMLまたは完全なJSON設定の場合がある | 使用中のクライアントに対応したサブスクリプション形式を提供元に確認する |
| ウェブページまたはエラーメッセージ | HTMLタグ、ログイン案内、アクセス権限の説明などが含まれる | ノードではなく、URL、権限、アクセス制限を修正する |
Base64はエンコード方式であり、暗号化方式でもプロトコル名でもありません。長い文字列に見えても、内容が完全で有効だとは限りません。見た目だけで文字を追加しないでください。内容を確認する場合は、管理されたローカル環境で行い、コピーが途中で切れていないことを確認してから、デコード結果に共有リンクが含まれているか調べましょう。
「クライアントが共有リンクの形式を解析できる」ことと、「選択したコアで設定を実行できる」ことは別です。Android版のv2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。REALITYなどの機能を使う場合は、実際のコアとバージョンが対応しているか確認してください。クライアントを入れ替えても、無効なトークンは直らず、任意の設定ファイルが対応するサブスクリプション形式に自動変換されるわけでもありません。
- メイン画面の検索条件を解除し、別のサブスクリプショングループに切り替わっていないか確認する。
- 更新前後のグループ内の件数を比較し、絞り込み条件でノードが隠れていないか確認する。
- 一部のノードだけがスキップされた場合は、該当するプロトコルと解析エラーを記録し、すべてのノードが無効だと決めつけない。
プロキシを経由せず更新される場合:直結とプロキシ経由を個別に試す
サブスクリプションのリクエストが、ブラウザーと同じ通信経路を使うとは限りません。クライアントによっては更新方法を個別に設定でき、システムプロキシが有効でも「プロキシを使用しない」を選ぶと直結します。反対に、更新に必要な既存ノードが使えない状態では、プロキシ経由の更新も失敗し、「使えるノードを取得するには先に更新が必要」という循環に陥ることがあります。
-
直結で更新を試す
v2rayNの「サブスクリプショングループ」メニューから、対象のサブスクリプションにある「プロキシを使用せず更新」を選びます。タイムアウト、名前解決の失敗、HTTPステータスのどれが発生したかを記録し、「失敗」とだけ記録しないでください。
-
プロキシが使えることを確認する
すでに動作を確認したノードを選び、コアが起動していて通常のHTTPSリクエストが完了することを確認します。遅延テストの結果だけでは、ウェブページへのアクセスが正常とは判断できません。
-
プロキシ経由で更新する
同じメニューから「プロキシ経由で更新」を選びます。Android版では、まず既存の利用可能な設定で接続し、メイン画面のメニューからサブスクリプションを更新して、今回のログで結果を確認してください。接続アイコンだけでリクエストの経路を判断することはできません。
-
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やリクエスト処理コンポーネントによって異なります。上記はよくあるログの文言であり、一字一句一致する必要はありません。「接続がリセットされた」やタイムアウトと表示されても、その一文だけで証明書の問題とは断定できません。エラーが発生した段階とあわせて判断してください。
- Android:システムの「設定」→「システム」→「日付と時刻」から自動時刻設定を確認できます。実際のメニューは端末のシステムによって異なります。
- Windows:「設定」→「時刻と言語」→「日付と時刻」から時刻を同期できます。
- 公衆ネットワーク:まずネットワークへの接続認証を完了してください。認証ページに遮られ、サブスクリプションのリクエストにウェブページが返されることがあります。
- 証明書エラーが続く場合:ドメイン名をIPアドレスに置き換えないでください。証明書の名前が一致しなくなったり、サーバー側のルーティングに影響したりする可能性があります。
更新復旧後の確認と記録
修正後は少なくとも「更新結果の確認」と「ノードへの実接続確認」をそれぞれ一度行います。まず対象グループに想定した項目が表示されているか確認し、その中のノードを1つ選んで接続をテストしましょう。更新に成功しても接続できない場合は、成功した更新の記録を残し、ノードのパラメーター、コアの対応状況、システムプロキシ、ルーティングを確認してください。
-
更新結果を確認する
今回のログに解析エラーが残っていないこと、検索条件で一覧が隠れていないこと、正しいグループに属していることを確認します。ノード数の変化が、配信元から実際に提供されている内容と一致するかも確認してください。
-
ノードを1つ検証する
追加された項目を1つ選んで接続し、通常のHTTPSページにアクセスします。遅延テストと実際のアクセス結果は分けて記録し、テスト値だけで結論を出さないようにしてください。
-
機密情報を除いて記録する
クライアントのバージョン、OS、更新時刻、直結またはプロキシ経由の別、HTTPステータス、エラーの原文を記録します。送信前にトークン、ノードのパスワード、サブスクリプション本文全体を削除してください。
まだ解決しない場合は、「同じURLを直結で更新するとタイムアウトし、既存ノード経由では403が返る」のように、条件と結果を対比して説明してください。「サブスクリプションがおかしい」とだけ伝えるより、ネットワークと権限の問題を切り分けやすくなります。更新ボタンを短時間に何度も押さないでください。429や明確なレート制限のメッセージが表示された場合は、サーバーの案内に従って待ってから再試行してください。