Androidでv2rayNGを使っているときに、ノードの速度テストがタイムアウトする、接続できない、起動後にウェブページを開けない場合に役立つ内容です。まず、サブスクリプションの取得失敗、サーバーとのハンドシェイク失敗、アプリの通信がプロキシを通っていない状態を切り分け、7つのポイントを順に確認します。一度に変更する設定は1つだけにし、ログと元の設定に戻す手段を残して、正常なノード設定まで崩さないようにしましょう。
確認ポイント1:サブスクリプションは更新できているか
サブスクリプションURLはノード設定を取得するための入口であり、ノードサーバーそのものではありません。更新がタイムアウトしても、今回設定を取得できなかったことを示すだけで、一覧のノードすべてが使えないとは限りません。逆に、更新に成功しても、すべてのサーバーに接続できるとは限りません。
まずv2rayNGのサイドメニューから「サブスクリプショングループ設定」を開き、URLが正しいグループに保存されているか確認します。次にメイン画面のメニューから「サブスクリプションを更新」を実行してください。バージョンによってボタンの表記は多少異なります。「通常の更新」と「プロキシ経由」の更新を区別し、どちらで失敗したか記録しましょう。
- サブスクリプションの入手元を確認:サービス提供元から案内されたURL全体を確認し、コピー時に空白や改行が混ざっていないか、サブスクリプショントークンがリセットされていないかチェックします。
- アカウントの状態を確認:サブスクリプションの有効期限、データ容量、サービス提供元による接続先の変更を確認します。更新APIから応答があっても、アカウントの利用枠が残っているとは限りません。
- 更新方法を選択:使えるノードがない場合は、まずプロキシを経由せずに更新します。使えるノードがあり、サブスクリプションの接続先に直接つながらない場合は、プロキシ経由で更新してみてください。
- 現在の設定を残す:再試行するために、先にすべてのノードを削除しないでください。更新後はグループとノード情報に変化がないか確認し、必要であれば入手元からサブスクリプションを取得し直します。
確認ポイント2:端末の時刻は正確か
端末の時刻が大きくずれていると、VMessの認証に影響したり、TLS証明書がまだ有効でない、または期限切れと判定されたりすることがあります。VLESSはVMessと同じ時刻認証方式を使いませんが、TLS接続では正確な時刻による証明書の検証が必要です。ノードがVLESSだからといって、この項目を飛ばさないでください。
- Androidの「設定」→「システム」→「日付と時刻」を開き、「日時を自動設定」と「タイムゾーンを自動設定」をオンにします。端末によっては「その他の設定」に項目があります。
- インターネットに接続できず時刻を自動設定できない場合は、まず通常のネットワーク接続を復旧してから、時刻を再同期してください。タイムゾーンだけを変更しても、端末に記録された時刻自体は修正されないことがあります。
- 時刻を合わせたら、v2rayNGの接続を停止して再起動し、ほかの設定は変えずに同じノードをテストします。
ログに証明書の時刻に関するエラーが出た場合は、まず日付、年、端末の時刻を確認してから、サービス提供元にサーバー証明書の状態を確認してください。「安全でない接続を許可」を汎用的な解決策として使わないでください。証明書の検証が弱まるうえ、ルーティングやサーバーのポートに接続できない問題は解決しません。
確認ポイント3:プロトコルと通信設定は一致しているか
ノード一覧から対象ノードの編集画面を開き、サービス提供元が案内した設定と項目ごとに照合します。ノード名は識別用のラベルです。名前に「TLS」や地域名が含まれていても、設定が正しいとは限りません。まず信頼できる入手元から設定全体を再インポートし、手動で変更した項目を確認しましょう。
| 確認対象 | 一致させる項目 | よくある誤設定 |
|---|---|---|
| サーバー接続先 | アドレス、ポート | ウェブサイトのアドレスをノードのアドレスとして入力する、または標準以外のポートを入力し忘れる |
| VMess | ユーザーID、暗号化設定、通信方式 | 別のノードのユーザーIDをコピーする、通信方式の種類を間違える |
| VLESS | ユーザーID、暗号化項目、flow | 設定で指定されているnoneを暗号化項目に設定していない、またはflowを独自に追加する |
| TLS | serverName、証明書検証、必要なALPN設定 | サーバーアドレスをIPアドレスに変更した際、serverNameも誤って削除する |
| REALITY | serverName、公開鍵、shortId、サーバー指定のフィンガープリント | 公開鍵をユーザーIDとして入力する、shortIdを入力し忘れる、別ノードの設定を混在させる |
| WebSocket | パス、Host、TLSの有効・無効 | パスの大文字・小文字を変更する、Hostとサーバーアドレスを混同する |
VLESSのencryptionは通常noneにします。ただし、これは外側の接続が暗号化されないという意味ではありません。TLSやREALITYで安全な通信を実現できます。flowを設定するか、どの値を使うかはサーバー側の設定に合わせてください。「この組み合わせのほうが速い」といった理由だけで、すべてのノードを同じ設定に変更しないでください。
確認ポイント4:現在のネットワークからサーバーに接続できるか
まずv2rayNGを停止し、通常のネットワークでウェブページを開けるか確認します。公衆Wi-Fiではログイン認証が必要な場合があります。モバイルネットワークも、料金未払い、データ通信量の制限、電波状況の問題などで接続できないことがあります。基本的なネットワーク接続が復旧する前にノードを切り替えても、有益な切り分けにはなりません。
次に、ノードの設定を変えずに1つのノードを選び、Wi-Fiとモバイルデータ通信でそれぞれテストします。ネットワークを切り替えることで、接続先の制限、IPアドレスの種類、DNSの違いが分かる場合がありますが、1回の成否だけで原因は特定できません。後続のログとあわせて絞り込みましょう。
これらの番号は接続経路の違いを見分けるためのもので、ノードのポートをすべて443に変更するためのものではありません。ノードではサーバーが実際に待ち受けているポートを使ってください。通常のウェブページが443で開けても、別のアドレスにあるノードのポートに接続できるとは限りません。同様に、ICMPテストが失敗しても、TCPプロキシサービスに接続できないとは限りません。
結論:同じノードでネットワークを比較する
同じノードが特定のネットワークだけで失敗する場合は、ネットワークの種類とログに記録された接続先アドレスを控え、サービス提供元に接続先への到達性を確認してください。プロトコル、ポート、DNSを同時に変更すると比較できなくなるため、避けましょう。
確認ポイント5:VPNサービスが実際に通信を処理しているか
v2rayNGのメイン画面に「起動中」と表示されても、ローカルサービスが動作していることを示すだけで、接続先サーバーの検証がすべて完了したとは限りません。AndroidのVPN権限、ほかのVPNサービス、アプリごとのプロキシ設定、バックグラウンド制限などにより、「クライアントは起動しているのにブラウザーはプロキシを使えない」ことがあります。
- 権限を確認:初回起動時にAndroidのVPN接続リクエストを許可し、システムのVPN設定で現在の接続先がv2rayNGになっていることを確認します。
- 競合を解消:AndroidのVPN通信を使用するほかのアプリを一時停止します。ローカルVPNとして動作するフィルタリングツールも対象です。通常、一般のアプリが同じユーザー領域のVPN通信を同時に使用することはできません。
- アプリごとのプロキシ設定を確認:v2rayNGの「設定」からアプリごとのプロキシ設定を開き、テストに使うブラウザーが除外されていないか確認します。テスト中はアプリごとの制限を一時的に無効にしてもかまいません。
- バックグラウンド制限を確認:画面消灯後にだけ接続が切れる場合は、システムのアプリ設定でv2rayNGの電池使用とバックグラウンド動作の権限を確認します。画面を点灯した直後からタイムアウトするなら、省電力設定だけでなくサーバー接続を優先して確認してください。
VPNやアプリごとの設定を変更するたびに接続を停止して再起動し、同じブラウザーで同じ接続先にアクセスします。アイコンが変わっただけで新しいリクエストログがない場合は、ノードが使えないと決めつけず、まず通信がプロキシに渡っている範囲を確認しましょう。
確認ポイント6:ルーティングによって通信が別の経路に送られていないか
一部のウェブサイトだけ開けない場合は、ノードの遅延だけでなくルーティングルールを確認します。ルールによって、特定のドメインが直接接続、プロキシ経由、またはブロックに振り分けられることがあります。「バイパス」系の設定が有効だと、テスト通信が選択中のノードを通らない場合もあります。
- v2rayNGの「設定」で「ルーティング設定」または同等の項目を開き、現在のモード、ユーザールール、関連するドメインの照合条件を記録します。
- 短時間の比較テストでルーティングの影響を確認します。一時的にテスト先がプロキシを通るルーティング方式を選び、同じ接続先にアクセスしたらすぐに元の設定へ戻してください。ルーティングのグローバルプロキシが、アプリごとの除外設定を必ず上書きするわけではありません。
- カスタムルールを変更した場合は、対象ドメインが直結またはブロックのルールに先に一致していないか確認します。ルールの順序も結果に影響します。前のルールに一致すると、後続のルールが適用されない場合があります。
- 特定のアプリだけで失敗する場合は、そのアプリ独自のプロキシ設定、アプリごとの対象リスト、ブラウザーとは異なる接続方式を使っていないか確認します。
遅延が表示されるのにウェブページが開けないのはなぜ?
まず、どの種類のテストを使ったか確認してください。TCPプローブで分かるのはポートへの接続状況だけです。実接続テストではテスト先も関係します。ブラウザーで目的のページを開き、該当するリクエストログを確認してください。遅延の数値だけでアクセス全体が確認できたと判断しないでください。
グローバルルーティングに切り替えると開けます。このまま使い続けてもいいですか?
まず元のモードに戻し、そのドメインを直結またはブロックに振り分けているルールを確認してください。グローバルルーティングは短時間の比較テストに使い、常用する設定は実際にプロキシを使う範囲と通信量に応じて決めましょう。
ブラウザーでは使えるのに、別のアプリが読み込み中のままです。どうすればいいですか?
まずアプリごとのプロキシ設定で、そのアプリがプロキシの対象に含まれているか確認し、アプリを完全に終了してから再起動します。それでも失敗する場合はログのプロトコルと接続先アドレスを確認し、アプリ自体の問題かプロキシ接続の問題かを切り分けてください。
確認ポイント7:DNSとログから障害箇所を特定する
DNSには少なくとも2種類の対象があります。ノードサーバーのドメインと、最終的にアクセスするウェブサイトのドメインです。前者の名前解決に失敗するとノードに接続できません。後者の名前解決やルーティングに問題があると、プロキシは起動しているのに特定のウェブサイトだけ開けないことがあります。リモートDNSを有効にしても、ノード自体のドメイン名が解決できるとは限りません。
v2rayNGの「設定」でDNS関連項目を開き、ローカルDNS、リモートDNS、有効・無効の状態を確認します。比較する前に現在の値を控えてください。Androidの「設定」→「ネットワークとインターネット」にある「プライベートDNS」も別の設定項目です。カスタムプロバイダーを一時的に自動へ戻してテストし、テスト後に元の設定へ戻してください。メーカー独自のシステムでは項目名が異なる場合があります。
エラー:i/o timeout
原因:読み込みまたは書き込みの待ち時間が制限を超えています。DNS問い合わせ、接続、後続のデータ転送などで発生する可能性があり、このメッセージだけでは原因を特定できません。
対処法:同じ時刻前後のログを確認し、DNSサーバー、ノードのアドレス、接続先ウェブサイトのどこで待ち時間を超えたか特定します。接続ネットワークを切り替えた結果と照らし合わせ、DNS設定を手当たり次第に変更するのは避けてください。
エラー:connection refused
原因:接続が明示的に拒否されています。接続先ポートで待ち受けていない、サービスが起動していない、ネットワーク機器が接続を拒否している場合によく発生します。
対処法:エラーに表示された接続先がリモートノードかローカルの待ち受けアドレスかを確認します。リモート側の問題ならサブスクリプションに記載されたポートを確認してサービス提供元に問い合わせ、ローカル側の問題ならサービスの起動状態を確認してください。
エラー:x509: certificate has expired or is not yet valid
原因:証明書の有効期間と端末の現在時刻が一致していません。端末の時刻が誤っている場合も、サーバー証明書が期限切れの場合もあります。
対処法:時刻を自動設定してから再試行してください。時刻が正しいのにエラーが続く場合は、証明書の問題をサービス提供元に報告し、証明書検証を無効にして回避しないでください。
サイドメニューから「ログ」を開き、失敗した操作の開始時刻を正確に記録します。接続を再起動したら、接続先に一度だけアクセスし、その前後のログを確認してください。エラーには複数の接頭辞が付く場合があります。「接続失敗」は結果を示すだけのことが多く、原因の特定には内側にある名前解決、ハンドシェイク、ポートのエラーが役立ちます。
- 再現条件を記録:Androidのバージョン、v2rayNGの「バージョン情報」に表示されるバージョン、使用したネットワークの種類、サブスクリプション更新時とウェブページへのアクセス時のどちらで失敗したかを記録します。
- 比較結果を記録:同じノードでネットワークを切り替えたときの結果と、同じネットワークで利用実績のある別のノードを使ったときの結果を記録します。一括速度テストの結果を、実際のアクセス結果の代わりにしないでください。
- 機密情報を隠してログを共有:エラーの原文と時刻は残し、サブスクリプショントークン、ユーザーID、プライベートアドレス、その他の認証情報は隠します。ノードの接続先情報は信頼できるサポート窓口だけに伝えてください。
結論:設定を元に戻してから再確認
原因を特定したら、テスト中に一時変更したルーティング、プライベートDNS、アプリごとの設定を元に戻し、実際に効果があった修正だけ残します。接続を再起動して元の接続先を再テストし、忘れていた一時設定に頼らず直っていることを確認してください。