この記事は、「ブラウザーは開けるのにターミナルは失敗する」「システムプロキシを有効にしても一部のプログラムが直接接続する」「プロキシエラーで接続拒否と表示される」といった Windows ユーザー向けです。まず v2rayN とプロキシコアがローカル待受を確立しているか確認し、ブラウザーとコマンドラインツールの接続方法を個別に検証します。最後に、アプリの対応範囲から TUN の必要性を判断します。
「動作しない」を3つの範囲に分ける
v2rayN は設定とコアを管理するデスクトップクライアントで、Xray などのプロキシコアが実際の接続を処理します。Windows のシステムプロキシは、一部のアプリにローカルプロキシのアドレスを知らせるだけです。システムプロキシを有効にしても、すべての通信がコアへ強制的に送られるわけではなく、ルーティング規則が必ずプロキシ経由を選ぶわけでもありません。
第1層はローカル待受です。クライアントがコアを起動すると、通常はループバックアドレス上で HTTP、SOCKS、または混合プロキシのポートを待ち受けます。待受が実際に存在して初めて、ブラウザーやターミナルから接続できます。第2層はアプリの接続方法です。アプリが Windows のシステムプロキシを読み取るか、独自に保存したプロキシ設定を使うかを確認します。第3層がルーティングとアウトバウンドです。通信がコアに入った後、設定内のドメイン、IP、プロトコル、規則によって、直接接続、プロキシ経由、ブロックのいずれかが決まります。
そのため、「ブラウザーは使えるのに PowerShell は使えない」という場合、多くはノードが突然無効になったのではなく、接続方法が異なることが原因です。「ブラウザーでプロキシ接続に失敗する」ときは、まずローカルポートを確認し、VLESS、VMess、TLS のパラメータを先に変更しないでください。層ごとに調べれば、入口の問題をサーバー側の問題と取り違えずに済みます。
| 現象 | 優先して確認する項目 | 後回しにする項目 |
|---|---|---|
| すべてのブラウザーでプロキシ接続に失敗する | コアプロセス、ローカル待受アドレス、ポートの使用状況 | ブラウザーキャッシュとサイトのアカウント |
| ブラウザーは正常だが、ターミナルが直接接続またはタイムアウトする | HTTP_PROXY、HTTPS_PROXY、ALL_PROXY とツールの引数 | サブスクリプションの再インポート |
| 1つのブラウザーだけ異常がある | ブラウザー独自のプロキシ、拡張機能による切り替え、起動引数 | Windows のネットワーク全体のリセット |
| プロキシテストは成功するが、特定のドメインだけ直接接続される | ルーティング規則、ドメインの照合、DNS の解決場所 | ローカル待受ポートの変更 |
最初にコアとローカル待受を確認する
まず v2rayN で設定を1つ選択してコアを起動し、メイン画面またはログ欄に起動失敗、ポート使用中、設定解析エラーが表示されていないか確認します。サブスクリプションは設定の取得元にすぎません。サブスクリプションの更新に成功しても、コアが動作しているとは限らず、システムプロキシが正しいポートを指しているとも限りません。
続いて「設定」→「パラメーター設定」を開き、現在の HTTP と SOCKS の待受ポートを記録します。バージョンによって統合された混合ポートを使う場合も、画面に表示された実際の値を記録してください。待受アドレスは通常 127.0.0.1 にします。これは本機からの接続だけを受け付けるアドレスです。LAN からの接続が明確に必要な場合を除き、切り分けのためにすべてのネットワークアダプターへ公開されるアドレスへ変更しないでください。
ポートを記録する
v2rayN の「設定」→「パラメーター設定」を開き、HTTP、SOCKS、または混合待受ポートを書き留めます。古いチュートリアルから番号を推測しないでください。
プロセスを確認する
選択した設定を起動し、コアの終了通知が繰り返し表示されていないことを確認します。ログでは最後の行だけでなく、最初に出たエラーを特定してください。
待受を確認する
PowerShell で
Get-NetTCPConnectionを実行し、対象ポートが Listen 状態であることを確認して、対応するプロセス ID を記録します。入口をテストする
Test-NetConnectionを使ってループバックアドレスと HTTP ポートをテストします。TCP テストに失敗した場合は、まず待受の問題を解決してください。
Get-NetTCPConnection -State Listen |
Where-Object { $_.LocalPort -in 10808, 10809 } |
Select-Object LocalAddress, LocalPort, OwningProcess
Test-NetConnection 127.0.0.1 -Port 10809
TcpTestSucceeded が True でも、ポートが TCP 接続を受け付けていることしか証明できません。ノードのプロトコル、サーバーアドレス、ルーティング規則が正しいとは限らないため、明示的にプロキシを指定したリクエストで完全な経路を検証する必要があります。検索結果に対象ポートがない場合は、v2rayN のログに戻ってコアの起動問題を確認します。ポートが別のプロセスに使用されている場合は、Get-Process -Id プロセスID でプログラムの種類を確認できます。
エラー:ERR_PROXY_CONNECTION_FAILED
原因と対処:ブラウザーが設定済みのローカルプロキシへ接続できません。v2rayN が起動しているか、システムプロキシのポートが「パラメーター設定」と一致しているか、ポートを別のプロセスが使用していないか確認してください。
エラー:TcpTestSucceeded : False
原因と対処:指定したアドレスとポートで待受が見つかりません。まずコアを起動してログを確認します。ポートを変更した直後であれば、コアを再起動してから再テストし、リモートノードの調査は後にしてください。
エラー:Only one usage of each socket address is normally permitted
原因と対処:対象ポートを別のプロセスが使用しています。OwningProcess を特定して重複起動したインスタンスを終了するか、v2rayN で未使用のポートへ変更し、他のアプリの設定も合わせて更新してください。
ブラウザーは「システムに従う」と「個別設定」を分けて確認する
システムのネットワーク設定を使う多くのデスクトップブラウザーは Windows のプロキシを読み取りますが、ブラウザー拡張機能、企業ポリシー、起動引数、ブラウザー独自のネットワーク設定によって上書きされる場合があります。切り分けでは、まず制御元を1つに絞ります。Windows のシステムプロキシに従うか、ブラウザーでローカルプロキシを明示的に指定し、拡張機能とシステム設定が同時に接続先を書き換えないようにしてください。
v2rayN のトレイメニューでシステムプロキシ関連の項目を選ぶときは、現在の用途に合ったモード、たとえばシステムプロキシの自動設定が選ばれているか確認します。続いて Windows の「設定」→「ネットワークとインターネット」→「プロキシ」を開き、手動プロキシまたは自動構成スクリプトが現在のクライアント設定を反映しているか確認してください。v2rayN のモードによってシステム設定への書き込み方法が異なるため、アドレスを手動で重ねて設定しないでください。
1つのブラウザーだけに問題がある場合は、まず一時的なブラウザープロファイルを作成するか、プロキシ切り替えを担当する拡張機能を無効にして再テストします。プライベートウィンドウは通常、システムプロキシを迂回しません。そのためキャッシュやログイン状態の切り分けには使えますが、プロキシ入口が復旧した証明にはなりません。ブラウザーのセキュア DNS はドメイン解決を担当するもので、HTTP や SOCKS プロキシとは別の仕組みです。
制御元を統一する
ブラウザー内でプロキシ切り替えを担当する拡張機能を一時的に無効にし、テスト用の起動引数を削除して、Windows のシステムプロキシだけを制御経路として残します。
システム設定を確認する
Windows の「設定」→「ネットワークとインターネット」→「プロキシ」を開き、アドレス、ポート、自動構成の状態が v2rayN の現在のモードと対応しているか確認します。
ブラウザーを再起動する
すべてのブラウザープロセスを完全に終了してから再起動し、起動時に読み込んだ古いプロキシ設定を使い続けないようにします。
1つずつ比較する
まず通常の HTTPS ページを1つテストし、次に以前失敗したドメインをテストします。後者だけ失敗する場合は、ルーティング、DNS、SNI、サーバー設定を調べます。
ブラウザー拡張機能が直接接続と表示する場合は?
拡張機能がシステム設定より優先される場合があります。まず拡張機能を無効にしてブラウザーを再起動します。正常に戻ったら、拡張機能の HTTP または SOCKS アドレスを v2rayN の現在の待受値に変更してください。
一方のブラウザーは使えるのに、もう一方は使えない場合は?
両方がシステムプロキシに従っているか比較し、異常なブラウザーのポリシーページ、プロキシ拡張機能、起動ショートカットに個別のプロキシ引数がないか確認します。
セキュア DNS を無効にすれば直りますか?
セキュア DNS とプロキシ入口は別の層です。ログがドメイン解決の問題を明確に示している場合だけ DNS を調整してください。ローカルプロキシポートへの接続に失敗している場合、セキュア DNS を無効にしても効果はありません。
ターミナルのプログラムにはプロキシ環境変数を明示的に設定する
PowerShell、コマンドラインのダウンロードツール、パッケージマネージャー、開発ツールは、Windows のシステムプロキシを必ずしも読み取りません。大文字の環境変数だけを認識するプログラムもあれば、大文字と小文字の両方を認識するもの、独自の設定ファイルでプロキシを指定する必要があるものもあります。システムプロキシを有効にしてもターミナルが直接接続するのは、こうしたプログラムではよくある現象です。
まず curl.exe の --proxy 引数を使って明示的にテストします。これにより、ツールがシステム設定を読み取るかどうかに左右されず、ローカル入口から対象サイトまでのリクエスト経路を直接検証できます。HTTP ポートの例は 10809、SOCKS ポートの例は 10808 ですが、実際のテストでは v2rayN の現在の値に置き換えてください。
curl.exe --proxy http://127.0.0.1:10809 https://example.com/ --max-time 10
curl.exe --proxy socks5h://127.0.0.1:10808 https://example.com/ --max-time 10
socks5h の h は、対象ホスト名の解決をプロキシ側で行うことを示します。本機の DNS とプロキシ側の解決結果を比較するのに適しています。HTTP と SOCKS のテストがどちらも成功し、--proxy なしのコマンドだけが失敗または直接接続する場合、問題はターミナルの接続方法にあります。サブスクリプション設定をさらに変更する必要はありません。
現在の PowerShell セッションで複数のツールにプロキシを試させる場合は、環境変数を一時的に設定できます。セッションを閉じると変数は消えるため、切り分けに適しています。ユーザー単位またはシステム単位の環境変数へ書き込む前に、対象ツールがその変数をサポートしているか、イントラネットアドレスへどのような影響があるか確認してください。
$env:HTTP_PROXY = "http://127.0.0.1:10809"
$env:HTTPS_PROXY = "http://127.0.0.1:10809"
$env:ALL_PROXY = "socks5h://127.0.0.1:10808"
$env:NO_PROXY = "localhost,127.0.0.1"
Get-ChildItem Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:NO_PROXY
エラー:curl: (7) Failed to connect to 127.0.0.1 port 10809
原因と対処:curl が指定したローカルポートへ接続できません。ポートの種類と番号を確認し、コアの待受を調べてください。v2rayN が混合ポートを使っている場合は、そのポートを指定します。
エラー:curl: (28) Operation timed out after 10000 milliseconds
原因と対処:リクエストが10秒の制限を超えました。ローカル TCP 接続が成功している場合は、コアのログで DNS、リモート接続、TLS、ルーティングのエラーを確認します。受信記録がまったくない場合は、コマンドのプロキシアドレスを確認してください。
エラー:The underlying connection was closed
原因と対処:接続確立後、プロトコルまたは TLS の段階で切断されています。まず curl で比較テストを行い、ノードのドメイン、システム時刻、SNI、証明書設定を確認してください。証明書検証の無効化を恒久的な対処にしないでください。
接続成功後にルーティングと DNS を確認する
明示的なプロキシリクエストがコアに到達しているのに、特定のサイトだけ失敗する場合、調査の焦点を「アプリが接続できているか」から「コアがどのように処理しているか」へ移します。v2rayN が管理するルーティング規則は、ドメイン、IP、プロトコルに応じて直接接続とプロキシ接続を選択します。VLESS と VMess はノードのプロトコル設定の一部であり、ターミナルが Windows のシステムプロキシを読み取るかどうかを決めるものではありません。
ログを確認するときは、同じテストリクエストに対応させます。まずテスト時刻を記録し、1つのリクエストだけを実行して、対象ドメイン、適用された規則、アウトバウンドエラーを確認してください。ログにそのリクエストがまったくない場合、通信はまだコアに入っていません。リクエストがあり、直接接続が明示されている場合はルーティング規則を確認します。プロキシ接続が選ばれた後に解決またはハンドシェイクのエラーが出る場合は、ノードのパラメータと DNS を調べます。
| ログの現象 | 判断 | 次に行うこと |
|---|---|---|
| テスト中に該当するリクエストがない | アプリがローカルプロキシに接続していない | ブラウザー設定、コマンド引数、環境変数を確認する |
| リクエストが入った後、直接接続に振り分けられる | ルーティング規則が直接接続を選択している | ドメイン規則、IP 規則、規則の順序を確認する |
| ドメイン解決に失敗する | DNS 設定または解決経路に問題がある | 本機での解決結果とプロキシ側の解決結果を比較し、ドメインの綴りを確認する |
| リモート接続後のハンドシェイクに失敗する | ノードのプロトコルまたは TLS 段階に問題がある | サーバー名、システム時刻、伝送パラメータを確認する |
- サブスクリプションの更新は設定一覧を取得するだけで、その中の各設定で現在接続を確立できることを証明するものではありません。
- システムプロキシは一部のアプリがローカル入口を見つける方法を決め、ルーティング分岐はコアに入った通信の行き先を決めます。
- 本機の DNS による先行解決とプロキシ側の解決では異なる結果になる場合があります。SOCKS をテストするときは
socks5とsocks5hを比較してください。 - 規則を変更した後は、単一のリクエストを再実行し、新しいログで確認します。ポート、DNS、ノード、ルーティングを同時に変更しないでください。
TUN を検討するタイミング
TUN は、HTTP や SOCKS のプロキシ設定に対応していないアプリを対象にしたい場合や、より多くの通信を統一的に取り込む場合に適しています。仮想ネットワークインターフェースを通じて通信の取り込み方法を変えるため、通常はシステムプロキシより広い範囲をカバーします。一方で、ルーティングテーブル、DNS、管理者権限、他の VPN 系接続との調整が必要です。
問題がプロキシ引数に対応した1つのターミナルツールだけに発生している場合は、まずそのツールを設定するか環境変数を使うほうが、動作を確認しやすく元に戻すのも簡単です。複数のアプリがシステムプロキシをまったく読み取らず、個別設定の負担が大きい場合に TUN を検討します。TUN を、ローカルポートが待ち受けていない問題、ノードのハンドシェイク失敗、誤ったルーティング規則の代替策にしないでください。
ブラウザーは正常なのに、ゲームや専用プログラムがプロキシを使わない場合は?
まず、そのプログラムに HTTP、SOCKS、ネットワークプロキシの設定があるか確認します。プロキシ入口がなく、どうしても対象に含める必要がある場合に TUN を検討し、利用規約とネットワーク要件も確認してください。
TUN を有効にした後もシステムプロキシを有効にする必要がありますか?
現在のクライアント設定と取り込み方式によって異なるため、機械的に同時有効化しないでください。どの方式が接続を担当するのかを明確にし、二重プロキシや不明確な切り分け経路を避けます。
TUN を有効にしたら完全にインターネットへ接続できなくなった場合は?
まず TUN を無効にして基本のネットワークを復旧し、管理者権限、仮想インターフェース、DNS、ルーティングの競合を確認します。他の VPN 接続が動作している場合は、同じ通信を同時に取り込まないようにしてください。
ターミナルで環境変数を設定した後も TUN は必要ですか?
対象ツールが HTTP_PROXY または明示的なプロキシ引数で安定して動作しているなら、そのツールだけのために TUN を有効にする必要はありません。範囲が小さく、動作を検証しやすい接続方式を維持してください。
変更を最小限にして再確認する
一度に1つの条件だけを変更すれば、どの手順で接続が復旧したか判断できます。最も安全な順序は、ローカル待受、明示的なプロキシテスト、アプリの接続設定、ルーティングと DNS、最後に TUN です。各手順でポート、コマンド結果、ログの時刻を記録し、画面上のスイッチ状態だけで判断しないでください。
- v2rayN の「設定」→「パラメーター設定」で現在の待受アドレスとポートを記録し、コアが起動していることを確認します。
Get-NetTCPConnectionとTest-NetConnectionで、ポートが実際に待ち受けていることを確認します。curl.exe --proxyを使い、HTTP または SOCKS の入口をそれぞれテストします。タイムアウトは10秒に設定します。- ブラウザーのプロキシ制御元を1つだけ残し、完全に終了してから再起動し、他のブラウザーと比較します。
- ターミナルはコマンド引数または一時的な環境変数で接続し、Windows のシステムプロキシを自動的に読み取るとは想定しません。
- リクエストがコアに入ったことを確認してから、ログに基づいてルーティング分岐、DNS、ノードのプロトコル、TLS を確認します。
- 複数のアプリで個別にプロキシを設定できず、対象範囲を広げる必要がある場合に限り、TUN を設定して検証します。