« Windowsが起動しなくなったPCからデータを救出 | トップページ | iPhoneアプリの通信をパケットキャプチャ »

2010年11月18日

GRCのDNS BenchmarkでDNSをスピードアップ

ポッドキャスト「Security Now!」のSteve GibsonによるDNS性能測定ツール「DNS Benchmark」が完成し、Gibson Research Corporation(GRC)のサイトからダウンロードできるようになった。無料で使える。例によってアセンブラ言語で開発され、ファイルサイズはたった163KBである。

dns_benchmark

Google ChromeがDNSプリフェッチを取り入れたり、Google自身がDNSサーバを立ち上げたりして、DNS名前解決スピードがWebブラウジングの快適さにかなり関係しているということが徐々に認識されてきた。DNS Benchmarkは、公開されているDNSサーバに対してクエリを送信し、そのレスポンスを測定する。

測定している値は3種類ある。ひとつめはCached lookupsで、DNSサーバのキャッシュからの応答速度を測定する。まずクエリーを送信してレスポンスを待つ。この応答時間は無視する。次に同じクエリーを送信して、そのレスポンス時間を測定する。1回目のクエリーによって、その名前がキャッシュされたはずである。本当にキャッシュから返答しているかどうかを、レスポンス内のビットで確認する。DNSサーバは、さまざまなユーザから同じサーバ名のクエリーを受け取っている。実運用での名前解決は、キャッシュからの返答がほとんどであろう。この値にもっとも重きを置いて評価する。

ふたつめはUncached lookups。DNSサーバのキャッシュからではなく、相手ドメインのDNSサーバからの応答時間を測定する。たとえばeVNKhHzjoW.amazon.comのような、実際にはあり得ないサブドメイン名を生成し、DNSサーバにクエリーを送信する。他のユーザがこの名前を過去に問い合わせたことはあり得ないから、キャッシュに乗っていない。DNSサーバはDNSの階層をたどっていって、amazon.comのDNSサーバからの応答を得る。

三つめはDotcom lookupsで、測定対象のDNSサーバとインターネットの接続状態を確認する。eVNKhHzjoW.comのようなあり得ないドメイン名を生成し、.comのDNSサーバに問い合わせが行くようにして、応答時間を測定する。

DNS Benchmarkには、デフォルトで50個のDNSサーバが登録されている。これに加えて、自分の環境で使っているDNSサーバ、たとえばブロードバンドルータの内部DNSサーバや会社のDNSサーバを追加したり、不要なDNSサーバを削除したりできる。

さらにGRCのサイトのマスタファイルに4854個のDNSサーバが登録されている。これをダウンロードし、すべてのサーバに対して速度を測定し、その上位50サーバを自分専用のDNSサーバリスト(Custom Nameserver List)として使える。デフォルトで仕込んであるリストは、どうしてもアメリカ中心になりがちである。それを避けるための機能である。

私の自宅ネットワークは、So-netのADSLモデムがDNSサーバを内蔵している(192.168.1.1)。これをプライマリとし、セカンダリにSo-netのDNSサーバ202.238.96.26を設定している。Custom Nameserver Listを作成してベンチマークを実行した結果が以下の図である。クライアント同じセグメントにあるADSLモデム内蔵DNSサーバは、さすがにCached lookupsが速い。Uncached lookupsは上位10サーバであまり差がない。内蔵DNSサーバとSo-netのDNSサーバは、どちらもDotcom lookupsが遅い。

dns_benchmark_result1

インターネットの高速化のためという触れ込みで始まったGoogle Public DNSは、8.8.4.4が39位、8.8.8.8が44位とさんざんな結果に終わった。やはりサーバの速度ではなく、ネットワーク上の距離が大きく影響するのだろう。

Windowsは、プライマリDNSサーバと接続できなかったときだけ、セカンダリDNSサーバを使う。198.168.1.1のDotcom lookupsの遅さが気になるが、他のDNSサーバをプライマリにすると、もっとも頻繁に使うCached lookupsが遅くなってしまう。しかし、内蔵DNSサーバは家族だけが使っているものだ。GoogleやTwitterはキャッシュされるが、検索で見つけたサイトやTwitterで紹介されたサイトは外部のDNSサーバに問い合わせ、Uncached lookupやDotcom lookupとなる。プライマリDNSサーバをIIJ(210.130.1.1)にした方が全体のレスポンスが上がるのではないだろうか。セカンダリは第3位のInfosphere(202.239.113.18)にしてみる。

DNS Benchmarkは、DNSに関する攻撃対策がなされているかどうかもテストする。ひとつはDNSリバインディング攻撃で、残念ながら私の環境のトップ10はどれも未対策である。もうひとつはDan Kaminskyが報告したDNSスプーフィング(キャッシュ汚染)攻撃で、So-netは対策済みである。そのほかのサーバは対策済みかどうか判定できず、GRCが提供しているもうひとつのツールDNS Nameserver Spoofability Testを使用する必要がある。

(参考記事)
Chromeはなぜ速いのか
http://www.atmarkit.co.jp/news/analysis/200812/22/chrome.html

Google、無料DNSサービス「Google Public DNS」発表
http://www.itmedia.co.jp/enterprise/articles/0912/04/news018.html

(本ブログの関連記事)
Google Public DNSを使うと遅くなるかもしれない
http://raven.air-nifty.com/night/2009/12/google-public-d.html

|

« Windowsが起動しなくなったPCからデータを救出 | トップページ | iPhoneアプリの通信をパケットキャプチャ »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Windowsが起動しなくなったPCからデータを救出 | トップページ | iPhoneアプリの通信をパケットキャプチャ »