bindのゾーン委任

明けましておめでとうございます。

年始早々くだらないことでハマってしまったので。

ラボ環境を作って内部だけのDNSゾーンを作ろうとしていたところ、bind9.10.3でゾーン委任がうまく動かない。

ラボ環境のDNSドメインをlab.localとして
委任する側のzoneファイル

$TTL 60
@ IN SOA local. root.local. (
1000 ; Serial
600 ; Refresh
120 ; Retry
600 ; Expire
60 ) ; Negative Cache TTL
;
@ IN NS ns.local.
@ IN A 10.0.1.1
ns IN A 10.0.1.1

lab.local. IN NS ns.lab.local.
ns.lab.local. IN A 10.1.1.1

委任される側のzoneファイル

$TTL 60
@ IN SOA lab.local root.ns.lab.local (
10 ; Serial
300 ; Refresh
300 ; Retry
300 ; Expire
60 ) ; Negative Cache TTL
;
@ IN NS ns.lab.local.
@ IN MX 10 ns.lab.local.
@ IN A 10.1.1.1
ns IN A 10.1.1.1

普通にサブドメインのゾーン委任しているだけなのに動かない・・・

と思ったのですが、委任する側のDNSサーバにクエリを投げると、上位側のDNSサーバがforwardersで指定したサーバに聞きに行っていることがわかりました。
サブドメインだから検索するときに先にforwardersで指定したサーバを見に行ってしまうことがアカンのかと思って、STUBゾーンにいてみたりしましたが意味なし。

zone "lab.local" {

type stub;
masters { 10.1.1.1; };
file "db.lab.local.stub";
};

結局、サブドメインのゾーンをforwardしない設定にしてあげると、ゾーンファイル側を見てくれるようになりました。

zone "lab.local" {

type stub;
masters { 10.1.1.1; };
file "db.lab.local.stub";
forwarders {};

};

結論:サブドメインをStubで定義して、forwarders {};を入れておく。

尤も、サブドメインを委任するということは通常その上位のドメインの権威あるサーバということですから、フォワードしないというか自身の持っているゾーン以外の問い合わせに応答させることはないはず。ですので特に問題にならないかと思うのですが、今回の場合あくまでラボ環境ですので外部へのクエリをフォワードする役割と、ゾーンを持っているサーバを兼務させていることが事の原因かと。