家庭内での名前解決のためにUnboundを建てる

おつかれさまです。 先日、家庭内にVMware VSphere Hypervisor 7.0(ESXi)の環境を作った関係で、家庭内で名前解決できる環境が欲しくなったので、Unboundを建てることにしました。

natsuyo.net

Unboundを選んだ理由

Unbound自体はDNSキャッシュサーバ(リゾルバ)ですが、local-zoneという機能を使うと簡易的な内部DNSコンテンツサーバ (権威サーバ)としての機能を持たせることができます。将来的に広告ブロックなどの機能を持ったDNSキャッシュサーバにしたいという 思いもあり、Unboundを選びました。

Unboundのインストール

ESXiのVMとして構築します。ハードウェア構成は以下の通りです。 他にもいろんな機能を持たせたいので気持ち多めになっていますが、Unboundを動かすだけならもう少しコンパクトな環境で動くと思います。 (公式で推奨ハードウェア構成を検索したのですが見つけられず…)

f:id:okisan2:20220301095004p:plain

OSは自分が使い慣れているDebianを選びましたが、ほかのディストリビューションでも問題ないです。

$ uname -a
Linux dns-ntp-sv 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux
# apt-get update
# apt-get install unbound

/etc/unboundの下に設定ファイルを置く場所があるので、Unbound.confを編集します。 ※どなたかの設定ファイルを参考に設定したのですが参考元をメモしておくのを忘れました…。思い出したら掲載します。 bbb~の部分はマスクしています。forword-zoneを書かないと、インターネット上のほかの名前解決ができないはずなので 家庭内にあるルータ(こいつ自身はISPから降ってくるDNSキャッシュサーバにforwordしているだけ)とGoogle Public DNSに 向けておきました。この辺は好みなのでISPDNSキャッシュサーバに直接向けても問題ないと思います。

# cat unbound.conf
server:
        verbosity: 0                    #No Log
        interface: ::1                  #IPv6
        interface: ::0                  #IPv6
        interface:127.0.0.1             #IPv4
        interface: 0.0.0.0              #IPv4

        access-control: 0.0.0.0/0 refuse
        access-control: ::0/0 refuse
        access-control: 127.0.0.0/8 allow
        access-control: ::1 allow
        access-control: bbb.bbb.bbb.bbb/24 allow             # your IPv4 LAN
###     access-control: 2001:xxxx:xxxx:xxxx::/64 allow    # your IPv6 LAN

        #INCLUDE FILES
        include: /etc/unbound/unbound.conf.d/local.zone

forward-zone:
        name: "."
        forward-addr: 8.8.8.8                # Google public DNS
        forward-addr: bbb.bbb.bbb.bbb           # House DNS forworder

コンテンツサーバとしての記述はlocal.zoneというファイルに記載します。 IPアドレスはマスクしています。

# cat local.zone
local-data: "esxi.nty.lab. IN A bbb.bbb.bbb.xxx"
local-data: "ntp.nty.lab. IN A bbb.bbb.bbb.yyy"
local-data: "zabbix.nty.lab. IN A bbb.bbb.bbb.zzz"

設定確認&リロード

# unbound-checkconf unbound.conf
# systemctl reload unbound

他のPCのDNSをUnboundのIPアドレスに向けて、local-dataに記載した名前で名前解決できればOKです。