LEAK GUIDE

DNSリークとは?リーク検出の技術解説

リークテストでは、Webの出口、WebRTC、DNS、IPv6、環境の一貫性をあわせて確認します。ここでは、本当のリークと、正常なルーティングの振り分けやプロキシモードによる見かけ上の現象を見分ける方法を解説します。

リークテストに戻る

Technical Notes

WebRTC・UDP・DNSリークの解説

リークテストでは、Webの出口、WebRTC、DNS、IPv6、環境の一貫性をあわせて確認します。ここでは、本当のリークと、正常なルーティングの振り分けやプロキシモードによる見かけ上の現象を見分ける方法を解説します。

WebRTCリークとは

WebRTCはブラウザーに組み込まれたリアルタイム通信機能で、ビデオ会議、音声通話、P2Pファイル転送などに使われます。ピアツーピア接続を確立するため、ブラウザーはSTUNサーバーを通じて、インターネット側から見た自分のアドレスを調べます。この問い合わせには通常UDPが使われますが、一般的なHTTP / SOCKSプロキシは必ずしもUDPを処理しません。

STUNリクエストがプロキシを迂回してローカルネットワークから直接送信されると、Webページのスクリプトが実際のグローバルIPを取得できてしまう可能性があります。この処理には通常カメラやマイクの許可が不要で、追加の確認ダイアログも表示されないため、プロキシがリアルタイム通信のトラフィックまで本当にカバーしているかの確認によく使われます。

このツールの検出方法

このページは複数のSTUNサーバーに対してWebRTCのプローブを試み、返されたグローバルアドレスを収集してHTTP出口IPと比較します。返されたアドレスが現在の出口と一致すれば、UDPの経路はプロキシが処理している可能性が高く、ローカルのキャリアのアドレスが返された場合は詳しく調べる必要があります。

  • UDPがプロキシの出口を経由しているかを確認
  • IPv4 / IPv6がそれぞれ個別にリークしていないかを検出
  • STUNの宛先ごとに異なるルーティングルールが適用されていないかを観察

STUNとUDPの役割

UDPはコネクションレス型のトランスポートプロトコルで、音声、ビデオ、ゲーム、リアルタイム通信によく使われます。STUNの役割はシンプルで、サーバーにUDPパケットを送ると、サーバーから見えた送信元IPを返してくれます。WebRTCはこの結果をもとに接続をネゴシエートするため、STUNから見えたアドレスがリークを判断する重要な証拠になります。

結果の見方

リークを検出せずWebRTCが返したグローバルIPが、現在のプロキシの出口と一致しています(IPv6は同じ/64かどうかで判断)。グローバルIPがまったく返されない場合は、今回のテストで応答が得られなかっただけで、安全である証明にはなりません。
リークの疑いWebRTCが別のグローバルIPを返し、その位置、キャリア、またはASNが実際のローカルネットワークを示しています。
正常なスプリットトンネル複数のSTUNサーバーが異なるプロキシの出口を返していますが、それらの出口は設定したルーティングやルールの想定どおりです。

リークが見つかったときの対処法

  • プロキシクライアントをTUNモードに切り替え、WebRTCのUDPもプロキシの出口を経由させます。
  • Chrome / Edge:企業ポリシー<code>WebRtcIPHandling</code> = <code>disable_non_proxied_udp</code>を設定します。Firefox:<code>about:config</code>で<code>media.peerconnection.ice.proxy_only_if_behind_proxy</code>を有効にします。WebRTCを完全に削除しないでください。WebRTCのないブラウザーは、それ自体が識別の手がかりになります。
  • Brave:WebRTC IP処理ポリシーを「Disable non-proxied UDP」に設定します。
  • 会議や音声通話が必要な場合は、まずプロキシクライアントでUDP / STUNのルーティングルールを修正してください。

出口IPが複数あってもリークとは限りません

スプリットトンネルを設定している場合、STUNサーバーごとに異なるノードを経由することがあります。たとえば、GoogleのSTUNは米国の出口、CloudflareのSTUNは香港の出口を経由する、といった具合です。これは必ずしも危険ではなく、重要なのはルール設計どおりかどうかです。本当に注意すべきなのは、すべてのWebRTCアドレスが物理的な所在地やローカルのISPを示している場合です。

DNSリークも同じく重要

WebRTCリークで露出するのは「実際のIP」、DNSリークで露出するのは「どのドメインを問い合わせたか」です。DNSリクエストがプロキシを経由しない場合、ローカルのキャリアや上流のリゾルバーから、どのサイトにアクセスしたかが見えてしまいます。

このページのDNSリーク検出は実際のプローブを使用しています:CleanIP.ioは米国ユタ州(ns1)と米国ロサンゼルス(ns2)にそれぞれ権威NSを1台ずつ運用し、dp.cleanip.ioゾーンを提供しています。検出のたびに8つの独立した<uuid>.dp.cleanip.ioサブドメインを名前解決します。これらのクエリはシステムのスタブリゾルバー -> ISP / VPN / パブリック再帰リゾルバーを経由して最終的に当社の権威NSに届き、問い合わせ元リゾルバーのIPと(あれば)EDNS Client Subnetを記録したうえで、比較のためにお返しします。

注目すべきシグナルは2つです。①ECSサブネット:再帰リゾルバーがクライアントのサブネットを転送している場合(Google 8.8.8.8でよく見られます)、そのサブネットはクライアントの身元を示す決定的な証拠になります。②リゾルバーの国:パブリック再帰リゾルバー(1.1.1.1 / 8.8.8.8)が国をまたいでエニーキャストされるのは正常です。重要なのは、VPNを有効にしているつもりのときに、リゾルバーの位置がHTTP出口と同じ国かどうかです。

プロキシモードとTUNモードで結果が異なる理由

HTTP / SOCKSプロキシは通常TCPしか扱わないため、STUNに必要なUDPを送信できず、ページに「リークなし」と表示されることがあります。これはUDPが安全にプロキシされたことを意味するのではなく、UDPがSTUNサーバーに届かなかっただけです。TUNモードは仮想ネットワークアダプター上でTCPとUDPの両方を引き受けるため、実際のUDPの出口経路をより正確に反映します。

モードSTUN UDP結果の意味
HTTP / SOCKSプロキシ送信できない場合あり「リークなし」はUDPがブロックされただけの可能性あり
TUN / 仮想アダプター実際に送信可能UDPの出口とルーティングルールの検証により適している

実際に使用しているネットワークモードで再テストすることをおすすめします。普段TUNを使っているならTUNでテストし、ブラウザーのプロキシに頼っている場合は、UDPがブロックされただけなのに安全と誤判定していないかも確認してください。WebRTCリークを判断する際は、返されたIPのASN、位置、そしてスプリットトンネルの想定と一致しているかに注目してください。

mimetic
mimetic
mimetic