サブスクリプション更新に失敗したら:原因の切り分けとクライアントの自動更新設定

リンク切れ、プロキシ経由の更新、UA拒否、形式非対応の4つの原因を確認し、v2rayNとv2rayNGの更新方法、プロキシ更新、自動更新、取り込み後の検証まで解説します。

サブスクリプションの更新はノード接続そのものではありません。クライアントがまずサブスクリプションURLへHTTPまたはHTTPSリクエストを送り、取得したテキストからVMessやVLESSなどのノード情報を解析します。更新はリクエスト、サーバー応答、内容の解析、設定の書き込みのいずれの段階でも失敗するため、「サブスクリプションを更新」を繰り返しクリックするだけでは原因を特定できません。

この記事の要点

サブスクリプションをすでに取り込んでいるものの、更新時にタイムアウト、403、空の内容、形式エラーが表示されるv2rayN・v2rayNGユーザー向けです。まずリンクの状態を確認し、次に直結とプロキシ経由の更新を切り替え、UAと応答形式を確認します。最後に自動更新を設定し、ログ、ノード数、実際の接続結果で検証します。

まず、どの段階で失敗したかを確認する

1回の更新処理は5つの段階に分けられます。どこで止まったかを切り分ければ、ネットワーク、サブスクリプションサーバー、クライアントのパーサーのどれを確認すべきか判断できます。ブラウザーでも内容を取得できない場合は、リンクまたはネットワークに問題がある可能性が高く、ブラウザーには長いテキストが表示されるのにクライアントで解析に失敗する場合は、形式とクライアントのバージョンを重点的に確認します。

サブスクリプションURLを読み込む ネットワーク接続を確立する サブスクリプション内容を受信する ノード情報を解析する サブスクリプショングループに書き込む

元の設定を残してテストする

  1. 古いサブスクリプショングループをすぐに削除しないでください。グループ名、元のノード数、最後に更新に成功した日時を記録しておきます。
  2. v2rayN 7.xでは「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、現在のURLをコピーして、先頭と末尾に空白や改行がないことを確認します。
  3. v2rayNG 1.10.xでは、サイドメニューの「サブスクリプショングループ設定」を開き、対象グループのURLと有効状態を確認します。
  4. 手動で1回更新し、すぐにログを確認します。HTTPステータスコード、タイムアウトの表示、解析エラーの原文を記録してください。

「サブスクリプション更新の失敗」と「更新は成功したがノードが使えない」も区別する必要があります。前者では通常、グループの更新日時が変わらず、ログにネットワークまたは解析エラーが表示されます。後者では新しいノードと更新日時を確認できますが、接続テストでタイムアウトします。対処する場所が異なるため、ノードに接続できないからといってサブスクリプションURLを何度も変更しないでください。

リンク切れ、タイムアウト、ネットワークによる遮断

リンク切れは最もよくある原因です。サブスクリプションサーバーが404、410、401を返したり、停止済みのURLをログインページへリダイレクトしたりすることがあります。タイムアウトは、指定時間内にDNS解決、TCP接続、TLSハンドシェイクが完了しなかったことを示します。15秒でタイムアウトする場合、60秒待って再試行しても、誤ったドメインや遮断された経路は直りません。

エラー:The operation has timed out

原因と対処:サブスクリプションリクエストがタイムアウト時間内に応答を受信できませんでした。まずネットワークを切り替え、利用可能なノードに接続してから、プロキシ経由の更新を選択します。

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

原因と対処:URLのパスが無効になっているか、コピーが不完全です。サブスクリプションサービスのページから完全なURLを再取得し、疑問符以降のパラメータを手動で削除しないでください。

エラー:The remote server returned an error: (401) Unauthorized

原因と対処:URLに含まれるアカウント情報、トークン、または有効期限が受け付けられなくなっています。元のサブスクリプションサービスにログインしてURLを更新し、クライアントの古いURLと置き換えます。

エラー:Unable to connect to the remote server

原因と対処:ドメインの名前解決に失敗している、対象ポートに到達できない、または端末側のプロキシ経路が起動していない可能性があります。システム時刻、DNS、現在のコアの動作状態を確認してから再試行します。

2つの経路でクロステストする

  • 直結で更新:一時的に「プロキシ経由で更新」を無効にし、ローカルネットワークからサブスクリプションドメインへ直接アクセスできるか確認します。
  • プロキシ経由で更新:まず利用可能なノードに接続し、プロキシ経由の更新を有効にします。サブスクリプションドメインへの直結がタイムアウトする場合に有効です。
  • ブラウザーでテスト:同じネットワークでURLを開きます。サブスクリプションテキストではなくログインページ、エラーページ、空の応答が返る場合、クライアントも正しく取り込めません。
  • ネットワークを切り替えてテスト:固定回線とモバイル回線で1回ずつテストします。一方のネットワークだけで失敗する場合、DNSやアクセス経路に違いがある可能性が高いです。

v2rayNの一般的なローカルリスニングポートはSOCKSが10808、HTTPが10809ですが、実際の値は「設定」→「パラメータ設定」→「基本設定」のローカルポートを確認してください。ポートが他のプログラムに使用されていると、コアが正常に起動せず、プロキシ経由の更新を有効にしても有効なプロキシ経路は確立されません。まずログでコアの起動成功を確認してから、サブスクリプションを更新します。

結論:ブラウザーの結果で確認できるのは応答までで、クライアントの解析の代わりにはならない

ブラウザーでURLを開けても、リクエスト経路が基本的に到達可能だと分かるだけです。応答がノードのサブスクリプションテキストであり、ログインページ、セキュリティチェックページ、Webページのソースではないことも確認してください。最終的な判断材料は、クライアントログのステータスコード、コンテンツタイプ、解析されたノード数です。

プロキシ経由の更新とUA拒否

現在のネットワークから直接アクセスできないサブスクリプションドメインでも、取り込み済みの古いノードは使える場合があります。その場合はまず古いノードを起動し、サブスクリプションリクエストを現在のプロキシ経由で送信します。v2rayNのサブスクリプション更新には通常、「サブスクリプションを更新」や「サブスクリプションを更新(プロキシを使用しない)」などの入口があります。メニュー名は7.xのマイナーバージョンによって多少異なるため、両方を1回ずつ実行し、ログの所要時間とステータスコードを比較してください。

v2rayNでプロキシ経由で更新する手順

  1. メイン一覧から、直近のテストで利用可能だったノードを選び、Enterキーでアクティブサーバーに設定します。
  2. コアが起動していることを確認し、ログに10808または10809のポート競合が表示されていないか確認します。
  3. 「サブスクリプショングループ」→「すべてのサブスクリプションを更新」を開き、プロキシ経由の更新方法を選択します。
  4. 更新後にステータスバーの時刻を確認し、対象グループのノード数が妥当な範囲で変化しているか確認します。

v2rayNGでプロキシ経由で更新する手順

  1. v2rayNG 1.10.xのメイン画面で接続可能な設定を選び、画面下部の接続ボタンをタップしてコアを起動します。
  2. サイドメニューの「サブスクリプショングループ設定」を開き、対象グループが有効になっていることを確認します。
  3. サブスクリプション更新画面から更新します。グループ設定に「プロキシ経由のみで更新」オプションがある場合は有効にして、もう一度テストします。
  4. 設定一覧に戻り、下にスワイプして更新し、ノード数、名前、更新日時を確認します。

UAはHTTPリクエストに含まれるUser-Agent識別子です。サーバーによっては登録済みのクライアント識別子だけを受け付けたり、空のUA、ブラウザーのUA、異常なクローラー用ツールを拒否したりします。あるクライアントではURLが使えるのに、別のクライアントでは403が返るのが典型例です。直結でもプロキシ経由でも接続は確立できるのに、サーバーがリクエストを拒否し続ける場合もあります。

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

原因と対処:サーバーが現在のリクエスト元またはUAを拒否しています。まずサブスクリプションが有効か確認し、サブスクリプショングループのUser-Agent設定でサービス提供元が指定する値を使用します。

エラー:HTTP 429 Too Many Requests

原因と対処:短時間に更新を繰り返したため、レート制限が発動しています。連続クリックを止め、サーバーが指定する間隔を空けてください。通常は少なくとも10~30分待ってから再試行します。

制限を回避するためにUAを無作為に切り替えないでください。正しい方法は、サブスクリプションサービスのクライアント向け説明を確認し、明確にサポートされている識別子を使うことです。指定がない場合は、ブラウザーの識別子を入力するよりクライアントのデフォルト値を維持したほうが安定します。変更後は1回だけテストして応答を記録し、高頻度のリクエストで429を発生させて元の403を見えにくくしないようにします。

応答はあるが形式に対応していない

リクエストが成功しても、解析が成功したとは限りません。一般的なサブスクリプション内容には、Base64でエンコードされた複数行のノード、行ごとのURI、クライアント専用形式、通常のJSONがあります。v2rayN、v2rayNG、v2flyNGで読み込める形式には共通部分がありますが、すべての設定ファイルをそのままサブスクリプションとして取り込めるわけではありません。たとえば完全なXray JSONは実行用設定であり、複数ノードを展開するサブスクリプション一覧とは限りません。

エラー:Invalid subscription content

原因と対処:サーバーの応答が、現在のクライアントで認識できるサブスクリプション形式ではありません。Webページを取得していないことを確認し、サーバー側で汎用V2Rayサブスクリプション形式を選択します。

エラー:Sequence contains no elements

原因と対処:応答は存在するものの、有効なノードを解析できていません。Base64の内容が途中で切れていないか確認し、クライアントを更新してから再度取り込みます。

エラー:The input is not a valid Base-64 string

原因と対処:応答テキストにエラーページ、不要な空白、または不完全なエンコードが含まれています。サブスクリプションURLを再取得し、サーバーがWebページの案内ではなく完全なサブスクリプションを返していることを確認します。

応答の特徴から内容を判断する

応答の特徴 考えられる内容 対処方法
vmess:// または vless:// で始まる 行ごとのノードURI 汎用サブスクリプションを使用するか、クリップボードから一括で取り込む
英字、数字、等号が連続する長い文字列 Base64サブスクリプション 内容が完全か確認し、コピー時の改行による欠落を避ける
<html またはWebページのタイトルで始まる ログインページ、エラーページ、セキュリティチェックページ アカウント状態、アクセス制限、URLの有効期限を確認する
inbounds、outboundsを含む 完全な実行用設定JSON カスタム設定として取り込み、通常のサブスクリプションとして解析しない
HTTP 200だが本文の長さが0 空の応答 サーバーの復旧を待ち、既存ノードを上書きしない

バージョンが古いことでも解析結果に違いが生じます。サブスクリプションに新しいVLESS、REALITY、トランスポートパラメータが追加され、クライアントのパーサーが未対応の場合、旧版ではノードが無視されたり、エラーが表示されたりします。まず現在のバージョンを記録し、当サイトのダウンロードページから安定版を入手してください。更新後も元のグループを比較用に残し、1回の操作でクライアント、サブスクリプションURL、ネットワークを同時に変更しないでください。

結論:HTTP 200は更新成功の証拠ではない

「ステータスコードが正常」「内容を解析できる」「書き込まれたノード数が0より多い」の3条件が同時に満たされて初めて、サブスクリプション更新が完了したと判断できます。リクエストの成功だけを見ると、空の応答やWebページの応答を見落とします。

サブスクリプションの自動更新を設定する方法

自動更新は、サブスクリプションURLが安定していて、ノード一覧が定期的に変わる場合に適しています。更新間隔は短くしすぎないでください。サーバーは数分ごとの更新を必要としないことが多く、頻繁なリクエストで429が発生する可能性もあります。普段の利用では360分または720分から始め、サーバーが1日1回だけ変更する場合は1440分が適しています。

v2rayN 7.xの自動更新

  1. 「サブスクリプショングループ」→「サブスクリプショングループ設定」を開きます。
  2. 対象グループを選び、URL、メモ、有効状態が正しいことを確認します。
  3. 自動更新間隔に分数を入力します。たとえば720なら12時間ごとに確認します。
  4. サブスクリプションドメインへのアクセスにプロキシが必要な場合は、プロキシ経由の更新オプションを有効にし、自動更新時にコアが動作していることを確認します。
  5. 保存後に手動で1回更新し、設定が有効であることを確認してから、次回の予定更新で新しい時刻が記録されるか確認します。

v2rayNG 1.10.xの自動更新

  1. サイドメニューの「サブスクリプショングループ設定」を開き、管理するグループに移動します。
  2. グループ更新を有効にし、現在のバージョンで選択できる更新周期に合わせて間隔を設定します。
  3. システムがバックグラウンド動作を制限している場合、自動タスクはアプリを再び起動するか、動作が再開されるまで延期されることがあります。
  4. サブスクリプションへのアクセスにプロキシが必要な場合は、更新前に利用可能な設定で接続しておきます。そうでなければ、手動更新を併用してください。

自動更新を「更新後に1番目のノードへ自動切り替え」に設定しないでください。サブスクリプションサービスが並び順を変更すると、1番目のノードが新しく追加された回線にすぎない場合があります。現在のアクティブノードを維持し、更新後に遅延テストを1回実行してから、実際の結果で切り替えるほうが安全です。

  • 個人の日常利用:720~1440分ごとの更新がおすすめです。
  • ノードの変更が多い場合:360分に設定できますが、サーバーのレート制限に注意してください。
  • サブスクリプションへのアクセスにプロキシが必須の場合:検証済みの古いノードを少なくとも1つ残してください。
  • 複数のサブスクリプショングループ:更新時刻をずらし、複数グループが同じ分に同時リクエストしないようにします。

更新後の検証とよくある質問

更新処理でエラーが表示されなくても、クライアントが現在の処理を完了したことしか分かりません。書き込み結果、ノードパラメータ、実際の接続も検証する必要があります。単一ノードの一時的な障害でサブスクリプション全体を誤判定しないよう、異なる入口のノードを2つ選んでテストすることをおすすめします。

4項目の検証チェックリスト

  1. 更新日時:グループの記録に今回の操作時刻が表示され、前回成功した時刻のままになっていないこと。
  2. ノード数:0より多いこと。30個から1個に急減した場合は、案内メッセージが返されていないか確認します。
  3. コアのログ:ノード起動後、プロトコルフィールド、ポート競合、サーバーアドレスの名前解決エラーがないことを確認します。
  4. 実際のリクエスト:まず遅延をテストし、その後に対象サイトへアクセスします。遅延結果で確認できるのはハンドシェイクであり、すべての通信が正常に転送されることを示すものではありません。

サブスクリプションの更新がいつもタイムアウトする場合は?

まず別のネットワークでテストし、利用可能な既存ノードに接続してプロキシ経由で更新します。どちらの方法でも15秒前後でタイムアウトする場合は、サブスクリプションドメインの名前解決、システム時刻、サーバーの状態を確認してください。

ブラウザーでは開けるのに、v2rayNで取り込みに失敗するのはなぜ?

ブラウザーに表示されているのがサブスクリプションテキストかログインページか確認します。次にv2rayNのログでコンテンツタイプと解析数を確認してください。専用形式が返っている場合は、サーバー側で汎用V2Rayサブスクリプションに切り替えます。

更新後に古いノードがすべて消えた場合の復元方法は?

まず更新を続けるのを止め、サブスクリプショングループが無効化または切り替えられていないか確認します。元のURLを残したまま内容を再取得し、サーバーが空の一覧を返す場合は復旧を待ってください。設定を何度も上書きしないでください。

403なら必ずサブスクリプションの期限切れ?

必ずしもそうとは限りません。403はUA制限、アクセス頻度、接続元ネットワークの制限でも発生します。まずアカウントとURLが有効か確認し、サービス提供元の指示に従ってUser-Agentを設定して、レート制限が解除されるまで待ちます。

自動更新は何分に設定すればよい?

通常は720分から始めます。サーバーが1日1回更新する場合は1440分に設定できます。ノードの変化が多く、サーバーが許可している場合だけ360分に短縮してください。

切り分けでは常に単一変数の原則を守ります。ネットワーク経路、UA、クライアントのバージョン、サブスクリプション形式のうち、一度に変更するのは1項目だけにし、更新結果を記録してください。こうすれば本当に有効な修正を特定でき、偶然復旧した後も障害の原因が分からないという事態を避けられます。

クライアントをダウンロード・インストール ダウンロードページでプラットフォームを選択