- レイテンシ(latency) を活用して、IPアドレスを 国・州・都市単位で推定 できる CLIツール
- Globalpingネットワークの3000以上のプローブ を利用し、各IPに対して pingとtraceroute測定 を実行し
- 大陸 → 国 → 州 → 都市 の段階ごとにレイテンシを比較し、最も低い値を持つ地域を実際の位置と判断する
- テスト結果では、ポーランド・フロリダ・マイアミ などでipinfoの結果と一致する精度を示した
- オープンソースのCLIツール として誰でも実行可能で、レイテンシベースのIP位置検証方式の実用性 を実証した
レイテンシベースのIP位置推定の概要
- IPアドレスを 国、米国の州、都市レベル で特定できる CLIツール を作成した
- ipinfoがVPNプロバイダーによる 虚偽の位置データ登録 を立証した事例を参考にした
- ipinfoは 大規模なプローブネットワーク を構築し、すべてのIPを追跡してpingテスト を行うことで実際の物理的位置を検証している
- このアプローチは 公開データの誤りを排除 し、レイテンシとホップ(hop)データ に基づいて信頼性の高い位置判定を可能にする
Globalpingネットワークの活用
- Globalping はオープンソースのコミュニティベースのプロジェクトで、コンテナ型プローブをセルフホスト できる
- 現在 3000以上のプローブ が世界中に分布
- ユーザーはこのネットワークを通じて ping、tracerouteなどのネットワークテスト を実行できる
- CLIツールは globalping-tsライブラリ を使って自動化されている
- 入力されたIPを複数の大陸からpingテスト
- 最も低いレイテンシを示す大陸を選択
- その後、該当する大陸内の複数のプローブで詳細測定を実施
測定段階ごとの構造
- 第1段階(大陸検出) : 各大陸ごとに5つのプローブでpingテスト
- 例の結果: ヨーロッパ 32.39ms、北米 137.18ms → ヨーロッパを選択
- 第2段階(国検出) : 選択した大陸内の50プローブで測定
- 結果: ポーランド 7.29ms、ドイツ 13.42ms、リトアニア 17.65ms → ポーランドと判定
- 第3段階(米国の州検出) : 米国内の50プローブでテスト
- NordVPNの「バハマ」IPが実際には フロリダ(0.45ms) と判定された
- 第4段階(都市検出) : 州内の36プローブで測定
- 結果: マイアミ(0.00ms)、West Palm Beach、Tampa の順
精度と限界
- Globalpingの「magic field」 は大陸単位でプローブをランダムに選ぶため、特定の国が漏れることがある
- このため 隣接国への誤判定 が発生する可能性がある
- 精度を高めるには 国・州ごとにプローブを直接指定 し、プローブ数を調整 する必要がある
- 例: 北米の場合、米国200、カナダ20、メキシコ10プローブを推奨
- 現在のバージョンは 未認証ユーザーでも実行可能 にするため最小限のプローブ数を使用している
- 認証時は1時間あたり500回のテストが可能で、追加クレジットは プローブのホスティングまたはGitHubスポンサー で確保できる
オープンソースツールの実行と活用
- コマンド:
geolocate $IP
–limit オプションで段階ごとのプローブ数を調整できる
- GitHubドキュメント で使い方全体を確認できる
- Pull Request による改善提案を歓迎
- 無料クレジットのリクエスト および プローブホスティングへの参加 が可能
結論
- レイテンシベースのIP位置推定 は、十分な観測地点を確保できれば 正確で実用的な方法 である
- GlobalpingネットワークとオープンソースCLIツール により、誰でも簡単にIPの実際の位置を検証できる
- VPNの位置偽装の検証、ネットワークルーティング分析、性能デバッグ など、さまざまな活用可能性が確認された
1件のコメント
Hacker Newsのコメント
単なるデモレベルなので実運用には不十分。
きちんと使うには各段階で最低500個のprobeが必要。
匿名ユーザーの制限を超えないようにするため、最適化はあえて避けたとのこと。
最初に複数の大陸で3回ずつ測定し、最も遅いprobeを捨てて速い側の近くに新しいprobeを追加する、というのを繰り返す。
こうすれば5段階に分ける代わりに、実際の位置をリアルタイムで「追跡」できそう。
latencyを スカラー潜在場 と見なし、その勾配を使う発想。
コミットメッセージが一語だけで笑ったが、むしろ人間味を感じる。
たとえば fakeroute のようなツールでもっと巧妙に偽装できる。
実用性はほとんどないが、面白いアイデア。
以前The Pirate Bayが北朝鮮に移転したふりをした事例のように、ASがBGP経路に偽のASを追加してもっともらしく見せることもできる。
こうした技術がVPNとの いたちごっこ につながるかもしれない。
関連参考: Redditの議論, HNの事例
1000/30Mbps回線でも2500msまで遅延する。
発表動画
pingベースの位置推定の限界は次の通り。
IPにはすでにDB上の位置情報があり、ルーティングの非対称性 が距離モデルを壊し、Anycast/CDNにより1つのIPが複数地域に存在し、ICMPは遮断されたり優先度が低かったりする。
自分はpingの代わりに HTTP(S)遅延 + ML(SVR) モデルを使い、3.9万件のデータで学習した。
CloudFront配下のサーバーを基準にすると約600kmの誤差だった。
精度より重要なのは サンドボックス検知、ジオフェンス型マルウェア、IP DBが失敗した際の補助的な位置シグナルの提供。
以前オランダの友人と話していたとき、自分は英国にいながらNLコンテンツにもっと低い遅延でアクセスできたことがあった。
おそらく ピアリング品質 の差だと思う。
IXPや主要なインターネット機関と協力して ルーティング・ピアリングデータ共有プロジェクト を進めている。
国によっては別の大陸のIXPと直接ピアリングしていて、遅延が数千km分違うこともある。
実際、ある国では2つの通信事業者間のトラフィックが国外を経由して戻ってくる例もある。
こうした現象を 測定ベースのジオロケーションアルゴリズム で補正している。
最終的な目標は、IXP、通信事業者、インターネットガバナンス機関がこうした問題を解決できるよう支援すること。
VDSLやDOCSISでは1km区間だけで5〜15msの遅延が出る。
ロンドン–アムステルダム間は約7msほど。
以前はオランダの主要都市でも光ファイバーが不足していた。
つまり実際より 8倍以上に膨らんだ距離。
英国のサーバーのほうが遠いのに、むしろpingは低くなる。
tracerouteベースのアプローチのほうがpingより現実的。
研究者のCalvinがNANOG96で 測定ベースのIPジオロケーション に関する発表を行う予定。
発表リンク
こういうプロジェクトがHNにもっと増えてほしい。
これはあまりに単純なので、三角測量(triangulation) を使えばもっと正確になりそう。
十分なprobeと多少の運があれば、意外とうまく動く。
もちろんもっと賢いやり方はたくさんある。
そのため最も近い単一の測定値を使うのが現実的。
有用なデータを得るには都市単位で数千ノードが必要。
RIPE IPmapはすでに公開ルーターの大半を正確にマッピングしている。
比較ツールとして ping.sx もおすすめ。
最後のhopのFQDNに 空港コードや都市コード が含まれていることが多く、役に立つ。