▼目次
▼目標(ゴール)
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