v2rayNが起動し、ノードを選択しているのにブラウザーがタイムアウトする場合に役立つチェックリストです。まずプロキシを明示したリクエストでローカルの接続口とノードまでの経路を確認し、次にシステムプロキシ、DNS、ルーティングルール、TLSに関わる時刻を確認します。AndroidではVPNの許可とアプリごとの振り分けも確認してください。一度に変更する項目は一つだけにし、テスト結果を記録しておきましょう。ノード、ポート、DNSを同時に変更すると原因を特定しにくくなります。
1. 「起動済み」と「通信可能」を切り分ける
クライアントの実行アイコンが表示され、コアのログが出力されていても、確認できるのは通常、ローカルのプロセスが起動したことだけです。遅延テストに成功しても、目的のWebサイトにアクセスできるとは限りません。TCPの確認、実際のHTTPリクエスト、ブラウザーでのアクセスでは、それぞれ異なる段階を確認しています。V2Ray/Xrayはコア、v2rayNは設定・管理用の画面です。ブラウザーのリクエストが正しいローカル接続口に送られていることも確認が必要です。
現在のノード、ルーティングモード、システムプロキシの状態、ローカルの待ち受けポートを記録し、普段アクセスできるHTTPSページを一つ選んでテストします。以下の3つのポート番号は役割を説明するための例で、すべてのバージョンの初期値を示すものではありません。「設定」→「パラメーター設定」に表示される実際のポートと、起動ログの待ち受けアドレスを確認してください。
- すべてのWebサイトにアクセスできない:まずローカルの待ち受け、システムプロキシ、ノードへの接続を確認します。
- 一部のドメインだけアクセスできない:ルーティングルール、DNSの結果、接続先Webサイトの状態を確認します。
- ブラウザーでは使えるのに、特定のアプリでは使えない:プロトコルをすぐに変更せず、そのアプリがシステムプロキシに対応しているか確認します。
- クライアントを終了してもネットにつながらない:システムにローカルポートを指す手動プロキシ設定が残っていないか確認します。
2. プロキシを明示したリクエストで問題の箇所を特定する
プロキシを明示すれば、「ブラウザーがシステムプロキシを使っているか」という疑問を避けられます。以下のコマンドはWindows PowerShellで実行してください。同名のコマンドエイリアスとの混同を避けるため、curl.exeを使います。例ではhttps://example.com/にリクエストしています。アクセスできることが確認済みのページに置き換えてもかまいません。10秒は接続待ち時間の上限、20秒はリクエスト全体の制限時間であり、速度の測定値ではありません。
# まずこの記事の例に使うポートが待ち受け中か確認
Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue
# 10808がSOCKSまたは混合接続口だと確認できた場合のみ実行
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -v -o NUL https://example.com/
# 10809がHTTPまたは混合接続口だと確認できた場合のみ実行
curl.exe --proxy http://127.0.0.1:10809 --connect-timeout 10 --max-time 20 -v -o NUL https://example.com/
現在のバージョンで混合ポートを一つだけ使っている場合は、両方のコマンドを実際のポート番号に変更してください。例をそのまま使うために、待ち受けポートを追加で有効にする必要はありません。socks5hは接続先のドメイン名をプロキシ側に渡しますが、コアがルーティングポリシーに従って名前解決する場合もあります。成功・失敗のどちらでもログと照らし合わせて判断してください。
| テスト結果 | 意味 | 次の確認項目 |
|---|---|---|
| ローカル接続がすぐに拒否される | ローカルの接続口が待ち受けていない、またはポート番号が間違っている | コアの起動ログとポートの使用状況を確認する |
| プロキシ経由のリクエストに接続先からHTTP応答が返る | 今回のリクエストはプロキシ経由で通信できている | ブラウザーとシステムプロキシを確認する |
| CONNECT 200の後も失敗する | HTTPプロキシのトンネルが確立しただけ | TLSハンドシェイクと、その後の応答を確認する |
| ローカル接続は成功するが、その後タイムアウトする | ノード、名前解決、または外向きルーティングに問題がある可能性がある | 同じ時刻のコアログと照らし合わせる |
結論:プロキシを明示したリクエストが成功したら、まずプロキシの接続口を確認
同じ接続先がプロキシを明示したリクエストでは表示できるのに、ブラウザーでは失敗する場合は、まずシステムプロキシとブラウザー独自のプロキシ設定を見直してください。この場合、VMess、VLESS、伝送方式の変更は通常、最初に試す対処ではありません。
3. システムプロキシとローカルの待ち受けポートを合わせる
Windowsのシステムプロキシが適用されるのは、その設定に従うアプリに限られ、すべての通信が自動的に切り替わるわけではありません。ブラウザーの拡張機能、アプリ独自のプロキシ設定、ターミナルの環境変数がシステム設定より優先される場合もあります。確認の際は、プロキシ設定を書き換える他のアプリを終了し、TUNを一時的に無効にして、通信を制御する方法を一つに絞ってください。現在のネットワークで別のVPNを使って社内ネットワークにアクセスしている場合は、先に作業内容を保存し、影響範囲を確認してください。
-
待ち受けポートを確認
v2rayNの「設定」→「パラメーター設定」でローカルの待ち受けポートを確認します。バージョンによってSOCKS、HTTP、混合ポートなどの表示が異なります。変更後はコアを再起動し、起動ログにエラーがないことを確認してください。
-
プロキシを設定
v2rayNのメイン画面にある「システムプロキシ」メニューで「システムプロキシを自動設定」を選択します。「システムプロキシをクリア」するとブラウザーの通信もプロキシ経由になる、という意味ではありません。
-
Windowsの設定を確認
Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」→「手動プロキシ セットアップ」を開きます。アドレスは通常
127.0.0.1で、ポートはHTTPまたは混合接続口に対応している必要があります。SOCKS専用の接続口は指定しないでください。 -
他の設定による上書きを確認
ブラウザーのプロキシ拡張機能を一時的に無効にします。ブラウザー独自のネットワーク設定がある場合は、システムプロキシを使う設定にしてください。テストページを閉じてから開き直し、プロキシを明示したコマンドの結果と比べます。
アプリがSOCKS5に対応している場合は、そのアプリに実際のSOCKSポートを入力できます。Windowsの手動プロキシにノードのサーバーアドレスやリモートポートを入力しないでください。ここで必要なのはローカルの接続口であり、サブスクリプションに記載されたサーバー情報ではありません。netsh winhttp show proxyで確認できるのはWinHTTPのプロキシ設定です。この結果だけで、ブラウザー向けのシステムプロキシが正しいとは判断できません。
4. システムのDNSとコアのDNSを分けて確認
DNSの問題は、少なくとも2種類に分けて考える必要があります。ノードのサーバー名を解決できない場合と、接続先Webサイトのドメイン名を解決できない場合です。前者ではコアがノードに接続できず、後者では一部のWebサイトだけに影響することがあります。ブラウザーのセキュアDNS、WindowsのDNS、コアのDNSは同じ経路を使うとは限りません。そのため、nslookupが一度成功しても、プロキシ経由の名前解決が成功している証拠にはなりません。
# システムのリゾルバーがテスト用ドメインに返す結果を確認
nslookup example.com
# Windows:システムDNSを変更した後にキャッシュを消去
ipconfig /flushdns
# 上記のsocks5hテストとの比較用:このコマンドは接続先ドメインをローカルで先に解決
curl.exe --proxy socks5://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -v -o NUL https://example.com/
- ローカルでの名前解決は失敗し、ドメイン名をプロキシに渡すと成功する:まずシステムDNSのアドレスとネットワーク接続を確認してください。ノードをすぐにリセットする必要はありません。
- ログにノードのドメイン名解決エラーがある:ノードのアドレスに余分な空白がないか確認し、ノード名の解決に使うDNSを確認してください。まだ確立していないプロキシが必要なDNSを指定すると、起動時に依存関係が循環することがあります。
- ブラウザーだけで失敗する:ブラウザー独自のセキュアDNSを一時的に無効にしてシステムの名前解決を使い、再テストします。テスト後、設定を戻すか判断してください。
- 変更しても結果が変わらない:システムのキャッシュを消去し、ブラウザーとコアを再起動してください。システムのキャッシュを消去しても、ブラウザーやコアが個別に保持しているキャッシュは消えません。
5. ルーティングルールで通信の出口が誤っていないか確認
v2rayNの「システムプロキシ」はアプリからローカルプロキシに通信を渡す方法を決め、「ルーティング」はコアが受け取ったリクエストの出口を決めます。別々の設定です。ブラウザーがローカルポートを使っていても、接続先のドメインが直結ルールやブロックルールに一致することがあります。
現在のルーティング設定を記録し、メイン画面の「ルーティング」メニューで、対象のリクエストをプロキシ経由にするテスト用の設定を一時的に選びます。設定名はバージョンによって異なるため、名前だけで判断せず、ルールの内容を確認してください。必要なローカルネットワークへのアクセス設定は残し、テスト後は元の設定に戻します。
| 症状 | 主な確認項目 | 確認方法 |
|---|---|---|
| テスト用ルーティングに切り替えると復旧する | ドメインルール、IPルール、ルールの順序 | 元の設定に戻し、疑わしいカスタムルールを一つずつ無効にする |
| ログにdirectと表示される | 対象が直結ルールに一致していないか | そのログが今回のテストリクエストに対応しているか確認 |
| ログにblockと表示される | 広告ブロックまたはカスタムブロックルール | 誤判定を確認できたドメインだけルールを調整 |
| プロキシ経由でもタイムアウトする | ノードへの経路、サーバー、プロトコル設定 | ルーティングは変更せず、動作確認済みの別ノードと比較 |
ログの詳細度が足りない場合は、一時的にログの詳細度を上げて一度だけ再現してください。確認後は元に戻します。ログを共有する際は、サブスクリプションURL、UUID、トークン、サーバーの機密情報を隠してください。VMess、VLESSの認証情報、伝送方式、TLSのサーバー名、REALITYに必要な設定はサーバー側の設定と一致している必要があります。プロトコルを適当に切り替えても解決しません。
6. エラーメッセージに沿ってポート、時刻、TLSを確認
エラーが出たら発生時刻を記録し、前後数行のログを残してください。以下は一般的なシステムやネットワークのエラー表現です。実際のログには接続先アドレスなどの情報も含まれます。最後の「失敗」という表示だけを見てDNSの問題と決めつけないでください。
エラー:Address already in use
原因:使用しようとしたローカルアドレスまたはポートがすでに使われています。対処:使用中のプロセスを確認し、クライアントが重複起動していれば終了するか、待ち受けポートを変更してシステムプロキシの設定も合わせて更新します。正体のわからないシステムプロセスは終了しないでください。
エラー:Connection refused
原因:接続先のポートが接続を拒否しています。ローカル側でもリモート側でも起こり得ます。対処:まずエラーに記載されたアドレスを確認します。127.0.0.1なら待ち受け状態を確認し、ノードのアドレスならリモートポートとサーバーの状態を確認してください。
エラー:no such host
原因:該当するドメイン名を解決できません。対処:エラーに表示されたドメインがノードと接続先Webサイトのどちらなのかを確認し、それぞれノードのアドレス解決とコアの接続先ドメイン解決を調べます。DNS設定を一度にすべて変更しないでください。
エラー:x509: certificate has expired or is not yet valid
原因:システム時刻が正しくないか、サーバー証明書の有効期間が切れている、またはまだ始まっていません。対処:まずシステム時刻を同期します。時刻が正しくてもエラーが続く場合は、証明書の対応をサービス提供元に依頼してください。証明書の検証は無効にしないでください。
Windowsでは「設定」→「時刻と言語」→「日付と時刻」で「時刻を自動的に設定する」をオンにし、「今すぐ同期」をクリックできます。日付、年、タイムゾーンも確認してください。タイムゾーンの表示が誤っていても、内部時計まで誤っているとは限りませんが、時刻を手動で変更すると実際のずれが生じることがあります。正確な時刻はTLS証明書の検証に影響するほか、時刻認証を使う認証処理にも重要です。
- 証明書の名前が一致しない:TLSのサーバー名がサーバー側の指定と一致しているか確認してください。ノードのIPアドレスに勝手に変更しないでください。
- 特定のノードだけ繰り返しタイムアウトする:サブスクリプションの有効期限や通信量の上限、サーバーの稼働状況を確認してください。
- すべてのノードで同時に失敗する:ローカルの接続口、基本のネットワーク接続、ファイアウォールのルールを確認してください。ノードの設定をまとめて変更しないでください。
7. Androidとよくあるケース
v2rayNGはXrayコア、v2flyNGはv2flyコアを使用します。AndroidクライアントでVPNインターフェースを作成すると通知領域にアイコンが表示されますが、VPNサービスが動作していることを示すだけで、すべてのアプリの通信がVPN経由になっているとは限りません。まずシステムのVPN許可を確認し、次にクライアントのアプリごとの振り分けリストを確認してください。設定画面の名称は端末メーカーによって異なる場合があります。
v2rayNGにVPNアイコンがあるのにブラウザーがつながらない場合
v2rayNGの「設定」→「アプリごとのプロキシ」を開き、ブラウザーが除外されていないか確認します。また、現在のリストが「選択したアプリをプロキシ経由にする」のか、「選択したアプリを除外する」のかも確認してください。元の設定を記録し、アプリごとのプロキシを一時的に無効にして再接続した後、同じページをテストします。
PCのブラウザーでは使えるのに、ターミナルのコマンドがプロキシを通らない場合
ターミナルのツールはWindowsのシステムプロキシを参照しない場合があります。まずこの記事のcurl.exe --proxyでプロキシを明示してテストし、次にツール独自のプロキシ設定と、HTTP_PROXY、HTTPS_PROXY、ALL_PROXYの環境変数に古いポートが残っていないか確認してください。
TUNを有効にした後にネットにつながらなくなった場合
まずTUNを無効にし、ローカルの待ち受けとシステムプロキシを使う基本構成に戻してテストします。接続が復旧した場合は、仮想ネットワークアダプター、DNSの引き継ぎ、他のVPNとのルーティング競合を重点的に確認してください。複数の通信制御方式を同時に有効にしてテストしないでください。
v2rayNを終了した後、通常のWebサイトも開けなくなった場合
クライアントを再起動し、「システムプロキシ」から「システムプロキシをクリア」を選んでから終了します。起動できない場合は、Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」を開き、残っている手動プロキシを無効にしてください。組織で管理されているプロキシについては、先に管理者へ相談してください。
Androidでは、システムの「設定」→「ネットワークとインターネット」→「VPN」で、通信を制御している別の接続がないかも確認してください。「常時接続VPN」や「VPNなしの接続をブロック」が有効だと、VPN切断後もアクセスできない場合があります。画面消灯後だけ接続できなくなる場合は、バッテリー最適化も確認してください。起動直後からWebサイトが開けない問題とは別のケースです。
- 最初に失敗したものと同じページで再テストし、Webサイトの違いを設定修復と取り違えないようにします。
- 一時的に変更したログレベル、テスト用ルーティング、ブラウザーのDNS設定を元に戻します。
- それでも解決しない場合は、クライアントとOSのバージョン、実際のポート番号、プロキシを明示したテスト結果、機密情報を伏せたログをまとめてからサポートに問い合わせてください。