VPNが本当に有効かどうかは、クライアントの「接続済み」表示だけでは判断できません。この表示は通常、ハンドシェイクの完了、プロキシポートの待受、または仮想ネットワークインターフェースの作成を示すだけです。ブラウザー、コマンドラインツール、その他のアプリの通信が目的の経路を通った証拠にはなりません。出口IP、DNSリクエストの送信先、各アプリの実際の経路をあわせて確認する必要があります。

検証で最も重要なのは比較することです。まず未接続時のネットワーク状態を記録し、接続後にまったく同じリクエストを繰り返します。接続後の一度きりの結果だけを見ると、もともとのローカル出口、ブラウザーキャッシュ、セキュアDNSサービスをVPN経路の効果と誤認しやすくなります。以下の手順はクライアントのブランドを問わず、システムプロキシ、TUNモード、OS標準のVPN設定、ブラウザー拡張機能などにも適用できます。

判断基準:アイコン、ハンドシェイク、実際の通信は別物

1回の接続は、設定の読み込み、プロトコルのハンドシェイク、システム側の引き継ぎ、アプリによるリクエスト送信という段階に分けられます。サブスクリプションリンクは設定を配布する入口にすぎず、インポートに成功してもノード情報を読み込めたことしか示しません。Shadowsocks、VMess、Trojan、VLESS、Hysteria2、TUICなどのプロトコルでハンドシェイクが完了した後も、クライアントはシステムプロキシ、仮想ネットワークアダプター、またはアプリ内プロキシを通じて通信を接続先へ渡す必要があります。

確認できるサイン 確認できること 単独では確認できないこと
クライアントに接続済みと表示される 設定が起動し、通常は経路のハンドシェイクが完了している すべてのアプリがその経路を使用している
VPNまたは仮想ネットワークアダプターの表示がシステムに現れる システムのネットワークインターフェースが確立された デフォルトルートとDNSが想定どおり切り替わった
出口IPが変わる 現在のテストリクエストが別の出口を経由した 他のアプリやDNSリクエストも同じ経路を通る
DNSの帰属先が変わる 現在の名前解決リクエストが別のリゾルバーを使用した Webリクエスト自体が必ず目的の経路を通った
対象アプリのリクエストが成功した 現在のルールで、そのアプリに利用可能な経路がある バックグラウンドプロセスや他のアプリも引き継がれた

したがって正確な結論は「クライアントのランプが点灯した」ではなく、「想定どおり引き継がれるアプリの新規リクエストが目的の出口から送信され、ドメイン名の解決も現在の設定に合っている」です。分岐設定を有効にしている場合、一部のリクエストが直接接続のままでも正常なことがあります。重要なのは、すべての通信が同じ出口に見えることではなく、ルールどおりの結果になっていることです。

基準値の記録と出口IPの比較

出口IPは最も直接的な第一段階の確認方法です。接続を切った状態で、信頼できるIP確認ページからグローバルIPアドレス、ネットワーク事業者、大まかな地域を記録し、その後に目的の経路へ接続して結果を更新します。アドレスとネットワークの帰属先が変われば、現在の確認リクエストが別のグローバル出口を通ったと判断できます。

  • ✅ 経路を切断し、通信を自動的に引き継ぐ可能性のあるブラウザー拡張機能を無効にして、現在の出口情報を記録する。
  • ✅ 目的の経路に接続し、クライアントでハンドシェイク完了を確認してから、新しいブラウザータブで確認する。
  • ✅ グローバルIPアドレス、自律システムの帰属先、地域を比較し、地図上の都市名だけで判断しない。
  • ✅ IPv4とIPv6を分けて確認する。デュアルスタック環境では、2種類のリクエストが異なる経路を選ぶことがある。
  • ✅ もう1つの想定対象アプリで再確認し、ブラウザー固有のプロキシ設定を全体の結果と取り違えない。

地域名は補助情報にすぎません。IPデータベースでは、同じアドレス帯がデータセンターの登録地、ネットワーク事業者の所在地、隣接都市などに表示されることがあります。そのため都市名が完全に一致しなくても、経路が機能していないとは限りません。より重要なのは、グローバルIPが変わったか、ネットワークの帰属先がノードの種類に合っているか、複数回の新規リクエストが想定した出口に留まるかです。

接続前後でアドレスがまったく同じでも、すぐにノードを何度も切り替えないでください。現在のモードがローカルプロキシポートだけを有効にし、システムプロキシやTUNを有効にしていない可能性があります。また、確認ページが分岐ルールによって直接接続と判定されていないかも確認します。ブラウザー拡張機能がシステム設定を上書きし、ブラウザーと他のアプリで逆の結果になることもあります。

ドメイン名解決:DNSの帰属先とリークの確認

DNSはドメイン名を接続可能なアドレスに変換します。Web通信が経路を通っていても、DNSリクエストがローカルネットワークのリゾルバーに送られていれば、アクセスしたドメイン情報が別の経路を通る可能性があります。これは一般にDNSリークと呼ばれます。確認の要点は「DNSの所在国が出口と完全に一致するか」ではなく、リゾルバーがクライアント、システム、ブラウザーで設定した方式に合っているかです。

最新のブラウザーでは暗号化DNSが有効になり、ブラウザー指定の名前解決サービスを直接使うことがあります。AndroidのプライベートDNS、システムのネットワーク設定、クライアント内蔵DNSが互いに設定を上書きする場合もあります。そのため、確認結果に第三者のDNSネットワークが表示されても、自動的にリークとは限りません。まず誰が名前解決を担当しているかを確認し、その経路が想定どおりかを判断します。

デスクトップ各OSでは、現在の名前解決設定を確認できます。以下のコマンドはシステム状態を確認するためのもので、ブラウザーがシステムDNSを迂回しているかを直接証明するものではありませんが、設定元の特定に役立ちます。

Windows
ipconfig /all

macOS
scutil --dns

Linux
resolvectl status

Windowsの出力では、アクティブなネットワークインターフェースが使用しているDNSサーバーを確認できます。macOSでは、異なるスコープのリゾルバーが表示されます。systemd-resolvedを使うLinux環境では、各インターフェースのDNSとデフォルトルートの状態を確認できます。クライアントがTUNで名前解決も引き継いでいる場合は、関連する仮想インターフェースやクライアント設定から手がかりを得られることがあります。

ブラウザー側のセキュアDNS設定も個別に確認します。ブラウザーがカスタムリゾルバーを強制している場合、システムコマンドに表示されるサーバーはWebのDNSクエリをまったく処理していない可能性があります。反対に、システムDNSを傍受してトンネル内へ転送するクライアントもあります。この場合、端末で見えるアドレスは受信入口にすぎず、最終的な再帰リゾルバーは別のネットワークにある可能性があります。

DNSの判断:出口地域とDNS地域が完全に一致しないだけでは、リークとは判定できません。DNSリクエストが想定したトンネルやプロキシの方針を迂回し、ローカルネットワークまたは想定外のリゾルバーで処理されている場合に限り、DNSの引き継ぎ、ブラウザーのセキュアDNS、分岐設定を見直します。

アプリ別リクエスト:直接接続しているアプリを特定する

出口IPのページで確認できるのは、その確認を実行したアプリが経路を通ったことだけです。ブラウザーが正常でも、ターミナル、ダウンロードツール、ゲーム、デスクトップ通信アプリが同じ経路を使うとは限りません。最も確実なのは、アプリごとに同じ種類のリクエストを送り、結果を接続方式と照合することです。

システムプロキシの影響を受けるのは、通常、システムのプロキシ設定を自動的に読み取るソフトウェアだけです。一部のコマンドラインツール、ゲーム、独自のネットワークスタックを持つアプリは設定を無視します。TUNモードは仮想ネットワークインターフェースを通じて、より広範なIP通信を引き継ぎますが、ルートの除外項目、アプリの迂回ルール、LANへの直接接続ルールの影響を受けることがあります。ブラウザー拡張機能の範囲はさらに狭く、通常はそのブラウザー内でプロキシに対応するリクエストだけを処理します。

  1. まずブラウザーで出口を確認し、結果を記録します。
  2. 次にコマンドラインのネットワークツールで同種の出口確認インターフェースへリクエストを送り、ネットワークの帰属先を比較します。
  3. 確認対象のデスクトップまたはモバイルアプリを開き、キャッシュの観察ではなく新しいリクエストを発生させます。
  4. クライアントの接続ログまたはアクティブな接続一覧を確認し、目的のドメイン、アドレス、対応するプロセスが現れているかを確認します。
  5. 一時的にグローバルルールへ切り替えて比較します。グローバルモードでは正常で分岐モードでは異常なら、問題は通常ルールのマッチングにあります。

分岐の特定には、「Webページを開けるか」よりクライアントログのほうが適しています。ログでリクエストが直接接続として記録されている場合は、ドメインルール、IPルール、プロセスルール、ルールの優先順位を確認します。名前解決後にドメインがコンテンツ配信ネットワークのアドレスへ接続されることもあり、ドメインルールだけを書いて実際のマッチングがIP段階で行われると、想定と異なる経路になる場合があります。

接続テストとサービスの利用可否も分けて考えます。経路のハンドシェイクが成功し、出口が変わったなら、通信経路の基本部分は成立しています。それでも対象サービスがエラーを返す場合は、アカウントの地域、キャッシュ、ブラウザーストレージ、時刻設定、サービス側の方針などが原因かもしれません。この場合、プロキシポートを変更し続けてもアプリケーション層の問題は解決しません。

典型的な誤判定と対処法

クライアントを起動しただけで、システム側の引き継ぎを有効にしていない

多くのプロキシクライアントでは、「コアの起動」と「システムプロキシの設定」を別々に制御できます。前者は端末上でプロキシポートを待ち受けるだけで、手動でプロキシを入力するアプリに適しています。後者がシステムのプロキシ設定を変更します。システムプロキシを読み取らないソフトウェアまで対象にしたい場合は、クライアントが対応していればTUNモードを検討し、仮想ネットワークアダプターの権限が付与されているか確認します。

分岐ルールがテスト対象を直接接続にしている

ルールモードでは、ドメイン、アドレス、プロセス、ルールセットに基づいて経路が決まります。出口確認サイトが直接接続ルールに一致すればローカル出口が表示されますが、他の対象は経路を通っている可能性があります。切り分けでは一時的にグローバルモードへ切り替えて比較し、経路自体に問題がないことを確認してから、ルールモードへ戻してルールを修正します。

IPv4は経路を通るが、IPv6は直接接続のまま

デュアルスタック環境では、ドメインから返された結果とシステムルートに応じてプロトコルファミリーが選ばれます。クライアントがIPv4だけを引き継ぎ、アプリがIPv6接続を優先すると、ローカルのIPv6出口が表示されることがあります。対処はシステム機能を無条件に無効化することではありません。まずクライアントが対象通信に対応しているか確認し、TUN、ルート、DNSの応答方針を調整します。

ブラウザーとシステムが異なるDNSを使っている

ブラウザーのセキュアDNSはシステムの名前解決設定を迂回できます。また、システムのプライベートDNSがクライアント設定より優先される場合もあります。管理しやすい方式を1つ明確に選びます。ブラウザーが暗号化DNSを自ら処理するか、クライアントがトンネル内で統一して処理するかのどちらかです。複数の設定を同時に有効にすると利用できる場合もありますが、問題の切り分けは難しくなります。

古い接続が経路の切り替え後も残っている

アプリが既存の接続を再利用し、接続プールやバックグラウンドプロセスが古い経路を保持し続けることがあります。ノードを切り替えた後は、テスト対象アプリに新しい接続を確立させます。アプリを終了して再起動し、ページを開き直すか、関連する接続状態を消去するほうが、更新ボタンを連打するより古いセッションの影響を除外できます。

  • ✅ ブラウザーは変わるが他のアプリは変わらない:システムプロキシの適用範囲を確認するか、適切なTUN引き継ぎに切り替える。
  • ✅ グローバルモードでは変わるがルールモードでは変わらない:直接接続ルール、ルールの順序、プロセスのマッチングを確認する。
  • ✅ IPは変わるがDNSはローカルネットワークを通る:クライアントのDNS引き継ぎとブラウザーのセキュアDNSを確認する。
  • ✅ IPv4は変わるがIPv6は変わらない:デュアルスタックのルーティングとクライアントのプロトコルファミリー対応を確認する。
  • ✅ すべての出口は正しいのに対象サービスが異常:アカウント、キャッシュ、地域判定、アプリケーション層のエラーを確認する。

プラットフォーム差:同じ設定でも結果が異なる理由

Windowsでは、システムプロキシとルーティングテーブルは別の仕組みです。ブラウザーはシステムプロキシを読み取っても、コマンドラインプログラムは読み取らないことがあります。TUNモードは仮想ネットワークアダプターとルートに依存します。route printでデフォルトルートと仮想インターフェースが転送に参加しているかを確認し、クライアントログとあわせて具体的なリクエストを判断します。

macOSのシステムプロキシはネットワークサービスごとに保存され、Network Extensionを利用するクライアントはシステムレベルのトンネルを作成できます。同じ端末に複数のネットワーク拡張機能をインストールしている場合は、互いに競合する引き継ぎ方式を同時に有効にしないでください。scutil --proxyでシステムプロキシの状態を確認し、scutil --dnsで名前解決のスコープを確認できます。

iOSでは、システムステータスバーのVPN表示は設定がアクティブであることだけを示します。ブラウザー、アプリ内リクエスト、DNSが想定どおりかどうかは、出口と実際のサービスリクエストで検証する必要があります。アプリによってはキャッシュを使用するため、経路を切り替えた後は新しい読み込みを発生させます。組織管理のアプリ別VPNと通常の個人用設定では、引き継ぎ範囲も異なります。

Androidには、VPNサービス、常時接続、プライベートDNS、アプリの除外リストが同時に存在します。アプリが除外されていれば直接接続のままです。プライベートDNSを個別に有効にすると、名前解決の経路もクライアントと異なる可能性があります。確認時はクライアントのアプリ別設定とシステムのネットワーク設定を確認し、鍵やVPNアイコンだけで判断しないでください。

Linuxでは、デスクトップのネットワークマネージャー、環境変数によるプロキシ、TUNルートが併存できます。ターミナルツールがプロキシを使うかどうかは、ツール自身の設定と環境変数に左右されます。システムレベルのルートはより広い通信に影響します。ip routeでルートを確認し、resolvectl statusでリゾルバーを確認したうえで、対象プロセスの接続記録と照合します。

総合確認:決めた順序で問題を絞り込む

結果が互いに矛盾しているときは、プロトコル、ノード、DNS、分岐ルールを同時に変更しないでください。一度に1つの変数だけを変えることで、どの設定が結果に影響したかを特定できます。まず経路の基本的な疎通、次にシステム側の引き継ぎ、最後にアプリのルールとDNSを確認することをおすすめします。

  1. 接続を切り、ブラウザー、コマンドライン、システムDNSの基準状態を記録する。
  2. 経路に接続し、クライアントのハンドシェイク完了と継続的なエラーがないことを確認する。
  3. ブラウザーで新しいリクエストを作成し、出口IPとネットワークの帰属先を比較する。
  4. IPv4、IPv6、DNSが現在の引き継ぎ方式に合っているか確認する。
  5. 経路を使う必要のある各アプリから新しいリクエストを送り、クライアントログを確認する。
  6. アプリごとに結果が異なる場合は、システムプロキシ、TUN、アプリの除外項目、分岐ルールを順番に確認する。
  7. 通常のルールに戻して再テストし、切り分け時の一時的なグローバル設定が問題を隠していないことを確認する。
最終判断:対象アプリの新規リクエストが想定した出口を示し、DNS経路が設定に合い、分岐結果がルールと一致している場合に限り、そのアプリでVPNが実際に有効だと確認できます。「接続済み」と表示されただけなら、クライアントが起動したことしか確認できず、通信経路の検証には代わりません。