まずプロキシを明示したリクエストでローカルポートとノードを確認し、ブラウザーのプロキシ設定、ターミナルの環境変数を個別に調べます。そのうえでTUNが必要か判断します。Windows版v2rayNを例に、「ブラウザーは使えるのにターミナルは使えない」「システムプロキシを有効にしても直接接続される」といったケースを解説します。例示ポートは必ず実際の設定と照合してください。
システムプロキシ・ローカルポート・ルーティングを切り分ける
v2rayNの「システムプロキシを自動設定」は、主にOSの設定へプロキシアドレスを書き込む機能です。すべてのアプリの通信を自動で捕捉するわけではありません。アプリがこの設定を参照して初めて、ローカルプロキシに接続します。ブラウザーは通常この設定を参照しますが、コマンドラインツールの対応はそれぞれ異なるため、同じPCでも結果が違うことがあります。
リクエストがローカルプロキシに届くと、コアはルーティングルールに基づいて、直接接続・プロキシ接続・ブロックのいずれかを選びます。システムプロキシが有効でも、アプリがコアにリクエストを渡せる状態にあるだけで、すべての接続がリモートノード経由になるとは限りません。サブスクリプションの更新成功やノードの遅延表示だけでは、実際のWebリクエストを確認したことにはなりません。
| 確認箇所 | 役割 | 主な確認材料 |
|---|---|---|
| アプリのプロキシ設定 | リクエストをローカルプロキシに渡すかどうかを決定 | ブラウザーの設定、起動オプション、ターミナルの引数 |
| ローカルの受信ポート | HTTPまたはSOCKSリクエストを受信 | 待ち受けアドレス・ポート、コアの起動ログ |
| ルーティングとDNS | ドメイン名の解決方法と接続の送信先を決定 | アクセスログに記録された宛先と出方向タグ |
| リモートノード | プロキシ接続と転送を実行 | 実際のリクエスト結果、ハンドシェイクエラー、タイムアウト記録 |
切り分け中はTUNを無効にし、プロキシクライアントを1つだけ起動してください。TUNが誤ったシステムプロキシ設定を補ってしまうのを防ぎ、通信を受け持つ入口が複数ある場合の混乱を減らせます。組織が管理する端末では、組織から適用されたネットワークポリシーを回避しないでください。
手順1:ポートを確認してプロキシを明示したテストを行う
まずv2rayNの「設定」→「パラメーター設定」を開き、ローカルの待ち受けポートと受信プロトコルを確認します。コアの起動ログも照合してください。バージョンによってHTTPとSOCKSのポートが別々の場合や、混合ポートを使う場合があります。古い記事を参考に、ポート番号を固定の初期値だと思い込まないでください。以下では別々のポートを例示しますが、現行バージョンの初期設定を示すものではありません。
-
ポートを記録する
ローカルのHTTPまたは混合ポートと、SOCKSポートを記録します。混合ポートが1つだけの場合は、どちらのテストでも同じポートを使います。サブスクリプションに記載されたリモートサーバーのポートは指定しないでください。
-
コアを起動する
メイン画面でテストするサーバーを選び、使用中のサーバーに設定します。ログに起動エラーがないことを確認してください。テスト中はノードとルールを1組だけ使用します。
-
待ち受け状態を確認する
PowerShellで次の待ち受け確認コマンドを実行します。結果が表示されない場合は、まずコアの起動状況を確認してください。ポートが別のプロセスに使われている場合は、競合を解消してから確認します。ブラウザーの設定変更はまだ行わないでください。
-
プロキシを指定する
curl.exeでプロキシを明示して、HTTPレスポンスとエラーを確認します。Windows PowerShellではcurlがエイリアスとして実行される場合があるため、ここでは実行ファイル名を指定しています。
# ポートを実際の待ち受けポートに置き換える
Get-NetTCPConnection -State Listen -LocalPort 10809 |
Select-Object LocalAddress, LocalPort, OwningProcess
# HTTPプロキシ:HTTPSリクエストはCONNECTトンネルで送信
curl.exe --proxy http://127.0.0.1:10809 --noproxy "" --connect-timeout 10 --max-time 20 -I https://example.com/
# SOCKS5:宛先ドメイン名の解決をプロキシ側で行う
curl.exe --proxy socks5h://127.0.0.1:10808 --noproxy "" --connect-timeout 10 --max-time 20 -I https://example.com/
--noproxy ""は、この明示テストでプロキシ除外リストを空にするための指定です。例示URLは通信経路の確認用であり、特定の地域からアクセスできることを示すものではありません。詳しく調べる場合は、実際に失敗する宛先に置き換えてください。宛先サイトからHTTPステータスコードが返れば、HTTPレスポンスを受信できています。403や405であっても「ローカルプロキシに接続できない」状態とは異なりますが、リモートノード経由で接続したかどうかはログも確認してください。
ブラウザーがプロキシを使わない場合:システム設定と拡張機能を確認
プロキシを明示したテストが成功するのにブラウザーが想定どおり動かない場合は、まずブラウザーにシステムプロキシを使わせ、その後でプロキシ拡張機能を確認します。EdgeとChromeは通常Windowsのプロキシ設定を使いますが、拡張機能、起動オプション、組織のポリシーによって動作が変わることがあります。シークレットウィンドウでも拡張機能が無効になるとは限りません。拡張機能によってはシークレットモードでの実行が許可されています。
-
システムプロキシを設定する
v2rayNのタスクトレイアイコンを右クリックし、「システムプロキシ」→「システムプロキシを自動設定」を選びます。「システムプロキシをクリア」は選ばないでください。また、「システムプロキシを変更しない」は自動的に有効化する設定ではありません。
-
システムのアドレスを確認する
Windows 11の「設定」→「ネットワークとインターネット」→「プロキシ」を開き、「プロキシサーバーを使う」のアドレスとポートを確認します。v2rayNのHTTPまたは混合受信ポートと一致していることを確認してください。既存の自動構成スクリプトも記録しておき、複数の設定が切り分けに影響しないようにします。
-
プロキシ拡張機能を一時停止する
ブラウザーの拡張機能管理ページで、プロキシ切り替え拡張機能を一時的に無効にします。起動ショートカットにプロキシの起動オプションが付いていないか確認し、ブラウザーのウィンドウをすべて閉じてから再起動し、同じテストURLにアクセスします。
-
個別設定を確認する
Firefoxで「設定」→「一般」→「ネットワーク設定」→「設定」を開き、「システムのプロキシ設定を使用する」を選びます。手動設定を使う場合は、HTTP、SOCKS、プロキシを使用しないアドレスのリストをそれぞれ確認してください。
特定のWebサイトだけが直接接続される場合は、プロキシの例外設定とv2rayNのルーティングを確認します。たとえば、ブラウザーがローカルネットワークのアドレスをプロキシ対象外にしていたり、ルールで特定のドメインが直接接続に割り当てられていたりする場合、システムプロキシの不具合ではありません。比較のため、一時的に全通信をプロキシ経由にするルーティングモードに切り替えてテストし、終了後に元のルールへ戻します。ルーティング全体を削除しないでください。
- すべてのブラウザーで失敗する:システムプロキシのポート、自動構成スクリプト、他のソフトウェアによる設定の書き換えを優先して確認します。
- 特定のブラウザーだけ失敗する:そのブラウザーの拡張機能、個別設定、起動オプション、管理ポリシーを優先して確認します。
- Webページは開くが、出口IPの判定が異なる:対象ドメインの出方向ログを確認してください。出口IP確認サイトに表示されるのは、そのサイトへのリクエストの結果だけです。
ターミナルがプロキシを使わない場合:明示指定を優先し、次に環境変数を確認
コマンドラインツールがWindowsのシステムプロキシを参照するとは限りません。ターミナル自体も共通のネットワーククライアントではありません。同じPowerShellでも、curl.exe、スクリプトの実行環境、パッケージ管理ツールで参照するプロキシ設定が異なる場合があります。まず対象のプログラムを個別にテストし、その後で環境変数を設定してください。ブラウザーが使えるからといって、ターミナルもプロキシ経由とは限りません。
curlではhttps_proxyは「HTTPSの宛先に接続するときに使うプロキシ」を指定します。値にはhttp://127.0.0.1:10809を指定できます。ここでのhttp://はローカルプロキシのプロトコルを示すもので、宛先のWebページを暗号化なしで通信するという意味ではありません。誤ってhttps://127.0.0.1:10809と指定すると、通常のHTTPプロキシポートにTLSハンドシェイクを試みて失敗する場合があります。
# まず以前の値を記録する。以下の設定は現在のPowerShellと、そこから新たに起動する子プロセスにのみ適用される
$oldHttpsProxy = $env:https_proxy
$oldNoProxy = $env:no_proxy
$env:https_proxy = "http://127.0.0.1:10809"
$env:no_proxy = "localhost,127.0.0.1"
# --proxyを付けずに、このプログラムが環境変数を参照するか確認する
curl.exe --connect-timeout 10 --max-time 20 -I https://example.com/
# テスト完了後に以前の値へ戻す
if ($null -eq $oldHttpsProxy) {
Remove-Item Env:https_proxy -ErrorAction SilentlyContinue
} else {
$env:https_proxy = $oldHttpsProxy
}
if ($null -eq $oldNoProxy) {
Remove-Item Env:no_proxy -ErrorAction SilentlyContinue
} else {
$env:no_proxy = $oldNoProxy
}
設定、テスト、復元を順番に実行してください。コードブロック全体を一度に実行してから変数を確認しないでください。HTTPの宛先もプロキシ経由にする場合は、使用するツールのドキュメントでhttp_proxyを確認します。curlでは大文字・小文字の扱いに固有のルールがあるため、複数OSで使うスクリプトでは小文字を使用するのが無難です。ALL_PROXYはcurlの共通プロキシとして使えますが、すべてのプログラムが対応しているわけではなく、SOCKSアドレスを受け付けるとも限りません。
| 設定方法 | 適用範囲 | 確認時の注意点 |
|---|---|---|
--proxy | 今回のcurlリクエスト | 再現可能な診断の基準を作るのに適しています |
$env:https_proxy | 現在のPowerShellと、以降に起動する子プロセス | すでに起動している別のターミナルには新しい値が反映されません |
NO_PROXY | その環境変数に対応するツール | 宛先ドメインやワイルドカードルールによってプロキシが回避される場合があります |
| ツール固有の設定 | 対象のプログラムまたはプロジェクト | 環境変数より優先される場合があるため、個別に確認が必要です |
環境変数が効かない場合は、プログラム独自のプロキシ設定を確認します。PowerShellのInvoke-WebRequestは、-Proxy http://127.0.0.1:10809を指定して明示テストできます。curlが成功しただけで、同じ環境変数が参照されていると判断しないでください。WSLやコンテナーは独立したネットワーク環境です。内部の127.0.0.1がWindowsホストを指すとは限らないため、ネットワークモードに応じてホストのアドレスと待ち受け範囲を確認してください。
実際のエラーからポート・TLS・リモート側のタイムアウトを切り分ける
失敗したリクエストのエラー全文と発生時刻を記録し、v2rayNのログと照合します。以下のポートはこの記事の例示値です。実際のエラーには設定したポートと待ち時間が表示されます。「接続に失敗しました」だけを切り取らないでください。サブスクリプションURLや認証情報を含むログ全文を公開しないようにしましょう。
curl: (7) Failed to connect to 127.0.0.1 port 10809
原因:PCからプロキシの待ち受けポートへ接続できていません。コアが起動していないか、ポートの指定が誤っている場合によく発生します。対処:待ち受け状況と使用中のプロセスを確認し、HTTPまたは混合受信ポートを照合します。ローカル接続の失敗に対して、リモートノードを変更しても通常は解決しません。
curl: (35) schannel: failed to receive handshake, SSL/TLS connection failed
原因:TLSハンドシェイクに失敗しています。プロキシプロトコルの指定ミス、接続先サービス、ローカルのセキュリティソフトなどが原因として考えられます。この情報だけでノードの障害とは断定できません。対処:プロキシURLを誤ってHTTPSにしていないか確認し、システム時刻を照合して別の接続先でも試します。証明書の検証を無効にして問題を隠さないでください。
curl: (28) Operation timed out after 20000 milliseconds with 0 bytes received
原因:設定した時間内にデータを受信できていません。リモート接続、DNS、接続先からの応答のいずれかで停止している可能性があります。対処:-vを付けて再試行し、プロキシへの接続やCONNECTが完了しているかを確認します。コアのログで対象ドメインと出方向も調べてください。
socks5h://では成功し、ローカルで名前解決する方式では失敗する場合、まず名前解決の経路を確認してください。特定のパブリックDNSに問題があると決まったわけではありません。ルーティングルールがドメイン名の解決に依存していないか、DNSリクエストが想定した出方向へ送られているかも確認します。
TUNに切り替える場合と、システムプロキシを引き続き修正する場合
プロキシ設定のないアプリが複数ある場合、アプリごとの環境変数管理が難しい場合、またはより多くのIP通信を取り込みたい場合は、TUNを検討できます。仮想ネットワークインターフェースとルーティングを使って通信を取り込むため、一般にシステムプロキシより適用範囲が広くなります。ただし、正しく取り込めるかはコア、権限、ルーティング、DNS、アプリの動作に左右されます。あらゆるネットワーク問題を一括で解決する機能ではありません。
- システムプロキシを先に修正:ブラウザーのポート指定ミス、拡張機能による直接接続、curlの引数間違い。原因が特定できているため、通信の取り込み方式を変える必要はありません。
- TUNを検討:システムプロキシを参照しないアプリが複数あり、個別に設定する手間が大きい場合。まず通常のプロキシ経路が使えることを確認してください。
- 有効化を見送る:プロキシを明示したリクエストが失敗する、リモートノードのハンドシェイクに失敗する、または組織ネットワークに強制ポリシーがある場合。TUNを有効にしても、ノードや認証設定の問題は自動で解決しません。
有効化する前に、現在のシステムプロキシとルーティングの状態を記録します。v2rayNの案内に従って必要な権限を付与し、画面のTUNスイッチを有効にしてください。テスト中はシステムプロキシを解除し、ターミナルに一時設定した環境変数も元に戻します。明示プロキシとTUNを同時に経由すると、結果の判断が難しくなります。仮想インターフェース、デフォルトルート、DNSが設定されたことを確認し、ローカルネットワークのサービスにもアクセスできるか調べてください。
よくある質問と最終確認
ブラウザーではWebページを開けるのに、ターミナルがタイムアウトするのはなぜですか?
まずこの記事のcurl.exe --proxyテストを実行します。明示指定では成功し、通常のコマンドでは失敗する場合は、そのツールが環境変数を参照しているか、NO_PROXYに対象が含まれていないかを優先して確認してください。クライアントを再インストールするのは後にしましょう。
v2rayNを終了したらWebページも開けなくなりました。どうすれば戻せますか?
Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」を開き、停止したローカルポートが指定されたままになっていないか確認します。個人の端末なら手動プロキシを無効にできます。以前から組織のプロキシや自動構成スクリプトを使っていた場合は、元の設定に戻してください。
HTTPとSOCKSでは、どのポートを指定すればよいですか?
名前から推測せず、ローカルの受信プロトコルに合わせて指定します。ブラウザーのHTTPプロキシ欄にはHTTPまたは互換性のある混合ポートを指定し、SOCKS設定にはSOCKSまたは互換性のある混合ポートを指定します。リモートノードの443はローカルプロキシのポートではありません。
システムプロキシが有効なのに出口IPが変わりません。機能していないのでしょうか?
必ずしもそうとは限りません。まず出口IP確認サイトのドメインが直接接続ルールに一致していないか確認し、コアのアクセスログと照合します。アクセスログが無効な場合は、使用中のコアが対応する設定で一時的に有効化し、診断後に元へ戻してください。1つの確認サイトの結果だけでは、すべてのアプリの通信経路を判断できません。
最後に、明確な証拠の流れを1つ作ります。ローカルポートが待ち受けていること、プロキシを明示したリクエストに応答があること、ブラウザーが正しいプロキシ設定を使っていること、ターミナルのプログラムがそれぞれのプロキシ設定を参照していること、ルーティングログが想定した出方向を示していることを確認してください。この順に調べるほうが、システムプロキシを何度も切り替えたりノードを次々に変えたりするより、原因を特定しやすくなります。サブスクリプション、ノード、起動順序を整理し直す場合は、サイト内のクイックスタートガイドで基準を作り直してください。