この記事の要点

「接続済み」と表示されても、ローカルサービスやVPNインターフェースが起動しただけで、通信がノードを経由して目的のサイトに届いているとは限りません。まず通信がクライアントに入っているかを確認し、続いて待ち受けポート、名前解決、外向きの通信経路を調べ、最後にノードの設定とシステム時刻を確認します。一度に変更するのは1項目だけにし、同じURLで再テストすると原因を切り分けやすくなります。

接続状態とサイトの表示結果を切り分ける

v2rayNはデスクトップ向けクライアントで、V2RayやXrayは通信を処理するコアです。v2rayNGはXrayコアを使用するAndroidクライアントです。画面に「実行中」と表示されること、VPNの鍵アイコンが表示されること、ノードに遅延時間が表示されることだけでは、ブラウザーで正常にアクセスできるとは判断できません。ポートへの接続テスト、実際のリクエスト、ダウンロード速度の測定では、確認できる段階がそれぞれ異なります。

まずクライアントを終了し、通常利用しているサイトに端末からアクセスできるか確認します。公衆Wi-Fiでは、先にネットワーク認証が必要な場合があります。通常のネットワーク自体が切れているなら、ノードを変更しても解決しません。アクセスできないサイト、発生時刻、ネットワークの種類、すべてのアプリで失敗するのかブラウザーだけなのかを記録しましょう。

1. システムプロキシが通信を取り込んでいるか

Windowsでは、v2rayNを起動しただけでシステムプロキシが自動設定されるとは限りません。システムプロキシを使うのは、その設定に従うアプリだけであり、すべての通信を切り替えるものでもありません。ターミナルのプログラムは環境変数を参照する場合があり、ブラウザーは独自のプロキシ設定を使うことがあります。ゲームなど、システムプロキシを無視するアプリもあります。TUNモードは別の通信取り込み方式です。トラブルシューティング中は複数のモードを同時に切り替えないでください。

  1. 使用するノードを確認する

    v2rayNのノード一覧で使いたいノードを選び、右クリックして「アクティブサーバーに設定」を選択します。行を選択しただけでは、アクティブノードが切り替わっていない場合があります。メイン画面に表示されるアクティブサーバーも確認してください。

  2. システムプロキシを設定する

    タスクバーの通知領域にあるv2rayNアイコンを右クリックし、「システムプロキシ」→「システムプロキシを自動設定」を選択します。デスクトップ版によって項目の場所が異なる場合があるため、現在の画面にある同名の項目を確認してください。

  3. システム側の設定を確認する

    Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」で、プロキシサーバーのアドレスとポートがクライアントの現在の待ち受け設定と一致しているか確認します。自動構成スクリプトを使用している場合は、その状態を確認し、2つの方式を混同しないようにしましょう。

  4. ブラウザー独自のプロキシ設定を除外する

    ブラウザーのプロキシ拡張機能を一時的に無効にして、ブラウザーを終了してから再起動します。プロキシを明示したコマンドではアクセスできるのにブラウザーで失敗する場合は、ノードを変える前にブラウザーの設定を確認してください。

2. ローカルポートが実際に待ち受けているか

プロキシの接続先は、リモートノードのサーバーポートではなく、ローカルで待ち受けているポートを指定します。以下の数値は確認用の例であり、これらに統一する必要はありません。v2rayNの「設定」→「パラメーター設定」でローカルの待ち受け設定を確認できます。バージョンによって項目の分類が異なるため、起動ログもあわせて確認してください。旧設定ではSOCKSとHTTPのポートが別々の場合があり、新しい設定では混合ポートを使うことがあります。

127.0.0.1
端末内からの接続に使うループバックアドレス
10808
以下で使うローカルSOCKSポートの例
443
HTTPSでよく使われる接続先ポート。ローカルプロキシのポートではありません

Windows PowerShellで次のコマンドを実行し、まずローカルの待ち受け状態を確認してから、SOCKSを明示したHTTPSリクエストを送ります。実際のポートが異なる場合は、コマンド内の10808を置き換えてください。ここではcurl.exeを使用します。PowerShell環境によってはcurlが別のコマンドとして解釈されるためです。

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  Select-Object LocalAddress, LocalPort, OwningProcess

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

待ち受けの記録が見つからない場合は、まずコアの起動に失敗していないか確認します。記録があっても、別のプログラムがポートを使用していないか、プロセスを確認してください。socks5hでは接続先のドメイン名をプロキシ側で処理するため、これだけで端末のDNSが正常だとは判断できません。HTTPステータスコードが返れば、何らかのHTTP応答元に到達していますが、目的のサイトに接続できたかは、ステータスコード、証明書、ログをあわせて確認する必要があります。

判断のポイント:入口を固定してからリモート側を調べる

プロキシを明示したリクエストが成功し、ブラウザーだけ失敗する場合は、ブラウザーまたはシステムプロキシの設定を見直します。ローカルポートに接続できない場合は、まず待ち受けを修正してください。リクエストがコアに届いていると確認できてから、ノードを切り替えて比較しましょう。

3. 2種類のDNS名前解決を切り分ける

名前解決が必要な対象は、少なくともノードのサーバードメインと、ブラウザーでアクセスする接続先ドメインの2種類です。前者の名前解決に失敗すると、コアがノードに接続できないことがあります。後者に失敗すると、ノードのテストは正常なのに特定のサイトだけ開けない場合があります。ブラウザーのセキュアDNS、システムDNS、コアのDNSが、必ずしも同じ経路を通るとは限りません。

確認対象確認方法結果の見方
接続先ドメインのローカル名前解決Resolve-DnsName example.comを実行するレコードが返っても、今回のシステムDNSによる名前解決が成功したことを示すだけで、ノードへの接続成功を証明するものではありません。
プロキシ経由の接続先ドメインの名前解決socks5://とsocks5h://を使ったリクエストを比較する前者は接続先ドメインをローカルで名前解決し、後者はドメイン名の処理をプロキシ側に委ねます。結果の違いから、名前解決経路の問題を特定できる場合があります。
ノードのドメイン名解決ログでサーバードメインとlookupエラーを探すブラウザーのキャッシュを消すだけでなく、ノードのアドレス、初期接続時の名前解決、現在のネットワークのDNSを確認します。
キャッシュの結果名前解決の設定を修正してからipconfig /flushdnsを実行するWindowsのキャッシュを消去して再度リクエストします。ブラウザーやコアに独自のキャッシュが残っている場合もあります。

ノードのドメイン名を、検索して見つけたIPアドレスに安易に置き換えないでください。TLSやREALITYでは、サーバーアドレス、SNI、接続先の名前に設定上の関係があります。むやみに変更すると、DNSの問題がハンドシェイクの失敗に変わるおそれがあります。まず元のノード設定を保存し、サーバーから提供されたパラメーターと照合してください。

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

4. ルーティングルールが適切なアウトバウンドを選んでいるか

システムプロキシはリクエストをクライアントに取り込むかどうかを決め、ルーティングルールは取り込んだ後にどのアウトバウンドへ送るかを決めます。「グローバルプロキシ」はアプリケーション層でよく使われる呼び方ですが、クライアントによって意味が異なる場合があります。トラブルシューティングの記録には、実際に使用しているルーティングモード、ルール、アウトバウンドのタグを明記してください。

v2rayNのルーティング選択画面で、テスト対象をプロキシのアウトバウンドへ送るルールモードを一時的に選び、同じURLに再度アクセスします。アクセスできるようになった場合は、カスタムドメインルール、直接接続ルール、ブロックルールを重点的に確認してください。テスト後は元のモードに戻します。ローカルの通信まですべてリモートへ送る必要はありません。

5. エラーメッセージからノードを確認する

接続の入口、DNS、ルーティングを確認した後で、ノードのアドレス、リモートポート、ユーザーID、トランスポート方式、セキュリティ設定を確認します。サブスクリプションの更新に成功しても、登録された各ノードがオンラインとは限りません。まず同じサブスクリプション内の別ノードで再テストし、次にネットワークを変えて元のノードを試すと、ノード側の障害と現在のネットワークによる制限を切り分けやすくなります。

エラー:connection refused

原因と対処:接続先からTCP接続を拒否されています。エラーに表示されたアドレスがローカルかリモートかを確認し、ローカルなら待ち受け、リモートならノードのポートとサービスの稼働状態を調べます。

エラー:i/o timeout

原因と対処:ネットワークの読み書きがタイムアウトしています。ログに記録された接続先と処理段階を確認し、別のノードやネットワークと比較してください。すぐにDNS障害と決めつけないようにしましょう。

エラー:no such host

原因と対処:該当するドメイン名を解決できません。ノードのドメインと接続先ドメインのどちらで失敗しているかを特定し、入力ミス、リゾルバーへの到達性、初期接続時の名前解決設定を確認します。

エラー:tls: handshake failure

原因と対処:TLSハンドシェイクが中断されています。原因は一つとは限らないため、ポート、SNI、トランスポート設定、サーバー側の設定を確認し、発生時刻の前後を含むログを保存してから判断してください。

VLESS、VMess、Trojanの設定値は互換性がありません。VLESSとREALITYを組み合わせる場合は、公開鍵、short ID、サーバー名、サーバー側で要求されるフロー制御を確認します。XTLS Visionを使う場合は、flowをサーバー側の設定に合わせてください。プロトコル名だけで、現在のコアやノード設定が使えるとは判断できません。

6. 時刻とAndroidの通信取り込みを確認する

TLS証明書の有効期間の検証にはシステム時刻が使われ、VMessの認証にも時刻が関係します。パソコンやスマートフォンの日付が大きくずれていると、ネットワークやポートに問題がなくても、認証エラーや証明書エラーが発生することがあります。Windowsでは「設定」→「時刻と言語」→「日付と時刻」を開き、自動設定を有効にして「今すぐ同期」を実行します。Androidではシステム設定で「日付と時刻」を検索し、自動設定を有効にして実際の日付を確認してください。

表示されるタイムゾーンが異なるだけで、実際の時刻が間違っているとは限りません。日付と現在時刻を確認し、時刻のずれを隠すためにタイムゾーンだけを変更しないでください。証明書検証を無効にして問題を回避するのも避けましょう。時刻、サーバー名、証明書チェーンの異常が見えなくなるおそれがあります。

  1. VPNの許可を確認:v2rayNGの起動後、システムのVPN接続許可を完了してください。別のVPNサービスが動作中の場合は、停止してからテストします。
  2. 動作モードを確認:ローカルプロキシモードはVPNによる通信取り込みとは異なります。一般のアプリから直接プロキシを利用するには、VPNモードが有効になっているか確認してください。
  3. 対象アプリを確認:v2rayNGの「設定」でアプリごとのプロキシ設定を確認し、ブラウザーが対象外になっていないか確認します。バイパス設定が有効な場合、リストの意味が逆になることがあります。
  4. バックグラウンド制限を確認:画面表示中は正常でも、画面ロック後しばらくして接続が切れる場合は、システムのアプリ設定でv2rayNGのバッテリー使用とバックグラウンド実行の権限を確認し、再度ロック状態でテストします。
  5. ネットワークを分けてテスト:Wi-Fiとモバイルデータを別々に試します。切り替え後、必要に応じて接続を停止して再起動し、以前の接続が復旧していないだけか確認してください。

よくある質問と確認記録

遅延が数十ミリ秒なのに、Webサイトが開かないのはなぜですか?

まずテストの種類を確認してください。TCPの遅延テストで確認できるのは接続の一部だけです。実際のリクエストテストに成功しても、そのテスト先がその時点で使えたことを示すにすぎません。この記事のプロキシを明示するコマンドで同じサイトにアクセスし、ブラウザーとルーティングの経路を確認してください。

スマートフォンでは使えるのに、同じノードがパソコンでは使えないのはなぜですか?

まず2台を同じネットワークに接続し、アクティブノードの設定を比較してください。パソコンではシステムプロキシとローカルの待ち受けを優先して確認します。コマンドからはアクセスできるのにブラウザーだけ失敗する場合は、ブラウザーの拡張機能と独自のプロキシ設定を確認してください。

特定のサイトだけ開けない場合、クライアントを再インストールする必要はありますか?

まず別のノードで同じサイトにアクセスし、そのドメインに適用されるルーティングルールとDNSの結果を確認します。正常なHTTPエラー応答が返る場合は、クライアントのインストール破損ではなく、接続先サイトのアクセス制御が原因の可能性もあります。

再起動後は一時的に直ります。次に何を確認すればよいですか?

再発した時刻を記録し、スリープ、ネットワーク切り替え、バックグラウンドサービスの停止と関連していないか確認します。失敗したときは、すぐに再起動せず、まず待ち受けポートとコアのログを確認してください。再起動すると、原因究明に役立つ発生時の情報が失われることがあります。

一通り確認した後は、何度も再インストールするより、再現できる記録を残す方が効果的です。DNS、ルーティング、コア、ノードを一度に変更せず、変更は毎回1項目に絞ってください。同じテスト先と待ち時間を使い、変更前後の結果を記録します。

クライアントの接続と基本設定

クライアントの入手元を確認し直す場合は、ダウンロードページでプラットフォームを選択してください。インポートやプロキシ設定をやり直す場合は、まずガイドに沿って基本接続を設定し、その後にカスタムルーティングを戻します。