トップシェアCDN(Cloudflare、Akamai、Cloudfront)およびgoogle.com、Fastlyについて、GSLBの振る舞いをGoogle Public DNSを使いチェックします。
実行
結果の読み方
- Cloudflare
- Anycastを利用しているため、IPアドレスは常に一定
- サーバの場所はhttpレスポンスのcf_rayに含まれる
- NRT:東京
- KIX:大阪
- Akamai
- 国内10か所程度にサーバあり
- DNSおよびHTTPからのサーバ特定は不可能
- AS番号でリクエストナビゲーションされている?
- Akamai国内GSLBメモ
- Cloudfront
- サーバの場所は、httpレスポンスのX-Amz-Cf-Popに含まれる
- また、IPv4の場合、IPアドレスを逆引きした名前でサーバの場所(リージョン)が特定できる
- NRT:東京
- KIX:大阪(実際には使われていない?)
- IPv6の場合、逆引き設定されていない
- Google
- IPアドレスを逆引きした名前でサーバの場所を特定可能
- NRT:東京
- KIX:大阪
- IPアドレスを逆引きした名前でサーバの場所を特定可能
- Fastly
- サーバの場所はhttpレスポンスのx-served-byに含まれる
- TYO、HND:東京
- ITM:大阪
- IPv6は設定していません(無料プランでIPv6をオンにする方法が不明)
- サーバの場所はhttpレスポンスのx-served-byに含まれる
仕組み
Google public DNSに、DoH(DNS over HTTPS)を使いedns_client_subnet付きでdnsリクエストを投げ、戻ってきたIPアドレスと逆引きしたホスト名を表示しています。
- Cloudflare: www.kosho.org
- Akamai: www.akamai.com
- Cloudfront: xxxx.cloudfront.net
- Google: www.google.com
- Fastly: kosho-test.global.ssl.fastly.net
また、Cloudflare、Cloudfront、Fastlyに関しては、Headリクエストを投げ、httpレスポンスに含まれる以下の変数を表示し、併せてheadの受信にかかった時間(ミリ秒)を表示しています:
- Cloudflare: cf-ray
- CloudFront: X-Amz-Cf-Pop
- Fastly: x-served-by
実際の処理は以下のjavascriptを利用しています。
- https://www.kosho.org/tools/js/gslb-check.js
- 使用しているサブルーチンの概要は以下です:
- get_ip(hostname); ホスト名からのIPアドレス引き
- get_name(client_ip); ipアドレスから名前(逆引き)
- get_asn(client_ip); ipアドレスからAS番号取得
- check_latency(url);URL取得にかかった時間の取得(Web Performance APIを利用 し、URLリクエストにかかったdurationを表示) )
集計結果
公開予定
各種ツール
- BGP Looking Glass
- AS番号関連
- Peering DB
- Opera VPN (無料VPNが利用できる、VPNの出口はNY)
課題
- Akamaiの非SSL用キャッシュサーバの収集
- 非SSL配信で計測に使えるURLを見つける
- GeoIPによる集計
- 都市ベースのデータベースが必要です(お金ありません:協力してくれる人募集です)
- マイナーCDNの収集
- Limelight、Cdnetworks、国内CDN事業者
- 高トラフィックOTT(Youtube、Netflix)
- Netflix
- 東京と大阪の2か所にサーバを配置?
- URLの動的な生成によりリクエストナビゲーションを行っている(ユザーの位置により、アクセス先ホスト名が異なる)
- 例: (oca = OpenConnect Appliance)
- ipv4-c002-tyo001-ix.1.oca.nflxvideo.net
- ipv4-c002-osa001-ix.1.oca.nflxvideo.net
- 例: (oca = OpenConnect Appliance)
- そのため、リクエストナビゲーションの振る舞いを調査するには、ブラウザエミュレーターの実行が必要であり、 DNSやシンプルなHTTPリクエストでは困難。
- Youtube
- 動的なURLの生成によりリクエストナビゲーションを行っているように思われるが、詳細は不明(生成されたURLには地理情報を含まない)。
- Netflix
- AS番号の表示
- whois.radb.netへのラッパスクリプトを自作。ただし、時間がかかる。
- ネットワーク的なサーバの配置状況
- クライアントからの経路
- ナビゲーションの第3者検証
- 第3者による配信サーバへのレイテンシ比較
- 国外からの配信や遠いサーバへのリクエストナビゲーションのあぶり出し
- Fastly
- IPv6の有効化:無料でsslが効く配信ポイントの作成方法が不明。
- HTTP Headリクエストのレイテンシ
- 現在のルーチンは暫定版(たまに0になったりする。TCPオープンの時間も計測可能なはずだが、上手く値が取れない)。
参考文献
- Abnormal Request Routing to Netflix Servers
これは無料tlsの設定ですか?
https://docs.fastly.com/products/tls-service-options-ja#fastly%E3%81%AE%E5%85%B1%E6%9C%89%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E7%84%A1%E6%96%99-tls
https://docs.fastly.com/ja/guides/setting-up-free-tls#http2-ipv6-tls-12%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88