世界を動かす技術を、日本語で。

自宅でのIP情報の活用法:レイテンシを使ってCLIでIPをジオロケートする方法

概要

  • IPアドレスの物理的な位置情報(国、州、都市)を特定するCLIツールの開発経緯
  • VPN業者がIPジオロケーション情報を偽装する手法の解説と、その検証方法
  • Globalpingを活用した、レイテンシとトレースルートによる高精度な位置特定アプローチ
  • 実際の計測手順と精度向上の工夫、今後の課題
  • オープンソースで公開中、誰でも利用・改良可能

IPアドレスのジオロケーション検証ツール開発

  • CLIツール を作成し、IPアドレスから 国・州・都市 まで特定可能
  • ipinfo などの既存サービスと比較し、精度を確認済み
  • VPN業者 がARINやRIPE、Geo DBプロバイダに 偽の位置情報 を提供する実態を解説
  • ipinfoは 大規模プローブネットワークレイテンシ・ホップ解析 による独自手法で物理位置を特定
  • 公開データに頼らず、 実測値 から信頼性の高いジオロケーションを実現

GlobalpingとCLIツールの仕組み

  • Globalping はオープンソースのプローブネットワークで、世界中に 3000台以上のプローブ を展開
  • pingやtraceroute を使い、IPアドレスの物理的な位置を推定
  • CLIツールは globalping-tsライブラリ を利用し、下記の流れで自動判定
      1. 入力されたIPに対し、各大陸から数回pingして 大陸特定
      1. 特定した大陸内の複数プローブからpingし、 最小レイテンシの国 を判定
      1. 米国の場合は州レベルまで同様に判定
      1. さらに都市レベルまで絞り込み

計測手法と工夫

  • ICMP ping は多くのネットワークでブロックされるため、最終的に traceroute を採用
  • tracerouteの 最終ホップのレイテンシ から物理的な距離を推定
  • より精度を高めるには、 複数手法・複数ポート の組み合わせやASN情報の重み付けも有効
  • 現状は 最小限のプローブ数 で高速・簡易に動作する設計
  • 精度向上にはプローブ数や選定ロジックの最適化 が今後の課題

実際の測定例と精度

  • 大陸判定 :5プローブで極めて高精度(例:ヨーロッパIP→32.39ms)
  • 国判定 :50プローブで十分な精度(例:ポーランド7.29ms、ドイツ13.42ms)
  • 州判定 :米国IPを州レベルで特定(例:Florida 0.45ms)
  • 都市判定 :最小レイテンシのプローブから都市を推定(例:Miami 0.00ms)
  • 注意点 :プローブ選定ロジックの都合で、対象国にプローブが割り当てられない場合もある

精度向上の工夫と今後の展望

  • 全大陸・全州ごとにプローブを明示的に指定 することで、精度や一貫性向上が可能
  • プローブ数の配分(例:米国200台、カナダ20台、メキシコ10台)が精度に大きく影響
  • カバレッジが薄い地域 では精度が低下する可能性
  • シンプルな設計 で未認証ユーザーでも利用可能、精度向上にはプローブ数の増加が有効

オープンソース・活用方法

  • ツールはオープンソース でGitHubに公開:https://github.com/jimaek/geolocation-tool
  • コマンド例:geolocate $IP
  • --limitオプションでプローブ数を調整可能(全フェーズに適用されるため注意)
  • GlobalpingのAPI制限 :未認証で250回/時、認証で500回/時まで利用可能
  • プローブホストやGitHub Sponsorsによる寄付でテスト回数増加
  • ドキュメントや改善PR歓迎、問い合わせや無料クレジット提供も可能(d@globalping.io)
  • プローブ設置も簡単 (コンテナ起動のみ):https://github.com/jsdelivr/globalping-probe

まとめ

  • レイテンシベースのジオロケーション は十分なプローブ数とカバレッジがあれば高精度
  • 未認証でも手軽に試せるツール として公開中
  • ネットワークルーティングやパフォーマンス解析 など多用途で活用可能
  • 今後の課題 はプローブの分布拡大と選定アルゴリズムの最適化

Hackerたちの意見

これは、Globalpingのようなサービスを使って地理的位置情報のニーズを探る小さなプロジェクトです。作るのは楽しかったけど、今の実装はデモに過ぎないし、ちゃんとしたプロダクションツールには程遠いです。本気で使いたいなら、各フェーズで少なくとも500のプローブが必要です。最適化は比較的簡単にできるけど、匿名ユーザーの制限を超えないようにするのが大変でした。

総プローブ数を減らすために最適化できるかもね(ただし、トータルの時間が長くなる可能性はあるけど、場合によっては早くなるかも)。まずは多大陸プローブをやって、例えば3回ずつやる。最も時間がかかるプローブを捨てて、最短時間の近くにプローブを追加して、1回プローブする。これを「プローブ、評価、捨てて追加」のパターンで繰り返す。オーケストレーターに全データを蓄積するから、理論的には各ラウンドで統計的な力を得るために意図的に複数のプローブを出す必要はない(最初を除いて)。これで、5つの離散的なフェーズではなく、リアルな位置を常に「追いかける」ことができると思う。最近、Veritasiumのポテンシャルとベクトル場についての動画を見たんだけど、レイテンシーは一種のスカラー・ポテンシャル場で、それを使ってレイテンシーの勾配を導き出せるかも。

理論的には3つで十分じゃない?

これがうまくいくとはちょっと驚き。レイテンシの変動が大きくて、時々地理的位置とは全然関係ないこともある。オランダの人と話したとき、イギリスからオランダのコンテンツに対して自分の方がいいレイテンシを持ってることに気づいた。おそらく、ピアリングが良いからだろうね。

近くのPoPに近づいて、ほとんどキャッシュされたコンテンツをリクエストするだけじゃない?アムステルダムはすごく繋がってるから、そこにPoPがあるとは思えないし。あと、7~8年前まではオランダの主要都市でもほとんどの場所にファイバーがなかったから、今はほとんどカバーされてるけどね。

それはローカルループのレイテンシーかも。VDSLやDOCSISだと、最初の1kmだけで5~15msのレイテンシーが出ることもあるし。ロンドン(例えばテレハウス)からアムステルダムまでは大体7msくらいだよ。

レイテンシの変動がすごいよね… そうそう。例えば、俺の街からフランスにある専用サーバーまでの距離は250キロって分かってるんだけど、サーバーにpingを打つと、俺の場所を中心に円を描くと半径2000キロになるんだ。距離にして約8倍。自分のIPがアメリカにないことは証明できるけど、それでもあんまり正確じゃないよね。実際、俺のサーバーよりも2倍離れたイギリスのサーバーの方が、常にpingが低いことが多い。TFAのアプローチ、特にPingじゃなくてtracerouteを使ってるのがいいね。

測定対象のホストが、ソースIPに基づいてping応答に追加の人工レイテンシを導入して、測定された位置を偽装するのはどのくらい現実的だと思う?

完全に可能だけど、こういう状況では実際には起こらないことが多いね。

不可能ではないけど、最初からpingに応答しない方がずっと簡単だと思う。

完全に可能だよ。もっとクールなトリックもできるし、例えばhttps://github.com/blechschmidt/fakeroute。無意味?ほぼ確実にそうだね。

XfinityとCharterがほとんどの近所の回線を過剰供給しているおかげで、アメリカのインターネットユーザーのかなりの部分に対して、バッファーブロートの影響で既にそうなってるよ(1000/30の接続で最大2500ms!)。

Hacker Newsで議論の続きを見る