unbound

概要

オランダのNLnet Labsが開発しているDNSキャッシュサーバ(DNSリゾルバ)
他のDNSサーバに問い合わせを行ない、ホスト名とIPアドレスの変換結果をキャッシュするDNSサーバ
英訳すると「足かせをはずされた、縄目を解かれた」とbindからの脱却を意味している

ラウンドロビンは、Unbound 1.4.17より利用可能(rrset-roundrobinにて設定する)

unbound-control 操作方法

root@akat:/etc/unbound# vi unbound.conf

==========================================
remote-control:
        control-enable: yes
        control-interface: 192.168.0.100 # リモートでコントロールする場合に必要
==========================================

root@akat:/etc/unbound# unbound-checkconf # 設定ファイルを確認する
unbound-checkconf: no errors in /etc/unbound/unbound.conf
root@akat:/etc/unbound# unbound-control status # 稼動情報を表示
version: 1.4.16
verbosity: 1
threads: 1
modules: 2 [ validator iterator ]
uptime: 2 seconds
unbound (pid 3356) is running...

root@akat:/etc/unbound# unbound-control stats # 統計情報を表示(内部カウンタを0にする)
# stats_noreset だと内部カウンタを0にしない
thread0.num.queries=182 # スレッド0が受け取ったクエリ数
thread0.num.cachehits=150 # キャッシュが利用できた数
thread0.num.cachemiss=32 # 再帰検索が必要だった数
thread0.num.prefetch=0 # prefetchしたキャッシュが利用された数。cachehitsに含まれる
thread0.num.recursivereplies=32 # 再帰処理を必要としたクエリ数。thread0.num.cachemissよりも少ない場合は、タイムアウトが発生している可能性がある
thread0.requestlist.avg=0 # The average number of requests in the internal recursive processing request list on insert of a new incoming recursive processing query.
thread0.requestlist.max=0 # 内部再帰リストの中で到達した最大サイズ数
thread0.requestlist.overwritten=0 # リクエストリストのうち、新しいエントリによって上書きされたリクエストの数。クエリが多くきており、サーバに負荷がかかっている可能性が高い
thread0.requestlist.exceeded=0 # リクエストリストがいっぱいになり、拒否したクエリ数。サーバが処理できなくなったときに発生する
thread0.requestlist.current.all=0 # 現在のリクエストリストのサイズ(includes internally generated queries (such as priming queries and glue lookups).)
thread0.requestlist.current.user=0 # 現在のリクエストリストのサイズ(クライアントからのクエリのみ)
thread0.recursion.time.avg=0.059183 # 再帰処理を必要としたクエリの平均応答時間。キャッシュからの平均ではないことに気をつけてください
thread0.recursion.time.median=0.0218453 # 再帰処理を必要としたクエリの応答時間の中央値。50%のリクエストがこの値未満に答えられたことを意味する
total.num.queries=182
total.num.cachehits=150
total.num.cachemiss=32
total.num.prefetch=0
total.num.recursivereplies=32
total.requestlist.avg=0
total.requestlist.max=0
total.requestlist.overwritten=0
total.requestlist.exceeded=0
total.requestlist.current.all=0
total.requestlist.current.user=0
total.recursion.time.avg=0.059183
total.recursion.time.median=0.0218453
time.now=1394364749.806415 # UNIx時間
time.up=6088.252362 # 起動してからの秒数
time.elapsed=6083.139816 # 最後の統計が表示されてから経った秒数

root@akat:/etc/unbound# unbound-control dump_cache # キャッシュ情報を表示
START_RRSET_CACHE
;rrset 839 1 1 11 4
TBDFMMUIE3QONI45IJ5K011SHPOHI17E.jp.    839     IN      NSEC3   1 1 5 bf21f53b57  ti2jktb2hcm6ab2lo6gl7s20mh3bn20p NS DS RRSIG
...省略
root@akat:/home/akat/unbound# unbound-control dump_requestlist # サーバーが処理している最中のすべてのクエリーを出力する
thread #0
#   type cl name    seconds    module status
root@akat:/home/akat/unbound# unbound-control dump_infra # インフラ キャッシュの内容を表示する
210.224.163.3 . ttl 554 ping 5 var 7 rtt 50 rto 50 ednsknown 1 edns 0 delay 0 lame dnssec 0 rec 0 A 0 other 0

root@akat:/home/akat/unbound# unbound-control list_stubs # 利用中のスタブ ゾーンの一覧を表示する
. IN stub prime: M.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 2001:dc3::35 2001:500:3::42 2001:7fd::1 2001:503:c27::2:30 2001:7fe::53 2001:500:1::803f:235 2001:500:2f::f 2001:500:2d::d 2001:503:ba3e::2:30 202.12.27.33 199.7.83.42 193.0.14.129 192.58.128.30 192.36.148.17 128.63.2.53 192.112.36.4 192.5.5.241 192.203.230.10 128.8.10.90 192.33.4.12 192.228.79.201 198.41.0.4
root@akat:/home/akat/unbound# unbound-control list_forwards # 利用中のフォワード ゾーンの一覧を表示する
. IN forward: 210.224.163.3
root@akat:/home/akat# unbound-control list_local_data # 利用中のローカル データのリソース レコードの一覧を表示する
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.       10800   IN      NS      localhost.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.       10800   IN      SOA     localhost. nobody.invalid. 1 3600 1200 604800 10800
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.       10800   IN      PTR     localhost.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.       10800   IN      SOA     localhost. nobody.invalid. 1 3600 1200 604800 10800
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.       10800   IN      NS      localhost.
8.b.d.0.1.0.0.2.ip6.arpa.       10800   IN      NS      localhost.
8.b.d.0.1.0.0.2.ip6.arpa.       10800   IN      SOA     localhost. nobody.invalid. 1 3600 1200 604800 10800
d.f.ip6.arpa.   10800   IN      NS      localhost.
d.f.ip6.arpa.   10800   IN      SOA     localhost. nobody.invalid. 1 3600 1200 604800 10800
...省略

コンテンツサーバとしても利用可能

server節に、local-dataを追加する

root@akat:/home/akat# vi /etc/unbound/unbound.conf
==================
# local-zone: "info." static 
# ゾーンに対してrefuse・drop・static・transparent・redirect・nodefaultなど挙動を決めることができる
local-data: "test.akat.info. A 192.168.0.1"
==================
root@akat:/home/akat# nslookup test.akat.info
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   test.akat.info
Address: 192.168.0.1

スタブゾーンとフォーワードゾーンの違い

権威サーバを指定する場合は、stub-zoneを利用
unboundはスタブゾーンに対して再帰検索を実行するため

再帰検索サーバを指定する場合は、forward-zoneを利用
unboundはフォワードゾーンに対する再帰検索を実行しないため
つまり再帰検索を指定したDNSサーバに依頼する形になる

参考

http://gihyo.jp/admin/feature/01/unbound/0004
http://l-w-i.net/t/unbound/control_001.txt