サブスクリプション更新に失敗する原因と対処法|v2rayN・v2rayNGの自動更新設定

サブスクリプション更新失敗の原因と対処法を解説。リンク切れやプロキシ経由の更新、証明書・形式エラーの確認方法、v2rayNとv2rayNGの自動更新設定を紹介します。

この記事の概要

更新がタイムアウトする、追加後にノードが表示されない、手動更新は成功するのに定期更新が実行されない、といった場合に役立ちます。まずURL・ネットワーク・データ形式のどこに問題があるかを切り分け、PC版とAndroid版それぞれで更新タスクを設定しましょう。確認時は既存のグループを残し、一度に変更する条件は一つだけにします。手動更新の成功を確認してから自動更新を有効にしてください。

サブスクリプション更新の流れ:失敗箇所を特定する

サブスクリプションは、クライアントでノード一覧を管理する機能です。V2RayやXrayの設定JSONにあるトップレベル項目ではありません。更新時はクライアントがURLにアクセスして応答を取得し、含まれるノードをローカル設定に変換します。routingを変更しても、無効になったサブスクリプショントークンは直りません。コアを入れ替えても、ログインページが有効なサブスクリプションに変わるわけではありません。

サブスクリプションURLを読み込む ネットワークに接続する 応答を取得する ノード形式を解析する サブスクリプショングループに反映する

「更新失敗」と「ノードが使えない」は別の問題です。前者は一覧の取得または解析時に発生し、後者はノードを追加した後、実際にプロキシ接続するときに発生します。既存ノードは使えるのに更新だけ失敗する場合は、まずURLと更新経路を確認してください。更新は成功するのにウェブページを開けない場合は、ノード設定、ローカルプロキシ、ルーティングを別途確認します。

URLの期限切れとステータスコード:まず有効なURLか確認

サービス提供元のアカウントページから「サブスクリプションURL」をコピーし直してください。アカウントのトップページやノード詳細ページ、QRコード画像のURLをコピーしないようにします。URLのクエリパラメーターには通常、認証トークンが含まれます。1文字欠けたり、改行が混入したり、再発行前の古いトークンを使ったりすると更新に失敗することがあります。プランの期限切れでサブスクリプションが無効になるかはサーバー側の仕様によるため、ステータスコードだけで判断できません。

401
認証情報がない、または無効
403
サーバーにアクセスを拒否された
429
リクエストが多すぎる

これらの数値はHTTPステータスコードであり、クライアント独自のエラー番号ではありません。403はアクセス制限や保護ページが原因の場合もあります。404は古いパスが廃止された可能性があります。200でも内容が正しいとは限りません。ログインページも成功ステータスで返されることがあります。

  1. 元のグループでURLの先頭と末尾を確認し、コピー時に入った空白や改行を削除します。トークンのパラメーターは手動で削除・変更しないでください。
  2. サービス提供元のアカウントページで有効期限とサブスクリプションの再発行状況を確認します。必要に応じてURLをコピーし直し、古いURLと置き換えてください。
  3. 429が返ったら、更新ボタンを連続して押すのはやめましょう。応答にRetry-Afterが含まれている場合は、指定された時間だけ待ってください。
  4. 問い合わせる場合は、発生時刻、ステータスコード、クライアントのバージョン、機密情報を伏せたログのみを共有し、サブスクリプションURL全体は公開しないでください。

まとめ:認証エラーではネットワークより先にURLを確認

同じ認証エラーが続く場合は、まずアカウントとトークンを確認します。URLが有効だと確認できてから、直接接続とプロキシ経由を比較してください。

プロキシ経由で更新する:使えないノードによる更新失敗を防ぐ

「プロキシ経由でサブスクリプションを更新」は、サブスクリプションの取得に使う通信経路を指定する設定であり、すべてのアプリをグローバルプロキシに切り替えるものではありません。v2rayNの「プロキシを使わずにサブスクリプションを更新」と「プロキシ経由でサブスクリプションを更新」を比較して確認できます。同じグループ・同じURLで経路を順番に切り替え、それぞれの結果を記録してください。

テスト結果まず確認すること次の手順
直接接続は成功、プロキシ経由は失敗現在のプロキシ経路が使えないまず直接接続で更新し、選択中のノードを確認する
直接接続は失敗、プロキシ経由は成功現在のネットワークからサブスクリプション元に直接アクセスできない使えるノードを残してから、プロキシ経由で更新する
どちらの経路でも401が返るURLの認証情報を確認する必要がある有効なサブスクリプションURLを再取得する
どちらの経路でもタイムアウトするサブスクリプション元またはネットワーク接続に問題がある別のネットワークで再テストし、サーバーの状態を確認する

更新にプロキシが必須なのに、現在のグループに使えるノードが一つもないと、依存関係のループに陥ります。その場合は、まず直接接続で更新するか、動作確認済みの別のノードを使って新しい一覧を取得してください。同じ使えないノードを何度も再起動しても、通常このループは解消しません。

証明書・タイムアウト・形式エラー:ログに沿って対処

ログは1回の更新処理に絞って確認します。更新時刻を記録してから、該当するエラー行を読みましょう。ノードの速度測定やウェブページへのアクセスエラーを混同しないようにしてください。以下はよく見られる低レベルのエラー例です。システムやバージョンによって、さらに詳細な情報が付く場合があります。

エラー:certificate has expired

原因:サーバー証明書の期限切れ、または端末の時刻が誤っているために有効期間の判定に失敗しています。対処:まず日付・時刻・タイムゾーンを合わせます。時刻が正しい場合は、証明書についてサブスクリプションの提供元に問い合わせてください。証明書検証を無効にしたまま使うのは避けましょう。

エラー:Connection refused

原因:接続先ポートが接続を受け付けていないか、ローカルプロキシが起動していません。対処:エラーに表示された接続先を確認し、ローカルプロキシのポートかサブスクリプションサーバーのポートかを区別してから、該当するサービスを確認します。

エラー:timeout

原因:リクエストが制限時間内に完了していません。名前解決・接続・データ受信のいずれかで停止している可能性があります。対処:直接接続とプロキシ経由を比較し、別のネットワークでも試します。応答が実際に遅い場合に限り、タイムアウトを適度に延ばしてください。誤ったURLを長時間待つことで問題を覆い隠さないようにしましょう。

エラー:Illegal base64 character

原因:デコーダーが想定外の形式のデータを受け取っています。エラーページや、対応していないサブスクリプション形式でよく発生します。対処:応答本文とクライアントが対応する形式を確認してください。エラー内容に対して何度もデコードを試さないでください。

サブスクリプションの応答は、ノード共有リンクを並べたテキストの場合もあれば、Base64でエンコードされている場合もあります。ブラウザーにランダムに見える文字列がダウンロードされても、必ずしも破損しているとは限りません。<html>やログインフォーム、アクセス確認のメッセージが表示される場合は、サーバー側で認証やアクセス制限を確認してください。ブラウザーにはログインCookieがある一方、クライアントには通常ありません。そのため、ブラウザーで開けるだけではクライアントでも購読できる証明になりません。

v2rayNのサブスクリプション自動更新:グループごとに間隔を設定

v2rayNのデスクトップ版では、まず手動更新を1回成功させてから定期更新を設定します。一般的な画面では、メインウィンドウの「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、対象グループの編集画面で「自動更新間隔」を設定します。画面のバージョンによってボタンの位置や入力単位が異なることがあるため、現在の画面に表示されている単位を確認してください。

  1. 対象グループを確認する

    「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、更新したいグループを編集して、サブスクリプションURLと有効状態を確認します。使える設定を失わないよう、既存のノードは残しておきましょう。

  2. 手動更新で確認する

    保存後、「サブスクリプショングループ」に戻り、「プロキシを使わずにサブスクリプションを更新」を実行します。サブスクリプション元へのアクセスにプロキシが必要な場合は、使えるノードを選択して「プロキシ経由でサブスクリプションを更新」を試してください。ログに成功と表示され、ノード一覧が想定どおり変わったことを確認します。

  3. 更新間隔を入力する

    グループの編集画面に戻り、自動更新間隔を設定します。まずは6時間ごとにするのがおすすめです。項目の単位が「分」なら360、「時間」なら6を入力してください。異なるバージョンの数値をそのまま流用しないようにします。

  4. 保存して動作を確認する

    設定を保存し、プログラムを起動したままにして、予定時刻を過ぎてからログを確認します。更新経路を選べる場合は、前の手順で成功した経路を使ってください。手動更新で一度プロキシを選んでも、バックグラウンドタスクの経路設定が変わるとは限りません。

自動更新は、システム常駐のダウンロードサービスではありません。プログラムを終了したときや、PCの電源が切れているとき、スリープ中は、予定どおりにサブスクリプションへアクセスすることはできません。復帰後に更新が実行されるかどうかはバージョンの実装によります。タスクトレイのアイコンだけで完了と判断せず、ログで実際の更新時刻を確認してください。

v2rayNGのサブスクリプション自動更新:設定とバックグラウンド権限を確認

Android版では、まずサイドメニューの「サブスクリプショングループ設定」でURLを確認し、メイン画面右上のメニューから「サブスクリプションを更新」を実行します。定期更新に対応しているか、間隔を変更できるかはインストール済みのバージョンによります。「起動時に更新」を継続的な定期タスクと混同しないでください。

  1. 手動更新を確認する

    「サブスクリプショングループ設定」を開き、有効なURLを保存します。メイン画面に戻り、右上のメニューから「サブスクリプションを更新」を実行してください。バックグラウンド設定の前に、少なくとも1回更新に成功することを確認します。

  2. 自動更新を有効にする

    サイドメニューから「設定」を開き、「サブスクリプションの自動更新」を探して有効にします。使用中のバージョンに更新間隔の項目があれば、まず6時間に設定してください。単位が分の場合は360を入力します。間隔の項目がない場合は、アプリが提供するスケジュール設定をそのまま使い、隠し設定があるとは考えないでください。

  3. バックグラウンド実行を許可する

    アプリアイコンを長押しして「アプリ情報」→「バッテリー」を開き、バックグラウンドでの動作を許可します。端末によっては「制限なし」と表示されます。「モバイルデータとWi-Fi」や「データ使用量」の設定でも、バックグラウンドデータの使用が許可されているか確認してください。項目名はシステムによって異なります。

  4. 画面ロック後の更新を確認する

    手動更新の時刻を記録し、画面をロックして設定した間隔が過ぎてから、更新ログまたは時刻の記録を確認します。バージョンに時刻表示がない場合は、ログとノード内容の変化を参考にしてください。ノード数が変わらないだけで失敗とは判断しないでください。

v2rayNGはXrayコアを使用しますが、サブスクリプションの取得とバックグラウンドのスケジュール管理はクライアント側で行います。定期タスクを直すために、コアのpolicyを変更したり、存在しないsubscription項目を追加したりしないでください。こうした変更でアプリの設定を置き換えることはできません。

更新後の確認:一覧の更新成功と接続成功は別

サブスクリプションを更新すると、通常はグループの内容が再構成されます。ノード名・並び順・件数が変わったり、サービス提供元が削除した古いノードが消えたりすることがあります。手動で管理しているノードがある場合は、事前にエクスポートするか、専用のグループに移して、サブスクリプション管理の項目と混在しないようにしてください。

まとめ:まず1回成功させてから定期更新を設定

有効なURL、使える更新経路、成功したログを、自動更新を始める条件として確認してください。通常、ノード一覧を毎分更新する必要はありません。まず6時間間隔から始め、サービス提供元のルールに合わせて調整しましょう。更新に何度も失敗してリクエスト制限がかからないようにしてください。

確認記録は、クライアントのバージョン、発生時刻、直接接続かプロキシ経由か、エラー全文の4点で十分です。外部に送る前に、サブスクリプショントークンとアカウント情報を削除してください。これにより、端末のバックグラウンド制限とサーバー障害を切り分けやすくなり、アップデート後やネットワーク変更後の再テストにも役立ちます。

v2rayNをダウンロード