WebRTCリークテスト
VPNは、ウェブサイトから見えるアドレスを変えます。それでもブラウザーは、ブラウザー内通話を支える機能であるWebRTCを通じて、別のアドレスを漏らすことがあります。このテストは2つを並べて比べます。
01 · 当方のサーバーから見えるもの
216.73.216.109
Amazon.com, Inc. · AS16509
あなたの通信が出ていくアドレスです。VPN接続中なら、VPNのアドレスになっているはずです。
02 · WebRTCが漏らすもの
比較には公開アドレスだけを使い、ブラウザー内で行います。ブラウザーは自分の公開アドレスを知るために、Googleが運営するものとCloudflareが運営するものの2つのSTUNサーバーに問い合わせます。これらのサーバーには、ほかのウェブサイトと同じようにあなたのアドレスが見えます。見つかった公開アドレスは、それがどのネットワークに属するかを調べるためだけに当方のサーバーへ送られます。ローカルアドレスは端末内にとどまり、当方は何も保存しません。
ブラウザーが複数のアドレスを知りうる理由
ウェブページの読み込みは単純なやり取りです。ブラウザーが尋ね、サーバーが答え、サーバーはあなたのネットワークについて一つのこと、つまりリクエストの送信元アドレスを知ります。ビデオ通話は仕組みが違います。2つのブラウザーが音声と映像を直接送り合おうとするため、それぞれが相手に、どこで自分に届くかを伝える必要があります。
これを担うのがWebRTCというブラウザーの機能です。通話の前に、使えそうなアドレスをすべて集めます。この段階をICE収集と呼びます。端末のネットワークインターフェースのアドレスを列挙し、STUNサーバーという公開の補助サーバーに一つだけ質問します。「私はどのアドレスから来ているように見えますか?」。それぞれの答えが「候補」になります。
どのウェブページでも、数行のJavaScriptでこの収集を始められます。通話も許可の確認も要らず、画面には何も表示されません。STUNへの質問がVPNのトンネルの外を通ったり、VPNが対象にしていないインターフェースを通ったりすると、候補の一覧にプロバイダーから割り当てられたアドレスが入ります。これがWebRTCリークです。
テストの内容
- ページが読み込まれると、当サーバーがリクエストの送信元アドレスを記録し、それを持つネットワーク名を示します。これが枠01です。
- ブラウザーが、どこにもつながらないWebRTC接続を開き、GoogleとCloudflareがそれぞれ運営する2つのSTUNサーバーに向けて、最大7秒間候補を集めます。
- 候補を分類します。プライベートの範囲(
10.x、172.16〜172.31、192.168.x)、キャリア共用のアドレス(100.64〜100.127)、リンクローカルアドレス、.localの名前はローカルとして分けます。残りが公開アドレスです。 - 最大6つの公開アドレスを当サーバーに送り、それぞれが属するネットワークを返してもらいます。
- 各公開アドレスを枠01と比べ、ラベルを付けます。
ラベルの読み方
| ラベル | 基準 | 意味 |
|---|---|---|
| 同じ | 当サーバーが見たアドレスと同一 | WebRTCは何も付け加えていません。VPNがオンなら、どちらもVPNのアドレスです。 |
| 異なる | 同じ種類(どちらもIPv4、またはどちらもIPv6)だが別のアドレス | VPNがオンなら、本当のアドレスが漏れている可能性が非常に高いです。 |
| 同じプロバイダー | 種類は違うが、枠01と同じネットワーク事業者 | たいていは同じ接続か同じVPNのIPv6側です。漏れではありません。 |
| 別のプロバイダー | 種類が違い、ネットワーク事業者も違う | たいていは、VPNがIPv4しかトンネルしていないときの、インターネットプロバイダーのIPv6アドレスです。 |
| 要確認 | 種類が違い、事業者を特定できなかった | VPNをオフにしたときのアドレスと、ご自身で比べてください。 |
一覧の下に、ローカルアドレスが見えているかどうかが表示されます。現在のブラウザーはそれを .local で終わるランダムな名前に置き換えるので、ウェブサイトには何も伝わりません。そのままの 192.168.x.x アドレスからもあなたにはたどり着けませんが、トラッカーが端末を見分けるのに使える情報が一つ増えます。
「公開アドレスなし」と「WebRTCはオフです」は、どちらもこの扉が閉じていることを意味します。ブラウザーが候補の収集を拒んだか、STUNの応答が返ってこなかったかのどちらかです。
このテストには、あなたがVPNを使っているかどうかを知る手段がありません。VPNなしなら、たとえばIPv4とIPv6の両方がある回線では、2つの異なる公開アドレスがあってもまったく正常で、ウェブサイトにはどのみち本当のアドレスが見えています。赤い結果が問題になるのは、VPNやプロキシであなたを隠しているはずの場合だけです。また、このテストが対象にするのはWebRTCだけです。DNSリークは別の問題です。
漏れの塞ぎ方
- VPNアプリで
- 「WebRTCリーク保護」「IPv6リーク保護」「キルスイッチ」といった項目を探し、3つともオンにしてください。プロバイダーがIPv6に対応していなければ、接続中はネットワークアダプターのIPv6を無効にしてください。ブラウザー拡張機能としてだけ提供されるVPNは、ページの通信を守ってもWebRTCは放置することがあるので、フル機能のアプリを選んでください。
- Firefox
about:configを開き、media.peerconnection.ice.default_address_onlyをtrueにします。するとWebRTCはデフォルトの経路、つまりトンネルだけを使います。media.peerconnection.enabledをfalseにすると、WebRTCが完全に無効になります。- ChromeとEdge
- 組み込みのスイッチはありません。GoogleがWebRTC Network Limiterという拡張機能を公開しており、「Use my default public interface only」というオプションがあります。uBlock Origin拡張機能にも「Prevent WebRTC from leaking local IP addresses」という似た設定があります。
- Brave
- 設定、プライバシーとセキュリティ、「WebRTC IP handling policy」で「Disable non-proxied UDP」を選びます。
変更するたびに、VPNに接続した状態でこのページを再読み込みしてください。目指すのは、公開アドレスの行がすべて「同じ」か「同じプロバイダー」になるか、公開アドレスがまったくない状態です。
よくある質問
WebRTCリークとは何ですか?
VPNやプロキシが通常のページリクエストから本当のIPアドレスを隠していても、ウェブページがブラウザーのWebRTC機能を通じてそれを入手してしまうことです。ページに必要なのは短いスクリプトだけです。カメラやマイクの許可は関係ありません。
VPNを使っていません。このテストは関係ありますか?
ほとんどありません。VPNなしなら、どのサイトもリクエストのたびに本当のアドレスをすでに受け取っているので、WebRTCが余計に明かすものはありません。このテストは、VPNやプロキシで居場所を隠すことを当てにしている人向けです。
WebRTCを無効にすると、何か使えなくなりますか?
完全にオフにすると、ブラウザーでの通話と画面共有が止まります。Google Meet、ウェブ版のMicrosoft Teams、Discord、Jitsiなどです。WebRTCをデフォルトの経路に制限するか、VPN自身の保護機能を使えば、通話は使えます。
VPNがオンなのに、テストにIPv6アドレスが表示されるのはなぜですか?
多くのVPNはIPv4しかトンネルしません。インターネットプロバイダーがIPv6も提供していると、IPv6宛ての通信がトンネルを迂回することがあります。VPNでIPv6リーク保護をオンにするか、端末でIPv6をオフにしてください。
.localのアドレスや192.168のアドレスは漏れですか?
いいえ。それらは自分のネットワーク内で端末を識別するもので、外部から到達したり位置を特定したりはできません。漏れとみなされるのは、VPNが示すものとは異なる公開アドレスだけです。