unboundではローカルで解決したい名前に local-zone という機能を用いて名前解決を行うことが出来ます。(権威サーバ機能もありますが忘れたことにしたいので忘れます) local-zone にはゾーンと共にゾーンにデータが存在しなかった場合の挙動を決定する type を指定します。 意外とこの type を考えずに、 transparent を指定している人が居たのでとりあえず説明を考えておくためのメモ。

この local-zone の設定は通常、以下のように行われます。

server:
    local-zone "example.com." static

transparent これは、 local-datalocal-zone を指定しない時の動作です。 これは、まず local-data にマッチさせ、マッチしなかった場合は、そのまま名前解決を行いその結果を返答するというオプションです。 このオプションはインターネット上に存在するTLDで、自分用の物を管理する場合に便利なのと、とりあえず、これにしておけば最悪何かしら帰ってくるのでよく使われます。 ただ、これをローカルで定義したTLDのゾーンに対しても用いている場合があり、この場合はローカルで定義しただけの謎のゾーンをroot-serversに問い合わせることになりよくないのです。 内部でしか存在しない物に近い問い合わせを外部に問い合わせることになりセキュリティ的にもあまりよくありません。

static ローカルで勝手にTLDを定義する場合は、これを使いましょう。 ローカルで存在しないデータに対しては NoDataNXDOMAIN を返し、外部に問い合わせが行われることはありません。

refusestatic と同様に、一致する場合はデータを返します。 一致しない場合は、 REFUSED を返答します。 これは、 static では NXDOMAIN などを返してしまって問題がある場合に使用しましょう。 例えば、Unboundを運用していて、このUnboundを参照しているstub-resolverがあり、stub-resolver側でレスポンスをキャッシュしている場合に、local-dataの内容が頻繁に書き換えるなどで NXDOMAIN をNegative TTLでキャッシュされたくない時などに使用しましょう。

denyrefuse と同等で、 返答が REFUSED ではなくクエリを回答せずにパケットをDropします。

typetransparenttransparent と基本的に同じだが、検証が十分でないので、後日加筆。

inform は少し特殊で名前解決は正常に行った上で特定のゾーンへの問い合わせをログに出力するために使用されます。 どようなtypeとして inform_deny は名前解決を拒否した上でパケットをDropします。 セキュリティなどで問題が発生した場合に使用されます。

always_nxdomain これは、ゾーンに対して常に NXDOMAIN を返答します。 これはローカルデータも無視するので、アクセスさせたくないホストなどがある場合に使用します。

状況にあった適当なタイプを使いましょう。