はじめに
自分で作った無料のチェックページ あなたは誰(who.1ms.dog) を使いながら、「VPN やプロキシを付けているのに、サイト側からは何が見えているのか」を整理したメモです。
先に書いておくと、このページの作者は私です。開発と文章作成には AI の補助を使っています。ソースは MIT ライセンスで公開しています:https://github.com/yt1988/who-are-you
IP を変えても残るもの
VPN が変えてくれるのは基本的に「出口 IP」だけです。ページを開いた瞬間、許可ダイアログなしで JavaScript から読める情報はほかにもたくさんあります。
// どれも権限なしで取れる
Intl.DateTimeFormat().resolvedOptions().timeZone // 例: "Asia/Tokyo"
navigator.languages // 例: ["ja-JP", "en-US"]
screen.width + "x" + screen.height
navigator.hardwareConcurrency
たとえば出口 IP がアメリカなのに、端末のタイムゾーンが Asia/Tokyo、言語が ja-JP だと、サイトから見ると「アメリカの IP を使っている日本の人」です。不正検知やボット判定はこういう食い違いを見ています。
よくある「ずれ」
実際に試すと、引っかかりやすいのは次のあたりでした。
- タイムゾーンと IP:一番目立つ。見せたい地域があるならシステムの時刻設定を合わせる。
- 言語と IP:ブラウザの言語設定の先頭が IP の国と違う。現地の人に見せる必要がなければ気にしなくてよい。
- DNS 漏れ:IP はプロキシ経由なのに、名前解決は普段の回線の DNS に飛んでいる。Clash / Mihomo なら fake-ip か TUN モード、V2Ray / Xray なら DNS もプロキシに通す。
- WebRTC 漏れ:WebRTC 経由で本当の IP が見える。プロキシクライアントの TUN モードか、ブラウザ側で制限する。
- スプリットトンネル(分流):国内サイトは直結、海外はプロキシ、という設定だと、サイトによって出口 IP が違う。意図した設定ならそのままでよい。
ページでは、こうした項目ごとに「直し方」と「もう一度確認」を並べています。
フィンガープリントの「珍しさ」の数え方
ブラウザフィンガープリントの解説では、項目ごとの珍しさを掛け算して「あなたは 100 万人に 1 人」と出すものがあります。ただ、4K 画面と高性能 GPU のように項目同士は独立ではないので、掛け算すると珍しさを過大に見積もります。
このページでは、組み合わせ全体をそのまま実際の出現回数で数えています。そのために匿名の集計だけを残していて、IP、完全なフィンガープリント、訪問ごとの記録は保存しません。集計に入りたくない場合は、ページの「Don't count me」か、ブラウザの GPC(Global Privacy Control)でオフにできます。
使い方
- 普段のブラウザで https://who.1ms.dog/ja/ を開く
- VPN やプロキシを付けて、もう一度開く
- 「サイトから見たあなた」の文章と、「まずここを直す」の項目を見比べる
プライベートウィンドウや別の VPN でもフィンガープリント ID が変わらないかを確かめるのも面白いです(再訪の記録はブラウザ内にだけ残ります)。
おわりに
「IP を隠す」と「誰か分からなくする」は別の話で、後者はブラウザ側の設定がほとんどです。判定がおかしい、こういう項目も見たい、というのがあればコメントか GitHub の Issue で教えてください。