インストール

まずは、以下のコマンドを実行しUnboundをインストールします。

Bash
dnf install unbound

unbound.conf の編集

次に、/etc/unbound/unbound.conf を編集していきます。

num-threadsを1に設定します。これは、同時に問い合わせを待ち受ける数の設定です。基本的にはCPUのコア数程度にしておくとパフォーマンスがいいですが、問い合わせ数が少ない場合には1としておいて問題ありません。

Bash
num-threads: 1

待ち受けインターフェースの設定

問い合わせを待ち受けるIPアドレスを設定します。 何も記載がない状態ではローカルホストからのみリッスンする状態となっています。 例えば192.168.0.1で待ち受けるには

Bash
interface 192.168.0.1

のように設定します。

すべてのインターフェースで待ち受ける場合は

Bash
interface 0.0.0.0

とします。

アクセスコントロール設定

また、access-control パラメータを設定し、DNS問い合わせができるネットワークを指定します。

以下は、内部アドレスからの問い合わせは許可する例です。

Bash
access-control 10.0.0.0/8 allow
access-control 172.16.0.0/12 allow
access-control 192.168.0.0/16 allow
access-control: 0.0.0.0/0 refuse
access-control: ::0/0 refuse

フォワード設定

内部解決するゾーン以外は外部に問い合わせたい場合はゾーン”.”を指定して forward-addr にフォワードしたい DNS サーバーを指定します。

Bash
forward-zone:
  name: "."
  forward-addr: 10.10.10.1

内部解決したいレコードの設定

別途、ローカルで解決したいレコードがある場合は /etc/unbound/local.d/local-data.conf のようなファイルを作成し、内部で解決したいレコードを記載します。

Bash
local-zone: "example.com"
local-data: "foo.example.com. 300 IN MX 10 baa.example.com"
local-data: "baa.example.com 300 IN A 192.168.0.100"

また、一部のレコードはローカルで解決したいが、それ以外は外部に問い合わせを投げたいという場合はtransparentを指定して

Bash
local-zone: "example.com." transparent
local-data: "foo.example.com. 300 IN MX 10 baa.example.com"
local-data: "baa.example.com 300 IN A 192.168.0.100"

のように記載します。

トラブルシュート

実運用している中でインターネット接続ができなくなることがあり、/var/log/messages を確認すると DNSSEC の validation falure が出ていました。このような場合はキャッシュをクリアしたり、あるいはサービスを再起動することで解消します。

キャッシュの削除は以下のコマンドを実行します。

Bash
unbound-control flush_bogus