local-zoneのtypeについて
unboundではローカルで解決したい名前に local-zone
という機能を用いて名前解決を行うことが出来ます。(権威サーバ機能もありますが忘れたことにしたいので忘れます)
local-zone
にはゾーンと共にゾーンにデータが存在しなかった場合の挙動を決定する type
を指定します。
意外とこの type
を考えずに、 transparent
を指定している人が居たのでとりあえず説明を考えておくためのメモ。
この local-zone
の設定は通常、以下のように行われます。
server:
local-zone "example.com." static
transparent
これは、 local-data
が local-zone
を指定しない時の動作です。
これは、まず local-data
にマッチさせ、マッチしなかった場合は、そのまま名前解決を行いその結果を返答するというオプションです。
このオプションはインターネット上に存在するTLDで、自分用の物を管理する場合に便利なのと、とりあえず、これにしておけば最悪何かしら帰ってくるのでよく使われます。
ただ、これをローカルで定義したTLDのゾーンに対しても用いている場合があり、この場合はローカルで定義しただけの謎のゾーンをroot-serversに問い合わせることになりよくないのです。
内部でしか存在しない物に近い問い合わせを外部に問い合わせることになりセキュリティ的にもあまりよくありません。
static
ローカルで勝手にTLDを定義する場合は、これを使いましょう。
ローカルで存在しないデータに対しては NoData
や NXDOMAIN
を返し、外部に問い合わせが行われることはありません。
refuse
は static
と同様に、一致する場合はデータを返します。
一致しない場合は、 REFUSED
を返答します。
これは、 static
では NXDOMAIN
などを返してしまって問題がある場合に使用しましょう。
例えば、Unboundを運用していて、このUnboundを参照しているstub-resolverがあり、stub-resolver側でレスポンスをキャッシュしている場合に、local-dataの内容が頻繁に書き換えるなどで NXDOMAIN
をNegative TTLでキャッシュされたくない時などに使用しましょう。
deny
は refuse
と同等で、 返答が REFUSED
ではなくクエリを回答せずにパケットをDropします。
typetransparent
は transparent
と基本的に同じだが、検証が十分でないので、後日加筆。
inform
は少し特殊で名前解決は正常に行った上で特定のゾーンへの問い合わせをログに出力するために使用されます。
どようなtypeとして inform_deny
は名前解決を拒否した上でパケットをDropします。
セキュリティなどで問題が発生した場合に使用されます。
always_nxdomain
これは、ゾーンに対して常に NXDOMAIN
を返答します。
これはローカルデータも無視するので、アクセスさせたくないホストなどがある場合に使用します。
状況にあった適当なタイプを使いましょう。