V2Rayノードに接続できない・タイムアウトする場合の確認手順

システム時刻、サブスクリプション、ポート、通信設定、コアのログを順に確認し、V2Rayノードのタイムアウトや接続失敗の原因を切り分けます。

この記事の要点

v2rayNのデスクトップ版、v2rayNG、v2flyNGのAndroid版で、ノードがタイムアウトする、接続に失敗する、起動後にWebページを開けない場合に役立つ確認手順です。まずリクエストがコアに届いているかを確かめ、時刻、サブスクリプション、接続先ポート、プロトコル設定を順に確認します。最後に再現可能なリクエストを一度だけ送り、ログと照らし合わせます。一度に変更する項目は一つに絞り、ローカルプロキシの問題をノードの障害と誤認しないようにしましょう。

1. まず失敗した段階を特定する:起動、接続、Webリクエスト

「タイムアウト」は、処理のどこかが制限時間内に完了しなかったことを示すだけで、サーバーが必ず停止しているとは限りません。クライアントの一覧にある接続テスト、ブラウザーからのリクエスト、サブスクリプションの取得では、接続先やルーティング、タイムアウトの設定が異なる場合があります。まず、どの操作で失敗したかを記録し、確認する箇所を絞りましょう。

アプリのリクエスト ローカルの入口 ルーティング ノードへの接続 接続先からの応答

デスクトップでは、システムプロキシを使用するアプリだけが、システムプロキシ経由でローカルの入口に接続します。明示的なプロキシ設定でテストすれば、この不確定要素を切り分けられます。AndroidでVPNのアイコンが表示されていても、VpnServiceが起動したことを示すだけで、リモートとのハンドシェイクや接続先サイトへのアクセスが成功したとは限りません。

症状まず確認する項目この時点では判断できないこと
起動をクリックするとすぐ停止する設定の読み込み、コアの起動、ポートの競合リモート側の経路が遮断されているとは断定できない
すべてのノードでテストがタイムアウトするテスト先、システム時刻、ローカルネットワーク、コアのログ一度のテスト結果だけで全ノードを削除しない
特定のノードだけ失敗し、ほかのノードは正常該当ノードのアドレス、ポート、認証情報、通信設定クライアントを再インストールしても、ノードの有効性は確認できない
テストは成功するが、ブラウザーでページを開けないシステムプロキシ、アプリごとの設定、ルーティング、接続先ドメインの名前解決テスト成功だけで、すべてのアプリが使えるとは判断できない

2. システム時刻とローカルネットワークを確認する

まず、システム時刻を自動同期に戻します。VMessの認証では時刻が使われ、TLSも端末の時計を基準に証明書の有効期間を確認します。時刻が大きくずれていると、サーバーのポートへのTCP接続が確立しても、その後の認証に失敗することがあります。タイムゾーンを手動で変えても時刻の同期にはなりません。タイムゾーン表示と、実際の時計の正確さは別の問題です。

  1. Windows:「設定」→「時刻と言語」→「日付と時刻」を開き、「時刻を自動的に設定する」をオンにして「今すぐ同期」を実行します。その後、クライアントを再起動して接続してください。
  2. Android:システムの「設定」から「日付と時刻」を開き、自動設定を有効にします。メーカーによっては「システム」や「その他の設定」にあるため、設定画面で項目を検索すると見つけやすくなります。
  3. 基本的なネット接続を確認:プロキシを一時停止し、普段直接アクセスできるサイトを開きます。ログインページが表示される公衆Wi-Fiでは、先に認証を済ませてからクライアントを起動してください。
  4. 接続するネットワークを一度切り替える:同じ端末、同じノード、同じテスト先を使い、Wi-Fiとモバイルネットワークで結果を比較します。原因を特定できなくなるため、ノードとネットワークを同時に切り替えないでください。

一方のネットワークだけで接続できる場合は、IPv6の利用可否、ルーターの設定、別のVPNの有無など、ネットワークごとの差を記録します。システムのファイアウォールをすぐに無効化するのは避けてください。設定を変更する場合は、クライアントに送信通信の許可があるか、具体的な遮断記録があるかを確認しましょう。

3. サブスクリプションを更新し、使用中のノード設定を確認する

サブスクリプションの更新に成功しても、設定を取得できたことを示すだけで、すべてのノードが使えるとは限りません。逆に、サブスクリプションのURLがタイムアウトしても、ローカルに保存済みのノードがすべて無効とは限りません。サブスクリプションの取得とノードへの接続は別々のリクエストです。分けて確認しましょう。

  1. v2rayNの「サブスクリプショングループ」で対象のグループを確認し、そのグループを更新します。メニュー名はバージョンによって異なる場合があります。「更新」と「プロキシ経由で更新」を区別してください。
  2. v2rayNGまたはv2flyNGのサブスクリプション設定で、URLと更新結果を確認します。サブスクリプションサイトへのアクセスにプロキシが必要な場合は、まず接続確認済みのノードを使い、「プロキシ経由で更新」を選択してください。
  3. 更新後、対象のノードを選び直してサービスを再起動します。同じ名前のメモだけで判断せず、編集画面を開き、サーバーアドレス、ポート、プロトコルが実際に変わったか確認してください。
  4. クライアントのバージョンと、実際に使用しているコアの名称・バージョンを記録します。v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。画面が似ていても、各項目が対応しているとは限りません。

サブスクリプションからログイン画面やエラーページが返る場合、何度もインポートしても解決しません。アカウントの状態、サブスクリプションURLが完全か、更新ログに解析エラーが出ていないかを確認してください。サブスクリプションURLを「サーバーアドレス」欄に入力しないでください。また、単一の vmess:// または vless:// 共有リンクは、定期取得するサブスクリプションURLとは別物です。

4. リモートポートとローカルの待ち受けポートを分けてテストする

リモートポートはサーバーへの接続に使い、ローカルの待ち受けポートはアプリからのリクエストを受け付けます。両者を混同しないでください。以下では、リモートポート 443、ローカルのSOCKSまたは混合プロキシの入口 10808 を例に説明します。どの設定でも同じ値とは限らないため、実際のノードとクライアントの設定を確認してから実行してください。

Windowsでは、まず次のPowerShellコマンドを実行し、実際のサーバーのドメイン名またはIPアドレスとポートを入力します。このテストで確認できるのはTCP接続の可否だけです。VMess、VLESS、TLS、REALITYのハンドシェイクが正しいか、UDP通信が使えるかは確認できません。

$server = Read-Host "ノードサーバーのドメイン名またはIPアドレスを入力"
$port = [int](Read-Host "ノードのポートを入力")
Test-NetConnection -ComputerName $server -Port $port -InformationLevel Detailed

次にローカルの入口をテストします。v2rayNの「設定」→「パラメーター設定」で、待ち受けアドレス、ポート、入口の種類を確認してください。バージョンによっては基本設定の画面にあります。実際のポートが 10808 でSOCKSに対応している場合は、ターミナルから次の明示的なプロキシリクエストを実行できます。Windowsでは、旧バージョンのPowerShellが curl を別のコマンドとして解釈しないよう、curl.exe を使用してください。

curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 --head https://example.com/

ここで指定した 10 秒と 20 秒は、診断用に設定した制限時間であり、通信速度の測定結果ではありません。socks5h は接続先ドメインの名前解決をプロキシ側に任せますが、すべてのDNSリクエストの最終的な経路まで、この指定だけで判断することはできません。接続先サイトはあくまでテスト対象です。そのサイト自体にアクセスできない場合は、接続可能と確認済みのHTTPS URLに変えて再テストしてください。

結論:まずリクエストが正しい入口に届いているか確認する

明示的なプロキシリクエストは成功するのにブラウザーで失敗する場合は、ブラウザーがシステムプロキシを経由しているか、クライアントのシステムプロキシが有効かを確認します。明示的なプロキシへの接続がローカルで拒否される場合は、リモートノードを次々に変える前に、待ち受けポートを修正してください。

5. プロトコル、通信方式、TLSの設定を確認する

ポートに接続できることを確認したら、サーバーから提供された有効な設定と項目ごとに照合します。アドレスとポートが同じでも、設定が同一とは限りません。変更前の値を保存し、毎回一つだけ変更してサービスを再起動してください。UUID、SNI、パスを一度に変更すると、比較できなくなります。

設定項目確認する内容よくある間違い
VMess / VLESSプロトコルの種類、UUID、設定で指定された暗号化方式またはflowの項目異なるプロトコルを入れ替える、または適合しないflowを独自に追加する
WebSocket通信方式、パス、Hostリクエストヘッダー、TLSの有効・無効パスの先頭のスラッシュを忘れる、またはHostとサーバーアドレスを同じ項目として扱う
gRPCサービス名、TLS、サーバーが要求する関連設定WebSocketのパスをそのままgRPCのサービス名に入力する
TLSSNI、証明書のドメイン名、ALPN、端末の時刻SNIを根拠なく変更する、または設定ミスを隠すため証明書の検証を無効にする
REALITYサーバーから提供された公開鍵の設定、short ID、serverName、フィンガープリント名称だけから設定値を推測する、またはその設定に対応していないコアを選ぶ

サーバーアドレスは接続先を特定し、TLSのSNIはハンドシェイクでサーバー名を指定し、WebSocketのHostはHTTPリクエストで使われます。これらの値は同じ場合も異なる場合もあります。「統一」するために、無理に一つのドメインへ変更しないでください。REALITYを使用する場合は、ほかのバージョンのJSONフィールド名をそのまま使わず、現在のクライアントとコアのバージョンに合わせて項目の対応関係を確認します。

6. リクエストを一度だけ送り、コアのログと照らし合わせる

連続した速度テストを止め、現在のログ表示をクリアしてからサービスを起動し、リクエストを一度だけ送ります。時刻、選択したノード、接続先ドメイン、最後まで記録されたエラーの一連の内容を控えてください。ログの「接続失敗」は、多くの場合、複数のエラーをまとめた表示です。根本原因は後続の dial、lookup、tls、bind に関する情報に記録されていることがあります。

v2rayNではメイン画面のログ欄から起動や接続に関する情報を確認できます。Androidクライアントではメニュー内のログから確認してください。項目の場所はバージョンによって異なります。ログレベルを一時的に上げた場合は、調査後に元の設定へ戻してください。アクセスログには接続先ドメインが含まれることがあるため、共有する前にマスキングしましょう。以下はよくあるエラーの例で、それぞれ原因が一つに決まるわけではありません。

エラー:bind: address already in use

原因:コアが必要とするローカルアドレスとポートが、別のプロセスに使用されています。対処法:クライアントを重複して起動していないか確認します。使用中のプロセスを特定したら、重複している方を終了するか、待ち受けポートを変更してアプリ側のプロキシ設定も合わせてください。

エラー:connect: connection refused

原因:接続が拒否されています。接続先ポートで待ち受けていないか、通信ポリシーによって明示的に拒否されている可能性があります。対処法:エラーに表示されたアドレスがローカルの入口かリモートサーバーかを確認し、コアの起動状態またはサーバーのポートを調べてください。

エラー:i/o timeout

原因:ネットワークの読み書きが制限時間内に完了しませんでした。この一行だけでは、問題の発生箇所を特定できません。対処法:前述の接続先アドレスと操作の種類を確認し、ドメインの名前解決、TCPポート、プロキシ経由のリクエストをそれぞれ再テストします。

エラー:no such host

原因:対象のドメイン名を有効なアドレスに解決できなかったか、ドメイン名の入力に誤りがあります。対処法:解決に失敗したのがノードのドメインかアクセス先かを確認し、入力内容と現在のDNS設定を調べてください。すべてのルーティングルールを一度に変更しないでください。

エラー:x509: certificate has expired or is not yet valid

原因:現在のシステム時刻で判定すると、証明書が有効期間外です。対処法:まず端末の時刻を同期します。時刻が正しいのに失敗する場合は、サーバーの管理者に証明書の更新状況と配置を確認してください。

ログに EOF が表示されても、接続先からの読み込みが終了したことを示すだけで、UUIDの誤りを単独で証明するものではありません。TCP接続の確立後、TLSのハンドシェイク中、通信リクエストの処理中のどの段階で発生したかを確認してください。失敗が続く場合は、「タイムアウト」とだけ表示されたスクリーンショットよりも、クライアントとコアのバージョン、エラー発生時刻、機密情報を伏せたエラーの一連の内容、同じノードを別のネットワークで試した結果を添えると、原因を絞り込みやすくなります。

7. まだ接続できない場合:症状に合わせて最後の確認をする

ここまでの確認で、問題がローカルの入口、リモートへの到達性、プロトコルのハンドシェイクのどこに近いかが分かっているはずです。正常と確認できた設定はそのまま残し、ルーティング、DNS、サブスクリプションを一度にリセットしないでください。次の症状に合わせ、変更を最小限にして原因を絞り込みましょう。

サブスクリプションの更新がタイムアウトするのに、以前のノードは使える場合、まず何を確認すればよいですか?

以前のノードを残し、明示的なプロキシリクエストが成功することを確認してから、サブスクリプション更新メニューで「プロキシ経由で更新」を選びます。それでも失敗する場合は、サブスクリプションURLとアカウントの状態を確認してください。サブスクリプションサーバーに接続できないからといって、現在使える設定を削除しないでください。

v2rayNのテストは成功するのに、ブラウザーでページを開けないのはなぜですか?

「システムプロキシ」メニューで「システムプロキシを自動設定する」が選択されているか確認し、ブラウザー独自のプロキシ設定も調べてください。TUNを使用している場合は、起動ログとルーティングも確認します。システムプロキシとTUNは別の機能です。

Androidの通知には実行中と表示されるのに、特定のアプリだけ接続できないのはなぜですか?

クライアント設定のアプリ別プロキシ一覧を開き、対象のアプリが対象に含まれているか、除外されていないか確認してください。リストのモードによってチェックの意味は異なります。設定を保存したらプロキシサービスを再起動し、古い接続を使い続けないよう、対象アプリも開き直してください。

画面を消した後だけ切断され、再点灯すると復旧します。ノードのタイムアウトでしょうか?

まず切断時にサービスが動作し続けているか確認します。システムの「設定」→「アプリ」→該当クライアント→「バッテリー」でバックグラウンド実行を許可してください。メーカーによっては、自動起動の設定が別にあります。変更後、同じ時間だけ画面を消した状態で再テストし、サーバー設定は先に変更しないでください。

モバイルネットワークに切り替えると正常に使えます。再インストールは必要ですか?

まず再インストールはしないでください。同じノードを使い、2つのネットワークで名前解決されたアドレスとポートテストの結果を記録します。差が継続して見られる場合は、元のネットワークのアクセス制限、IPv6の経路、ルーター設定を重点的に確認し、結果をネットワーク管理者またはサーバー管理者に伝えてください。

まとめ:同じノード・接続先で一項目ずつ再テストする

設定を変更したら、クライアントの状態が「実行中」になったかを見るだけでなく、最初に失敗した操作をもう一度実行してください。成功したリクエストの時刻とログを保存します。それでも失敗する場合は、正常と確認できた手順をもとに続けて調べ、設定を手当たり次第に変えて最初からやり直すのは避けましょう。

v2rayNをダウンロードデスクトップ・Androidクライアント