
▼目次
▼目標(ゴール)
VMware Workstation Pro上にUbuntu 24.04(仮想マシン)を構築し、キャッシュDNSサーバ(Unbound)を構築します。 キャッシュDNSサーバを介して権威DNSサーバへ名前解決問い合わせができることを確認します。(DNSSEC設定含む)
▼システム要件
構成
コンポーネント構成
- ①自宅デスクトップPC
- ②キャッシュDNSサーバ
※権威DNSサーバは省略
構成図


導入ソフトウェア
①自宅デスクトップPC
| ソフトウェア | バージョン | 備考 |
|---|---|---|
| Windows11 | Windows 11 Home 24H2 | - |
| VMware(R) Workstation 17 Pro | 17.6.2 build-24409262 | - |
②キャッシュDNSサーバ
| ソフトウェア | バージョン | 備考 |
|---|---|---|
| Ubuntu | 24.04.2 LTS (Noble Numbat) | - |
| Unbound | Version 1.19.2 | - |
必要スペック(最小)
※あくまでも起動するために必要最低限のスペックであり、必要スペックは場合によって変わります。(自宅デスクトップPCは使用しているPCのスペックを記載しています。)
①自宅デスクトップPC
| コンポーネント | CPU | RAM | Root Disk | Data Disk |
|---|---|---|---|---|
| 自宅デスクトップPC | AMD Ryzen 7 3700X 8-Core Processor (3.60 GHz) | 64.0GB | 500GB | 4TB (SSD) |
②キャッシュDNSサーバ
| コンポーネント | CPU | RAM | Root Disk | Data Disk |
|---|---|---|---|---|
| Ubuntu | 2コア | 4GB | 25GB | ※任意 |
| Unbound | 1コア | 128MB | 100MB | ※任意 |
| 合計 | 3コア | 4.128GB | 25.1GB | ※任意 |
スペック参考資料
Ubuntu
help.ubuntu.comUnbound https://www.reddit.com/r/pihole/comments/yp51vz/how_much_ram_is_unbound_pihole_expected_to_use_is/ serverfault.com
各種パラメータ設定
※ (★)はデフォルト値になります。
①自宅デスクトップPC
| ホスト名 | IPv4/プレフィックス長 | デフォルトGW | DNS | NTP | プロキシ |
|---|---|---|---|---|---|
| (★) - |
192.168.1.50/24 | 192.168.1.30 | 192.168.1.130, 8.8.8.8 | (★) time.windows.com |
(★) - |
②キャッシュDNSサーバ
| ホスト名 | IPv4/プレフィックス長 | デフォルトGW | DNS | NTP | プロキシ |
|---|---|---|---|---|---|
| unbound | 192.168.1.130/24 | 192.168.1.30 | 8.8.8.8 | (★) ntp.ubuntu.com |
(★) - |
ファイアウォール設定
①自宅デスクトップPC
| ポート/プロトコル | サービス | 送信元(src) | 送信先(dest) | 備考 | |
|---|---|---|---|---|---|
| In | - | - | - | - | - |
| Out | - | - | - | - | - |
②キャッシュDNSサーバ
| ポート/プロトコル | サービス | 送信元(src) | 送信先(dest) | 備考 | |
|---|---|---|---|---|---|
| In | 53/tcp | - | - | - | - |
| 53/udp | - | - | - | - | |
| Out | - | - | - | - | - |
▼構築手順
権威DNSサーバ(PowerDNS Authoritativeサーバ)の構築・レコード設定
以下過去記事を参考にDNSサーバ(PowerDNS Authoritative Server)を構築します。 tokoro10.net
DNSサーバに以下レコードを追加します。

デスクトップPCの【インターネットプロトコルバージョン4(TCP/IPv4)のプロパティ】画面にて、DNSサーバ設定を以下項目のように設定します。(本記事で構築するキャッシュDNSサーバのIPアドレスを設定します。この時点ではキャッシュDNSサーバは未構築なので、権威DNSサーバを使った名前解決はできません。)

注意点
- SOAとns01のレコード設定は必須です。
BIND や PowerDNS では MNAME と NS がかみ合わないとMNAMEに「a.misconfigured.dns.server.invalid.」 が自動挿入され、misconfigured zone として NXDOMAIN を返すことがあります。
VMware Workstation Pro上でUbuntu構築
- 以下過去記事を参考にUbuntuを構築します。(以下過去記事はvSphere ESXi 8上で構築していますが、本記事ではVMware Workstation Pro上で構築しています。) tokoro10.net
キャッシュDNSサーバ(Unbound)の構築
unboundパッケージのインストール
root@unbound:~# apt install -U -y unbound
以下のようにUnboundの設定ファイルを作成します。(この時点ではDNSSECを適用しないため「domain-insecure」を設定しています。)
root@unbound:~# vi /etc/unbound/unbound.conf.d/unbound.conf
server: interface: 192.168.1.130 port: 53 access-control: 127.0.0.0/8 allow access-control: 192.168.1.0/24 allow use-syslog: yes log-queries: yes hide-version: yes hide-identity: yes
# 指定したゾーンとその下位についてDNSSEC検証を行わないためのディレクティブ domain-insecure: "tokoro10.test."
# AS112ゾーンのデフォルトの設定をオフにする。(本記事では"test."ドメインを使用しているため) local-zone: "test." nodefault
stub-zone: name: "tokoro10.test." stub-addr: 192.168.1.121@53Unboundサービスを再起動します。
root@unbound:~# systemctl restart unbound
自宅デスクトップPCからnslookupして、名前解決ができることを確認します。
C:\xxxx\xxxx>nslookup -debug esxi01.tokoro10.test
------------
Got answer:
HEADER:
opcode = QUERY, id = 1, rcode = NXDOMAIN
header flags: response, auth. answer, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0
QUESTIONS:
130.1.168.192.in-addr.arpa, type = PTR, class = IN
AUTHORITY RECORDS:
-> 168.192.in-addr.arpa
ttl = 10800 (3 hours)
primary name server = localhost
responsible mail addr = nobody.invalid
serial = 1
refresh = 3600 (1 hour)
retry = 1200 (20 mins)
expire = 604800 (7 days)
default TTL = 10800 (3 hours)
------------
サーバー: UnKnown
Address: 192.168.1.130
------------
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0
QUESTIONS:
esxi01.tokoro10.test, type = A, class = IN
ANSWERS:
-> esxi01.tokoro10.test
internet address = 192.168.1.100
ttl = 36 (36 secs)
------------
権限のない回答:
------------
Got answer:
HEADER:
opcode = QUERY, id = 3, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0
QUESTIONS:
esxi01.tokoro10.test, type = AAAA, class = IN
AUTHORITY RECORDS:
-> tokoro10.test
ttl = 3162 (52 mins 42 secs)
primary name server = ns01.tokoro10.test
responsible mail addr = hostmaster.tokoro10.test
serial = 2025061404
refresh = 10800 (3 hours)
retry = 3600 (1 hour)
expire = 604800 (7 days)
default TTL = 3600 (1 hour)
------------
名前: esxi01.tokoro10.test
Address: 192.168.1.100
※名前解決問い合わせがキャッシュDNSサーバ経由か、権威DNSサーバへ直接かによって以下のようにフラグが変わってきます。
- キャッシュDNSサーバ(192.168.1.130)から権威DNSサーバ(192.168.1.121) へ名前解決問い合わせ時のフラグ
- qr (Query/Response): 0=質問、1=応答
- aa (Authoritative Answer): 1=サーバがそのゾーンの権威という意味合い
- rd (Recursion Desired) : クライアントが「再帰」を要求
- キャッシュDNSサーバ(192.168.1.130)からキャッシュDNSサーバ(192.168.1.130) へ名前解決問い合わせ時のフラグ
- qr (Query/Response): 0=質問、1=応答
- rd (Recursion Desired): クライアントが「再帰」を要求
- ra (Recursion Available): 1=サーバが再帰機能を提供している

DNSSECの設定
DNSSECを適用するため、以下のように設定ファイルを修正します。(後ほど作成するトラストアンカーファイルのパスを指定しています。)
root@unbound:~# vi /etc/unbound/unbound.conf.d/unbound.conf
server: interface: 192.168.1.130 port: 53 access-control: 127.0.0.0/8 allow access-control: 192.168.1.0/24 allow use-syslog: yes log-queries: yes hide-version: yes hide-identity: yes
# 指定したゾーンとその下位についてDNSSEC検証を行わないためのディレクティブ # domain-insecure: "tokoro10.test."
# AS112ゾーンのデフォルトの設定をオフにする。(本記事では"test."ドメインを使用しているため) local-zone: "test." nodefault
trust-anchor-file: "/etc/unbound/keys.d/tokoro10-test.key"
stub-zone: name: "tokoro10.test." stub-addr: 192.168.1.121@53権威DNSサーバ(pdns-admin)でDNSSECをEnabledにします。

【Enabled】をクリックし、cskを表示します。

前手順で取得した値を以下のように設定し、アンカートラストキーファイルを作成します。(以下例では、DNSKEYの値を設定しています。)
root@unbound:~# vi /etc/unbound/keys.d/tokoro10-test.key
tokoro10.test. IN DNSKEY 257 3 13 Tdeg07kFW8H3Z8 ~(中略)~ Obvgd0Lw==
Unboundサービスを再起動します。
root@unbound:~# systemctl restart unbound
自宅デスクトップPCからnslookupし、キャッシュDNSサーバを経由して権威DNSサーバに登録されているレコードが取得できることを確認します。
C:\xxxx\xxxx>nslookup -debug esxi01.tokoro10.test
------------
Got answer:
HEADER:
opcode = QUERY, id = 1, rcode = NXDOMAIN
header flags: response, auth. answer, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0
QUESTIONS:
130.1.168.192.in-addr.arpa, type = PTR, class = IN
AUTHORITY RECORDS:
-> 168.192.in-addr.arpa
ttl = 10800 (3 hours)
primary name server = localhost
responsible mail addr = nobody.invalid
serial = 1
refresh = 3600 (1 hour)
retry = 1200 (20 mins)
expire = 604800 (7 days)
default TTL = 10800 (3 hours)
------------
サーバー: UnKnown
Address: 192.168.1.130
------------
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0
QUESTIONS:
esxi01.tokoro10.test, type = A, class = IN
ANSWERS:
-> esxi01.tokoro10.test
internet address = 192.168.1.100
ttl = 29 (29 secs)
------------
権限のない回答:
------------
Got answer:
HEADER:
opcode = QUERY, id = 3, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0
QUESTIONS:
esxi01.tokoro10.test, type = AAAA, class = IN
AUTHORITY RECORDS:
-> tokoro10.test
ttl = 3446 (57 mins 26 secs)
primary name server = ns01.tokoro10.test
responsible mail addr = hostmaster.tokoro10.test
serial = 2025061404
refresh = 10800 (3 hours)
retry = 3600 (1 hour)
expire = 604800 (7 days)
default TTL = 3600 (1 hour)
------------
名前: esxi01.tokoro10.test
Address: 192.168.1.100
※DNSSECを設定した状態で、再び名前解決問い合わせ時のフラグを確認します。(結果は以下の通りで、キャッシュDNS経由の場合は「ad」フラグが増えています。)
- キャッシュDNSサーバ(192.168.1.130)から権威DNSサーバ(192.168.1.121) へ名前解決問い合わせ時のフラグ
- qr (Query/Response): 0=質問、1=応答
- aa (Authoritative Answer): 1=サーバがそのゾーンの権威という意味合い
- rd (Recursion Desired) : クライアントが「再帰」を要求
- キャッシュDNSサーバ(192.168.1.130)からキャッシュDNSサーバ(192.168.1.130) へ名前解決問い合わせ時のフラグ
- qr (Query/Response): 0=質問、1=応答
- rd (Recursion Desired): クライアントが「再帰」を要求
- ra (Recursion Available): 1=サーバが再帰機能を提供している
- ad (Authenticated Data): DNSSEC検証に成功し"正当なデータ"と判断 (※キャッシュDNSサーバ側で検証する)

▼その他
nslookup時の権限のない回答とは
DNS パケットには AA ビット (Authoritative Answer) という 1bit のフラグがあります。
- AA ビット 意味 nslookup の表示例
- 1 (ON) 返答したサーバー自身が そのゾーンの権威 (authoritative) である。(※権限ありの回答)
- 0 (OFF) 返答したサーバーは キャッシュ or 代理 で答えている。(※権限のない回答)

▼参考
gihyo.jp www.cloudflare.com unbound.jp gihyo.jp