2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

nspingでDNSクエリーパケットの応答時間を計る!

 DNSフォワードエラー! でも話した話題だが、例えば、ローカルネットワーク側にDNSサーバを置いてクラスCのIPアドレスの名前解決のみ行いたい場合などは、グローバルネット側の名前解決をプロバイダ側のDNSサーバに名前解決を委託する場合が多い。
そのような時に便利なDNSステートメントに forward only; と forwarders が有る。通常、以下のような構文でnamed.conf中で指定する。

options {
     directory “/etc/bind”;
     forward only;
     forwarders {
             xxx.xxx.xxx.xxx; 
← 名前解決を委託するサーバのIPアドレス(ISPのDNSサーバ等)
     };

};
以下省略

forward only は forwarders で指定するサーバーに問い合わせして一定時間に回答を得られなくても自分自身では勝手に名前解決することはない、つまり常にクエリーをフォワードする。
さて、そのためにもforward先のサーバが落ちていたりすると、グローバル側の名前解決は全面的にforwardersで指定したDNSサーバが頼りとなるので、こいつが事故るとインターネットに一切繋がらなくなる。
そこで、事前にforward先のDNSサーバに何か障害があるかを察知するコマンド nsping を紹介する。これは、forward先のDNSサーバが命みたいなネットワークではとても重宝すると思う。


1.nspingとは
DNSクエリパケットをforward先のDNSサーバに送り、レスポンス(回答)が戻ってくる時間を計測して合否を判定するコマンドだ。pingに非常に似ているかも知れない。


2.nspingのインストール
nspingは、FreeBSDのportsコレクションに有るだけで、Linux用は特に見つからない。本来、FreeBSDで利用するのがベストだろうが、それをここではFreeBSDのportsコレクションのソースをコンパイルしてLinux用にして使ちゃおうというもくろみだ。URLは、 ここ あたりにある。

1)ソースのゲット
bigthunder:~# cd /usr/local/src/
bigthunder:/usr/local/src# ls -al

total 8
drwxrwsr-x 2 root staff 4096 Jun 22 2005 .
drwxrwsr-x 9 root staff 4096 Jun 22 2005 ..
bigthunder:/usr/local/src# wget ftp://ftp.freebsd.org/pub/FreeBSD/ports/local-distfiles/roam/nsping.tar.gz
–13:31:34– ftp://ftp.freebsd.org/pub/FreeBSD/ports/local-distfiles/roam/nsping.tar.gz
=> `nsping.tar.gz’
Resolving fifo… 192.168.0.12
Connecting to fifo[192.168.0.12]:8080… connected.
Proxy request sent, awaiting response… 200 OK
Length: 11,655 [application/x-tar]

100%[====================================>] 11,655 –.–K/s

13:31:34 (3.14 MB/s) – `nsping.tar.gz’ saved [11655/11655]

2)ソースの展開
bigthunder:/usr/local/src# tar zxvf nsping.tar.gz
nsping-0.8/
nsping-0.8/nsping.c
nsping-0.8/Makefile
nsping-0.8/nsping.h
nsping-0.8/dns-rr.c
nsping-0.8/dns-lib.c
nsping-0.8/dns-rr.h
nsping-0.8/dns-lib.h
nsping-0.8/README
nsping-0.8/COPYING
nsping-0.8/nsping.8

3)Makefileの編集
FreeBSDのports用のソースのため、Makefileを一部編集する。

bigthunder:/usr/local/src# chown -R root.root nsping-0.8
bigthunder:/usr/local/src# cd nsping-0.8/
bigthunder:/usr/local/src/nsping-0.8# vi Makefile

CFLAGS= -g
#Solaris
#CFLAGS= -g -Dsys5
LDFLAGS=
LIBS= -lnsl -lresolv ←Linuxの場合は、これを追加
#Solaris
#LIBS= -lnsl -lsocket -lresolv
TARGET= nsping
以下省略

4)コンパイル&リンク
bigthunder:/usr/local/src/nsping-0.8# make
cc -g -c -o nsping.o nsping.c
cc -g -c -o dns-lib.o dns-lib.c
cc -g -c -o dns-rr.o dns-rr.c
dns-rr.c: In function `dns_rr_query’:
dns-rr.c:26: warning: return makes integer from pointer without a cast
cc -g -o nsping nsping.o dns-lib.o dns-rr.o -lnsl -lresolv
bigthunder:/usr/local/src/nsping-0.8# make install
mv nsping /usr/local/sbin


3.nspingを使ってクエリパケットの応答を計測
bigthunder:/# nsping -z xxxxxxxxx.com
(ゾーン名) ns.xxxxxxxxx.com(forward先のDNSサーバ)
NSPING ns.xxxxxxxxx.com (xxx.xxx.xxx.xxx): Domain = “xxxxxxxxx.com”, Type = “IN A”
– [ 0 ] 100 bytes from xxx.xxx.xxx.xxx: 23.791 ms [ 0.000 san-avg ]
– [ 1 ] 99 bytes from xxx.xxx.xxx.xxx: 23.140 ms [ 23.465 san-avg ]
– [ 2 ] 100 bytes from xxx.xxx.xxx.xxx: 25.413 ms [ 24.115 san-avg ]
– [ 3 ] 100 bytes from xxx.xxx.xxx.xxx: 21.773 ms [ 23.529 san-avg ]
– [ 4 ] 100 bytes from xxx.xxx.xxx.xxx: 23.286 ms [ 23.481 san-avg ]
– [ 5 ] 99 bytes from xxx.xxx.xxx.xxx: 22.377 ms [ 23.297 san-avg ]
– [ 6 ] 99 bytes from xxx.xxx.xxx.xxx: 23.017 ms [ 23.257 san-avg ]
– [ 7 ] 100 bytes from xxx.xxx.xxx.xxx: 23.690 ms [ 23.311 san-avg ]
– [ 8 ] 99 bytes from xxx.xxx.xxx.xxx: 22.416 ms [ 23.211 san-avg ]
– [ 9 ] 100 bytes from xxx.xxx.xxx.xxx: 22.307 ms [ 23.121 san-avg ]
– [ 10 ] 100 bytes from xxx.xxx.xxx.xxx: 23.816 ms [ 22.961 san-avg ]
– [ 11 ] 100 bytes from xxx.xxx.xxx.xxx: 23.169 ms [ 22.980 san-avg ]
– [ 12 ] 99 bytes from xxx.xxx.xxx.xxx: 21.831 ms [ 22.884 san-avg ]

Total Sent: [ 13 ] Total Received: [ 12 ] Missed: [ 1 ] Lagged [ 0 ]
Ave/Max/Min: 22.884 / 25.413 / 21.773

こんな感じになる。ちゃんと返事が有ればforward先のDNSサーバは元気な証拠だ

以上

コメント