この記事の概要

v2rayNGにVPNアイコンが表示されている、またはv2rayNのコアが起動しているのにWebサイトを開けない場合に役立ちます。まずネットワークとシステム時刻を確認し、次にアプリの通信がクライアントを経由しているかを調べます。その後、DNS、ルーティング、ノードを個別に確認しましょう。設定は一度に一つだけ変更し、失敗したリクエストのログを残してください。設定一式を何度も入れ替えるより、原因を特定しやすくなります。

1.「起動」と「通信成功」を区別する

AndroidのステータスバーにVPNアイコンが表示されるのは、システムがローカルVPNインターフェースを確立したことを示すもので、リモートノードの認証成功を意味するわけではありません。v2rayNでコアが動作中と表示されても、ローカルプロセスが起動したというだけです。Webサイトを開けるかどうかは、アプリの通信がプロキシに取り込まれているか、名前解決、ルーティング、リモート接続、接続先サイトの応答にも左右されます。

まずテスト条件を固定します。同じブラウザーで、同じHTTPSアドレスを完全な形で開いてください。普段アクセスできるサイトも比較対象として一つ用意します。ノードを変えながらDNSやブラウザーの設定も変更すると、復旧しても何が効いたのか分からなくなります。

症状優先して確認する項目次に行うこと
すべてのアプリで失敗するローカルネットワーク、VPNによる通信の取り込み、ノードの出口プロキシを停止し、まず通常のネット接続を確認する
特定のブラウザーだけ失敗するブラウザーのプロキシ拡張機能、安全なDNS、アプリ別プロキシの対象一覧別のブラウザーで同じアドレスを開いて比較する
一部のドメインだけ失敗するDNS、ドメインルール、接続先サイトの制限失敗したリクエストのドメインとアウトバウンドを確認する
ノードのテスト結果は出るが、Webサイトは開けないアプリ通信の実際の経路テスト結果だけで通信経路全体が正常だと判断しない

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

まずv2rayNGの接続を停止するか、v2rayNの「システムプロキシ」で「システムプロキシを解除」を選びます。TUNも有効にしている場合は、一時的に無効にしてください。システムプロキシを解除しても、TUNによる通信の取り込みは自動停止しません。次に、普段アクセスできるWebサイトを開き、Wi-Fiまたはモバイルデータ通信自体が使えることを確認します。

  1. ネット接続を確認

    プロキシを無効にしてブラウザーを開きます。公衆Wi-Fiでログイン画面が表示されたら、先にネットワーク認証を完了してください。それでも接続できない場合は、ノードの設定を変える前にモバイルデータ通信に切り替えて試します。

  2. 時刻を合わせる

    Androidでは通常、「設定」→「システム」→「日付と時刻」で時刻の自動設定を有効にします。Windowsでは「設定」→「時刻と言語」→「日付と時刻」で自動設定を有効にし、時刻を同期してください。端末メーカーによってメニュー名は異なる場合があります。

  3. 接続を再開する

    クライアントに戻り、元のノードを選択して接続し直します。端末の時刻がずれていると、証明書の有効期間の判定に影響したり、VMessの時刻に関係する認証に失敗したりすることがあります。タイムゾーン表示を変えるだけでは、実際の時刻のずれは直りません。

  4. 結果を記録する

    ネットワークの種類、ノード名、失敗したアドレス、リクエスト時刻を記録します。以降のテストでも同じアドレスを使ってください。ネットワークを切り替えたら再接続し、古い接続状態を新しいネットワークの結果と混同しないようにします。

3. ブラウザーの通信がクライアントを経由しているか確認する

v2rayNGでは、まずAndroidのVPN権限を許可する必要があります。システムのVPNインターフェースを使用する別のツールが動作中の場合は、そのツールを停止してからv2rayNGを起動してください。v2rayNでは、システムプロキシとTUNを区別します。システムプロキシが有効なのは、システムのプロキシ設定に従うアプリだけです。ターミナルのプログラムでは、別途プロキシを指定する必要がある場合があります。

v2rayNGのサイドメニューから「設定」→「アプリ別プロキシ」を開き、スイッチ、対象アプリ一覧、モードを確認します。「選択したアプリのみをプロキシ経由にする」が有効なら、ブラウザーが選択されている必要があります。バイパスモードでは、逆に選択したブラウザーがプロキシを経由しません。モードの表示はバージョンによって異なる場合があるため、画面の説明を確認してください。

デスクトップでは、ローカルプロキシを明示してブラウザーのプロキシ設定を迂回し、比較することもできます。以下のポートはテスト用の例で、すべてのバージョンで固定の初期値とは限りません。まずクライアントの現在の待ち受け設定を確認し、コマンド内のポートを実際の値に置き換えてください。

10808
以下のSOCKSテスト用ポート例
10809
以下のHTTPテスト用ポート例
443
HTTPSでよく使われる接続先ポート。ノードの固定ポートではありません
# Windowsターミナル。接続先は問題を再現するWebサイトに置き換えてください
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
curl.exe --proxy http://127.0.0.1:10809 --connect-timeout 10 --max-time 20 -I https://example.com/

socks5hは、接続先のドメイン名の解決をプロキシ側で行う指定です。プロキシを明示したリクエストでHTTPステータスが返り、ブラウザーでは失敗する場合は、ブラウザーやシステムプロキシによる通信の取り込みを優先して確認してください。403や405が返る場合も、HTTP応答を受信したことを示すだけで、ページへのアクセスが許可されたとは限りません。一部のサイトはHEADリクエストに対応していないため、-Iを外して再試行してください。

4. ノードのドメインとWebサイトのDNSを分けて確認する

DNSで混同しやすい対象は、ノードサーバーのアドレスとアクセス先Webサイトのアドレスの2つです。ノードアドレスがドメイン名の場合、アウトバウンド接続を確立する前に、その名前をIPアドレスに解決する必要があります。このとき、まだ確立していないプロキシ経由ですべてのDNSリクエストを送ろうとすると、依存関係が循環することがあります。

別のケースとして、ノードには接続できてもWebサイトのドメイン名を解決できないことがあります。ブラウザーのセキュアDNS、AndroidのプライベートDNS、クライアントのDNSルールによって、名前解決の経路が異なる場合があります。Androidでは通常、「設定」→「ネットワークとインターネット」→「プライベートDNS」で状態を確認できます。メーカーによっては「接続と共有」内にあります。

エラー例:no such host

原因と対処:対象のドメイン名を有効なアドレスに解決できていません。ログに記録されたホスト名を確認し、スペルとDNSへの接続性を調べます。ノードのドメイン名の場合は、まだ確立していないプロキシに名前解決を依存していないか確認してください。

エラー例:connection refused

原因と対処:接続先から接続を拒否されています。接続先が127.0.0.1なら、ローカルの待ち受けポートとコアの状態を確認してください。リモートノードなら、サブスクリプションに記載されたポートとサービスの稼働状態を確認します。

エラー例:i/o timeout

原因と対処:処理が制限時間内に完了しませんでした。このメッセージだけでDNS障害とは判断できません。前後の接続先アドレスと処理段階を確認し、ネットワーク、名前解決、リモート接続をそれぞれ検証してください。

5. ルールの順序と振り分け結果を確認する

一部のWebサイトだけ開けない場合は、実際にどのアウトバウンドを経由したかを確認します。V2Ray/Xrayのルーティングルールは上から順に評価され、先に一致したルールが適用されると、通常は後続のルールで接続先が変わることはありません。広範囲に一致する直接接続ルールが先にあると、本来プロキシを経由するはずのWebサイトが直接接続になる場合があります。

v2rayNGではサイドメニューの「ルーティング設定」を開き、現在のルールとモードを確認します。v2rayNでは「設定」→「ルーティング設定」で使用中のルールセットを確認してください。モード名はバージョンによって異なる場合があります。モードの名称だけでなく、テストしたリクエストのアウトバウンドを確認することが重要です。

  1. 現在のルーティング設定を保存するか、設定中のモードをスクリーンショットに残し、元に戻せるようにします。
  2. 一般的なWebサイトへの通信をプロキシ経由にするテストモードを一時的に使います。LANに必要な直接接続ルールは残してください。
  3. 接続し直してから、元々開けなかったWebサイトにアクセスします。古い接続の再利用が判定に影響しないようにしてください。
  4. アクセスできるようになったらカスタムルールに戻し、ドメイン、IP、アウトバウンドタグ、ルールデータベースを上から順に確認します。

geosite:cnはドメインの集合条件、geoip:privateはプライベートIPアドレスの集合条件で、互いに異なります。ルールデータベースを参照する場合、ファイルが見つからない、または集合名が誤っていると読み込みに失敗することがあります。起動ログを確認してください。また、ドメイン条件とIP条件を含む同じルールが、どちらか一方を満たせば一致すると決めつけないでください。

結論:テストモードで復旧したら、まずルールを見直す

同じノード、同じネットワークで、ルーティングモードを切り替えたときだけ元のWebサイトを開けるなら、まず2つのルールセットで一致する条件の違いを比較してください。この状況でTLSや伝送設定を何度も変更すると、原因の切り分けが難しくなります。

6. 最後にノードとサーバー側の設定を確認する

通信がクライアントに届いており、DNSの結果も得られるのにリモート接続を確立できない場合は、ノード自体を確認します。まずサブスクリプションを更新し、選択中の項目が古い設定に置き換わっていないか確認してください。サブスクリプションの更新は設定を取得できたことを示すだけで、サーバーの稼働やアカウントの利用可能量を保証するものではありません。

比較は2通りで十分です。同じネットワークで別の既知の正常なノードを試し、同じノードを別のネットワークで試します。他のノードは使えるのに特定のノードだけ失敗する場合は、ノード設定、サーバーの状態、アカウントを重点的に確認してください。どのノードも特定のWi-Fiでだけ失敗する場合は、そのネットワークの制限と名前解決の経路を確認します。比較結果は原因を絞る手がかりであり、一度のテストで最終判断できるものではありません。

7. 設定を戻す・よくある質問

原因が分かったら、比較のために一時変更した設定を一つずつ元に戻します。特に全通信をプロキシ経由にするモード、プライベートDNS、ブラウザーのセキュアDNSは、テスト後も変更したままにしないでください。まず元々失敗していたアドレスが開けることを確認し、次に直接接続するサイトとアクセスが必要なLAN内サービスをテストします。別の通信経路を変えて問題が起きていないかも確認してください。

遅延時間は表示されるのに、Webサイトを開けないのはなぜ?

まず、実行したのがポートテストか実際のリクエストテストかを確認してください。ポートに接続できても、認証、DNS、接続先サイトが正常とは限りません。テストリクエストが成功しても、確認できたのはそのテスト経路だけです。次にブラウザーで同じアドレスを開き、通信がプロキシに取り込まれているか確認してください。

ブラウザーは使えるのに、他のアプリでは使えない?

v2rayNGではアプリ別プロキシの対象一覧とモードを確認します。v2rayNでは、そのアプリがシステムプロキシに従うか確認してください。ブラウザーで成功したからといって、すべてのアプリの通信が取り込まれているとは限りません。必要に応じて、手順に沿ってTUNを設定し、個別に動作を確認します。

画面ロック後に接続できず、クライアントを再起動すると直る?

Androidの「設定」→「アプリ」→「v2rayNG」→「バッテリー」で、バックグラウンド動作の制限を確認してください。具体的なメニューは端末によって異なります。必要なバックグラウンド動作を許可してから画面をロックし、再度テストします。ネットワークの切り替え後だけ発生する場合は、再接続の状態も確認してください。

設定を変更しすぎて分からなくなった。再インストールすべき?

まずサブスクリプショングループとカスタムルールをバックアップし、正常に動作する基本設定に戻してから、ノードを一つだけ選んでテストします。再インストールしてもリモートサービスの停止は解決できません。また、原因特定に必要な設定やログを失う可能性があるため、最初に行う対処ではありません。