unboundでDNSを構築する。

掲題の件、いままでbindでDNSを構築していたのだが「今時DNSはunboundだぜ!」という意見があったので立ててみた。
ただ、bindをunboundに変える最大のメリットであるDNSSECは設定していません。
あくまで検証用にお試して建ててみたということになります。

環境は CentOS 8.2.2004 となります。
とりあえずテスト用のAレコードを登録して応答する。
登録していない問い合わせはGoogleDNS(8.8.8.8)に転送するところまでとなります。

unboundをインストールする。

これは特にひねりもなく、yum(dnf)でインストールするだけです。

[root@localhost ~]# yum install unbound
(中略)
================================================================================
 パッケージ          Arch          バージョン            リポジトリー     サイズ
================================================================================
インストール中:
 unbound             x86_64        1.7.3-11.el8_2        AppStream        888 k
依存関係のインストール中:
 libevent            x86_64        2.1.8-5.el8           BaseOS           253 k
 unbound-libs        x86_64        1.7.3-11.el8_2        AppStream        499 k 

トランザクションの概要
================================================================================
インストール  3 パッケージ

ダウンロードサイズの合計: 1.6 M
インストール済みのサイズ: 7.3 M
これでよろしいですか? [y/N]: y
(以下略)

unboundの設定を入れていく。

設定を入れる前に、初期設定を確認します。
デフォルトのコンフィグは /etc/unbound/unbound.conf になります。

[root@localhost]# cat /etc/unbound/unbound.conf | grep -v '^\s*#' | grep -v '^\s*$'
server:
        verbosity: 1
        statistics-interval: 0
(中略)
        include: /etc/unbound/local.d/*.conf
        ipsecmod-enabled: no
        ipsecmod-hook:/usr/libexec/ipsec/_unbound-hook
python:
(以下省略)

上記を見ると、/etc/unbound/local.d/ にある拡張子「.conf」のファイルをインクルードするようになっているので、サーバの追加設定は /etc/unboud/local.d に入れるようにします。
まずはサーバ設定を入れていきます。/etc/unboud/local.d にサーバ設定用のファイルとして server.conf を作成します。

server:
    # 自身が持つIPv4のIPアドレスすべてにサービスを結びつける。
    interface: 0.0.0.0
    # IPv4のみ使う
    do-ip4: yes
    do-ip6: no
    # UDP/TCP両方使う
    do-udp: yes
    do-tcp: yes

    # ローカルからの問い合わせを許可
    access-control: 127.0.0.1/8 allow
    access-control: 192.168.0.0/16 allow

    # バージョンを知られないようにする
    hide-version: yes
    hide-identity: yes

次にレコード設定と外部参照設定用として/etc/unboud/local.d に localrecord.conf というファイルを作成します。

#server:
    local-zone: "test.local" transparent

    # 末尾のドットを忘れないように注意。
    # <domain>. [TTL] IN <Type> <Value>
    local-data: "dns.test.local. 300 IN A 192.168.1.35"

    forward-zone:
        name: "."
        forward-addr: 8.8.8.8

尚、server.confとlocalrecord.confというファイル名は拡張子さえ合っていれば任意の名前に変えても問題ありません。

unboundを起動する。

unboundを起動していきます。また、自動起動も有効化しておきます。

systemctl start unbound
systemctl enable unbound

FWのポートを開ける

DNSの問い合わせを受け付けられるようにポートをサービス指定で開けておきます。

firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

今回はとりあえずDNSとして稼働させるところまでです。
細かい設定はここから追加していってください。