ネットワークの外部DNSとしてGoogleのパブリックDNSサーバーを検討しています。現在、ISPのDNSサーバーを使用しています。私も過去にOpenDNSを検討したことがありますが、最終的にはジャンプしないことにしました。
それぞれのサーバーがDNSリクエストを処理できる速度をベンチマークできるようにしたいと思います。 nslookupに役立つと思われるものは何もありません。
外部から提供されたDNSの往復時間をテストするにはどうすればよいですか?
パケットキャプチャプログラム(DNSのフィルタリング)を使用して、DNSクエリ/応答時間を追跡できます。これは、マシンまたは内部DNSサーバー(ある場合)で実行できます。すべてがほぼ同じであるので、これにより、Google DNSがISPと比較される速さの概算がわかります。
単にDig
とgrep
$ Dig @8.8.8.8 www.rimuhosting.com | grep "Query time:"
;; Query time: 15 msec
$ Dig @4.2.2.1 www.rimuhosting.com | grep "Query time:"
;; Query time: 289 msec
GRCの ドメイン名速度ベンチマーク を使用します。
namebench -GoogleのオープンソースDNSベンチマークユーティリティも見てみました。それは非常に包括的でした。
OpenDNSとGoogleDNSの間でいくつかの基本的なベンチマークを行いました。結果は、OpenDNSオファリングがGoogleのDNSサービスよりも一貫して高速であることを示唆しています。
http://ajclark.wordpress.com/2009/12/04/google-dns-vs-opendns-performance-comparison/
DNSサーバーへの接続を評価するために、Niceスクリプトを少し書きました。
cat >test_dns_list_speed.sh
#!/usr/bin/env ksh
site="www.google.com"
IPfile="$1"
samples=$2
if [ ! -f "$IPfile" ] || ! echo "$samples"|egrep -q "[0-9]+" ; then
echo "test_dns_list_speed.sh <file-ip-list> <samples>"
echo "<file-ip-list> newline separated list of DNS server IP adresses"
echo "<samples> how many DNS resolution samples to take"
echo "PURPOSE:"
echo " collect statistics about response times from list of DNS servers"
exit 1
fi
typeset -i i
while [ $i -lt $samples ]; do
i=$i+1
for IP in `cat $IPfile`; do
time=`Dig @$IP $site| awk '/Query time:/ {print " "$4}'`
IPtrans=`echo $IP|tr \. _`
eval `echo result$IPtrans=\"\\$result$IPtrans$time\"`
done
done
for IP in `cat $IPfile`; do
IPtrans=`echo $IP|tr \. _`
printf "%-15s " "$IP"; echo -e `eval "echo \\$result$IPtrans"`|tr ' ' "\n"|awk '/.+/ {rt=$1; rec=rec+1; total=total+rt; if (minn>rt || minn==0) {minn=rt}; if (maxx<rt) {maxx=rt}; }
END{ if (rec==0) {ave=0} else {ave=total/rec}; printf "average %5i min %5i max %5i ms %2i responses\n", ave,minn,maxx,rec}'
done
./test_dns_list_speed server_list 20
202.93.142.10 average 949 min 523 max 2229 ms 20 responses
202.93.142.20 average 897 min 515 max 2017 ms 20 responses
208.67.222.222 average 1235 min 530 max 3362 ms 20 responses
8.8.8.8 average 759 min 529 max 1624 ms 20 responses
Firebugプラグイン for FirefoxおよびIEには、すべてのファイル要求のロード時間をグラフィック表示する「ネット」タブがあります。
緑色で表示されているDNSルックアップを含むアクティビティに分類します。
単純なシェルスクリプト qtest.sh を使用できます。
%qtest -n3 "A a.gtld-servers.net" 172.19.1.1 62.4.16.70 62.4.17.69 208.67.222.222 208.67.220.220 156.154.70.1 156.154.71.1 3 172.19.1.1/ 172.19.1.1 49 62.4.17.69/62.4.17.69 61 208.67.222.222/208.67.222.222
ここに、 172.19.1.1
(ローカルリゾルバー)の方が高速で、ISPリゾルバー、OpenDNSの順です。
Pingを使用して、サーバーとDNSサーバーの間でパケットが行き来するのにかかる時間を把握できます。原則として、機能するものを変更しないでください。
OpenDNSの欠点は、存在しないドメインがOpenDNSの検索ページを指すAレコードで応答する可能性があることです。グーグルは現在それをしていませんが、彼らが単にDNSリゾルバーにそれから得るものを何も提供していないと仮定するのは愚かでしょう。
dnseval
from dnsdiag Windows LinuxおよびMacのチャームのように機能します。 (古いネームベンチよりもはるかに優れています) githubにダウンロード
これを使用するには、まず、テストする各DNSにIPアドレスの行が含まれるテキストファイルを記述します。mylist.txt
:
8.8.8.8
192.168.178.1
そして実行する
./dnseval -f mylist.txt yahoo.com # latency for cached sites
./dnseval -m -f mylist.txt yahoo.com # latency for sites not in cache
これはサーバーのキャッシュサイズを検査しませんが、はるかに簡単で高速なアプローチであり、実際のパフォーマンスとよく相関することを期待しています。