まず v2rayN のコア、ノード、ローカル受信ポートが正常に動作していることを確認し、ブラウザーとターミナルを分けて調べます。ブラウザーではプロキシ設定を管理している場所、ターミナルでは HTTP_PROXY、HTTPS_PROXY、ALL_PROXY を現在のプロセスが正しく読み込んでいるかを確認します。本文のポートテスト、環境変数の確認、比較用コマンドを実行すれば、原因がクライアント、システム設定、特定のアプリのどこにあるかを切り分けられます。
プロキシ経路の3つの基本状態を確認する
「システムプロキシが有効」という表示は、OSにプロキシアドレスが保存されていることを示すだけで、対象アプリが必ずそのアドレスを使うとは限りません。経路には少なくとも、V2Ray または Xray のコアが稼働していること、ローカルの待受ポートが接続を受け付けること、対象アプリがシステムプロキシまたは明示的なプロキシ設定を読み取ること、という3つの段階があります。どこか1つでも途切れると、ウェブページが直接接続になったり、リクエストがタイムアウトしたり、ターミナルの通信だけがプロキシを通らなかったりします。
調査の最初から VMess、VLESS、ルーティングルールを変更するのは避けてください。まず v2rayN のメイン画面で動作状態とログを確認します。ノードへの接続に成功すると、通常は SOCKS、HTTP、または mixed の受信ポートがローカルで待ち受けます。v2rayN 7.x では 127.0.0.1 が待受アドレスとして使われることが多く、ポートは「設定」→「パラメーター設定」に表示される実際の値を確認します。この記事では mixed ポートを 10808、独立した HTTP ポートを 10809 としています。画面の数字が異なる場合は、すべてのコマンドのポート番号を置き換えてください。
ノードを確認
v2rayN のメイン画面でサブスクリプションのノードを1つ選び、アクティブサーバーに設定します。再接続後、状態が起動中や再接続中のままになっていないことを確認してください。
ポートを確認
「設定」→「パラメーター設定」→「基本設定」を開き、ローカルの待受アドレス、mixed ポート、HTTP ポート、SOCKS ポートを記録します。古い解説をもとにポート番号を推測しないでください。
ログを確認
実行ログを開き、ポートの競合、ノードアドレスの名前解決失敗、TLSハンドシェイク失敗、設定の読み込み失敗がないか確認します。
明示的にテスト
まず、コマンドでプロキシを明示的に指定してテスト用アドレスへアクセスします。明示的なプロキシで成功したら、次にシステムプロキシとアプリへの継承関係を確認します。
判断の目安:127.0.0.1 と正しいポートを明示しても失敗する場合は、まずローカルの待受状態とクライアントログを確認します。明示指定で成功し、ブラウザーまたはターミナルだけが失敗する場合は、原因をアプリの設定まで絞り込めます。
ブラウザーで効かない:プロキシ設定の管理元を確認する
ブラウザーでよくある問題は、ノードの障害ではなくプロキシ設定の出所が競合していることです。ブラウザーはOSの設定に従う場合もあれば、独自のネットワーク設定を使う場合や、プロキシ拡張機能に制御される場合もあります。3つの設定元が同時に存在すると、最終的に適用されるアドレスが v2rayN がシステムへ設定した 127.0.0.1 とは限りません。
Chromium 系ブラウザーは通常、システムのネットワーク設定を利用しますが、起動オプション、企業ポリシー、拡張機能によって結果が変わることがあります。Firefox 系ブラウザーでは、「プロキシなし」「システムのプロキシ設定を使用」「手動でプロキシを設定」から独自に選択できます。そのため、同じPCで一方のブラウザーは正常なのに、別のブラウザーは直接接続になることも不思議ではありません。
拡張機能を一時停止
プロキシサーバー、PAC、ネットワーク要求の経路を変更するブラウザー拡張機能をすべて一時的に無効にし、ブラウザーを完全終了してから再起動します。
システム設定を確認
v2rayN のタスクトレイメニューでシステムプロキシのモードを選択し、OSのプロキシ設定画面を開きます。サーバーが 127.0.0.1 で、ポートがクライアントの現在の HTTP または mixed 受信ポートと一致していることを確認します。
ブラウザーを確認
ブラウザーに独立したネットワーク設定がある場合は、まず「システムのプロキシ設定を使用」を選択します。手動入力が必要な場合は、HTTPプロキシに 127.0.0.1 と対応するHTTPポートを入力します。
古いプロセスを終了
ブラウザーのウィンドウをすべて閉じ、タスクマネージャーでバックグラウンドプロセスが終了していることを確認します。再起動してからページを開き、起動時に読み込まれた古いプロキシ設定が使われ続けるのを防ぎます。
比較テスト
通常のウィンドウと、拡張機能を無効にしたウィンドウでそれぞれテストします。元の設定でのみ失敗する場合は、拡張機能を1つずつ再有効化して競合元を特定します。
エラー:ERR_PROXY_CONNECTION_FAILED
原因と対処:ブラウザーはプロキシへの接続を試みていますが、127.0.0.1 の対象ポートでサービスが待ち受けていません。v2rayN でコアの状態を確認し、ブラウザーのポートを「パラメーター設定」に表示される現在の値へ変更します。
エラー:ERR_TUNNEL_CONNECTION_FAILED
原因と対処:ブラウザーはHTTPプロキシに接続できていますが、プロキシがHTTPSリクエストのトンネルを確立できていません。ノードログ、プロトコルパラメーター、ルーティングによるブロックを確認し、利用可能と分かっている別のノードで再テストします。
エラー:The proxy server is refusing connections
原因と対処:ブラウザーに入力した手動プロキシアドレスへ接続できません。よくある原因は、SOCKSポートをHTTPポートとして入力していることです。mixed ポートに変更するか、SOCKS設定欄に正しいポートを入力して SOCKS5 を選択します。
「プロキシを使用しないアドレス」の一覧も確認してください。localhost、127.0.0.1、LANアドレスは通常、直接接続にします。ただし、一覧に範囲の広すぎるワイルドカード規則があると、一般のウェブサイトまでプロキシを迂回することがあります。まずカスタムの除外項目をバックアップし、必要なローカルアドレスだけを残してテストします。復旧を確認したら、必要なルールを1つずつ戻してください。
ターミナルで効かない:環境変数を現在のプロセスへ渡す
多くのターミナルプログラムは、デスクトップのシステムプロキシを自動では読み取りません。curl、パッケージマネージャー、ランタイムツール、スクリプトはそれぞれ独自のプロキシ処理を行う場合があります。最も汎用的な方法は、現在のターミナルセッションに HTTP_PROXY、HTTPS_PROXY、ALL_PROXY を設定することです。変数名の大文字・小文字への対応はプログラムによって異なるため、切り分け中は大文字と小文字の両方を設定できます。
環境変数の影響を受けるのは、設定後に起動したプロセスだけです。すでに開いているターミナル、エディター内蔵ターミナル、バックグラウンドタスクに新しい変数が自動で反映されることはありません。システム環境変数を変更したら、古いウィンドウを閉じて新しいターミナルを開きます。現在のセッションで代入しただけの場合は、ウィンドウを閉じると設定も失われます。
PowerShellの現在のセッション
$env:HTTP_PROXY = "http://127.0.0.1:10808"
$env:HTTPS_PROXY = "http://127.0.0.1:10808"
$env:ALL_PROXY = "socks5h://127.0.0.1:10808"
$env:NO_PROXY = "localhost,127.0.0.1"
Get-ChildItem Env:HTTP_PROXY
Get-ChildItem Env:HTTPS_PROXY
Get-ChildItem Env:ALL_PROXY
curl.exe -I --proxy http://127.0.0.1:10808 https://v2ray-os.com/zh-CN/
PowerShell では curl が別のコマンドに割り当てられていることがあるため、例では curl.exe を明示的に呼び出します。`-I` はレスポンスヘッダーだけを取得するため、接続確立の確認に適しています。mixed ポートが 10808 でない場合は、v2rayN に表示される現在のポートへ変更してください。独立したHTTP受信を使う場合は、アドレスを `http://127.0.0.1:10809` のような実際の設定値に置き換えます。
コマンドラインと一般的なShell
export HTTP_PROXY="http://127.0.0.1:10808"
export HTTPS_PROXY="http://127.0.0.1:10808"
export ALL_PROXY="socks5h://127.0.0.1:10808"
export NO_PROXY="localhost,127.0.0.1"
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"
export no_proxy="$NO_PROXY"
env | grep -i proxy
curl -I --proxy socks5h://127.0.0.1:10808 https://v2ray-os.com/zh-CN/
エラー:curl: (7) Failed to connect to 127.0.0.1 port 10808
原因と対処:ローカルポートで待ち受けていないか、コマンドで間違ったポートを使用しています。v2rayN のコアが起動していることを確認し、「設定」→「パラメーター設定」から現在の受信ポートを確認します。
エラー:curl: (5) Could not resolve proxy
原因と対処:プロキシ変数の形式が正しくありません。よくある原因は、プロトコルスキームの付け忘れ、引用符の閉じ忘れ、アドレスへの空白の混入です。`http://127.0.0.1:10808` の完全な形式で設定し直します。
エラー:curl: (35) OpenSSL SSL_connect
原因と対処:ローカルプロキシには接続できているものの、リモート側とのTLS接続に失敗しています。コアのログでサーバー名、時刻のずれ、ハンドシェイク情報を確認し、利用可能な別のサブスクリプションノードと比較します。
エラー:connection reset by peer
原因と対処:接続確立後に、リモート側または途中の経路によって接続がリセットされています。まずノードの異常を除外し、VMess または VLESS のトランスポート層、TLS、サーバー名がサブスクリプションの内容と一致しているか確認します。
注意:`socks5://` は通常、接続先ドメインをローカルで名前解決します。一方、`socks5h://` は名前解決をプロキシ側に任せます。ターミナルでドメインだけ失敗し、IPアドレスなら接続できる場合は、まず `socks5h://` で再テストし、DNS設定も引き続き確認してください。
比較テストでシステムプロキシ、ポート、ルーティングの問題を切り分ける
一度に変更する変数を1つだけにすると、障害の階層を特定しやすくなります。まず直接接続、次にHTTPプロキシを明示した接続、最後にSOCKS5を明示した接続を順番に実行し、ステータスコード、接続時間、ログの変化を記録します。直接接続は成功するのに2種類の明示的プロキシ接続が失敗するなら、原因はクライアントまたはノードにあります。明示的プロキシは成功するのに通常のリクエストが直接接続になるなら、システムプロキシの継承または環境変数に問題があります。
| テスト結果 | 優先して判断すること | 次に行うこと |
|---|---|---|
| ブラウザーと明示的なコマンドの両方が失敗 | コアが動作していない、ポートが誤っている、またはノードが利用できない | v2rayN のログを確認し、127.0.0.1 と待受ポートを照合して、利用可能なノードへ切り替える |
| 明示的なコマンドは成功するが、ブラウザーは失敗 | ブラウザーがシステムプロキシに従っていない、または拡張機能が競合している | プロキシ拡張機能を無効にし、ブラウザーを再起動して、独立したネットワーク設定を確認する |
| ブラウザーは成功するが、ターミナルは失敗 | ターミナルプログラムがシステムプロキシを読み取っていない | HTTP_PROXY、HTTPS_PROXY、または ALL_PROXY を設定し、新しいプロセスで実行する |
| HTTPは成功するが、SOCKSは失敗 | SOCKSポートまたはプロキシ種別の入力が間違っている | 実際のSOCKSまたはmixedポートを確認し、socks5h で再テストする |
| 接続は成功するが、一部のドメインだけ失敗 | DNSまたはルーティングの振り分けルールが一致していない | ドメイン名前解決の方針、ルールの適用結果、最終的な出力タグを確認する |
結論:明示的なプロキシテストが分岐点になる
まず curl から 127.0.0.1 と正しいポートを明示して接続できる状態にし、その後でブラウザーやターミナルへの継承問題を確認します。これにより、ノード、システム設定、アプリ設定の間で何度も試行錯誤する必要がなくなります。
ルーティングルールでテストリクエストが直接接続になっていないか確認する
プロキシポートが利用できても、すべてのリクエストが同じ出力経路を通るとは限りません。v2rayN のルーティング設定では、ドメイン、IP、プロトコル、受信タグに応じて、直接接続、プロキシ、ブロックを選択できます。テスト用アドレスが直接接続ルールに一致すると、ページは開くのに、結果だけを見ると「プロキシを通っていない」ように見えます。これはルールの動作であり、システムプロキシの障害ではありません。
- クライアントログでテスト対象のドメインを検索し、リクエストがローカル受信へ入っているか確認します。
- そのリクエストに適用されたルールと出力タグを確認し、direct、proxy、block を区別します。
- 一時的にシンプルなグローバルプロキシルールへ切り替えて比較し、テスト後に元のルーティング振り分けへ戻します。
- サブスクリプションを更新したら、アクティブなノードを選び直し、無効になった古いサーバー情報を使い続けないようにします。
- DNSまたはルーティングを変更したらコアを再起動し、その後、対象アプリも終了して再起動します。
よくある細部と最終確認の手順
システムプロキシの状態を頻繁に切り替えると、OSの設定画面に古い値が表示されたり、ブラウザーが起動時に読み込んだ設定を保持したりすることがあります。安定した手順は、対象アプリを終了し、コアとノードを確認し、システムプロキシを設定し直してからアプリを起動することです。ノード切り替え、ポート変更、DNS調整、ルーティング書き換えを同時に行わないでください。新しい問題が元の手がかりを隠してしまいます。
v2rayN は接続済みなのに、なぜブラウザーは直接接続になるのですか?
まずOSのプロキシ設定画面でアドレスとポートを確認し、ブラウザーのプロキシ拡張機能を無効にします。ブラウザーのバックグラウンドプロセスも完全に終了してから再起動し、クライアントログにアクセス先のドメインが記録されているか確認します。
ターミナルで HTTP_PROXY を設定したのに、新しいコマンドでも効かないのはなぜですか?
現在のプロセスの環境変数を表示し、値にプロトコル、アドレス、ポートが含まれていることを確認します。一部のツールは小文字の変数だけを読み取るため、http_proxy と https_proxy も設定し、新しいターミナルウィンドウで再テストします。
HTTP_PROXY と ALL_PROXY は同時に設定すべきですか?
切り分け中は同時に設定して構いません。HTTPおよびHTTPSリクエストは対応する変数を優先して使い、SOCKS5やプロキシ側での名前解決が必要なツールは ALL_PROXY を読み取ることがあります。使用するツールの動作を確認したら、必要な変数だけを残してください。
ノードを切り替えたらブラウザーを再起動する必要がありますか?
通常、ノードの切り替えだけでブラウザーを再起動する必要はありません。ただし、ポート、システムプロキシのモード、PAC設定が変わった場合は再起動してください。古い接続が長時間再利用されている場合も、すべてのウィンドウを閉じてからテストすると確実です。
サブスクリプションの更新に成功したのに接続できない場合は?
サブスクリプションの更新は設定一覧を取得できたことを示すだけで、すべてのノードが利用可能とは限りません。別のノードを選び、システム時刻を確認し、コアログから名前解決、ハンドシェイク、接続タイムアウトのどこで失敗しているかを判断します。
設定を戻す前のチェックリスト
- v2rayN の現在のアクティブノードが最新のサブスクリプションに含まれ、コアログで再起動を繰り返していないことを確認します。
- ブラウザー、ターミナルコマンド、クライアント画面が同じローカルポートを使用していることを確認します。
- ブラウザーにプロキシ設定の出所を1つだけ残し、システム設定と拡張機能が互いに上書きしないようにします。
- ターミナルの環境変数が現在のプロセスに渡され、完全なプロトコルプレフィックスが含まれていることを確認します。
- テスト対象のドメインが NO_PROXY、ブラウザーの除外リスト、直接接続ルールによって先に除外されていないことを確認します。
- 設定を変更したらコアへ再接続し、プロキシ設定を読み込む必要があるアプリも再起動します。
最終判断:まずアプリ、次にプロトコルで切り分ける
ブラウザーは正常でターミナルだけ失敗するなら、環境変数を確認します。ターミナルの明示的プロキシは正常でブラウザーだけ失敗するなら、プロキシの設定元を確認します。両方が失敗する場合は、コア、待受ポート、ノードログに戻ります。この順番で進めれば、通常はサブスクリプションの再構築や設定の大幅な変更は必要ありません。