v2rayNGでサブスクリプション更新がタイムアウトする、更新後にノードが表示されない、定期更新の間隔を調整したい場合に役立つ内容です。まず、リクエストが完了しないのか、サーバーに拒否されたのか、内容を解析できないのかを切り分け、リンク・直通/プロキシ経由の通信経路・形式を順に確認します。自動更新は手動更新の成功を確認してから設定してください。v2rayNのグループ更新間隔とv2rayNGのバージョンごとの機能は別々に確認し、同じ設定をそのまま適用しないようにしましょう。
サブスクリプション更新はどの段階で失敗する?
サブスクリプションURLはノード設定を取得するための入口であり、ノードサーバーのアドレスではありません。更新時には、クライアントがサブスクリプションサービスにリクエストを送り、返された内容をローカル設定に変換します。一方、ノードへの接続は別の処理です。そのため、「現在のノードには接続できるが、サブスクリプションは更新できない」という状態も起こり得ます。ノードの遅延だけでサブスクリプションサービスの状態を判断しないでください。
更新を試した時刻、エラー全文、選択中のサブスクリプショングループを記録してください。切り分け中は一つのグループだけを更新し、「すべてのサブスクリプションを更新」を連続で実行しないようにしましょう。異なるURLのエラーが混ざるほか、サーバーのリクエスト制限にかかるおそれがあります。現在使える設定は残しておき、最初からグループを削除したりアプリのデータを消去したりする必要はありません。
- いつまでも応答がない:ノードのプロトコルを変更する前に、通信経路・DNS・接続タイムアウトを確認します。
- すぐにアクセス拒否と表示される:サブスクリプショントークン、アカウントの状態、リクエスト制限、サブスクリプションのURLが変更されていないかを確認します。
- リクエストは完了したがノードが表示されない:返された内容がログインページやエラーメッセージではないか、クライアントが対応する形式かを確認します。
- 更新は成功するが接続できない:ノード設定、サーバーの状態、ルーティングを確認します。これはサブスクリプション更新とは別の段階の問題です。
サブスクリプションURLとアカウントの状態を確認する
v2rayNGのメイン画面でサイドメニューを開き、「サブスクリプショングループ設定」から該当グループを選んで編集画面に進み、サブスクリプションURLの欄を確認します。グループ名は端末内で識別するためのもので、名前が正しくてもURLが有効とは限りません。URLをコピーするときは、先頭のスキーム、疑問符以降のパラメーター、末尾の文字まで完全に含めてください。ページ上のボタン名まで一緒にコピーしないよう注意しましょう。
-
既存のグループは残す
まず、エラーが出たグループと現在選択中のノードを記録します。まだ使えるノードは削除しないでください。新しいURLを試す場合は、「サブスクリプショングループ設定」で別のグループを追加すれば、既存の設定を上書きせずに済みます。
-
URLをコピーし直す
サブスクリプション提供元のアカウントページから、現在のクライアントに対応したURLをコピーし直します。グループのURL欄に貼り付けたら、前後の空白や改行、パラメーターの欠落がないか確認して保存してください。
-
アカウントの状態を確認する
プランの有効期限、利用可能な通信量、サブスクリプションURLをリセットしていないかを確認します。リセット後は古いトークンが無効になることが一般的です。その場合、ネットワークを切り替えたり古いURLを繰り返し試したりしても、アクセスは復旧しません。
-
グループを個別に更新する
メイン画面に戻って対象のサブスクリプショングループを選び、右上のメニューから「現在のグループを更新」を実行します。バージョンによっては「サブスクリプションを更新」と表示される場合があります。操作前に、対象のグループが選択されていることを確認してください。
直通とプロキシ経由の更新を個別に試す
v2rayNGのサブスクリプションリクエストは、「接続を開始すれば必ずプロキシ経由になる」とは限りません。バージョンによっては、メイン画面右上のメニューに通常の更新と「プロキシ経由」と明記された更新が別々に用意されています。ステータスバーの接続アイコンだけで通信経路を判断せず、それぞれのコマンドを選んで比較してください。
| テスト方法 | 操作条件 | 結果の見方 |
|---|---|---|
| 通常更新 | 対象グループを選び、「プロキシ経由」と書かれていない更新コマンドを実行する | 成功した場合は、通常の通信経路でサブスクリプションサービスにアクセスできています。プロキシ経由に切り替える必要はありません。 |
| プロキシ経由で更新 | 利用可能と確認済みのノードに接続してから、「プロキシ経由」と書かれたコマンドを実行する | こちらは成功し通常更新が失敗する場合、二つのリクエスト経路で到達性に違いがあります。 |
| 接続するネットワークを切り替える | 同じURLを使い、Wi-Fiとモバイルデータ通信のそれぞれで試す | 一方のネットワークだけで失敗する場合は、そのネットワークのDNS、認証ページ、アクセス制限を優先して確認します。 |
| 時刻の自動設定を確認する | Androidの「設定」→「システム」→「日付と時刻」で、自動設定を有効にする | 時刻のずれはHTTPS証明書の検証失敗につながることがあります。システムメニューの名称は端末によって異なる場合があります。 |
現在使えるノードが一つもない状態で「プロキシ経由で更新」を実行すると、悪循環になることがあります。更新には利用可能なノードが必要なのに、そのノードを取得するリクエストも利用不能なノードに依存するためです。まず通常更新を試すか、接続先のネットワークを切り替えるか、サブスクリプション提供元に利用可能な接続先を確認してください。「プロキシ経由」をすべてのタイムアウトに対する万能の解決策と考えないようにしましょう。
ブラウザーでサブスクリプションURLを開けても、それはブラウザーが使う通信経路からアクセスできることを示すだけです。ブラウザーとクライアントではDNSやプロキシ設定が異なる場合があり、ブラウザーにはログイン状態が残っていることもあります。また、ページにアカウントのログイン画面が表示されても、サブスクリプションの内容が有効だとは判断できません。
エラーの原文からネットワーク・権限・形式の問題を切り分ける
エラーの表示内容はクライアントのバージョン、システム、通信ライブラリによって変わります。以下はログに含まれることがある主な文字列です。必ず前後のログも確認し、「失敗」と表示されたからといってすぐにクライアントを再インストールしないでください。証明書エラーを検証無効化で回避するのも避け、まず時刻を修正するかサブスクリプションサービスの管理者に問い合わせましょう。
エラー:java.net.SocketTimeoutException
原因と対処:接続または読み込みが制限時間内に完了していません。通常更新とプロキシ経由の更新をそれぞれ試し、接続するネットワークも切り替えてください。他のネットワークでも失敗する場合は、サブスクリプションサービスが一時的に停止していないか確認します。
エラー:java.net.UnknownHostException
原因と対処:サブスクリプションURLのホスト名を解決できません。ドメインの入力ミスがないか確認し、Androidのネットワーク設定で「プライベートDNS」に現在のネットワークからアクセスできないサービスが指定されていないかを調べます。一時的に「自動」に戻して比較してください。
エラー:HTTP 403 Forbidden
原因と対処:サーバーが現在のリクエストを拒否しています。トークン、接続元の制限、アクセス方針などが原因の可能性があります。サブスクリプションURLを取得し直し、アカウントの状態も確認してください。プロキシ経由の更新だけが拒否される場合は、通常更新も試し、すぐにクライアントの不具合と決めつけないようにしましょう。
エラー:HTTP 429 Too Many Requests
原因と対処:リクエスト回数の制限に達しています。連続更新をやめてください。応答に Retry-After が含まれている場合は、その指示に従って待ちます。その後、一つのグループだけでテストし、自動更新の間隔も適切に延ばしてください。
エラー:javax.net.ssl.SSLHandshakeException
原因と対処:HTTPSのハンドシェイクに失敗しています。証明書チェーン、システム時刻、ネットワーク上の中継機器などが原因として考えられます。まず時刻を合わせて別のネットワークでも試してください。サーバー側の証明書設定に問題がある場合は、サービスの管理者による修正が必要です。
サーバーから正常な応答が返っているのにノードが表示されない場合は、内容の形式を確認します。サブスクリプションは、エンコードされたノードリンクの一覧の場合も、特定クライアント専用の設定の場合もあります。拡張子、テキストの長さ、ダウンロードできることだけでは、対応形式かどうかは判断できません。HTMLのログインページやJSONのエラーメッセージもHTTP 200で返ることがあるため、ステータスコードが成功でもインポート成功とは限りません。
- サブスクリプション提供元のページで、v2rayNG対応と明記されたエクスポート項目を選んでください。アカウントのトップページURLをサブスクリプションURLとして使わないようにしましょう。
- 新しいフィールドとの互換性を確認するため、クライアントを更新してください。v2rayNGはXrayコアを使用しますが、サブスクリプションの取得と形式解析はクライアントのバージョンにも左右されます。
- v2flyNGはV2Flyコアを使用します。すべてのプロトコルフィールドへの対応範囲がv2rayNGと同じとは限らず、メニュー操作も共通とは限りません。
- 一部のノードだけが表示されない場合は、該当ノードのプロトコルとエラーの概要を記録し、エクスポート内容が完全か提供元に確認してください。見慣れないセキュリティ関連のパラメーターを手作業で削除するのは避けましょう。
v2rayN/v2rayNGの自動更新間隔を設定する方法
まず手動更新が一度成功することを確認してから、自動更新を設定してください。サブスクリプション更新はノード一覧を更新する機能であり、プランの通信量を増やしたり、停止中のサーバーを自動で復旧したりするものではありません。以下の時間は設定例であり、速度測定の結果やすべてのバージョンの初期値ではありません。提供元から更新間隔の指定がある場合は、その指示に従ってください。
v2rayN:サブスクリプショングループで間隔を設定する
デスクトップ版で「サブスクリプショングループ」→「サブスクリプショングループ設定」を開き、対象のグループを選択して編集し、「自動更新間隔」の項目を探します。この項目があるバージョンでは、通常、単位は分です。たとえば 360 は6時間ごと、1440 は24時間ごとの更新を意味します。実際の単位は画面の説明でも確認してください。多くのバージョンでは 0 にすると定期更新が無効になります。更新を継続する設定ではありません。
- グループのURLが正しいことを確認して保存し、まず手動更新を一度実行します。
- グループを再編集し、画面に表示された単位で更新間隔を入力して保存します。「分」の欄に「時間」の数値を入力しないよう注意してください。
- プロキシ経由でないとアクセスできない場合は、「サブスクリプショングループ」メニューの「現在のサブスクリプションを更新(プロキシ経由)」で確認します。自動更新時の通信方式は、使用中のバージョンの設定とログも確認してください。
- プログラムを起動したまま、次回の更新結果を確認します。プログラム終了中やPCのシャットダウン・スリープ中に、タイマーが通常どおり動作するとは限りません。
v2rayNG:定期更新の設定項目があるか確認する
Android版では、まず「サブスクリプショングループ設定」から対象グループの編集画面を開き、自動更新や更新周期の項目があるか確認します。続いて、サイドメニューの「設定」にサブスクリプション関連の項目があるか確認してください。機能や画面はリリースバージョンによって異なり、手動更新のみで、ユーザーが間隔を設定できる定期更新機能がないバージョンも多くあります。画面にURLと名前しかない場合、v2rayNの分単位の設定を流用することはできません。共通の隠し設定もありません。
- 更新周期の項目がある:表示されている単位(分または時間)に合わせて設定し、保存後に実際の更新履歴を確認します。他の解説記事にある数値を初期値と決めつけないでください。
- 更新周期の項目がない:メイン画面のメニューから手動で更新してください。定期更新が必要な場合は、存在しないメニューを探し続けるのではなく、利用中のバージョンの機能説明を確認しましょう。
- バックグラウンド更新に対応しているのに実行されない:Androidの「設定」→「アプリ」→「v2rayNG」→「バッテリー」で、バックグラウンド使用の制限を確認します。端末メーカーによっては「アプリのバッテリー使用量」や「バックグラウンドでの動作」と表示されることがあります。
- アプリが強制停止されている:アプリを開き直し、まず手動で更新してください。バックグラウンド動作を許可しても、定期更新機能がないバージョンに自動更新機能が追加されるわけではなく、すべての端末で設定時刻どおりに動作する保証もありません。
サブスクリプション更新に関するよくある質問
更新成功と表示されても、ノード数が変わらないのはなぜ?
サブスクリプションの内容が更新前と同じ可能性があります。まず対象グループとフィルター条件を確認し、ノード名とアドレスを比較してください。同じノードが再取得されて数が変わらないのは正常です。ノード数だけで更新の実行有無を判断しないでください。
プロキシ経由の更新もタイムアウトします。ポートを変更すべき?
まず選択中のノードから実際にネットワークへアクセスできることを確認し、通常更新も試してください。プロキシ経由の更新がタイムアウトする原因は、ノードの出口やサブスクリプションサービスにある場合があります。ログにローカル待ち受けポートの競合が明記されている場合に限り、ポート設定を確認してください。むやみに待ち受けポートを変更する必要はありません。
アプリを開いたときにだけ更新されるのはなぜ?
まず、使用中のバージョンがバックグラウンドでの定期実行に対応しているかを確認し、次にバッテリー制限を確認してください。アプリを再び実行したときに初めて処理されるタスクもあります。原因を調べるには、アプリを開いた後の通知だけで判断せず、前回の成功時刻、設定した間隔、実際の実行時刻を記録しましょう。
サブスクリプション更新後に選択中のノードが消えた場合は?
サブスクリプション提供元がノードを削除したか、名前を変更した可能性があります。該当グループに切り替えて、利用可能なノードを選び直してください。手動での変更を残したい場合は、別の設定としてバックアップしておきましょう。次回更新時に、グループ内のサブスクリプション管理対象の設定が上書きされることがあります。
再インストールでサブスクリプションの解析失敗は直る?
まずエクスポート形式とクライアントのバージョンを確認してください。同じURLからログインページやエラー内容が返り続けているなら、再インストールしても応答は変わりません。問い合わせる場合は、バージョン、エラー発生時刻、更新方法、個人情報を伏せたログを共有し、復元できるよう既存の設定を残してください。
切り分けの最後に、「一つのグループを手動更新して成功すること」と「更新後のノードを選んで接続を確認すること」をそれぞれ一度行ってください。前者でサブスクリプションの通信経路を、後者でノードの利用可否を確認できます。定期更新を有効にしている場合は、次回の予定が実際に実行されたかも確認しましょう。この三つを個別に検証すれば、サブスクリプションサービス、クライアントのスケジュール実行、ノード接続の問題を混同せずに済みます。