システムプロキシを設定したのに機能しない?ブラウザとコマンドラインを分けて確認する

ブラウザはシステムプロキシを使うのに、ターミナルは標準では使わないことがあります。本記事では、ブラウザで接続を確認し、ターミナルで環境変数を個別設定する理由と方法を解説します。

この記事の要点

このチェックリストは、ノードを導入済みで v2rayN のコアも起動できるものの、ウェブページやターミナルのコマンドが接続に失敗する場合に役立ちます。まずローカルプロキシのポートが待ち受け中か確認し、ブラウザとコマンドラインツールを個別に検証します。最後に DNS、ルーティング、リモートノードを確認すれば、問題がアプリ、システムプロキシ、ローカルインバウンド、リモートアウトバウンドのどこにあるか特定できます。

再現可能なローカルプロキシの基準を作る

「システムプロキシが有効」という表示は、OS にプロキシアドレスが保存されていることを示すだけです。v2rayN のローカルポートが動作中であることや、すべてのアプリがその設定を読み取ることまでは保証しません。確実に切り分けるには、コアが起動中であること、ローカルのインバウンドポートが待ち受け中であること、テスト対象のアプリが実際にそのポートへリクエストを送っていることを確認します。

v2rayN 7.x の一般的な設定では、HTTP プロキシが 127.0.0.1:10809、SOCKS プロキシが 127.0.0.1:10808 で待ち受けることがあります。これらはあくまで代表例で、実際にはクライアント画面のローカルリスニング設定を確認してください。バージョンアップ、バックアップの読み込み、手動でのポート変更後は、古い記事のポート番号が使えない場合があります。

127.0.0.1
ローカルループバックアドレス
10809
一般的な HTTP ポートの例
10808
一般的な SOCKS ポートの例
3層
アプリ、インバウンド、アウトバウンド
  1. v2rayN のメイン画面で、対象ノードが現在のアクティブサーバーに設定されていることを確認します。コアの状態が起動失敗や再起動の繰り返しになっていないかも確認してください。
  2. 「設定」→「パラメータ設定」を開き、ローカル HTTP と SOCKS のリスニングポート、およびリッスンアドレスを記録します。バージョンによってメニュー名が異なる場合は、「ローカルポート」または「インバウンド設定」を含む画面を探してください。
  3. トレイメニューで「システムプロキシを設定」に相当する有効状態を選び、「システムプロキシを解除」や「システムプロキシを変更しない」を選ばないようにします。切り替え後、テスト用ブラウザを完全に終了してから再起動してください。
  4. まずは遅延テストを完了できるノードを一つ選び、確認しやすいプロキシモードにルーティングを切り替えます。基準テストに成功したら、元の分流ルールへ戻してください。

ブラウザで確認する:システムプロキシが実際に読み込まれているか

多くのデスクトップブラウザは標準で OS のプロキシ設定を読み込みますが、ブラウザ独自のプロキシポリシー、拡張機能の設定、古いプロセスが影響することもあります。システムプロキシを変更した後にページを更新するだけでは不十分な場合があります。バックグラウンドプロセスが起動時に読み込んだ設定を使い続けることがあるため、ブラウザを完全に終了してから再起動すると、この種の古い状態を切り分けられます。

テストでは通常ウィンドウを使い、プロキシ方式を変更するブラウザ拡張機能を一時停止し、これまで開いたことのないアドレスを選びます。一般的なウェブページにはアクセスできるのに特定のドメインだけ失敗する場合、ローカルプロキシ経路はおそらく接続済みです。次はルーティングの判定、DNS 解決、リモート側を確認し、システムプロキシのオン・オフを繰り返さないでください。

確認結果 考えられる問題箇所 次に行うこと
すべてのウェブページですぐに接続拒否になる ローカルポートが待ち受けていない、またはポート番号が間違っている v2rayN のローカルポートとコアの起動ログを確認する
ページが長時間待機した後にタイムアウトする ノードのアウトバウンド、ネットワーク接続、ルーティングルール 既知の正常なノードへ切り替え、アウトバウンドのタイムアウト記録を確認する
一方のブラウザは使えるが、もう一方は使えない ブラウザ独自のプロキシ設定またはバックグラウンドプロセス 「システムプロキシを使用」を選び、完全終了してから再起動する
ドメインは失敗するが、テスト用 IP へ直接アクセスすると応答がある DNS の問い合わせ経路またはドメインルール クライアントの DNS 設定とドメインの分流ルールを確認する
ブラウザは使えるが、ターミナルのコマンドは直接接続に失敗する ターミナルツールがシステムプロキシを読み込んでいない 現在のターミナルにプロキシ環境変数を設定する

結論:ブラウザで成功しても、すべてのプログラムがプロキシ経由とは限らない

ブラウザのテスト成功で確認できるのは、「ブラウザ→システムプロキシ→ローカルインバウンド→リモートアウトバウンド」という経路が使えることだけです。ターミナル、バックグラウンドサービス、独自にネットワーク接続を管理するプログラムは、プロキシの参照元を個別に確認する必要があります。

ブラウザが直結する場合に確認すること

ターミナルで確認する:環境変数または明示的な引数でプロキシを指定する

コマンドラインのターミナルはプログラムを起動するための入れ物にすぎず、すべてのネットワーク接続を自動的にシステムプロキシへ渡すわけではありません。実際にプロキシを使うかどうかは個々のツールが決めます。HTTP_PROXYHTTPS_PROXY を読むもの、コマンド引数だけを受け付けるもの、独自の設定ファイルへの記述が必要なものがあります。そのため「ブラウザは開けるのに、ターミナルはタイムアウトする」という場合、ノードが突然使えなくなったのではなく、両者が異なるネットワーク経路を使っていることが多いです。

HTTP プロキシの環境変数に対応するツールでは、まず現在のターミナルセッションだけに一時設定できます。プロキシアドレスのプロトコルは http:// と記述します。アクセス先が HTTPS サイトでも、ツールは HTTP プロキシ経由で CONNECT トンネルを確立するためです。以下では引き続き 10809 を例にしますが、実行前に画面に表示された実際のポートへ置き換えてください。

Windows PowerShell で一時設定する

$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:NO_PROXY="localhost,127.0.0.1"

この3行が影響するのは、現在の PowerShell プロセスと、そこから起動する子プロセスだけです。ウィンドウを閉じると設定は自然に消えるため、トラブルシューティングには適していますが、長期的な利用には向きません。現在の値を確認するには $env:HTTPS_PROXY を実行し、削除するには Remove-Item Env:HTTP_PROXYRemove-Item Env:HTTPS_PROXY を使います。

Windows コマンドプロンプトで一時設定する

set HTTP_PROXY=http://127.0.0.1:10809
set HTTPS_PROXY=http://127.0.0.1:10809
set NO_PROXY=localhost,127.0.0.1

macOS と Linux の現在の Shell で一時設定する

export HTTP_PROXY="http://127.0.0.1:10809"
export HTTPS_PROXY="http://127.0.0.1:10809"
export NO_PROXY="localhost,127.0.0.1"

ツールが SOCKS5 に対応している場合は、明示的な引数で 10808 ポートを確認できます。socks5hh は、プロキシ側で対象ドメインを解決することを示します。これにより「ローカル DNS の失敗」と「プロキシ経路の失敗」を切り分けやすくなります。すべてのプログラムが ALL_PROXY を読み込むわけではないため、初回の検証には明示的な引数が適しています。

curl -v --proxy socks5h://127.0.0.1:10808 https://example.com/
curl -v --proxy http://127.0.0.1:10809 https://example.com/

実際のエラーから問題の層を特定する

ターミナルの詳細出力は、「アクセスできない」という表示よりも有用です。curl -v を使う場合、まず 127.0.0.1 と想定ポートへ接続しているか確認し、次にプロキシが対象サイトへのトンネルを確立できたかを確認します。最初の接続で失敗するなら問題はローカルにあります。ローカル接続後にタイムアウトするなら、問題は通常ルーティングまたはアウトバウンド側にあります。

エラー:curl: (7) Failed to connect to 127.0.0.1 port 10809

原因と対処:ローカル HTTP ポートが待ち受けていないか、コマンドで間違ったポートを指定しています。「設定」→「パラメータ設定」でポートを確認し、v2rayN のコアが正常に起動していることを確認してください。

エラー:curl: (5) Could not resolve proxy: 127.0.0.1:10809

原因と対処:プロキシ変数の形式が間違っている可能性があり、ツールが値全体をプロキシのホスト名として扱っています。値を http://127.0.0.1:10809 と記述し、余分な引用符、空白、重複したプロトコルヘッダーを削除してください。

エラー:Proxy CONNECT aborted

原因と対処:HTTP プロキシはリクエストを受け取りましたが、トンネルの確立に失敗しています。ポートの種類を SOCKS と取り違えていないか確認し、v2rayN のアウトバウンドログとアクティブノードを確認してください。

エラー:connection refused

原因と対処:対象アドレスから接続を拒否されています。拒否されたアドレスが 127.0.0.1 ならローカルの待ち受けを確認し、ログにリモートサーバーからの拒否と出ているなら、ノードのアドレス、ポート、プロトコルパラメータを確認してください。

エラー:context deadline exceeded

原因と対処:リクエストが制限時間内に完了していません。まず既知の正常な別ノードへ切り替え、その後 DNS、パケットロス、ルーティングによって対象が誤って直結アウトバウンドへ送られていないかを確認してください。

実行ログを確認する順番

  1. インバウンド:テストコマンドの実行時に、本機からの新しい接続が記録されているか確認します。記録がまったくなければ、アプリがプロキシを使っていないか、ポートの指定が間違っています。
  2. ルーティング:対象ドメインまたは IP がプロキシ、直結、遮断のどのアウトバウンドへ送られたか確認します。分流モードでは、ノードの遅延よりルールの一致結果が重要です。
  3. アウトバウンド:接続タイムアウト、接続拒否、ドメイン解決失敗、認証パラメータの誤りがないか確認します。ここで発生するエラーが、リモートノードに直接関係します。
  4. レスポンス:トンネル確立後、すぐにリセットされていないか確認します。特定の対象だけで発生する場合は、対象サービスの接続ポリシーも考慮してください。

ブラウザは使えるのに一部のコマンドが失敗する:DNS と分流を確認する

同じドメインでも、ブラウザとターミナルでは異なる名前解決経路を使うことがあります。ブラウザは独自のセキュア DNS 設定を使う場合がありますが、ターミナルツールは通常 OS のリゾルバーを呼び出します。socks5:// ではローカルで解決し、socks5h:// ではプロキシ側で解決することがあります。解決場所が異なれば、取得するアドレスやルーティングの一致結果も変わります。

分流ルールも、「使えるプログラムと使えないプログラムがある」という状態を生みます。V2Ray または Xray のコアは、ドメイン、IP、ポート、インバウンドタグに基づいてアウトバウンドを選択します。対象ドメインが直結ルールに分類されると、アプリがローカルプロキシへ接続していても、リクエストは直結経路から送信されることがあります。この場合、システムプロキシが無効なのではなく、修正すべきなのはルーティングの判定です。

結論:リクエストがローカルインバウンドに入っているかを先に確認する

実行ログに新しい接続がない場合は、アプリのプロキシ設定を確認します。インバウンドはあるのに利用可能なアウトバウンドがない場合は、ルーティングとノードを確認してください。この境界で切り分けるほうが、ノードを何度も変更するより安定した結論にたどり着けます。

よくある問題と復旧方法

テストが終わったら、一時的な変更を整理して元に戻します。次回起動時に古い変数、古いポート、新しい設定が上書きし合うのを防ぐためです。特に環境変数へ長期保存した設定があると、v2rayN を終了してもコマンドラインツールが元のローカルポートへ接続し続け、接続拒否が繰り返されることがあります。

システムプロキシは有効なのに、ブラウザが直結するのはなぜ?

まずブラウザを完全に終了し、ブラウザのネットワーク設定で「システムプロキシを使用」が選択されていることを確認します。ページの更新と同時に v2rayN のログも確認してください。新しいインバウンド記録がなければ、リクエストはまだローカルプロキシに入っていません。

ブラウザは正常なのに、curl がずっとタイムアウトするのはなぜ?

まず --proxy http://127.0.0.1:10809 を付けたコマンドを実行します。明示的なプロキシ指定で成功したら、現在のターミナルに HTTP_PROXYHTTPS_PROXY を設定してください。

HTTP ポートと SOCKS ポートは混用できますか?

できません。HTTP クライアントは HTTP インバウンドへ、SOCKS5 クライアントは SOCKS インバウンドへ接続します。例としてポートが 10809 と 10808 の場合でも、入力時はクライアントの実際の設定を優先してください。

v2rayN を終了した後、ターミナルでネットワークに接続できない場合は?

現在のセッションまたはシステムに保存されたプロキシ環境変数を削除し、新しいターミナルを開きます。ツールに独自のプロキシ設定がある場合は、127.0.0.1 の古いポートを指す項目も削除してください。

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

通常は必要ありません。まずそのドメインの DNS 結果とルーティングの一致を確認し、単純なプロキシモードで比較します。他の対象に問題がなければ、ローカルの待ち受けと基本的なプロキシ経路は通常利用できます。

トラブルシューティング後の仕上げチェックリスト

  1. 一時的に切り替えたグローバルプロキシモードを、元のルーティング分流設定へ戻します。
  2. テストにだけ使用した HTTP_PROXYHTTPS_PROXYALL_PROXY の環境変数を削除します。
  3. システムプロキシのポートが、v2rayN の現在のローカル HTTP ポートと一致していることを確認します。
  4. 正常なノード、ポート番号、テストコマンド、重要なエラーをテキストで記録しておきます。次回は失敗した層からすぐに確認できます。
  5. ノードを変更して復旧した場合は、しばらく様子を見て、一時的なネットワーク変動とノード設定の誤りを区別します。
v2rayN をダウンロード4つのプラットフォーム用インストーラーを見る