BIND9.9.1-P1 ゾーン転送ファイル
BINDを検索
最近は「bind」と検索すると、「ホームページ制作ソフト BiND」が一番上に表示されますね。
そのネーミング(後者)はあかんやろうと思います。広告費大変じゃない? bindと検索したら「ISCのBIND」が一番上に表示されて欲しいですし。
それはいいとして、検索した目的は2012年6月5日にBIND9.xの注意喚起文書が公開されたので今後もっとメンテナンスしやすいようにと思ったところ、bind-9.9.1-P1で受けたセカンダリDNSサーバのゾーン転送ファイル形式が今までと違うことに気付いたからです。
男は黙ってソース
BINDやSendmailは、結構インパクトの大きい話題を提供してくれます。その都度対応を迫られてきたのですが、Sendmailは2000年頃に決別、DNSは今もBINDをメインに使っています。
DNSはあまりチューニングを必要としないこともあって、OSのディストリビューターが配布しているパッケージのBINDを利用していたのですが、OSのメジャーバージョンが上がった後、それまでのバージョンのパッケージをいつまでも配布してもらえる訳ではないので、BINDもソースからコンパイルした方がいいですね。
BIND 9.9.1-P1 をコンパイル
プライマリとセカンダリにBIND 9.9.1-P1をインストールしました。コンパイルオプションはDebianに習い以下の内容にしました。
BIND 9.9.1-P1 のゾーンファイル
インストールと設定を終え、プライマリを起動し、次にセカンダリを起動しました。/etc/resolv.conf の nameserver が自ホストに設定されていることを確認して dig で管理ドメインの問い合わせをすると正常に値が返ってきます。
が、しかし、プライマリからセカンダリで受け取ったゾーン転送ファイルをnkfやfileコマンドでチェックすると、形式が ASCII text ではなく data 形式でエンコードはBINARY。
BIND 9.8.3-P1
BIND 9.9.1-P1 のコンパイルオプションを変更したりして試してみたけど、やっぱり同じ。名前解決できない訳ではないから良いと言えば良いのだけど、もしプライマリが落ちた状態でゾーンファイルを書き換えなければならなくなったら?
そのようなことは滅多にないし、セカンダリの役目的にはこれでいいのかもしれないが、
# dig DOMAIN_NAME axfr @localhost > ZONE_FILE_NAME
# chown bind:bind ZONE_FILE_NAME
をすれば何とかなるかな?と思ったけどダメだね。
上記のコンパイルオプションを使って、BIND 9.8.3-P1をインストールでは今までのバージョンと同じファイル形式。
ということは、BIND 9.9.1-P1では、セカンダリとして機能するDNSサーバのゾーン転送ファイルのデフォルト値が変更になったということ。ソース内のCHANGESに何か書かれているはずですね。
BIND9.9.1-P1のCHANGES
これだな!
3180. [func]
Local copies of slave zones are now saved in raw format by default, to improve startup performance.
‘masterfile-format text;’ can be used to override the default, if desired. [RT #25867]
セカンダリのゾーンファイルをtext形式にする方法
named.conf内のzone{};内にmasterfile-format text;を記述すればtext形式になります。text形式にすると、CHANGESにも書かれている通り、起動パフォーマンスが低下するようです。多くのゾーンを管理しているDNSサーバではraw形式方がいいのでしょうね。
以下が記述サンプルです。
// We are a slave server for example.comzone “example.com” {type slave;masterfile-format text;file “example.com.zone”;// IP address of example.com master servermasters { 192.168.4.12; };};
全てのゾーンファイルをtext形式にしたい場合は、zone{};の中ではなく、named.confやnamed.conf.optionsに「masterfile-format text;」を書くとよい。
Raw形式のzoneファイルの内容をチェックする方法
先にも書いたAXFRでzoneで設定されている内容をチェックする方法もありますが、named-checkzoneコマンドで中身を直接見ることもできます。
named-checkzone -D -f raw <ZONE_NEME> <ZONE_FILE_NAME>
e.g.
# named-checkzone -D -f raw example.com example.com.zone