Linux
unbound
dns
bind
pcap

DNS Queryのリアルタイム統計をサーバ内で表示(dnstop編)

More than 1 year has passed since last update.

DNSの統計を出したり、性能を計るツールはいくつか出回っていますが、
今回はdnstopを動かしてみます。

dnstop:
http://dns.measurement-factory.com/tools/dnstop/

動きとしては、pcapを元にQueryの割合やSourceIPのランキングなどをリアルタイム表示します。
たぶん、ISP等で公開してるCache DNS等で無いと表示してもつまらないかもしれません。

パッケージ類もあるようですが今回はSourceを持ってくるところから行きたいと思います。
複雑な事はないのでサクっとインストールできると思います。

テスト環境

  • CentOS 6系(Digital Oceanを使ってます)

*ちなみにEPELにはあるみたいなのでSourceからいちいち入れなくてもOKのようです。

スクリーンショット 2016-01-08 17.56.59.png

インストールなど

1.必要なものをインストールします

データをキャプチャするのにpcap
データを描画させるのにncurses
を使う模様

# yum install libpcap-devel
# yum install ncurses-devel

2.Sourceをダウンロード

そしてtarball解凍まで
http://dns.measurement-factory.com/tools/dnstop/src/より

# wget http://dns.measurement-factory.com/tools/dnstop/src/dnstop-20140915.tar.gz
# tar zxvf dnstop-20140915.tar.gz
dnstop-20140915/
dnstop-20140915/LICENSE
dnstop-20140915/lookup3.c
dnstop-20140915/new_gtlds.h
dnstop-20140915/known_tlds.h
dnstop-20140915/inX_addr.h
dnstop-20140915/inX_addr.c
dnstop-20140915/hashtbl.h
dnstop-20140915/hashtbl.c
dnstop-20140915/dnstop.c
dnstop-20140915/CHANGES
dnstop-20140915/dnstop.8
dnstop-20140915/install-sh
dnstop-20140915/config.h.in
dnstop-20140915/Makefile.in
dnstop-20140915/configure
dnstop-20140915/configure.ac

3.configure&make

今回は特にオプション類は指定せずにmake installまで

# cd dnstop-20140915/
# ./configure
# make
gcc -g -O2 -DUSE_IPV6=1  -o dnstop dnstop.o hashtbl.o inX_addr.o lookup3.o -lresolv -lnsl -lpcap -lncurses
#
# make install
install -m 755 dnstop /usr/local/bin
install -m 644 dnstop.8 /usr/local/share/man/man8
#

4.コマンドを試す

まずは何も付けずに実行
何やらqueryのfilterも一応できるみたいですが
もう少し種類があっても良いような!?

# /usr/local/bin/dnstop
usage: usr/local/bin/dnstop [opts] netdevice|savefile
    -4  Count IPv4 packets
    -6  Count IPv6 packets
    -Q  Count queries
    -R  Count responses
    -a  Anonymize IP Addrs
    -b expr BPF program code
    -i addr Ignore this source IP address
    -n name Count only messages in this domain
    -p  Don't put interface in promiscuous mode
    -P  Print "progress" messages in non-interactive mode
    -r  Redraw interval, in seconds
    -l N    Enable domain stats up to N components
    -X  Don't tabulate the "source + query name" stats
    -f  filter-name

Available filters:
    unknown-tlds
    A-for-A
    rfc1918-ptr
    refused
    qtype-any
#

5.実行例

ちなみに
抜けるときは Ctrl + x
統計データをリセットは Ctrl + R

# dnstop -l3 eth0

今回はローカルにbindを立てた上で
dnsperf(nominum社のdns performance測定ツール)を
まわした状態でdnstopを叩いてみました
http://nominum.com/measurement-tools/

初期実行画面

どこのSourceIPからどのくらいQueryが来てるか確認できます

Queries: 0 new, 200 total                                                                                                            Fri Jan  8 04:52:00 2016

Sources             Count      %   cum%
--------------- --------- ------ ------
XXX.XXX.XXX.XXX       200  100.0  100.0

domainランキング表示

先ほどの実行例のように-l nオプションを付けておくとnのレベルでのランキング表示が可能になります
今回の実行例では最大表示範囲は3rdレベルまで可能になる

dnstopを実行した後の状態でキーボードの3を押してみましょう
問い合わせが来ているdomainの3rdレベルでのランキングに変わります
(dnstopをmanしたところによると、-l nはCPUとmemoryが消費が通常より多くなるみたいなので範囲指定時は注意)

3を押してみる
Queries: 0 new, 282 total                          Fri Jan  8 04:44:29 2016

Query Name                       Count      %   cum%
--------------------------- --------- ------ ------
ak.fbcdn.net                       18    6.4    6.4
a.root-servers.net                 13    4.6   11.0
google.com.mx                       3    1.1   12.1
168.192.in-addr.arpa                3    1.1   13.1
avqs.mcafee.com                     3    1.1   14.2
www.facebook.com                    3    1.1   15.2
www.google.com                      2    0.7   16.0
chttl.com.tw                        2    0.7   16.7
da1.akamai.net                      2    0.7   17.4
dns.msftncsi.com                    2    0.7   18.1
accounts.google.com                 2    0.7   18.8

ちなみに1を押すとトップレベル単位でのランキング

1を押すと
Queries: 0 new, 181 total           Fri Jan  8 04:48:53 2016

Query Name       Count     %   cum%
------------ --------- ------ ------
com                 90   49.7   49.7
net                 34   18.8   68.5
in-addr.arpa        24   13.3   81.8
ru                   4    2.2   84.0
uk                   3    1.7   85.6
org                  3    1.7   87.3
lan                  2    1.1   88.4
ar                   2    1.1   89.5
_tcp                 2    1.1   90.6
ch                   2    1.1   91.7

Queryタイプでも表示できます

qを押すと
Queries: 0 new, 397 total          Fri Jan  8 04:57:01 2016

Query Type     Count      %   cum%
---------- --------- ------ ------
A?               271   68.3   68.3
PTR?              50   12.6   80.9
MX?               39    9.8   90.7
AAAA?             37    9.3  100.0

その他

dnstop実行中に表示されているcum%は
cumulative percentage totals
の事のようです