V2RayのDNSリーク確認方法とv2rayNの対策設定

DNSリークの原因と確認方法を解説。v2rayNのリモートDNSやルーティング、TUNモードの設定から、v2rayNGの確認項目まで紹介します。

この記事の要点

Webサイトへの接続元IPが変わっていても、DNSクエリがローカルネットワーク経由で送信されることがあります。ブラウザー、システムの名前解決機能、プロキシコアの3つの経路を確認し、基準値の記録、リモートDNSの設定、TUNの適用範囲、正常な直接接続時の名前解決と意図しない漏えいの見分け方を解説します。ノードに接続できており、DNSの送信先を確認したいPC・Androidユーザー向けです。

1. DNSリークとは:プロキシ経由にするクエリを確認

DNSはドメイン名をIPアドレスに変換しますが、Webサイトへの接続とDNSクエリが同じ経路を通るとは限りません。ブラウザーがプロキシ経由でWebサイトにアクセスする際、ドメイン名をプロキシ側で解決する場合があります。一方、ほかのアプリは先にシステムのDNSを使ってIPアドレスを取得し、その後にプロキシへ接続することがあります。この場合、Webサイトへの接続元は遠隔地でも、ローカルネットワークからアクセス先のドメイン名を確認できる可能性があります。

ここでいう「リーク」は、設定したルーティング方針を基準に判断します。プロキシ経由で名前解決するはずのドメインが、実際にはローカルネットワークや想定外のDNSリゾルバーに送られている場合は、設定を見直す必要があります。LAN内の名前や直接接続するWebサイトをローカルDNSで解決する設定なら、ローカルのリゾルバーが検出されても、設定全体が機能していないとは限りません。

アプリのクエリ 名前解決の入口 DNSルール 名前解決の送信先 再帰リゾルバー

2. DNSリークの確認:3つの状態を比較する

プロキシをオフにした状態で、インターネットへの接続元IP、DNSリゾルバーの運営元、利用中のネットワークを記録してから、プロキシをオンにして同じテストを行います。ランダムなテスト用ドメインを複数回照会できるDNSリークテストサイトを利用できます。テストサイトに表示されるのは通常、再帰リゾルバーの接続元であり、PCが直接接続しているDNSアドレスとは限りません。パブリックDNSのエニーキャストや位置情報データベースによって地域表示も変わるため、国旗だけで判断しないでください。

テスト状態記録する項目主な目的
プロキシをオフインターネットへの接続元、リゾルバーの運営元、ネットワークの種類現在のネットワーク環境の基準値を記録
システムプロキシのみオンWeb接続元、ブラウザーのセキュアDNSの状態、リゾルバーの変化ブラウザーが実際に使う名前解決経路を確認
TUNをオンリゾルバー一覧、IPv4・IPv6接続、コアのログシステム通信とDNSが取り込まれる範囲を確認

各状態で最低2回ずつテストし、設定を変更したらキャッシュを消去してテストページを開き直してください。Windowsではターミナルで次のコマンドを実行できます。システムのDNSキャッシュだけを消去するもので、ブラウザー独自のキャッシュは消去されず、DNSサーバーの設定も変更されません。

ipconfig /flushdns
Get-DnsClientServerAddress

2つ目のコマンドはPowerShell用です。各ネットワークアダプターのDNSアドレスを一覧表示でき、物理アダプターと仮想アダプターを見分けるのに役立ちます。ただし、これだけでリークの有無は判断できません。アダプターにルーターのアドレスが表示されていても、すべてのクエリがTUNを迂回しているとは限りません。また、nslookup example.comは通常のHTTPシステムプロキシを経由しません。このツールのクエリ経路を確認する参考にはなりますが、ブラウザーや端末全体のテストの代わりにはなりません。

判断のポイント:運営元を比べ、実際の送信先を確認する

プロキシのオン・オフで同じ地域のISPリゾルバーが検出された場合は、まず想定どおりの直接接続ルールによるものか確認します。プロキシ経由にする必要があるドメインについては、DNSログと物理ネットワークアダプターの通信を照合してください。すぐにノードを変更する必要はありません。

3. v2rayNのリモートDNSとドメインルールの設定

作業前に、v2rayNのバージョン、通信に使うコア、TUNで使うコアを記録します。DNS画面のレイアウトはバージョンによって異なります。以下は「設定」→「DNS設定」がある画面を前提としています。コアごとに設定欄が分かれている場合は、現在実際に使われている設定を編集してください。完全なカスタム設定を使っていると、GUIで生成した内容が上書きされる場合もあります。

  1. 現在の設定を記録

    「設定」→「パラメーター設定」を開き、ローカルの待ち受けポートや関連するコア設定を記録して、現在のDNS設定を保存します。ローカルの待ち受けポートが10808なら、アプリには実際のポートを指定してください。ほかの解説にある10809をそのまま設定しないでください。

  2. リゾルバーを使い分ける

    「設定」→「DNS設定」を開き、プロキシ経由のドメインに使うリモートDNSと、直接接続するドメインに使うローカルDNSを区別します。DoH対応の入力欄には、https://dns.google/dns-queryのような完全なエンドポイントを指定できます。IPアドレスのみ受け付ける欄にURLを入力しないでください。

  3. 送信経路を確認

    DNS設定の送信先オプション、または生成された設定のルーティングルールを確認し、リモート名前解決のリクエストが想定どおりプロキシ経由で送信されるようにします。ローカルDNSは、直接接続するドメインや起動時に必要な名前解決に利用できます。項目名に「リモート」とあるだけで、クエリがプロキシ経由で送信されていると判断しないでください。

  4. ドメインルールを確認

    「設定」→「ルーティング設定」を開き、ドメインルールを確認します。XrayのルーティングにあるAsIs、IPIfNonMatch、IPOnDemandは、ルーティングの照合時に名前解決を行うかどうかを制御するもので、DNSの暗号化設定ではありません。まずドメインルールが正しく適用されることを確認し、そのうえで名前解決後にIPルールとの照合が必要か判断してください。

  5. 設定を適用して再テスト

    設定を保存し、サービスを再起動するかノードに再接続して、コアの起動ログに設定エラーがないか確認します。次にDNSキャッシュを消去し、同じテストを繰り返します。一度に変更する項目は1つにし、正常に動作していた元の設定も保存して、必要に応じて元に戻せるようにしてください。

4. TUNでDNSリークを防ぐ確認項目:DNS、IPv6、ブラウザー

システムプロキシに対応していないアプリの通信も取り込みたい場合は、v2rayNのメイン画面で「TUNを有効にする」を検討してください。初回起動時は管理者権限が必要な場合があります。TUNを有効にしても、すべてのDNS迂回が自動的に防がれるわけではありません。バージョンによってはTUN専用のコアを使うため、DNS設定も通常のプロキシモードとは別に管理されています。

詳しく調べる場合は、物理ネットワークアダプターから想定外の宛先へ53番ポートのクエリが送信されていないか観察できます。時間帯を絞り、Webサイトのクエリ、LAN内のクエリ、ノード起動時の名前解決を区別してください。平文の53番ポート通信が見つからなくても、すべてのDNSがプロキシ経由だとは限りません。アプリが暗号化DNSサービスへ直接接続している可能性もあります。

判断のポイント:リゾルバー一覧の一致ではなく、対象ドメインをテスト

必要な直接接続時の名前解決は残し、プロキシ経由にするドメインについてDNSとアプリの通信がルールどおりか確認します。端末全体をプロキシ経由にする必要がある場合に限り、直接接続の例外を1つずつ見直し、LAN内サービスが正常に使えるか再確認してください。

5. v2rayNG(Android)のDNS確認リスト

v2rayNGはXrayコアを使用し、AndroidのVPNインターフェースを通じて対象アプリの通信を取り込みます。v2flyNGはV2Flyコアを使用するため、DNSやルーティングの設定項目をすべて相互に流用できるわけではありません。以下はv2rayNG向けの確認項目です。設定名や配置はバージョンによって異なる場合があるため、現在の画面表示に従ってください。

特定のアプリだけで異なるリゾルバーが表示される場合は、まずアプリごとのプロキシ設定と独自DNSを確認します。すべてのアプリで問題が起きる場合は、VPN接続、システムのプライベートDNS、現在のネットワークを調べてください。問題のある層を絞り込めるため、サブスクリプションを何度も更新したり、プロトコルを変更したりする必要はありません。

6. DNS設定後に接続できない場合:エラーから原因を絞り込む

リモートDNSの設定を誤ると、ノードは選択できてもWebページを開けないことがあります。まず変更した設定を元に戻し、サービスが起動できることを確認してから、ログを見て名前解決の失敗、接続タイムアウト、設定エラーを切り分けます。以下のエラーメッセージは複数の処理経路で表示されるため、前後の接続先アドレス、送信先の表示、発生時刻とあわせて確認してください。

エラー:no such host

原因と対処:通常は、該当する名前を正常に解決できなかったことを示します。エラーに表示されたドメインがノード、DoHエンドポイント、Webサイトのどれなのか確認し、入力ミス、リゾルバーへの到達性、起動時の名前解決経路を調べてください。このエラーだけでノードの障害と判断しないでください。

エラー:context deadline exceeded

原因と対処:処理が制限時間内に完了しなかったことを示します。DNSリクエストや、その後の接続が原因の可能性があります。DNSの応答待ちが明記されている場合は、リゾルバーの実際の送信経路とネットワークへの到達性を確認してください。ノードへの接続中に発生した場合は、ノードまでの通信経路を引き続き調べます。

エラー:network is unreachable

原因と対処:選択されたアドレスへのネットワーク経路がありません。IPv6、TUNのルート、インターフェースの変更が原因の可能性があります。ログに記録された宛先のアドレス種別を確認し、接続を作り直してルートを確認してください。インターフェースの問題を隠すために、むやみにDNSを変更しないでください。

設定を修正したら、同じブラウザー、ネットワーク、プロキシモードで再テストし、変更前後の結果を記録します。DNSリークテストで確認するのは、名前解決経路が想定どおりかどうかです。検出ページにサーバーが1つだけ表示されることではありません。コアの変更、クライアントの更新、ルーティングルールの変更後も、基準値と比較して再確認してください。

V2Rayクライアントをダウンロード