情報化
化された組
組織のセ
セキュリ
リティマ
マネジメ
メント WWG 成果報
報告書

第3部

「セキ
キュリ
リティ向上
上を主
主眼と
とする
る
DN
NS 設
設定ガ
ガイド
ド」

20122 年 5 月 11 日
サイエン
ンティフィック・システム
ム研究会
会
情報化
化された
た組織のセ
セキュリ
リティマネ
ネジメン
ント WG
B グループプ

WG メンバー■全体
担当幹事(まとめ役)

会員

推進委員(まとめ役)

賛助会員 推進委員
(富士通)

オブザーバ
■グループ別グループ
A グループB グループテーマ

氏名
長谷川 明生
山守 一徳
吉田 和幸
笠原 義晃
武蔵 泰雄
湯浅 富久子
鈴木 聡
只木 進一
西村 浩二
吉田 真和
山下 眞一郎
飯島 敏治
南場 進
山路 光昭
櫻井 秀志
田口 雅晴
須永 知之
山口 正雄

機関/所属(2012 年 3 月 31 日現在)
中京大学
三重大学
大分大学
九州大学
熊本大学
高エネルギー加速器研究機構
高エネルギー加速器研究機構
佐賀大学
広島大学
富士通(株)
富士通(株)
富士通(株)
富士通(株)
富士通(株)
富士通(株)(株)富士通九州システムズ(株)富士通ソーシアルサイエンスラボラトリ
富士通(株)

メンバー

BCP
情報漏えい

只木 進一 [班長]、湯浅 富久子、 西村 浩二、 山守 一徳、
山下 眞一郎、山路 光昭、櫻井 秀志、須永 知之

DNS鈴木 聡 [班長]、吉田 和幸、 笠原 義晃、 武藏 泰雄、 長谷川 明生、
吉田 真和、 飯島 敏治、 南場 進、 田口 雅晴

目次
第 3 部 セキュリティ向上を主眼とする DNS 設定ガイド
1. はじめに ···················································································· 1
1.1 DNS サーバの安全性について······························································ 1
1.2 騙す手口 ··············································································· 1
1.3 どのような設定が求められるのか ························································· 2
1.4 権威サーバとキャッシュサーバ ··························································· 2
1.5 DNS の名前解決の仕組み·································································· 3
1.6 クライアントの動作について ····························································· 4
2. 典型的な攻撃方法 ············································································ 4
2.1 何故分離した方が安全なのか？ ··························································· 5
2.2 DNS Amplifier DoS ······································································ 5
3. BIND 以外による運用·········································································· 6
3.1 Unbound ················································································ 6
3.2 NSD ···················································································· 7
4. BIND による運用 ············································································· 9
4.1 ACL による制御········································································· 10
4.1.1 allow-query ······································································· 10
4.1.2 allow-query-on ···································································· 10
4.1.3 allow-recursion ··································································· 10
4.1.4 allow-query-cache ································································· 10
4.1.5 blackhole ········································································· 11
4.2 view による分離········································································ 11
4.2.1 分離手順の例 ······································································ 11
4.3 再帰問合せ数の制限 ···································································· 14
5. DNSSEC について ············································································ 14
5.1 BIND での DNSSEC ······································································· 15
5.2 Unbound での DNSSEC ···································································· 15
6. ログ取り ··················································································· 15
6.1 問合せ自体のログ採取 ·································································· 15
6.2 組織外からの再帰問合せ具合を調べる ···················································· 17
6.3 統計情報の採取 ········································································ 176.3.1 Munin について····································································· 18
7. 付録 ······················································································· 30
7.1 glue レコードとは······································································ 30
7.2 additional レコードとは································································ 30■図表について冊子版は白黒のため見づらい図表がありますが、SS 研 Web サイトの PDF 版はカラーですので、詳細はそちらをご覧ください。
http://www.ssken.gr.jp/MAINSITE/ → 「資料ダウンロード」→ 「WG 関連資料」■登録商標について本書に記載されている会社名、機関名、製品名、各種名称などの固有名詞は、各社、各機関の商標または登録商標
です。

1.
1.1.

はじめに
DNS サーバの安全性について

昔から DNS の脆弱性に対する指摘はあり、それを利用してユーザを騙すことが可能なこともわかっていました。しかし、騙すための計算量・ネットワーク帯域などのコストが高いため、昔は「そこまでして悪さをする
人はかなりの物好き」というような扱われ方でした。今ではインターネットが商取引で使われるようになり、詐欺の片棒を担ぐ手段の一つとなってきています。クロスサイトスクリプティングとの合わせ技でフィッシングサ
イトに誘導する手段の一つとして使われるので非常に危険です。
※参考：「インターネット 10 分講座：DNS キャッシュポイズニング」
http://www.nic.ad.jp/ja/newsletter/No40/0800.html
この報告書は主に DNS サーバを自分で運用している管理者の方に注意喚起を主眼として作成しました。
前任者の過去の設定を引き継いで運用している方は、昨今のセキュリティ情勢の変化によって、従来と同じ設定では危険であることを認識していただきたいと思います。この報告書を作成している間にもセキュリテ
ィ上の問題が多数発生しました。問題の多くは身内用の DNS サーバが外からもアクセス可能になっている
場合に重大な問題となります。自分の DNS サーバがそのようになっているかどうかは、御自宅から ISP のネットワークを通じて自組織のネームサーバに
dig ‒t a example.com. @「自組織のネームサーバ」
を発行して返事をするか確認したり、WWW 上のネームサーバ診断サービスなどを使うことができます。(たとえば http://www.e-ontap.com/internet/check など)。
DNS サーバの設定ミスは大量の苦情を発生させるため、前任者の設定を変更するのはかなり気が重い作業ですが、フィッシングに引っかかった場合はもっと大変なことになります。そもそも DNS はプロトコル上の脆弱性があるのですが、運用によってその穴を完全にではないにしても常に小さくとどめておくことが重要です。
典型的な例をもとに、どのような問題と対策があるかを以降で説明していきます。

1.2.

騙す手口

たとえばホスト名や IP アドレスを導出する際に、正規の DNS サーバからの返事が質問者に到着する前に偽装したパケットを質問者に送り返すことで騙すことが可能です。これが安易にできては危険なので、パケット内の 16 ビット乱数値(Transaction ID)とポート番号のランダム性によって簡単に偽装パケットを製造できないようにしています。BIND のバージョンによってはこの乱数に偏りがあったり、ポート番号が固定もしくは推測しやすい値になっていたりするため、次の質問パケットが使用するであろう乱数値とポート番号をある程度絞ることができます。偽装パケットは複数投げてもよいのでこの範囲がある程度狭ければ危険は現実のものとなります。これまで DNS の検証と言えば正引きと逆引きの検査をつきあわせて比較する程度でしたが、このような方法だけでは騙されていることはわかりません。また、対象ドメインの NS レコードを騙すことに成功すればそのあとしばらくの間は問い合わせが正規の DNS サーバではなく偽装サーバに送られることになるので、さらなる被害を招きます。

1

2012 年 2 月にはドメイン名が決済不能などの理由により失効してしまったときに、引けなくな
るはずのそのドメイン名を横取りする攻撃手法が発表されるなど、ドメイン名を詐称する手口も日々進化しています。単に BIND のバージョンアップだけで問題が解決しないこともままありま
す。

1.3.

どのような設定が求められるのか

DNS サーバには 2 つの役割があり、あるドメインが自分の情報を公開するための権威サーバと、ユーザからの質問に応じて外部の権威サーバを渡り歩いて検索するキャッシュサーバに大別できます。権威サーバとキャッシュサーバを歴史的経緯から同一ホストで動かしている例がかなり見受けられますが、「前任者がこういう設定をしていったから」式の設定では安全性を担保するのが難しく、安全面を考えれば分離した方が運用コストを低く抑えることができます。
BIND は最も広く使われている DNS サーバプログラムであり、両方の役割をこなすことができます。その一方でプログラムが肥大して複雑さが増しているため、セキュリティホールが発生しやすい傾向があります。分離して運用する場合、権威サーバ・キャッシュサーバのそれぞれに特化した DNS サーバプログラムがありますので、それらを利用することも運用コストを下げる手段として有効です。

1.4.

権威サーバとキャッシュサーバ

権 威 サ ー バ （ Authoritative Server）
上位組織の権威サーバから指名されており、担当部分の内容について問い合わせに返答する役
割を果たします。担当空間以外の内容については答える必要はなく、拒否できます。担当しているドメインのさらに下位ドメインについても直接返答する必要はなく、どの DNS サーバに聞けばいいか移譲先を答えるだけで十分です。
BIND での master と slave がこれにあたります。
キ ャ ッ シ ュ サ ー バ （ Cache Server）
DNS サーバを動かしていないホストやプログラムからの問い合わせを一手に引き受けるための
DNS サーバです。権威サーバからのたらいまわし情報を元に次々に権威サーバをあたって問い合
わせに対応する返事を作成します。
フ ォ ワ ー ダ （ Forwarder）
BIND での「Forwarder」を設定した場合、用途としてはキャッシュサーバなのですが、自分で再帰問合せを行わず、他のキャッシュサーバに問合せを 1 回投げつけて返事をもらうだけで、たらいまわしの処理を自分で行いません。安易にキャッシュサーバを増やすことができますが、押しつけているキャッシュサーバの内容がおかしくなると巻き添えになります。ゾーンを限定してプライベートなドメインの DNS サーバを直接参照したいときなどにも使用されます。

2ƔčVk/Ćɑ@.ô
BĿȗ

ëE,ǧ

A7Q|aX~Vk/Ćɑ@.ôëE,ǧBĿȗ/A7GƔčVk.Ƚ/uZd.ɁÕ+*+ɞAĔþǊ(z{.ƪȴɕ;ą×

7GQ|aX~Vk.Ăë/RKId@.ô

ëE,?$'/z{ú 1

FüȾB),+A7

1.5.

jp ½¤.ƔčVk/.¢ezK( B
example.jp < co.jp FÍ. Vk, Čȯ' 
Aco.jp .Vk/@, example.co.jp FÍ.
Vk,Čȯ' B

DNS /ûÙ/qñ3

DNS /c^ÈŭXZby)

7

1 %. DNS Vk½¤(/+ɑ,%'"Ǒ$'),%'ô

C0?Ǒ@+ëEFã!Ăë.

DNS Vk,ȅ'ȜƦC0?

ōǄ(!"Ņŉ.

)

B DNS Vk@.(!@:ņāFǎ,ãB?

(/øB.(DNS Vkơ,ŕĵBíÑǠɚFƦ:B),7ŕĵǪù,/ɛ¬AȊÈ.ŕĵǪù.ɑ,ɞ$'. DNS Vk,ƔɞFČȯB)(7¢.ƔčVk@Č
B DNS VkƔčVk

ȯFã'
(
ú 1 .?
jp .ɒ(ú 2
jp .ºǸ:, aaa.example.co.jp ,% 'ȵô'; co.jp .ºǸ:ņāFŬ'ȳB",jp ½¤.hyVk/
B co.jp < example.jp FǌŠȊÈ(ɫ±FȘB)/C

C.ǪùFĔ:'ƔčVk,íÑȜƦFB),7jp ½¤.ƔčVk,Čȯ',%'ôBǠɚ,ð7CB aaa.example.co.jp

ëE';ǧFŬ'/CǌŠ.Ǜȯ»FǧB"(ɹú 2ɺ
.ČȯņāFº,!@¢.ezK/.

(

7E(ȜƦ7ƂACFŕĵ'BƔú 3čVk/dVk)ò0C7dVk
/

com

net

org

đýBezK,%

edu

jp

+*Ƃ;èǣ,'Ȫ,ȅ0"F
3ȊÈ.ŕĵǪù(+C0Ǜȯ»FǧBĿȗ;+答えます。例えが悪いですが、申請書類を提出しに出かけてみると最終的な提出先がわからず、次々に「ここではないのでよそへ行ってみよ」式に行き先を告げられるような状態です。委譲されていない DNS サーバには本来外部から問合せがくる筈はないので返答をする必要はなく、委譲されている権威サーバであっても委譲範囲外について返答する必要はありません(図 3)。

1.6.

クライアントの動作について

DNS クライアントとは、DNS を利用して名前解決したいプログラムやホストを指します。上に述べたように、本来は権威サーバを上位から手繰ってたらいまわしにあうことになりますが、あらゆるクライアントがそれぞれたらいまわしで右往左往するのは CPU やネットワーク帯域の無駄なので、いわばワンストップ窓口用プログラムを別に用意し、それが質問者の代わりに駆け巡ってきます。これがキャッシュサーバの役割です。せっかくなので、1 回検索した情報には寿命を持たせ、一定時間控えておくことにしましょう。この寿命(TTL)は権威サーバ側の情報で決定することになっています。
すべての DNS サーバがワンストップ窓口としての動作をしているわけではありません。DNSの問合せパケットには様々なフラグがありますが、クライアントが DNS サーバ側に「DNS サー
バ側でたらいまわし解決して欲しい」と主張するための RecursiveDesire フラグがあります。ワンストップ窓口的動作を期待している場合 RecursiveDesire フラグを立てて問合せ(再帰問合せ)を行いますが、質問された DNS サーバはこのフラグが立っている問合せには答えないように設定されているかもしれません。

2.

典型的な攻撃方法

通常、DNS の応答は UDP で行われているため、本物の DNS サーバが返答するよりも早く嘘パケットを生成して返すことができれば嘘が採用されてしまいます。キャッシュサーバに嘘が格納されてしまうと TTL が切れるまでの間、嘘がばらまかれることになります。これを「キャッシ
ュ汚染」と呼びます。本物の DNS サーバに対して DoS 攻撃を仕掛けるなどして負荷を上昇させ、応答性能を悪化させることで嘘が採用されやすくするなどの手口もあり得ます。
またキャッシュサーバはメモリ上に情報を記録しておくため、あまりにも問合せが殺到するとメモリ上に全部データをおいておくことができなくなり、一部のデータがキャッシュから消去されます。すると TTL によってまだメモリに残っているべきデータであっても再度問合せをしなくてはなりません。するとキャッシュ汚染攻撃の機会が増えることになります。
小型 NAT ルータなど、DNS キャッシュサーバ機能を持つアプライアンス機器の中には TTL が短いレコードに対しても長い TTL が指定されているかのように取り扱うものがあります。このような実装もキャッシュ汚染の被害に遭いやすいことに注意が必要です。
ファイヤーウォールのルールが増えることを嫌ってあえてキャッシュサーバから権威サーバへの問い合わせを UDP の port 53 から出るように設定している場合がありますが、これは汚染される可能性が非常に高まるのでやめるべきです。太古の昔はこのような DNS サーバは多数ありまし
たが、現状ではとても許されるものではありません。

4

既に述べたように、一応の対策として乱数値やポート番号による撹乱が行われていますが万全
ではありません。一方、権威サーバについては master であれば自分の掌握している設定ファイル
を参照しますし、slave であれば master から TCP によってデータを転送します。このゾーン転送については Transaction Signature (TSIG)によって暗号化や署名が可能なので、安全性は担保できると言えます。
DNS サーバを用意する時に安易にフォワーダを設置することが多いですが、投げつけ先のキャッシュサーバは攻撃を受けないのか今一度考えてみるべきです。

2.1.

何故分離した方が安全なのか?

DNS サーバに対する組織外からの問合せを受け付ける必要があるのは権威サーバだけです。権威サーバに嘘が混入してしまうと他組織に迷惑をかけることになります。攻撃は DNS サーバが他の DNS サーバに対してなにがしかの問合せを行っている時に偽装パケットを送信することで行う
ので、権威サーバ自らが外部に対する問合せを行わなければ危険は低くできます。権威サーバは担当範囲についてだけ返答するように設定すれば、権威サーバが外部に対して発行する問合せを抑制できます。
キャッシュサーバはその役割上どうしても外部への問合せを抑制することはできませんが、外部からの問合せに利用できるようにしておくと次に述べる DNS Amplifier DoS の片棒を担がされることになります。外から再帰問合せを無制限に受け付ける DNS サーバを設置することはやめま
しょう。
また、権威サーバとキャッシュサーバを兼任していると、上位からの委譲を失った後にもひきつづき権威サーバのつもりで古いデータを答えてしまうことがあるので問題になりやすいです。
なお、DNSSEC が導入され始めたことにともない、TCP でのクエリも発生するようになっています。ファイヤーウォールや DNS サーバ自体のフィルタ(iptables など)では TCP での問い合
わせを許可する必要があります。TCP の問い合わせは UDP よりも DNS サーバのリソースを消費しますので、大量の問い合わせが発生する場合は注意が必要です。

2.2.

DNS Amplifier DoS

気に入らないホストに大量のパケットを投げつける嫌がらせの 1 つで、おおむね以下の手順を
とります。
(1)

脆 弱 な 権 威 サ ー バ を 1 つ 乗 っ 取 り、ゾ ー ン ファイ ル 中 に 返 事 が 大 きくな るような レ コー ドを 追 加 しま す 。TXT レコー ドが 使 用 され るケ ー ス が 多 い で す 。
(2)

外 部 に 対 し て 全 開 し て い るキ ャッシ ュサ ー バ に 問 合 せ を 送 り、キ ャッシ ュサ ー バ に 内 容 を

覚 え させ ま す 。
(3)

多 数 の キ ャッシ ュサ ー バ に 対 し て 上 記 を 繰 り返 し ま す 。

(4)

気 に 入 らな い ホ ス トが そ れ らの 全 開 キ ャッシ ュサ ー バ に 対 し て 問 合 せ を 行 っ た か の ようなパ ケ ットを 偽 造 し、一 斉 に 投 げ つ け ま す 。
(5)キ ャッシ ュサ ー バ は 気 に 入 らな い ホ ス トに 対 して DNS 問 合 せ の 返 事 とし て 大 きな パ ケ ッ

トを 次 々 に 投 げ るの で 、気 に 入 らな い 人 の ネ ットワー クが パ ン クし て し ま い ま す 。
5被害者から見るとキャッシュサーバから DoS を投げてきているように見えるので、キャッシュ
サーバの所属するネットワークに対して苦情が寄せられる可能性があります。(1)の段階においては問合せパケットの送信元 IP アドレスをキャッシュサーバの内部ネットワークの物に偽造することで問合せ制限を迂回できますが、再帰問合せを外部に許可していなければ (4)の段階で大きなパケットが出て行くことはありません。

3.

BIND 以外による運用

分離しない場合、運用は実績・多機能・対応 OS の多さから BIND が第一候補となりますが、分離して運用する場合は BIND 以外で、実績がある物として Unbound と NSD があります。

3.1.

Unbound

Unbound は NLnet Labs によって開発されたキャッシュサーバ専用デーモンです。
http://unbound.net/ から取得できます。応答速度が BIND より 10 倍と速いことや、メモリ量も少なく、キャッシュ汚染攻撃への耐性が高めてあるなどの利点があります。一方でファイルディ
スクリプタやポート番号は起動直後に予め確保してしまうため、これらのリソースの見た目の消費は BIND より大きくなります。/etc/hosts を静的データとして使用することも可能ですし、ゾーンを指定してフォワーダを指定する機能もあります。新しいサーバとして立てるときはいいのですが、BIND の完全上位互換ではないので、既存のサーバを入れ替える場合は注意が必要です。
まず、デフォルトでは再帰問い合わせ以外の問い合わせを拒否します。設定次第でそれ以外も受け付けることはできますが、返事に「これは権威サーバの返事です」というフラグ(AA)を立てることができないので NS レコードに記載しているホストで動かしてはいけません。BIND で動作している既存の兼任サーバを NS レコードから外して Unbound のキャッシュ専用サーバにする
場合は、後述のクエリのログ取りを行って再帰問い合わせしかやってこないことを確認してからにするべきです。一端 unbound にすると問い合わせフラグは統計情報として取ることはできます
が、個別のログとして確認することはできません。入れ替えた後に権威サーバからの返答を要求されていることがわかった場合は wireshark などで直接確認しなくてはなりません。
また、BIND の「view」に相当する機能がなくクライアントの IP アドレスに応じて返事を変えるということはできません。

6

Unbound . 6 9 C \ O J ] H e V / þ £ z
server:verbosity: 1# munin (ǵȞņāFȘ! .(extended-statistics: yes
statistics-cumulative: nostatistics-interval: 0 # 5 È, 1 ÷ munin Ș,ƉB
port: 53
# ƔčVk,ȵôB),§ǁBIeZ
outgoing-interface: 192.168.53.254# unbound 4.ôëFȣǪù
access-control: 192.168.53.0/24 allow
remote-control:
control-enable: yes

Unbound .ȢĔ/ɪī,ǫÜ(dVk. IP IeZ/rBĿȗSy,mdȡȹC'

A7GBIND . rndc ,ǍĵBr

B.(ȢĔpHK(śĔSy/ unbound-control (unbound-control-setup Fĕȏ' unbound , SIGHUP FɂC0 unbound-control §ǁ(B?

,+A7OpenSSL å) unbound-control-setup M,+A7unbound-control-setup ZRrd( HASH ąŮFąſ' OpenSSL Uxe,Ʈ'
BOrX.-sha256 F-sha1 ,ąſB+*.ĜÆ(÷ɐ(7
access-control , allow (/+ allow_snoop FśĔB)ɪÅĪôCB?

,+A7

3.2.

NSDëE;ȣæ

NSD / Unbound )ì NLnet Labs ,?BƔčVkĞǁc{(Q|aX~Vk?A;Ɩȇġ+!:@,Ɇ+$'7http://www.nlnetlabs.nl/projects/nsd/ @âļ(7àȂɻ Benchmarking of authoritative DNS implementations¼ÇÇÄÆ¦ÉÉÉ¸ÂÆÃ¶Å·Â¹Çº½À¹ÆÉÃÅ¿Æ¼ÃÄ¡ ¤­¶ÅÇ½Â«¶ÀÀ¹Å¯¨±©Ä¸ºdVk(.Ɋǁĕǻ;ABIND .]pHKFÆƾB)(BIND F

master Vk)! slave Vk.Ɋǁ,;§ǁ(7ǒŎ/ DNS Le
+

n(

)7!]ȷɂã AXFR(½ȷɂ).8( IXFR(ĦÈȷɂ)/(7Gslave )

'ɊǁBĂëmaster @.ȷɂ, IXFR F§

)/(7].IR[ZÐĽAXFR .ææ+ôë.;.FŖïB)/(7G

7

NSD . 6 9 master H e V / þ £ z 
2'& þ£<ý ą")-/QWA`R{ <íÿ$9
# nsd-checkconf -v /dev/null# Read file /dev/null: 0 zones, 0 keys.
# Config settings.
server:debug-mode: no
ip4-only: no
ip6-only: no
hide-version: no
database: "/var/db/nsd/nsd.db"#identity:#nsid:#logfile:
server_count: 1
tcp_count: 10
tcp_query_count: 0
tcp_timeout: 120
ipv4-edns-size: 4096
ipv6-edns-size: 4096
pidfile: "/var/run/nsd/nsd.pid"
port: "53"statistics: 0#chroot:
username: "bind"zonesdir: "/usr/local/etc/nsd"
difffile: "/var/db/nsd/ixfr.db"
xfrdfile: "/var/db/nsd/xfrd.state"xfrd_reload_timeout: 10
verbosity: 0ȢĔpHKFȡȿ!@ nsd-checkconf F§ǁ'ǔȧ7nsd-checkconf .-v O
rXF§ǁB)cpNd.³/*.?
*.pHKFIR[Z?

,śĔC'

BȐǕCB.(ĕɢ,)B.EA7ȢĔpHK. nsd.db đý+) nsd /ȶ×7G7bQZd.]pHKFǁŉ'@

nsdc rebuild

FĕȏB) nsd.db ǀŌCB.(.ĺ/ȶ×(7zone:
name: "example.co.jp"# bQZd.]pHK.ǾĂŎ
zonefile: "/etc/nsd/example.co.jp.zone"#.],Ĝ'ȣæB slave Vkprovide-xfr: 192.168.53.254 NOKEY

NSD . 6 9 slave H e V / þ £ z 
zone:
name: "example.co.jp"# bQZd.]pHK.ǾĂŎ
zonefile: "/var/lib/nsd/example.co.jp.zone"#.]. master Vkrequest-xfr: 192.168.53.254 NOKEYÆÀ¶È¹ êð provide-xfr ïûøî request-xfr üK2àóâÎÆÀ¶È¹ ï)êÙíÓïêÍÐnsdc rebuildÑü3vàóâÎČħĥ

õ nsd.db ØíÓëüvçéäï4ü nsd.db ÖöòČħĥïďāĉĐėýĀġîzâùïêÍäï=ð nsd Ø3vêÙùöÔîíøóâÎ
master (]ſŲC!Ăëslave . nsd ȷɂ'!c^/kKfpHK(nsd-checkconf v (ȐǕCB difffile śpHK(cpNd(/ ixfr.db),ƍ

8ǭCzonefile śĔ'

BbQZd.pHK/ſŲC+

kKfpHK@bQZdpHKFľºB!:,/),ƨŉĿȗ(nsdc patchFĕȏ7master @Ȋ×Ǌ,ȷɂ'!ņā/ ixfr.db ,ɮƘɁȡC]ȷɂȏECB!2,pHK/ɢɞ+ȉĳ'ŻB¦Ƒ;ȏ7 nsdc patch7.(ĔƅǊ,nsdc patch/ ixfr.db Fůƾ' nsd.db ,áFĕȏBĿȗ

MasterA7

nsd rebuild
読み込み

Master (NSD)

テキスト形式

変換

nsd.db

ゾーン転送

Slave
Slave (NSD)
nsdc rebuild

書き出し

読み込み
nsd.db再構築

nsdc patch
変換

ixfr.db

テキスト形式

nsdc patch

4.

BIND .69ĉå
Internet

Internet

再帰的でない問合せ

再帰的でない問合せ 再帰的でない問合せ

権威サーバ

権威サーバかつキャッシュサーバ

フォワーダ

キャッシュサーバ

フォワーダ

再帰的問合せ再帰的問合せ望ましい配置よくある配置ƽý BIND (ƔčVk)Q|aX~VkF×¦'BĂë),ÈɦB.ǅĒ½(”ÈɦB,/ǩ.ǝȮĿȗ()';Ʋƾ”Ǧ)dZd(ACL)< BIND .

view$!ĂëIR[ZU,?$'ÐɞB)æȇ((ɊǁUZd/ɷ

+A7)ƔčVk)Q|aX~VkFÂǁ'A@,C, DNS Vk)ǚ'pN_FćŮ3@'B)¨(ú:?

BɒǾ)ć

)(>

),

Q|aX~Vk,ĜBĆɑ@.IR[ZFǗƚB)Ƃ¹»(Q|aX~Vk.×¦,ĶɬB ACL ,/ allow-query, allow-query-on, allow-recursion,
allow-recursion-on, allow-query-cache, blackhole +*

9

A7

4.1.
ACL .69³
4.1.1. allow-query
DNS ôëFȣæBhadRIeZFśĔ7cpNd³/ any ((*@.ôëE(;ãB)ƔčVk;Â-'@ı+

ezK,+$'7BĂë<!@,CFÞB)Ć

.(ƨŉĿȗ(

4.1.2. allow-query-on
DNS VkF×'

BuZdȖŮ. IP IeZFŚ%ĂëDNS ôëFãB

IP IeZFÐɞB)(7

4.1.3. allow-recursion
ÅĪôëFȣæBhadRFÊŜ7.?
172.22.0.0/16 Ć@.ÅĪôë/(7GÅĪ(++hadR@.ôë/ÅĪôëpSǢ$'ƔčVkȏ$'+Ăëallow-recursion /Ǡ(,śĔB) 192.168.0.0/16,
ôë/æȇ(ÊŜC'
+

.?

+Ő

,+A7

B5(BIND 9.3 7(/śĔ+$!Ăë/ƲÐɞ(!BIND 9.4 @Þ+$'B.(Iarcdż,/ƨŉĿȗ(

4.1.4. allow-query-cacheacl mycompany {192.168.0.0/16;
172.22.0.0/16;};
allow-recursion { mycompany; };BIND 9.4 sĐ/ allow-recursion /{recursion
offon-=*56-=*56-=*56

allow-recursion
þ£-"
þ£-"
þ£-"
þ£à"
þ£É8

allow-query-cache
þ£-"
þ£-"
þ£-"
þ£É8
-=*56

allow-query
þ£-"
þ£-"
þ£8
-=*56-=*56

allow-recursion +")yå!:9{none
localhost + localnets
allow-query /{allow-query-cache /{allow-recursion /{BIND 9.4.1-P1 @ǈĂ7!CÑ. BIND (ȡȿB)M,+A7ôë
,Ĝ'Q|aX~.ÃėFǁ
!uZd@.ÅĪô'Ƚǧ'?

hadRFÊŜ7ȣæ)ÌűC

ëE,/Ǡ.ȽǧĪA7cpNd.³/.?

,+$'B!:recursion, allow-query, allow-recursion, allow-query-cache .
C;ȢĔ,Q|aX~VkFɊǁ'B).uZd@.ÅĪôBĂëBIND 9.4.1-P1 ɝ,kYIarëE,7);,ǧ++A7(C,ɟA<)Ȧ,kYIarBĂë/allow-recursion  allow-query FȢĔ'bZdB.
?

(>



10

BIND 9.4 sĐ/ allow-query-cache /{recursion
offon-=*56-=*56-=*56

allow-query-cache
þ£-"
þ£-"
þ£-"
þ£-"
þ£É8

allow-recursion
þ£-"
þ£-"
þ£-"
þ£É8
-=*56

allow-query
þ£-"
þ£-"
þ£8
-=*56-=*56

allow-query-cache +")yå!:9{none
localhost + localnets
allow-query /{allow-recursion /{allow-query-cache /{4.1.5. blackhole
DNS ôë/ ACL ,?$'ŖïC!ĂëREFUSED pS.Ǣ$!ȽǧȽC7
DNS ôë/ UDP (ȏEC'B.(Ŀ;ɂ® IP IeZ,ȽȽB)/ɞA7

G (!)0ǖÃ.§$'rKsdIeZɂ®º IP (

ŖïC'

+

B)FɅǑ,ƲȚ!ų?

$!+*).Ăë/.(ƲȚB!:.hadRFÊŜ7blackhole / view ơ,/śĔ(7G

4.2.

view .69Ĕ,Ŝ! ACL ,?BÐĽ/Ɩȇơ,IeZFÊŜ'ǁ¤ȒF)A7 view

FB),?$'Ƀ,7IeZ(Ǧ),?$'ŎģSrFƦĔ.Sr,Ĝ'

Ɩȇ.ææFÊŜB)æȇ(Ƹ,ƽýVnZ
BĂëACL FƀB)Ē.ķÒ+@=BIeZ,½ə,+$'!),?$'ƽý.W@. Query ŖïCȌņ,Ɂ

BĂë/7 view ,?BÐĽFƐȠ!ų?
Ăë/.?

(>÷C

Q|aX~Vk+ȢĔ(Ãɑ)Ćɑ@.IR[ZFÈɦ(7

options {recursion no; /* ĀƈǊ,ÅĪôë/ŖïB */};acl "intranet" {10.0.0.0/8;
192.168.0.0/16;
198.51.100.0/24;};
view "internal" {match-clients { "intranet"; }; /* intranet @.ô ëE/ȣæ */recursion yes;allow-recursion { any; }; /* match-clients (Ðɞ' B.( 'Þ+
';ȋ
*/
};
view "external" {match-clients { any; };recursion no;};

Q|aX~Vk.Ăë/].ȢĔ+ƔčVk)'ŕĵ'.( view FĄ<';!

B]ćĂë*!)/+

ȢĔ,+B./ų

.(

A7G

4.2.1. Ĕ¹ĕ/zƔčVk)Q|aX~VkFÂ-'AQ|aX~VkĞǁ. DNS VkFÒAĵ'B)(+Ăë.ĜǨ)'view F§ǁB¨FǕ7

11

(1)

"

options {directory "/var/named";recursion on;};zone "." {type hint;
file "named.root";};zone "example.co.jp" {type master;
file "example.zone";
};

.?
(2)

+ȢĔ"$!)7#  V ,  ]  F) G view ] [options {directory "/var/named";recursion on;};view "default" {match-clients { any; };allow-recursion { any; };zone "." {type hint;
file "named.root";};zone "example.co.jp" {type master;
file "example.zone";};};view F 1 %(;Ĕȁ!)view .Ć,ƀĔȁF view .,ǽAȺ9Ŀȗ!]Ĕȁ/ƲȚCB.(½'.]

A7view ,/ options śĔ(7logging/śĔ(7G
acl team1 { 198.51.100.0/24; };acl team2 { 203.0.113.0/24; };acl mygroup { team1; team2; };acl external { ! mygroup; }; /* !(ïĔ(7 */(3)

X SYM ^ nzi U ZPQ E E JPW T e y | rU`yÃǖÃǖĆǜį;/ǖÃǖĆǜį(?
ACL F¦Ō7
,;xa`+@:ĔȁC'

localhost / 127.0.0.1

CC,ĜŁB

BuZd. IP IeZ½',xa`B),

BuZdŠǶC'

Ć

(>

B ACL )'any(¥,(;xa`B), none(¥), localhost(named ×¦'

localnets(named ×¦'

H[

BVqhad½',xa`B)

,;xa`B),ƨŉĿȗ(

12

A7

(4)

e y | r U   L [ view ] [/* option Ǧ,% '.ȡȿ/Ǆ */acl branch1 { 198.51.100.0/24; };acl branch2 { 203.0.113.0/24; };acl mycompany { branch1; branch2; };acl external { ! mycompany; };view "company" {match-clients { mycompany; };recursion on;
allow-recursion { any; };zone "example.co.jp" {type master;
file "example.zone";};};view "default" {match-clients { any; };recursion on;
allow-recursion { any; };zone "example.co.jp" {type master;
file "example.zone";};};recursion onFśĔB"(/+

allow-recursion;śĔ7view .xa`Ɛƌ/@ȏECƂË,xa`!;.şǁC7]Ĕȁ/¾ə!

Ĝȱ. view ,½'ȡȹBĿȗëEƉB).?

Aȡȹ'+ezK/đý++view ,Ĝ'.ezK.ô

MĪA7ǖĆ,¾ə!+ezK

BĂë/C(ɣ)(77!master .Ăë].pHK/½'ì(7

7Gslave .Ăë/].íÑì(; view ơ, master @.ȷɂȏECB.(pHK/ view ơ,ǆ+BpHKíFśĔBĿȗ
(5)

ey|r

U recursive V

A7

]D[

7Ƃĺ. view(ǖĆ)@. recursive /µ:B5+.(recursion off;,7;
;ǖĆ,;VnZFŤ©B5Ǎŏ
F

@:

B.(

S)'âB5(

13C0ǖĆ@ recursive Fɂ$'BǍŏoptions {directory "/var/named";recursion no;};/* option Ǧ,% '.ȡȿ/Ǆ */acl branch1 { 198.51.100.0/24; };acl branch2 { 203.0.113.0/24; };acl mycompany { branch1; branch2; };acl external { ! mycompany; };view "company" {match-clients { mycompany; };recursion on;
allow-recursion { any; };zone "example.co.jp" {type master;
file "example.zone";};};view "default" {match-clients { any; };recursion no; /* Ć@.ÅĪôzone "example.co.jp" {type master;
file "example.zone";
};
};

4.3.

ëE/Ǘƚ */«%Á/đƲƧ+Ů.ÅĪôëFȏ)(Q|aX~FưCBũŧFɜƚB!:,ÅĪôë

.ŮF ACL . recursive-clients FśĔ'ÐɞB)(7!". ACL/ view ơ,/śĔ(+.(ƨŉĿȗ(ũŧɚƗǊǐɚǊ,Ǉǀ'

B+@Q|aX~ƥƋũŧ.ÑƟɡ)'.ũŧFőÐ(7ƈƉ.RKId,Ĝ';)0$#AǇǀB.( DoS .?

5.

+ÖƊ/Ǉǀ'7

7

DNSSEC .()UDP sZ( DNS .ôëȏEC'B),ƈȵǊ+ȈĲńŮ,?$'ũŧFɐ?

)

­Ȥ?

DNS Security Extensions(DNSSEC)

)

ŘĳƓ

B)/Ÿǉ+.(.(/+¾əɗžé)ɨďǿí,?$'Ãė.ƛĵńF

k,Ĝ'·ɇ!ŁǧlTadFɂD)';ǙęɗFǑ@+

A7Q|aX~VɞAæȇ+.(Q|a

X~ƥƋũŧFɜƚ(7¢ezK¢ezK. DNS VkFśíB),¾əɗ.jaX~³FȀÊB
)(Q|aX~Vk/!@dVk@CFŏǽ$'7EC!ĺ(ƛśíC'B)FƐȤ(7)(ƛș.ǧFļB)(7dVk.

¾əɗ"/ŸǕǊ, DNS Vk,Ŭ'<BĿȗA7ƔčVk DNSSEC ,ĜŁB)/ȊÈ.ÇÃėƛ).ȤŸ,+A7ǿí.!:.ɗFâļ!A]c^,ǿí!AB¦ƑĿȗ(ɚ4.Ȳȍ
C+A,Ĉ(Q|aX~Vk/Ü,?. DNS Vk%'!ǿíFƐȤB"+.(ĜŁ/ėŹ(14

(àȂŰƼ5.1.

DNSSEC ȜȩņāÆƾ Vol52, No. 9, Sep 2011)

BIND */ DNSSECDNSSEC Y|l.VKd,ŏɮţȹC'7

DNSSEC FÎǁB]k.!:.dZdIP.ȢĔųƧ,% 'Ǥ  ƶ
http://dnssec.jp/wp-content/uploads/2011/02/20110124-techwg-dnssec-trustanchor-installhowto-2.pdf

5.2.

Unbound */ DNSSEC

unbound-1.4.7 ɝ(/ unbound-anchor UxeǁŉC'

B.(d].

dZdIPFâļ'.pHKíF unbound.conf ,śĔB"(²# unbound-anchor –a /var/unbound/root.key# chown unbound:unbound /var/unbound/root.key . ý ą server:auto-trust-anchor-file: "root.key"

unbound FÅȶ×B).pHKȊ×Ǌ,ſŲC7

6.

bF8

Ćɑ@IR[ZCBVk,/ ACL .ȢĔ,ȨA++IR[ZŃ,Ą!A'FǔȧB5([Q~bJȱFƆƳ,ɜ!:,/aX~ƥƋũŧFȏ$'íÑFȜƦ?
,Ĝ'ƥƋFȏ

Bũŧº/ũŧĜȱ.Q|aX~Vk,ȥǚ!

)BôëFĈɕ,ɂ$'7!

Sɔȗ(Ƹ,Q|

S,Cƞ$'ezK,ȼ
C0*.ezK.FŢĔB)(77!ŽƟ@ȊÈ. DNS Vk*.?

+ũŧFã'B.FǑ$')ĈÉ(

6.1.

%öv/bF»logging {channel qlog { /* qlog (+';Øŏ+íÑ(?
syslog local1;};
category queries { qlog; };};BIND ,/ã®!RMlTad.

*/

SF syslog Ǳǂ(ÇÓ(ũŧ.ƐǑ,Îǁ(7.. DNS Vk.Ăë/RM.ÃėFɏG(ÇÓB)(+tcpdump +*(lTad.
+

SFâB½¤.ckaSsF'½'.

7Aɘƅɚ.Ɋǁ,/î

'

7GBIND (RMơ.

named.conf . logging OrX(śĔ7

15.(SF)B

SFşâB,/local1.*/var/log/qlog/querylog

local1 . facility ģń( syslog Ĉɕ,ǇǀB.( DNS VkǌŠpHK,ȡɖB)cJZR IO ,?$'áŁŅ+$'77syslog FȡɖBVkFÍɄǁŉ!(syslog.conf ,@syslog Vk.uZdílocal1.*+*)ȡȹ'cJZR IO /.Vk,!ų?
(/.?

(>.)syslog Vk¶,ȢĔ'Ɍĵ+pHK,ÇÓ7
DNSサーバsyslogサーバ

querylog/var/log/querylog

query

+A.Ù

query

query

query

(pHKŌɘB.(logrotate < newsyslog .ȢĔFŀCB)Ĉň)+A7BIND-9.2 Ñ(/S,/ôë recursive *.pS/ȐǕC7

G*. view Æƾ!;ȐǕC7GǰǼĆ@.ÅĪôëF,Ǘƚ(+Ăë/ BIND FſŲB5(ĕɢ,ÇÓCB

S.¨!"#$%&$'()*()&+$,-.$./01234**5)$"671.#$%8&9%'%9:::9;;;<*=(%4)$>71?$1:#1@./6)$A-1@;)$%'%9%9%B(9%=&97.C/22@9/@D/$EF$GHI$CJ$!"#$%&$'()*()&4$,-.$./01234**5)$"671.#$%=&9%B(9:::9;;;<*=(&4)$>71?$7.#1@./6)$A-1@;)$KLM19"L0$EF$NO$P$!"#$%&$'()*()+*$,-.$./01234**5)$"671.#$%=&9%B(9:::9;;;<+''%')$>71?$7.#1@./6)$A-1@;)$0/769KLM19"L0#$EF$Q$P$

ÅĪǊôë*
B)

/

S.

S.ŰĐÊĄB¸î)(Ćɑ@Q|aX~VkŐ+(ȭÍ(7BIND .kY

-B.(Ŀ;ƇĢ)/ɞA7GFǔȧB(âA,Ɖ'B*EA7ȊÈȏ$!RM<*.?

+ȽFRKId,Ƚ!/ȡɖC+~ƥƋC'!*/

Unbound / 1.4.11 ɝ(ô.(Sņā@"(/EA7GëE.

S)CB?

,+$'

server:verbosity: 1
log-queries: yesBżɚĩ,Q|aX# .ȏFɁÕB)ô

ëE.

16

SÇÓCB7, syslog . facility < priority FśĔB!"pS/ȡɖC7GBIND .?
)/(7G.

6.2.

S)½ɑ$%

'Ç'7

7

ñó7/«;%<Ā19/* option, logging, ACL Ǧ/C?A,ȡȿ */view “internal” { /* ǖÃ@.ô ëE/EE
matchclients { mycompany; };recursion yes; /* ÅĪô ëEȣæ */querylog no;
};

S,â@+

*/

view externalclients” {ĕɢ,ÇÓCB
match-clients {S.¨any; }; /* ǖÃ@.ô ëE/,xa`' B.(,+/ */!"#$%&$'()*()&+$,-.$./01234**5)$"671.#$%8&9%'%9:::9;;;<*=(%4)$>71?$1:#1@./6)$$
match-recursive-only yes; /* ǖÃ@(+ÅĪô ëE.Ăë.8xa` */recursion yes; /* )A ÅĪô ëEȣæ */A-1@;)$%'%9%9%B(9%=&97.C/22@9/@D/$EF$GHI$CJ$
querylog yes;};!"#$%&$'()*()&4$,-.$./01234**5)$"671.#$%=&9%B(9:::9;;;<*=(&4)$>71?$7.#1@./6)$$
view “external” { /* ÅĪô ëE/ externalclients ,xa`B.(,/+ /A-1@;)$KLM19"L0$EF$NO$P$ */match-clients { any; };!"#$%&$'()*()+*$,-.$./01234**5)$"671.#$%=&9%B(9:::9;;;<+''%')$>71?$7.#1@./6)$
recursion no; /* ;;ÅĪô ëE/. view ,+@+ /"ŁŖï */querylog no; /* ÅĪôë(/+ .(7S;â@+';ȋ ;- */A-1@;)$0/769KLM19"L0#$EF$Q$P$};

logging q½'.ô

aR( category queries FśĔB)ÅĪôëE*)ƈƉĔ'ëE*(Ćɑ@.ÅĪô

,ɛE@

S)'Ç''7.(+)D@.ÅĪô

ëE*.@%ÅĪô,xa`B view F¦Ō. view .(B.

ëEFŖï!

"Fȫ5B,/î(ǰǼĆ@(

ëE.8

querylog OrXFśĔB.?
logging qaR. queries (>C0ÇÓC'7view ,/ŸǕǊ, querylog no;Fƀ

+

.+

+RKId+no ,ȢĔżƓďFȘ' view
ĜÆ?

6.3.

(>

view , querylog Fȡȿ+
7ô

ëE.

!ųĒ½(ǒƅǊ,Ăë/view
mycompany

externalclientsĂëSFÇ!

SFâ$'8'ƔÎ. recursion F. ACL ,RKIdFɁÕ')òü·/»

BIND < Unbound .ĂëRM.ɕ<ǞɳFÃɑǊ,PL^)'ȡɖ'A.Ą
Àë@Õņā<ě+×FƐǑ(BĂë.ÈĨ,%A7Ƹ, Unbound .Ăë/Łǧżɚ';ȡɖ'AlpNxZ,ĶɬB?

+ǵȞ/ BIND ?A;ȰĚ,âļ(7BIND ; 9.5 @/ĈĬ,ǵȞņāĄ@, 9.5.2-P1 @/Łǧżɚơ.m
ZdSyşâ(B?

,+$'

7

ǵȞņāFæȚÚB,/77+ŏƟ
C'

+

A7

C.Ăë;brdìƎĂë/ǲƒ+ŏɚA7ƈŰƀ(/ Munin ,?$' Unbound .ǵȞņāF{g^B¨FŜ'87

17

Munin / DNS VkǀŌBSFæȚÚB.(ɪī,ǫ«(DNS VkȊ¤)ƺǢ,lTadF{g^' DNS ǵȞņāFæȚÚB DSC (http://dns.measurementfactory.com/tools/dsc/) ;ĴÓ(

6.3.1. Munin .()Munin /ǵȞņāFæȚÚB!:. WWW Vk){g^CBie(uZd.)()(ŌAǢ$'

7ņāF©ǴB./ie.ķÒ(©ǴC!ņāFæȚÚB.Vk.ķÒ)+A7Munin .Ăëie(/ȊÈVk,Ĝ'*.?

+ņāF¾

FieȊ@¡B),+$'AMRTG < Cacti Ǧ,Ƣ5B){g^ɭə(B.

ǋ.ɁÕɪī,ėŹ,ȏ7laTY/ Debian < Fedora (A7Red Hat Enterprise Linux( RHEL)(

C0 OS .wYd,C0 Extras @CentOS +*(C

0 DAG wYd@KZd(7RHEL6 ?2.ťcJZdn~Xǁ,/Ť©C'

7GRHEL4 ?2 RHEL5 ǁ.å:. SRPM Fâļ' rpmbuild

BFedora ǁ. SRPM Fâļ' rpmbuild B),+A7FreeBSD (C0

ports ;/ packages @KZdB)(7laTY,ɱ@\Z@UlKBĂëmunin ƈ¤/!Bôɲ/+rrdtool ćŮ.laTY,ªđ'< pango ).(B.(ƨŉĿȗ(Ƹ, FreeBSD .Ăë cairo$!ĈƷFĿȗ)B.( X11 œ(KZd!ƹŋ@ ports (UlK

'¼CB)+A.żɚA7Munin ɒĨº. tar ,; SPEC pHKìƎC'

7RedHat ǁ(/+ SUSE ǁ(ApHKí+*,;ɚɋ



B.( Fedora. SRPM FƩǁB.ǫ«(
RHEL4 sZ.cJZdn~X(;!)0 Fedora16 ǁ. munin-1.4.64.fc16.src.rpm Fâļ'neB)( munin-1.4.6 F§ǁ(7.ɢĿȗ+ perlModule-Build, perl-Log-Log4perl, perl-Net-SSLeay  OS ƈ¤.wYd,+.(

DAG wYd@ YUM (KZdB)(7+^+*.dpJaR{g^)'/ MRTG < Cacti .ų¹ǘ(HeV/þ£æȚÚ¶.Vk(/laTYí

munin(RedHat, Debian Ǧ);/(FreeBSD ports)FKZd7Munin Vk(/ Unbound F×'c^FâļB?

,ȢĔpHK, 3 ȏɁÕB"([unbound-server1]
address 192.168.2.254
use_node_name yes

18munin-master
BuZd@

laTY(KZd!ĂëcpNd(/
R[Z(B?

http://uZdí/munin. URL (I+cJRd(RedHat Ǭ+@0/var/www/munin, FreeBSD Ǭ+@0

/usr/local/www/munin),ɒǾCB.(. URL (?C0 httpd.conf .ȢĔF

uZdíFRaR

BĿȗ;

A7GKZdǌĺ/ index.html /C!ĺ/ index.html ǀŌC'

A7Gcron ,?$'ǵȞşâ

B/(

7!KZdǌĺ/ cron (5'.SpFǀŌCGI FȢĔBĿȗ/+ȢĔ,+$'

7SpĈɕ,+$'7Ăë5 È,įSpFǀŌ'.( CGI (Ŀȗ+)"SpFǀŌB?

!

?

+

B)ɔ

+ȢĔ;æȇ((/ÒŊ7

U e S | Unbound <   " )  9 Z K R / þ £ (1) m unin-node q kf | h V `{ i m| ymunin-node laTY,/ Unbound ǁ.ZRrdìƎC'

7G.(ſ,

Unbound .\Z. contrib/munin_unbound_ F munin . plugin cJRd,Uo
7Red Hat Enterprise Linux )ìǬÊ(C0/etc/munin/plugins/munin_unbound )'Uo7(2)

m unin_unbound_V g { s xkdx{ d unbound_munin_ )íÑ.pHKF unbound_munin_by_class,unbound_munin_by_flags, ... )/etc/munin/plugins% ls -l *unbound*-rwxr-xr-x 1 root root 17416 Apr 16
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17
lrwxrwxrwx 1 root root
14 Apr 17(3)

íÑ(XvaRR7

2010 unbound_munin_2010 unbound_munin_by_class -> unbound_munin_2010 unbound_munin_by_flags -> unbound_munin_2010 unbound_munin_by_opcode -> unbound_munin_2010 unbound_munin_by_rcode -> unbound_munin_2010 unbound_munin_by_type -> unbound_munin_2010 unbound_munin_histogram -> unbound_munin_2010 unbound_munin_memory -> unbound_munin_2010 unbound_munin_queue -> unbound_munin_plugin R  % I\ [$    V , rSK.ƿăpHKFǁŉ7 (Red Hat Enterprise Ǭǵ(C0/etc/munin/plugin-conf.d/unbound, FreeBSD +@0/usr/local/etc/munin/plugin-conf.d/unbound) env.unbound_conf <env.unbound_control /KZdƹŋ,ëE'ƀĿȗ
19

A7

[unbound*]user rootenv.statefile /var/lib/munin/plugin-state/unbound-state
env.unbound_conf /var/unbound/unbound.confenv.unbound_control /usr/sbin/unbound-control
env.spoof_warn 1000
env.spoof_crit 100000(4)

munin-node V  /unbound ZdC'
Ƕ'

list

Bǔȧ7munin-node / 4949 ǅ(Ĺ$'7.(Š

)¼ÓB)({g^ɭǋțâļ(7% telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
# munin node at localhost.localdomain
list
open_inodes irqstats if_err_eth3 unbound_munin_memory df swap
unbound_munin_by_rcode load unbound_munin_queue cpu df_inodeunbound_munin_histogram forks open_files iostat memory
unbound_munin_by_type vmstat unbound_munin_ entropy processes
unbound_munin_by_opcode if_err_eth2 postfix_mailqueue if_eth3
netstat interrupts unbound_munin_by_class if_eth2
unbound_munin_by_flags
quit
Connection closed by foreign host.

(5)

munin-node.conf V , munin-node FKZd!êuZd,%'munin-node.conf Fǹɤmunin V

k. IP IeZFɁȡ7cpNd(/ 127.0.0.1 ȣC'+!:munin Vkƈ¤Ć,/ĿĿȗ((6)m unin-node V  /5 ÈĹ$!ĺVk¶.{g^ɭǋ, Unbound ɛɈ Ą'

C0 OK (

BIND /  
BIND .ņā; Unbound 6*(/

A7Gmunin (æȚÚ(7Unbound .Ăë

/ unbound-control Fĕȏ'.ÇÓFZRrdř$'āñ'

B.(BIND

options {statistics-file "/var/run/named.stats";};.Ăë/ named ,ǵȞpHKFÇÓ.pHKFȜɓBZRrdFĕȏ7ǵȞpHK.ĂŎF named ) munin-node .rSK,¡BĿȗ
K/var/run/named.stats FĔ'¦@C'

A7rS

B.(named ,.lZíFśĔBųǫ«(7!.ǵȞpHK.pNxadąɎ'

B.( BIND .kY,ƨŉĿȗ(BIND9 ǁ.rSK/ munin ,ìƎC'

B.(munin-node-configure/Ȋ×ȢĔ'C+
2 %

.(ŏ×(ȏ

7BIND9 .rSK/ bind9 ) bind9_rndc .

Abind9 / querylog .ÇÓFƐƌ' A < MX +*¥.UeFRMC!
20

か、bind9_rndc は rndc stat で取得した統計情報からクエリが成功/失敗した数などを取得します。ただし、bind9 は view を使用している場合の出力に対応しておらず、querylog のフォーマットが変わるとすぐ追従できなくなります。
BIND	
 9.0	
 
rndc で統計ファイルが出力できないので、bind9_rndc は使用できません。
BIND	
 9.1	
 ~ 	
 9.4.3	 bind9, bind9_rndc ともに使用可能です。
BIND	
 9.4	
 ~ 	
 
named.stats のフォーマットが変わっているので、munin-1.4 以降が必要です。何らかの問題で munin-node のパッケージ自体を更新できない場合は、bind9_rndc プラグインだけを持ち込めば十分です。
BIND	
 9.6	
 ~ 	
 
統計ファイルにクエリの種類と数、さらに Unbound のような「クエリがどのくらいの所要時間で処理できたか」も出力されるようになりましたが、残念ながらまだ munin のプラグイン側がそれに対応していないようです。

21

Unbound で の 実 例 	
 大量のグラフが出ます。不要であればモニタされる側のホスト上で plugins 中のシンボリック
リンクを消すことでグラフ化されないようにできます。(冊子版は白黒ですが、SS 研 Web サイトの PDF 版はカラーです)

22

23

BIND * / ¤ z 
.¨(/Ʉ( BIND FkYIar(9.29.7)!.(Åəĺ/Sp.ǷĄ'7

BIND * / C \ O J ] /  ú  
Q|aX~Vk,ƸÚ! Unbound /Q|aX~.§ǁɕFæȚÚB!:.rSK\Z,ƬC'
ȞņāFǁ

7BIND /rSKƬC'

7Grndc .ÇÓBǵ'ìƓ+;.F¦ŌB)(7rndc .Q|aX~§ǁɕņā/ view ơ,ÈÒC'A.?

,+$'77!

++ Cache DB RRsets ++[View: internal (Cache: internal)]
1083 A
471 NS
2 CNAME
7 MX
206 AAAA
2 !A
1 !MX
59 !AAAA
2 NXDOMAIN[View: external (Cache: external)]
2485 A
1058 NS(Ǆ)Ĕȁ+.,_bind )íÑ. view ;ÇÓC7. view / CHAOS RZ(

BIND .kYǅé+*FôëE!RM,%24'ȡɖC7view %;ĔȁC'+Ăë default%. view B.?

)view §ǁC7.( default

)

_bind

)

2

+ÇÓ,+A7rndc stats (ņāF/ÇB) statistics-file.ƇĢ,ɁÕCB.(pHK.ƇĢ@ȘB!:,GNU fileutils . tac UxeF§ǁ'7

rSK.pHKF bind9_rndc_cache )'[q»ɰ. rndc .lZ?2
named.stats .lZFȊÈ.ƿă,ëE'ǹɤ7rSKȊ¤ƛ×Üƺ(ĕȏ'87% ./bind9_rndc_cache
type_A.value 1068
type_NS.value 457
type_CNAME.value 2
type_SOA.value 0
type_PTR.value 0
type_MX.value 6
type_TXT.value 0
type_AAAA.value 207
type_SRV.value 0ıŮ+(ĕȏ

% ./bind9_rndc_cache config
graph_title DNS Cache occupancy
graph_args -l 0graph_vlabel Cache Entries
graph_category BIND
type_A.label A
type_A.draw AREASTACK
type_A.min 0
type_NS.label NS
type_NS.draw AREASTACKıŮ config %(ĕȏ% telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
# munin node at localhost
config bind9_rndc_cachegraph_title DNS Cache occupancy
graph_args -l 0graph_vlabel Cache Entries
graph_category BIND
type_A.label A
type_A.draw AREASTACK
type_A.min 0×¦!@rSKZRrdƈ¤F munin .rSKcJRd(/etc/muin/plugin.d/< /usr/local/etc/munin/plugin.d/+*), bind_rndc_cache )'ȢǾ7munin-daemon FÅȶ×telnet ( munin-daemon ,ŠǶ'rSK×¦'rSK,ƮȢĔ/Ƙ.?

Bǔȧ7

,+A7plugin-conf.d/bind9_rndc_cache +*.Üƺ.

pHKFŲ!,¦ŌB5'.rSK.ȢĔFȡȿ'

BpHK plugin-conf.d/plugins.conf ,ȡȿ7rSKZRrdƈ¤ FƘtY,ţȹ7SS Ǔ Web VKd@;âļ(725<RS-T@SU7.SD1@6$C?$-T1$T#@7"#V$
0;$W@.2"$X$WJFYZ@.2"[$\\$]S-T@STU7.S@.2"]V$
0;$WA-1@;T#/#T$X$WJFYZA-1@;T#/#T[$\\$]S>/@S@-.S./0129T#/#T]V$
0;$^EFV$
0;$W>1@T7L.=B$X$'V$<$"K1",$#L$T11$7_$?1]@1$@-..7.M$U7.2$=9B$
7_$`$LD1.$YJIaE!Fb$cW@.2"$&de%$\c$f$Z$?K761$`$0;$W67.1$X$gYJIaE!Fd$f$Z$
7_$`$W67.1$Xh$0SiY1@T7L.)jTP=j9`j2PfjkSL$f$Z$$$$$$$$$$$$$W>1@T7L.=B$X$%$7_$W%$dX$BV$$$$$$$$$[$$$$$[$[$
1:7#$'$-.61TT$W>1@T7L.=BV$
0;$W67.1T$X$35V$
0;$^T1"#7L.TV$
LD1.`0;$W#/"b$]S-T@SU7.S#/"$]$9$WA-1@;T#/#T$9$]$\]fV$$<$l@11mak (/S-T@S6L"/6SU7.SM#/"$?K761$`gW#/"df$Z$$$$$$$$$"KL0DV$$$$$$$$$D-TK$`nZW67.1T[b$WofV$$$$$$$$$6/T#$7_$SijPjPjP$a#/#7T#7"T$k-0D$jPjPjPSV$$$$$$$$$7_$`SijPPjTP`9pjafjTPjPPWSf$Z$$$$$$$$$$$$$$$$$WT1"#7L.TZW%[$X$W67.1TV$$$$$$$$$$$$$$$$$W67.1T$X$35V$$$$$$$$$[$[$"6LT1`W#/"fV$
0;$W"/"K1V$
0;$W"/"K1o>71?V$_L@1/"K$`@1>1@T1`nZWT1"#7L.TZ]q/"K1$km$IIT1#T][[ff$Z$$$$$$$$$7_$`Sij3Y71?)$jaP$j`q/"K1)$`jaPfjfj5WSf$Z$$$$$$$$$$$$$$$$$W"/"K1o>71?$X$W%V$$$$$$$$$[$16T7_$`Sij3Y71?)$`jaPfj5WSf$Z$$$$$$$$$$$$$$$$$W"/"K1o>71?$X$W%V$$$$$$$$$[$16T7_$`SijTP`j2Pf$`3RQCr5PfWSf$Z$$$$$$$$$$$$$$$$$W"/"K1CdZW"/"K1o>71?[CdZW&[$X$W%V$$$$$$$$$[$[$
0;$n#;D1T$X$A?SQ$Fa$qFQNJ$a!Q$GHI$NO$HOH$QQQQ$aIY$QB$RQ$RFa$RqFQNJ$Ra!Q$RGHI$$RNO$RHOH$RQQQQ$RaIY$RQB$
FOk!NQEFSV$$_L@1/"K$0;$W#$`n#;D1Tf$Z$$$$$$$$$0;$W##$X$W#V$$$$$$$$$W##$Xh$TSRS.L#oSV$$$$$$$$$WEFZW##[$X$W"/"K1CdZ21_/-6#[CdZW#[$\\$'V$<$21_/-6#$FɌĵ+ >71? .íÑ,ąſB).ņāÇÓCB$[$
7_$`21_7.12`WQIsY3'5f$/.2$`WQIsY3'5$1A$]"L._7M]ff$Z$$$$$D@7.#$cM@/DKo#7#61$kFa$q/"K1$L""-D/.";j.cV$$$$$D@7.#$cM@/DKo/@MT$C6$'j.cV$$$$$D@7.#$cM@/DKo>6/U16$q/"K1$J.#@71Tj.cV$$$$$D@7.#$cM@/DKo"/#1ML@;$mEFkj.cV$$$$$_L@$0;$W,1;$`n#;D1Tf$Z$$$$$$$$$0;$W6/U16$X$W,1;V$$$$$$$$$W,1;$Xh$TSRS.L#oSV$$$$$$$$$D@7.#$c#;D1oW,1;96/U16$W6/U16j.cV$$$$$$$$$D@7.#$c#;D1oW,1;92@/?$QIJQaHQqtj.cV$$$$$$$$$D@7.#$c#;D1oW,1;907.$'j.cV$$$$$[$[$16T1$Z$$$$$_L@1/"K$0;$W,1;$`n#;D1Tf$Z$$$$$$$$$W,1;$Xh$TSRS.L#oSV$$$$$$$$$D@7.#$c#;D1oW,1;9>/6-1$WEFZW,1;[j.cV$$$$$[$[$

26

rSKǁƿăȢĔ
[bind9̲rndc̲cache]# rndc のパスを指定
env.rndc /usr/local/sbin/rndc# named.confで指定しているstatistics-fileのパスを指定# chrootしている場合はnamed.confのパスそのままではいけないことに注意
env.querystats /var/named/chroot/var/stats/named.stats

ǲƊ
!

!"#$%
"

&'(#)'*$+'*,##$%&'"

-./#
()*(&

0*)'
!

1)"(
!

&'23
!

+,

#$%&'+,

()*(&

!

!

!

-+"./

#$%&'-+"./

()*(&

!

!

!

,0"

#$%&',0"

()*(&

!

!

!

123

#$%&'123

()*(&

!

!

!

.4

#$%&'.4

()*(&

!

!

!

242

#$%&'242

()*(&

!

!

!

""""

#$%&'""""

()*(&

!

!

!

,35

#$%&',35

()*(&

!

!

!

"6

#$%&'"6

()*(&

!

!

!

7"

#$%&'89#'"

()*(&

!

!

!

7+,

#$%&'89#'+,

()*(&

!

!

!

7-+"./#$%&'89#'-+"./

()*(&

!

!

!

7,0"

#$%&'89#',0"

()*(&

!

!

!

27

BIND * / E @ _ M ? Y /  ú  ìƓ,RM^Kr; rndc .ÇÓ,ð7CB.(CFæȚÚ'87į/ view ơ,/ÈÒC'+.(;ġŏǒ+ZRrd(¦ŌB)(7#!/usr/bin/perl -w
use strict;
my $rndc = $ENV{rndc} || '/usr/sbin/rndc';
my $querystats = $ENV{querystats} || '/var/run/named.stats';
my %IN;my $version96 = 0;
# check to see if we're running bind 9.6
if ( open VERSION, "$rndc 2>&1 |" ) {while ( my $line = <VERSION> ) {if ( $line =~ m/^Version:\s+9\.(\d+)\D/o ) {$version96 = 1 if $1 >= 6;}}}
exit 0 unless $version96;
my $lines = [];my %sections;open(my $tac, 'tac ' . $querystats . ' |');
while (<$tac>) {chomp;
push (@{$lines}, $_);
last if /^\+\+\+ Statistics Dump \+\+\+/;
if (/^\++\s+(.*\S)\s+\++$/) {$sections{$1} = $lines;$lines = [];}}close($tac);foreach (reverse(@{$sections{'Incoming Queries'}})) {if (/^\s+(\d+) ([A-Z]+)$/) {$IN{$2} = $1;}}
if (defined($ARGV[0]) and ($ARGV[0] eq 'config')) {print "graph_title DNS Queries by type\n";print "graph_vlabel queries / \${graph_period}\n";print "graph_category BIND\n";for my $key (keys %IN) {print "type_$key.label $key\n";print "type_$key.type DERIVE\n";print "type_$key.min 0\n";}} else {print "type_$_.value $IN{$_}\n" for keys %IN;}

28

ìƓ,ĕȏ'×¦FǔȧB
% ./bind9_rndc_type
type_HINFO.value 55
type_AFSDB.value 510
type_TXT.value 462809
type_NS.value 179959
type_LOC.value 7
type_AXFR.value 454
type_SRV.value 125294
type_TKEY.value 21282
type_AAAA.value 16938271
type_ANY.value 558223
type_A.value 28299447% ./bind9_rndc_type config
graph_title DNS Queries by typegraph_vlabel queries / ${graph_period}
graph_category BIND
type_HINFO.label HINFO
type_HINFO.type DERIVE
type_HINFO.min 0
type_AFSDB.label AFSDB
type_AFSDB.type DERIVE
type_AFSDB.min 0
type_TXT.label TXT
type_TXT.type DERIVE
type_TXT.min 0

ǲƊ

29

7.
7.1.

rč
glue aGeS+0¢ezK¢ezKFČȯBɢ¢ezKFŕĵBƔčVk)' NS 
Ue,

íÑ

E@+

FśĔ7¢ezKFƐǮB!:,/.ƔčVk. IP IeZ

);;ôë(7G.!:¢ezK.ƔčVk.c^,¢ezK.ƔčVk. IP IeZF'7C glue Ue(
example1.com ,%'.com .ºǸ:,ȟ

ns.example2.com .?

!ɢǛȯ» ns.example1.com <,.com .ɒ"$!Ăë/.com .ºǸ:ƔčVk.íÑ)¿, IP

IeZ;ǧ'7
example.com .ƔčVk ns.example.net < ns.example.org )B(ƔčVkȊ¤/.com .ɒ.íÑFŚ$'¢ezK.ƔčVk+/ȊÈ.ŕĵ'ë/ɅǑCB;C7GC+$!¢ezKǆ+)ƔčVkð7CB)

A7

BǠɚ(/+

)

.(Ŭ+

Ă

;C7G; <<>> DiG 9.6.0-APPLE-P2 <<>> +norecur -t ns google.co.jp. @z.dns.jp;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37105;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 0;; QUESTION SECTION:;google.co.jp.
;; AUTHORITY SECTION:
google.co.jp.
google.co.jp.
google.co.jp.
google.co.jp.

86400
86400
86400
86400

IN

NS

IN
IN
IN
IN

NS
NS
NS
NS

ns1.google.com.
ns3.google.com.
ns2.google.com.
ns4.google.com.

;; Query time: 11 msec;; SERVER: 203.119.1.10#53(203.119.1.10);; WHEN: Tue May 17 10:19:09 2011;; MSG SIZE rcvd: 112!)0 google.co.jp ,%'.ƔčVkņāF co.jp .ƔčVk(ëEB)ƔčVk ns1.google.com (
,%

7.2.

B)/¡'7C@. IP IeZ'/ǧ'7G

additional aGeS+0

NS Ue(/+IP IeZFâļ?
Ăë<zFŒ!

.( MX FıUe%

Ăɫ/ć

(,ƙ

!%

Ue%

'+';ȊÈ(Åįô)' A FƐǮ!@ CNAME "$!)(, A Ue;ƙA7( DNS Vk$"@ A Ue;%'Ƚ'.?

B z.dns.jp +*,ôB+*ƂǯǊ,/ A

Í,RMC'/);(7.Ăë/Í, A ëEB)/æȇ+.(glue (/A7G

+UeF additional Ue)ò27glue /Ŀɯ(additional /Ŀɯ(/A7G
BIND (/ƔčVk additional UeFȽ×¦,%!

+additional-from-auth30'ÐĽ(7

自分が他のゾーンの権威サーバであった場合に、そのデータを利用して additional レコー
ドを生成するかどうかl

additional-from-cache
キャッシュに蓄積されたデータを利用して additional レコードを生成するかどうかの 2 つのオプションで制御できます。どちらも BIND のデフォルトでは yes になっています。

31