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

V2Rayのノード接続がタイムアウトする場合は、端末の時刻、サブスクリプション、コアのログ、通信方式とTLS、サーバーの状態を順に確認します。v2rayN・v2rayNGでの確認場所も解説。

この記事のポイント

ノードのタイムアウトは、処理のどこかが時間内に完了しなかったことを示すだけで、サーバーが停止しているとは限りません。v2rayNやv2rayNGで速度測定がタイムアウトする、接続できない、Webページが開かない場合に役立つ内容です。「障害の範囲を確認 → 時刻とサブスクリプションを確認 → ログを読む → 通信方式とTLSを確認 → サーバーを確認」の順に進め、1回に変更する条件は1つだけにします。最後に、管理者へ共有できるトラブルの記録をまとめましょう。

1. まず確認:ノードのタイムアウトか、アプリがプロキシを経由していないのか

最初に、どの段階で失敗しているかを確認してから対処を決めます。リスト上の遅延テスト、コアからサーバーへの接続、ブラウザーでのWebサイト表示は、それぞれ別の動作です。テスト先にアクセスできないだけで、正常なノードがタイムアウトと表示される場合もあります。一方、TCPポートへの接続が確立しても、認証、TLSハンドシェイク、プロキシ転送まで正常とは限りません。

確認できた症状まず確認する項目この時点では判断できないこと
遅延テストだけタイムアウトするが、Webページは開くテスト先URL、テスト方法、テスト先へのルートこれだけでノードが使えないとは判断できない
すべてのノードで同時に失敗する端末のネットワーク、時刻、コアの起動状態すべてのサーバーが同時に故障したとは限らない
1つのノードだけ失敗するそのノードの設定、サーバー側ポート、アカウントの状態1回の失敗だけで恒久的に使えないとは判断できない
ブラウザーでは使えるが、ターミナルでは使えないターミナルのプロキシ環境変数または明示的なプロキシ設定通常、ノードのタイムアウトが原因とは限らない

不要な要因を減らすため、再現条件を最小限にします。起動するクライアントは1つだけにし、ノードを1つと実際にアクセスできるテスト先URLを選んで、テスト時刻を記録します。ルーティング、DNS、TUN、通信方式を同時に切り替えるのは避けてください。v2rayNGはAndroidのVPNサービスを使って通信を中継するため、接続スイッチがオンになっていることと、ほかのVPNサービスが接続を使用していないことも確認します。

2. 端末の時刻を確認してからサブスクリプションを更新

認証や証明書のエラーを調べる前に、システム時刻を正確に合わせます。VMessの認証は時刻に依存するため、時刻が大きくずれていると接続に失敗することがあります。TLS証明書の有効期間の判定にも端末の時刻が使われます。VLESSにVMessの時刻認証の説明をそのまま当てはめるべきではありませんが、TLSを使う場合は正確な時刻が必要です。タイムゾーン表示を変えるだけでは、システム時刻のずれは直りません。

  1. システム時刻を同期する

    Windowsでは「設定」→「時刻と言語」→「日付と時刻」を開き、自動時刻設定をオンにして「今すぐ同期」をクリックします。Androidではシステム設定で「日付と時刻」を検索し、自動設定をオンにします。メニューの場所は端末によって異なります。

  2. 現在のサブスクリプションを更新する

    v2rayNでは「サブスクリプショングループ」メニューから現在のサブスクリプションを更新します。まずは「現在のサブスクリプションを更新(プロキシを経由しない)」を試せます。v2rayNGではメイン画面右上のメニューから「現在のグループのサブスクリプションを更新」を選びます。メニュー名はバージョンによって多少異なるため、ボタンを押したかどうかだけでなく、更新結果を確認してください。

  3. ノードを選び直す

    更新後、対象のノードを選び直して接続を開始し、サーバーアドレスやポートが変わっていないか確認します。サブスクリプションの更新成功は、ノードへの接続成功を意味しません。サブスクリプションの接続先とノードサーバーでは、アドレスもネットワーク経路も異なる場合があります。

  4. 失敗を1回だけ記録する

    現在時刻を記録し、1回アクセスした直後にログを確認します。その操作の前後にある記録だけを残し、一括速度測定の大量のエラーで本当の接続問題が埋もれないようにします。

3. コアのログを確認し、意味のある最初のエラーを探す

最後のtimeoutだけを探すのではなく、端末内の起動エラーからリモート接続エラーまでログを確認します。v2rayNでは、まずメイン画面下部のログまたは情報欄を確認します。さらに詳しく調べるには、「設定」→「パラメーター設定」を開き、ログレベルの項目を探します。v2rayNGではメイン画面右上のメニューから「ログ」を開きます。メニューの場所やログレベルの名称はバージョンによって異なるため、クライアントのバージョンとログに記録されたコアのバージョンも控えてください。

ログレベルを一時的に上げたら、接続を再起動して1回だけ再現します。デバッグログにはアクセス先のドメインやサーバーアドレスが含まれる場合があるため、確認後は通常のレベルに戻してください。以下はよくあるエラーの例です。コアによっては、接続IDや接続先、詳細な状況が追加されます。

エラー:address already in use

原因:端末の待ち受けアドレスまたはポートがすでに使用されており、コアが起動できていない可能性があります。

対処:重複起動しているクライアントを終了し、ポートを使用しているプロセスを確認します。ローカルポートを変更した場合は、アプリに設定したプロキシポートも合わせて変更してください。

エラー:no such host

原因:ドメイン名の名前解決に失敗しています。ノードのドメイン名の場合も、アクセス先の場合もあります。

対処:エラーに表示されたドメイン名を確認し、スペルと実際に使用しているDNS経路を調べます。ノードのドメイン名を解決できない場合は、接続を確立する前の名前解決の問題を先に解消してください。

エラー:i/o timeout

原因:接続または読み書きがタイムアウトしています。この一文だけでは、ネットワークのパケットロス、接続先での遮断、ハンドシェイク中の無応答を区別できません。

対処:前後に記録された接続先やハンドシェイクの内容から、失敗した段階を特定します。そのうえで、リモートポート、通信方式、サーバーの状態を個別に確認してください。

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

原因:端末の時刻が正しくないか、サーバー証明書が実際に有効期間外です。

対処:まず端末の時刻を同期します。時刻が正しいのにエラーが続く場合は、管理者に証明書の有効期間と、リバースプロキシが実際に読み込んでいる証明書を確認してもらってください。

ポイント:端末側の起動エラーを直してから、リモート側を調べる

ログに待ち受けポートの競合が表示され、コアの起動成功を示す記録がない場合は、まず競合を解消してください。この段階でサーバーアドレス、TLS、サブスクリプションの設定を何度変更しても、端末側の待ち受けエラーは直りません。

4. 端末側の待ち受けとリモートポートを分けて確認する

ローカルプロキシのポートとサーバー側のポートは、別々に考える必要があります。アプリはまず端末上のプロキシに接続し、次にコアがリモートサーバーへ接続します。以下の数字は2つの接続を説明するための例で、すべての環境の初期値ではありません。特にv2rayNのHTTP、SOCKS、混合待ち受け方式は、現在のパラメーター設定を確認してください。

127.0.0.1
端末のループバックアドレス。リモートノードのアドレスではありません
10808
以下の例のローカルSOCKSポートは、設定に合わせて変更してください
443
TLSでよく使われるリモートポート。実際の値はサブスクリプションを確認してください

WindowsではPowerShellの次の対話形式のコマンドで、リモートTCPポートをテストできます。ノードの編集画面に表示されるサーバーアドレスとリモートポートを入力してください。サブスクリプションURLやローカルプロキシのポートではありません。TcpTestSucceededがTrueならTCP接続が確立したことを示すだけで、プロキシプロトコルの認証成功までは確認できません。UDPを使う通信方式も、このテストだけでは完全に判定できません。

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

ターミナルの通信が本当にローカルSOCKS経由か確認するには、端末が127.0.0.1:10808で待ち受けていることを確認してから、次のコマンドを使います。テスト先URLは自分で入力してください。socks5hは接続先ドメインの名前解決をプロキシ側に任せる指定で、端末側のDNSが正常だと証明するものではありません。コマンドの15秒は今回のテストの上限であり、ノードの性能基準ではありません。

$testUrl = Read-Host "テストに使う完全なHTTPS URLを入力"
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 15 --max-time 30 -I $testUrl

5. 通信方式、TLS、REALITYの設定を1つずつ確認する

設定は一式で照合し、サーバーアドレスとUUIDだけを比べないでください。サブスクリプションには通常、プロトコル、通信方式、セキュリティ層の情報が含まれています。手動編集や別のコアへの移行後は、1つの項目が非互換なだけでもハンドシェイクに失敗することがあります。v2rayNGはXrayコア、v2flyNGはv2flyコアを使用するため、両者が同じプロトコル拡張や設定項目にすべて対応しているとは限りません。

設定項目確認する内容間違えやすい点
プロトコルと認証VMessまたはVLESS、UUID、サーバー側で許可されている設定プロトコル名だけを変更して、ほかの項目をそのまま使わない
WebSocket通信方式、パス、Host、リバースプロキシの転送先パスでは大文字・小文字とスラッシュも確認。Hostはサーバーアドレスとは異なる
gRPCserviceName、TLS、リバースプロキシのHTTP/2対応serviceNameはWebSocketのパスを指定する項目ではない
TLSserverName/SNI、証明書のドメイン名、有効期間、ALPNの要件IPアドレスで接続する場合も、証明書名が想定するドメイン名と一致している必要がある
REALITYとVisionサーバーから提供された公開鍵、shortId、serverName、フィンガープリント、flowVisionを使う設定では、サーバーの指定に従ってflowを設定する。推測で入力しない

変更後は設定を再読み込みし、ログが新しい接続のものか確認します。v2rayNでは現在のサービスを停止してから再起動します。v2rayNGでは接続スイッチをオフにしてから、もう一度オンにします。サブスクリプションの更新で手動変更が上書きされる場合は、変更内容を記録し、更新のたびに修正を繰り返すのではなく、提供元に設定の修正を依頼してください。

6. 最後にサーバーの状態とネットワーク経路を確認する

端末側の起動、サブスクリプションの設定、ハンドシェイクの条件を確認してからのほうが、サーバー側の情報を正しく判断できます。サーバーの管理権限がない場合は、発生時刻、ノードの識別情報、ネットワークの種類、個人情報を伏せたログを提供元に送り、待ち受けサービス、アカウントの有効期限、接続入口に変更がないか確認してください。サブスクリプションURL全体が写ったエラー画面を公開しないでください。

ポイント:ネットワークを変えて比較し、原因を絞る

同じ設定が家庭のネットワークでは失敗し、モバイルネットワークでは成功する場合は、まずネットワーク経路を比較します。同じネットワークでほかのノードは正常なのに対象ノードだけ失敗する場合は、その接続入口を優先して調べてください。どちらの比較も、クライアントを何度も再インストールするより原因の特定に役立ちます。

7. まだタイムアウトする場合:以下の質問で情報を補う

遅延テストは常にタイムアウトするのにWebページは開く場合、ノードを変えるべきですか?

まずは変更しないでください。速度測定に使うテスト先URLと測定方法を確認し、同じURLに実際にアクセスします。テスト先だけ別のルーティングが適用されている、リクエストが拒否されている、一時的にアクセスできないといった理由で、テスト結果と普段の閲覧状況が異なる場合があります。

v2rayNGでは接続済みと表示されるのに、Webページが開かないのはなぜですか?

接続済みの表示は通常、端末上のVPNサービスが確立したことを示すだけで、リモートへのすべてのリクエストが成功したとは限りません。右上のメニューから「ログ」を開き、1回リクエストを送って、リモートへの接続やハンドシェイクのエラーが出ていないか確認します。アプリごとのプロキシ設定で対象アプリが除外されていないかも確認してください。

パソコンでは使えるのに、スマートフォンでは同じノードがタイムアウトします。どの設定を比較すればよいですか?

まず、両方で同じ最新のサブスクリプションを使い、同じネットワークに接続していることを確認します。そのうえで、通信方式、SNI、パスまたはserviceName、REALITYの設定、flowを1つずつ比較してください。両方のコアのバージョンも記録します。端末側の受け入れ設定や通信の中継方法は異なるため、デスクトップの設定を丸ごとコピーしないでください。

タイムアウトまでの時間を延ばせば解決しますか?

応答が遅いのか、失敗が続いているのかを見分ける助けにはなりますが、誤ったポート、認証エラー、証明書の問題は解決できません。元の設定を残し、上限時間を固定して再現してください。ログにハンドシェイクエラーが続けて記録される場合は、待ち時間を延ばし続けるのではなく、該当する設定を修正します。

問い合わせ時は、再現できる手順をまとめると役立ちます。クライアントとコアのバージョン、発生時刻とタイムゾーン、Wi-Fiまたはモバイルネットワークの別、すべてのノードか特定のノードか、リモートポートのテスト結果、失敗の直前・直後のログを記載してください。共有前にUUID、サブスクリプショントークンなどの認証情報を隠します。サーバーアドレスを伝える必要がある場合は、信頼できる非公開の方法で送ってください。

v2rayN をダウンロード