ローカル環境に検証用の DNS サーバを構築します。
※ここでは実際に設定、動作したものを掲載していますが、内容について保証するものではありません。流用される場合は各自の責任でお願いします。
構成
作成する検証環境の論理構成は下図のとおりです。

物理構成およびソフトウェアのスタックは下図のとおりです。

- DNS サーバには BIND を使用します。
- test.com ドメインの権威サーバはプライマリとセカンダリを用意しゾーン転送を行います。
- プライマリは test.com の原本管理用とし、名前解決の問い合わせには応じないものとします。
使用しているソフトウェアのバージョンは以下のとおりです。
- Windows 11 home [10.0.26200]
- VirtualBox 7.1.6(仮想環境)
- Rocky Linux 8.10(仮想マシンの OS)
- BIND 9.11.36(DNS サーバ)
その他の構成情報については以下をご参照ください。
セキュリティ機能の無効化について
本検証環境では、SELinux のアクセス制御と firewalld サービスを無効化しています。
SELinux のアクセス制御の無効化手順は以下のとおりです。
# cp /etc/selinux/config /tmp
# vi /etc/selinux/config
# diff /tmp/config /etc/selinux/config
7c7
< SELINUX=enforcing
---
> SELINUX=permissive
firewalld サービスの無効化手順は以下のとおりです。
# systemctl stop firewalld
# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
※ firewalld を有効にする場合は適切なポートを解放してください。ゾーン転送は TCP で行われますので、そちらのポートについてもご注意ください。
権威サーバの IP アドレスについて
本検証環境では、1台の VM で複数のドメイン(root、com、test.com)を管理するため、VM に複数の IP アドレスを割り当てています。
IP アドレスを追加するための方法はいくつかありますが、ここでは ifcfg ファイルを編集する方法と、nmcli コマンドによる方法を記載しておきます。
① ifcfg ファイルを編集する方法
インターフェース(enp0s3)に IP アドレスを追加するため ifcfg-enp0s3 ファイルを編集した後、システム再起動します。
以下に ifcfg-enp0s3 ファイルの編集前、編集後および編集前後の差分を示します。
編集前
※ VM 作成時には、10.0.2.50 のみを割り当て、IPv6 は無効化しています。
[root@dns-auth tmp]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=enp0s3
UUID=503dbf9f-b024-4aaf-803f-241bcf59ff99
DEVICE=enp0s3
ONBOOT=yes
IPADDR=10.0.2.50
PREFIX=24
GATEWAY=10.0.2.1
DNS1=8.8.8.8
IPV6_DISABLED=yes
[root@dns-auth tmp]#
編集後
[root@dns-auth ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=enp0s3
UUID=503dbf9f-b024-4aaf-803f-241bcf59ff99
DEVICE=enp0s3
ONBOOT=yes
IPADDR=10.0.2.50
PREFIX=24
GATEWAY=10.0.2.1
DNS1=8.8.8.8
IPADDR1=10.0.2.52
PREFIX1=24
IPADDR2=10.0.2.53
PREFIX2=24
IPADDR3=10.0.2.54
PREFIX3=24
IPADDR4=10.0.2.56
PREFIX4=24
IPADDR5=10.0.2.57
PREFIX5=24
IPADDR6=10.0.2.58
PREFIX6=24
IPADDR7=10.0.2.60
PREFIX7=24
IPADDR8=10.0.2.61
PREFIX8=24
IPADDR9=10.0.2.62
PREFIX9=24
IPV6_AUTOCONF=no
IPV6ADDR=fd00::34/64
IPV6ADDR_SECONDARIES="fd00::35/64 fd00::36/64 fd00::38/64 fd00::39/64 fd00::3a/64 fd00::3d/64 fd00::3e/64"
[root@dns-auth ~]#
編集前後の差分
[root@dns-auth ~]# diff /tmp/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-enp0s3
7c7
< IPV6INIT=no
---
> IPV6INIT=yes
19c19,39
< IPV6_DISABLED=yes
---
> IPADDR1=10.0.2.52
> PREFIX1=24
> IPADDR2=10.0.2.53
> PREFIX2=24
> IPADDR3=10.0.2.54
> PREFIX3=24
> IPADDR4=10.0.2.56
> PREFIX4=24
> IPADDR5=10.0.2.57
> PREFIX5=24
> IPADDR6=10.0.2.58
> PREFIX6=24
> IPADDR7=10.0.2.60
> PREFIX7=24
> IPADDR8=10.0.2.61
> PREFIX8=24
> IPADDR9=10.0.2.62
> PREFIX9=24
> IPV6_AUTOCONF=no
> IPV6ADDR=fd00::34/64
> IPV6ADDR_SECONDARIES="fd00::35/64 fd00::36/64 fd00::38/64 fd00::39/64 fd00::3a/64 fd00::3d/64 fd00::3e/64"
[root@dns-auth ~]#
システムを再起動します。
[root@dns-auth ~]# systemctl reboot
② nmcli コマンドによる方法
nmcli コマンドでインターフェースへの IP アドレスの割り当てを指定します。コマンドの結果は ifcfg ファイルに反映されます。この方法ではシステム再起動なしに、追加の IP アドレスがシステムに反映されます。(念のため再起動もしていますが)
上記と同様の設定を nmcli コマンドで実施している例を以下に示します。
[root@dns-auth ~]# nmcli con mod enp0s3 ipv4.method manual ipv4.addresses 10.0.2.50/24,10.0.2.52/24,10.0.2.53/24,10.0.2.54/24,10.0.2.56/24,10.0.2.57/24,10.0.2.58/24,10.0.2.60/24,10.0.2.61/24,10.0.2.62/24
[root@dns-auth ~]# nmcli con mod enp0s3 ipv6.method manual ipv6.addresses fd00::34/64,fd00::35/64,fd00::36/64,fd00::38/64,fd00::39/64,fd00::3a/64,fd00::3d/64,fd00::3e/64
[root@dns-auth ~]# nmcli con up enp0s3
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@dns-auth ~]#
IP アドレス追加前後に確認したインターフェースの状態を以下に示します。
IP アドレス追加前
[root@dns-auth ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:f5:45:dc brd ff:ff:ff:ff:ff:ff
inet 10.0.2.50/24 brd 10.0.2.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
[root@dns-auth ~]#
IP アドレス追加後
[root@dns-auth ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:f5:45:dc brd ff:ff:ff:ff:ff:ff
inet 10.0.2.50/24 brd 10.0.2.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.52/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.53/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.54/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.56/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.57/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.58/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.60/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.61/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 10.0.2.62/24 brd 10.0.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet6 fd00::3e/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::3d/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::3a/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::39/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::38/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::36/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::35/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fd00::34/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fef5:45dc/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@dns-auth ~]#
補足.
以下のコマンドでも追加可能ですが、永続化されません(システム再起動で設定が揮発します)。検証のため一時的に追加したい場合には使えると思います。
ip addr add 10.0.2.52/24 dev enp0s3
ip addr add 10.0.2.53/24 dev enp0s3
:
ip addr add fd00::34/64 dev enp0s3
ip addr add fd00::35/64 dev enp0s3
:
BIND のインストールについて
本検証環境では dnf で BIND をインストールしています。
※ 下記例では bind と bind-utils のパッケージをインストールしていますが、bind-utils は既にインストールされていたためスキップされています。
[root@dns-auth ~]# dnf install bind bind-utils -y
<snip>
インストール済み:
bind-32:9.11.36-16.el8_10.6.x86_64
完了しました!
[root@dns-auth ~]#
インストール状況の確認は以下のとおりです。
[root@dns-auth ~]# rpm -qa | grep bind
bind-utils-9.11.36-16.el8_10.6.x86_64
bind-license-9.11.36-16.el8_10.6.noarch
bind-9.11.36-16.el8_10.6.x86_64 << 追加したパッケージ
python3-bind-9.11.36-16.el8_10.6.noarch
bind-libs-9.11.36-16.el8_10.6.x86_64
bind-libs-lite-9.11.36-16.el8_10.6.x86_64
[root@dns-auth ~]#
[root@dns-auth ~]# named -v
BIND 9.11.36-RedHat-9.11.36-16.el8_10.6 (Extended Support Version) <id:68dbd5b>
[root@dns-auth ~]#
サービス(named)の起動状況の確認は以下のとおりです。
※下記例ではサービス停止中ですが、自動起動設定(enable)と起動(start)は BIND の設定後に行う予定のため、このままにしておきます。
[root@dns-auth ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@dns-auth ~]
バージョン等の確認について
備忘録としてバージョン等の確認方法を記載しておきます。
Window OS バージョン確認
> systeminfo
VirtualBox バージョン確認
VirtualBox マネージャーの[ヘルプ] > [VirtualBox について]
仮想マシン OS 情報確認
# hostnamectl
BIND バージョン確認
# named -v
# rpm -qa | grep bind
named が含まれるパッケージ確認
# rpm -qf `which named`
dig が含まれるパッケージ確認
# rpm -qf `which dig`
権威サーバの設定
本検証環境の権威サーバ用の VM は1台のみです。この1台の VM で全てのドメイン(ルート、com、test.com)を管理します。
それぞれのドメインを管理する NS サーバのホスト名とアドレスは下表のとおりです。
| ドメイン | NS サーバのホスト名 | IP アドレス |
|---|---|---|
| ルート | [x-z].root-servers.net.(*1) | 10.0.2.[52-55], fd00::[34-37] |
| com | [x-z].gtld-servers.net.(*1) | 10.0.2.[56-59], fd00::[38-3b] |
| test.com | ns.test.com(*2) ns1.test.com ns2.test.com | 10.0.2.60(*2) 10.0.2.61, fd00::3d 10.0.2.62, fd00::3e |
*1 インターネット上のホスト名を参考にしています。
*2 便宜上、test.com のプライマリサーバにつけている名前です。ただしプライマリサーバでは名前解決の問い合わせ要求を受け付けないため、この名前/アドレスのリソースレコードをゾーンに登録することはありません。また同様の理由から IPv6 アドレスが必要ないため、プライマリサーバ用の IPv6 アドレスは用意していません。
参考:ルートと com の NS レコード
インターネットで定義されている、ルートと com の NS レコードを確認する例を以下に示します。
[root@dns-auth ~]# dig @8.8.8.8 com. a +trace | grep -w NS | grep -v RRSIG
. 87203 IN NS c.root-servers.net.
. 87203 IN NS k.root-servers.net.
. 87203 IN NS h.root-servers.net.
. 87203 IN NS e.root-servers.net.
. 87203 IN NS b.root-servers.net.
. 87203 IN NS i.root-servers.net.
. 87203 IN NS j.root-servers.net.
. 87203 IN NS a.root-servers.net.
. 87203 IN NS l.root-servers.net.
. 87203 IN NS m.root-servers.net.
. 87203 IN NS g.root-servers.net.
. 87203 IN NS f.root-servers.net.
. 87203 IN NS d.root-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
[root@dns-auth ~]#
権威サーバ(BIND)のコンフィグ設定
権威サーバ(BIND)の /etc/named.conf を設定します。
本検証環境では1台の VM(1つの BIND)で全ての権威サーバの機能をまかなうため、ゾーン毎の定義をそれぞれの view ステートメントに分けています。
おおまかな構成は以下のとおりです。
options {
// BIND の基本的な設定やデフォルトの設定を行います。
};
view "ROOT" {
// ルートドメインの NS サーバが管理するゾーンに関する設定を行います。
// ここでは3つのアドレスでクエリを受け付けることでルートドメインの NS サーバが
// 3台([x-z].root-servers.net)存在しているように見せています。
};
view "COM" {
// com ドメインの NS サーバが管理するゾーンに関する設定を行います。
// ここでは3つのアドレスでクエリを受け付けることで com ドメインの NS サーバが
// 3台([x-z].gtld-servers.net)存在しているように見せています。
};
view "TESTCOM-PRIM" {
// test.com ドメインのプライマリサーバが管理するゾーンに関する設定を行います。
// クライアントからのクエリは受け付けませんが、ゾーン転送のマスターとしての
// 設定を行います。
};
view "TESTCOM-SEC1" {
// test.com ドメインのセカンダリサーバ1が管理するゾーンに関する設定を行います。
// プライマリからゾーンデータを受け取るための設定を行います。
};
view "TESTCOM-SEC2" {
// test.com ドメインのセカンダリサーバ2が管理するゾーンに関する設定を行います。
// プライマリからゾーンデータを受け取るための設定を行います。
};
参考:ゾーン転送の流れについて
ゾーン転送は、「セカンダリ(スレーブ)が起点として開始されるゾーン転送」と「プライマリ(マスタ)が起点として開始されるゾーン転送」があります。
流れはそれぞれ以下のとおりです。
・セカンダリ(スレーブ)が起点として開始されるゾーン転送
①セカンダリは定期的にプライマリに対し、SOA レコードを請求する。
②受け取った SOA のシリアル番号がセカンダリより大きい場合、更新があったものと判断し、セカンダリはプライマリにゾーンデータを要求する。
③プライマリはセカンダリにゾーンデータを送信する。
・プライマリ(マスタ)が起点として開始されるゾーン転送
①プライマリはゾーンデータに変更があったことをセカンダリに通知する(NOTIFY)。
②NOTIFY に含まれるシリアル番号がセカンダリより大きい場合、セカンダリはプライマリにゾーンデータを要求する。
③プライマリはセカンダリにゾーンデータを送信する。
test.com 関連の view ステートメントには、上記処理に必要な通信相手のアドレスや通信許可に関する設定を行います。
設定に関する詳細につきましては、named.conf 内のコメントをご参照ください。
/etc/named.conf
// NSサーバのアドレスもしくはアドレス範囲に対し、ACLで別名をつけます。
// ルートドメインおよび comドメインのNSサーバは複数台想定のため、サブネット(30および126ビットマスクでアドレス4つ)で定義しています。
// ただし、ルートドメインおよび comドメインのNSサーバは各3台を予定しており、未使用アドレスが各1つづつ発生します。
// 未使用アドレスについては、VMのインターフェースには割り当てないことで、同アドレス宛のクエリがBINDまで届かないようにします 。
acl root_v4 { 10.0.2.52/30; }; //52-55
acl root_v6 { fd00::34/126; }; //34-37
acl com_v4 { 10.0.2.56/30; }; //56-59
acl com_v6 { fd00::38/126; }; //38-3b
acl testcom_prim_v4 { 10.0.2.60/32; };
acl testcom_sec1_v4 { 10.0.2.61/32; };
acl testcom_sec1_v6 { fd00::3d/128; };
acl testcom_sec2_v4 { 10.0.2.62/32; };
acl testcom_sec2_v6 { fd00::3e/128; };
masters testcom_prim { 10.0.2.60; };
masters testcom_sec { 10.0.2.61; 10.0.2.62; };
options {
// listen対象のポートとアドレスを指定します。
listen-on port 53 {
// any; 127.0.0.1;
root_v4;
com_v4;
testcom_prim_v4;
testcom_sec1_v4;
testcom_sec2_v4;
};
listen-on-v6 port 53 {
// any; ::1;
root_v6;
com_v6;
testcom_sec1_v6;
testcom_sec2_v6;
};
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// 全てのリゾルバのIPアドレスからのクエリに応答します。
allow-query { any; };
// 権威サーバなので非再帰問合せ(反復問い合わせ)は行いません。
recursion no;
allow-recursion { none; };
// 権威サーバなのでキャッシュでの応答はしません。
allow-query-cache { none; };
// DNSSECの有効/無効の設定です。本検証環境では無効とします。
dnssec-enable no;
dnssec-validation no;
// 自身のゾーンデータの転送を許可するかどうかの設定ですが、ゾーンごとに異なるためデフォルト不許可としています。
// 許可が必要な場合、viewステートメントのブロック内で個別に設定します。
allow-transfer { none; };
// Dynamic DNSの設定ですが、本検証環境では未対応とします。
allow-update { none; };
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
// ルートドメインのNSサーバに関する定義
view "ROOT" {
// 送信元は無制限(any)、送信先はルートドメインのNSサーバ宛(root_v[4,6])の通信を受け付けます。
// 送信先にサブネットを指定することで、ルートドメインのNSサーバが複数台存在するかのように見せています。
match-clients { any; };
match-destinations { root_v4; root_v6; };
zone "." IN {
// デフォルトでは、zone "." ステートメントには、キャッシュサーバがルートドメインのNSサーバへ接続するためのルートヒントが定義されています。(hint と named.ca)
// 本検証環境では、ルートへの参照をローカル環境内で完結させるため、このステートメントを通常のゾーン管理と同様の設定に書き換えています。
// type hint;
// file "named.ca";
// NSサーバがゾーンのマスタであることを示します。
// ゾーン転送の際はゾーンデータの送信側になりますが、master だからといってゾーン転送が必須というわけではありません。
type master;
// ゾーンデータが登録されているファイルです。directory ステートメントに指定されているパスからの相対パスです。
file "root.zone";
};
include "/etc/named.rfc1912.zones";
};
// com ドメインのNSサーバに関する定義
view "COM" {
// 送信元は無制限(any)、送信先はcomドメインのNSサーバ宛(com_v[4,6])の通信を受け付けます。
// 送信先にサブネットを指定することで、comドメインのNSサーバが複数台存在するかのように見せています。
match-clients { any; };
match-destinations { com_v4; com_v6; };
zone "com" IN {
type master;
file "com.zone";
};
include "/etc/named.rfc1912.zones";
};
// test.com ドメインのプライマリサーバに関する定義
view "TESTCOM-PRIM" {
// 送信元はtest.comドメインのセカンダリ(testcom_sec[1,2]_v4)、送信先はプライマリ宛(testcom_prim_v4)の通信を受け付けます。
// プライマリでは問い合わせ対応は行いませんが、ゾーン転送に必要なセカンダリからのアクセスを許可します。
match-clients { testcom_sec1_v4; testcom_sec2_v4; };
match-destinations { testcom_prim_v4; };
zone "test.com" IN {
type master;
// ゾーン転送をセカンダリに対して許可します。
allow-transfer { testcom_sec1_v4; testcom_sec2_v4; };
// ゾーンデータの更新通知に関する設定です。
// explicit を指定した場合、also-notifyに指定したNSサーバに対してのみに通知されます。
// yes を指定した場合、also-notifyに指定したNSサーバ + ゾーンデータのNSレコードに定義されているNSサーバへ通知されます。
notify explicit;
also-notify { testcom_sec; };
// ゾーンデータの更新通知をプライマリサーバのアドレスから送信するための設定です。
// 本検証環境の権威サーバ(VM)には複数のアドレスが割り当てられているため、この設定がないとプライマリサーバ以外のアドレスから送信されてしまう可能性があります。
// (notify-source でのアドレス指定にはACLは使えないようです。)
notify-source 10.0.2.60;
file "test.com.zone";
};
include "/etc/named.rfc1912.zones";
// include "/etc/named.root.key";
};
// test.com ドメインのセカンダリサーバ1に関する定義
view "TESTCOM-SEC1" {
// 送信元は無制限(any)、送信先はtest.comドメインのセカンダリ1宛(testcom_sec1_v[4,6])の通信を受け付けます。
match-clients { any; };
match-destinations { testcom_sec1_v4; testcom_sec1_v6; };
zone "test.com" IN {
// NSサーバがゾーンのスレーブ(ゾーン転送における受信側)であることを指定します。
type slave;
// ゾーン転送のマスタ(プライマリサーバ)を指定します。
masters { testcom_prim; };
// ゾーンデータの更新通知の送信元を指定します。
allow-notify { testcom_prim_v4; };
// ゾーン転送の要求をセカンダリ1のアドレスから送信するための設定です。
// 本検証環境の権威サーバ(VM)には複数のアドレスが割り当てられているため、この設定がないとセカンダリ1以外のアドレスから送信されてしまう可能性があります。
// (transfer-source でのアドレス指定にはACLは使えないようです。)
transfer-source 10.0.2.61;
// ゾーン転送で受け取るゾーンファイルは、デフォルトでは RAW 形式(バイナリ)です。
// text を指定するとテキスト形式で受信します。本設定ではゾーン転送後の確認のため text を指定します。
// (RAW 形式に比べテキスト形式はパフォーマンスが落ちるようです)
masterfile-format text;
// プライマリから送信されてくるゾーンデータを格納するファイルの指定です。ゾーン転送で勝手に作られるので手動で編集することはありません。
file "test.com.sec1.zone";
};
include "/etc/named.rfc1912.zones";
// include "/etc/named.root.key";
};
// test.com ドメインのセカンダリサーバ2に関する定義
// ※セカンダリサーバ1と同様の設定なので説明は割愛します。
view "TESTCOM-SEC2" {
match-clients { any; };
match-destinations { testcom_sec2_v4; testcom_sec2_v6; };
zone "test.com" IN {
type slave;
masters { testcom_prim; };
allow-notify { testcom_prim_v4; };
transfer-source 10.0.2.62;
masterfile-format text;
file "test.com.sec2.zone";
};
include "/etc/named.rfc1912.zones";
// include "/etc/named.root.key";
};
named.conf の構文をチェックします。何も表示されなければ問題ありません。
[root@dns-auth etc]# named-checkconf
[root@dns-auth etc]#
補足:ACL 関連のチェックエラーについて
named.conf のチェックで以下のメッセージが出力されました。
[root@dns-auth etc]# named-checkconf
/etc/named.conf:125: unable to find masters list 'testcom_sec1_v4'
/etc/named.conf:125: unable to find masters list 'testcom_sec2_v4'
/etc/named.conf:150: unable to find masters list 'testcom_prim_v4'
/etc/named.conf:181: unable to find masters list 'testcom_prim_v4'
[root@dns-auth etc]#
以下のステートメント(ゾーン転送の通知関連の定義)でのアドレス指定に ACL を使用していたのが原因のようです。
also-notify
masters
ネットで調べるといづれも ACL は使用可能らしいのですが、メッセージに従い以下の masters list を定義し、上記ステートメントに指定することでワーニング(?)を解消しました。
masters testcom_prim { 10.0.2.60; };
masters testcom_sec { 10.0.2.61; 10.0.2.62; };
権威サーバ(BIND)のゾーン設定
本検証環境で用意するゾーンファイルは下表のとおりです。
| ドメイン | ゾーンファイル |
|---|---|
| ルート | root.zone |
| com | com.zone |
| test.com | test.com.zone test.com.sec1.zone(*1) test.com.sec2.zone(*1) |
*1 ゾーン転送で自動的に作成されるファイルです。
ルートドメインのゾーンファイルを作成し、構文チェックを行います。
[root@dns-auth ~]# cd /var/named
[root@dns-auth named]# vi root.zone
[root@dns-auth named]# chown root:named root.zone
[root@dns-auth named]# named-checkzone . /var/named/root.zone
zone ./IN: loaded serial 0
OK
[root@dns-auth named]#
com ドメインのゾーンファイルを作成し、構文チェックを行います。
※ NS サーバ名が外部名(xx.com ではなく xx.net)なのでいろいろメッセージが出ていますが、グルーとしてアドレスも同時に設定しており net ドメインへ別途問い合わせが行くことはないため、ここでは無視します。
[root@dns-auth named]# vi com.zone
[root@dns-auth named]# chown root:named com.zone
[root@dns-auth named]# named-checkzone com /var/named/com.zone
/var/named/com.zone:13: ignoring out-of-zone data (x.gtld-servers.net)
/var/named/com.zone:14: ignoring out-of-zone data (y.gtld-servers.net)
/var/named/com.zone:15: ignoring out-of-zone data (z.gtld-servers.net)
/var/named/com.zone:16: ignoring out-of-zone data (x.gtld-servers.net)
/var/named/com.zone:17: ignoring out-of-zone data (y.gtld-servers.net)
/var/named/com.zone:18: ignoring out-of-zone data (z.gtld-servers.net)
zone com/IN: test.com/NS 'ns1.test.com' (out of zone) has no addresses records (A or AAAA)
zone com/IN: test.com/NS 'ns2.test.com' (out of zone) has no addresses records (A or AAAA)
zone com/IN: loaded serial 0
OK
[root@dns-auth named]#
test.com ドメインのゾーンファイルを作成し、構文チェックを行います。
[root@dns-auth named]# vi test.com.zone
[root@dns-auth named]# chown root:named test.com.zone
[root@dns-auth named]# named-checkzone test.com /var/named/test.com.zone
zone test.com/IN: loaded serial 1
OK
[root@dns-auth named]#
ゾーンファイルの内容については以下をご参照ください。
/var/named/root.zone
$ORIGIN .
$TTL 87203
@ IN SOA x.root-servers.net. root. (
0000000000 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS x.root-servers.net.
IN NS y.root-servers.net.
IN NS z.root-servers.net.
x.root-servers.net. IN A 10.0.2.52
y.root-servers.net. IN A 10.0.2.53
z.root-servers.net. IN A 10.0.2.54
x.root-servers.net. IN AAAA fd00::34
y.root-servers.net. IN AAAA fd00::35
z.root-servers.net. IN AAAA fd00::36
com. IN NS x.gtld-servers.net.
com. IN NS y.gtld-servers.net.
com. IN NS z.gtld-servers.net.
x.gtld-servers.net. IN A 10.0.2.56
y.gtld-servers.net. IN A 10.0.2.57
z.gtld-servers.net. IN A 10.0.2.58
x.gtld-servers.net. IN AAAA fd00::38
y.gtld-servers.net. IN AAAA fd00::39
z.gtld-servers.net. IN AAAA fd00::3a
/var/named/com.zone
$ORIGIN com.
$TTL 172800
@ IN SOA x.gtld-servers.net. root.com. (
0000000000 ; serial
1D ; refresh
1H ; retry
1W ; expire
2000000 ) ; minimum
IN NS x.gtld-servers.net.
IN NS y.gtld-servers.net.
IN NS z.gtld-servers.net.
x.gtld-servers.net. IN A 10.0.2.56
y.gtld-servers.net. IN A 10.0.2.57
z.gtld-servers.net. IN A 10.0.2.58
x.gtld-servers.net. IN AAAA fd00::38
y.gtld-servers.net. IN AAAA fd00::39
z.gtld-servers.net. IN AAAA fd00::3a
test.com. IN NS ns1.test.com.
test.com. IN NS ns2.test.com.
ns1.test.com. IN A 10.0.2.61
ns2.test.com. IN A 10.0.2.62
ns1.test.com. IN AAAA fd00::3d
ns2.test.com. IN AAAA fd00::3e
/var/named/test.com.zone
$ORIGIN test.com.
$TTL 604800
; SOAのNSサーバには、セカンダリサーバ1のホスト名(ns1)を指定しています。プライマリサーバは外部に公開しないためこのような設定にしています。
@ IN SOA ns1.test.com. root.test.com. (
0000000001 ; serial
1D ; refresh
1H ; retry
1W ; expire
2000000 ) ; minimum
IN NS ns1.test.com.
IN NS ns2.test.com.
ns1.test.com. IN A 10.0.2.61
ns2.test.com. IN A 10.0.2.62
ns1.test.com. IN AAAA fd00::3d
ns2.test.com. IN AAAA fd00::3e
www IN A 3.4.5.6
権威サーバ(BIND)のサービス開始と動作確認
初回なのでサービスの自動起動の設定と、サービスの開始を同時に行います。
※ 開始だけならば、systemctl start named を実行します。
[root@dns-auth ~]# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
[root@dns-auth ~]#
起動状況を確認します。起動とともに test.com のゾーン転送(AXFR)が行われていることがログから確認できます。
[root@dns-auth ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-03-24 18:53:15 JST; 9s ago
Process: 1744 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 1768 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 1764 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCE>
Main PID: 1770 (named)
Tasks: 7 (limit: 23224)
Memory: 41.4M
CGroup: /system.slice/named.service
└1770 /usr/sbin/named -u named -c /etc/named.conf
3月 24 18:53:16 dns-auth.mydomain named[1770]: client @0x7f7e201918b0 fd00::3e#52123: view TESTCOM-SEC2: received notify for zone 'test.com'
3月 24 18:53:16 dns-auth.mydomain named[1770]: zone test.com/IN/TESTCOM-SEC2: refused notify from non-master: fd00::3e#52123
3月 24 18:53:16 dns-auth.mydomain named[1770]: zone test.com/IN/TESTCOM-SEC2: Transfer started.
3月 24 18:53:16 dns-auth.mydomain named[1770]: transfer of 'test.com/IN/TESTCOM-SEC2' from 10.0.2.60#53: connected using 10.0.2.62#55983
3月 24 18:53:16 dns-auth.mydomain named[1770]: client @0x7f7e1802db60 10.0.2.62#55983 (test.com): view TESTCOM-PRIM: transfer of 'test.com/IN': AXFR started (serial 1)
3月 24 18:53:16 dns-auth.mydomain named[1770]: client @0x7f7e1802db60 10.0.2.62#55983 (test.com): view TESTCOM-PRIM: transfer of 'test.com/IN': AXFR ended
3月 24 18:53:16 dns-auth.mydomain named[1770]: zone test.com/IN/TESTCOM-SEC2: transferred serial 1
3月 24 18:53:16 dns-auth.mydomain named[1770]: transfer of 'test.com/IN/TESTCOM-SEC2' from 10.0.2.60#53: Transfer status: success
3月 24 18:53:16 dns-auth.mydomain named[1770]: transfer of 'test.com/IN/TESTCOM-SEC2' from 10.0.2.60#53: Transfer completed: 1 messages, 9 records, 247 bytes, 0.001 secs (247000 bytes/sec)
3月 24 18:53:16 dns-auth.mydomain named[1770]: zone test.com/IN/TESTCOM-SEC2: sending notifies (serial 1)
[root@dns-auth ~]#
test.com.sec[1,2].zone がゾーン転送で作成されたファイルです。
[root@dns-auth ~]# ll /var/named
合計 36
-rw-r--r--. 1 root named 797 3月 20 19:39 com.zone
drwxrwx---. 2 named named 75 3月 23 16:39 data
drwxrwx---. 2 named named 60 3月 10 17:10 dynamic
-rw-r-----. 1 root named 2112 11月 6 13:06 named.ca
-rw-r-----. 1 root named 152 11月 6 13:06 named.empty
-rw-r-----. 1 root named 152 11月 6 13:06 named.localhost
-rw-r-----. 1 root named 168 11月 6 13:06 named.loopback
-rw-r--r--. 1 root named 924 3月 20 19:27 root.zone
drwxrwx---. 2 named named 6 11月 6 13:05 slaves
-rw-r--r--. 1 named named 423 3月 24 18:53 test.com.sec1.zone
-rw-r--r--. 1 named named 423 3月 24 18:53 test.com.sec2.zone
-rw-r--r--. 1 root named 636 3月 20 19:37 test.com.zone
[root@dns-auth ~]#
権威サーバの 53(DNS)ポートの状況を確認します。
[root@dns-auth ~]# lsof -nP -iUDP:53 -iTCP:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 1770 named 21u IPv4 29051 0t0 TCP 10.0.2.52:53 (LISTEN)
named 1770 named 22u IPv4 29053 0t0 TCP 10.0.2.53:53 (LISTEN)
named 1770 named 23u IPv4 29055 0t0 TCP 10.0.2.54:53 (LISTEN)
named 1770 named 24u IPv4 29057 0t0 TCP 10.0.2.56:53 (LISTEN)
named 1770 named 25u IPv4 29059 0t0 TCP 10.0.2.57:53 (LISTEN)
named 1770 named 26u IPv4 29061 0t0 TCP 10.0.2.58:53 (LISTEN)
named 1770 named 27u IPv4 29063 0t0 TCP 10.0.2.60:53 (LISTEN)
named 1770 named 28u IPv4 29065 0t0 TCP 10.0.2.61:53 (LISTEN)
named 1770 named 29u IPv4 29067 0t0 TCP 10.0.2.62:53 (LISTEN)
named 1770 named 30u IPv6 29069 0t0 TCP [fd00::3e]:53 (LISTEN)
named 1770 named 31u IPv6 29071 0t0 TCP [fd00::3d]:53 (LISTEN)
named 1770 named 32u IPv6 29073 0t0 TCP [fd00::3a]:53 (LISTEN)
named 1770 named 33u IPv6 29075 0t0 TCP [fd00::39]:53 (LISTEN)
named 1770 named 34u IPv6 29077 0t0 TCP [fd00::38]:53 (LISTEN)
named 1770 named 35u IPv6 29079 0t0 TCP [fd00::36]:53 (LISTEN)
named 1770 named 36u IPv6 29081 0t0 TCP [fd00::35]:53 (LISTEN)
named 1770 named 37u IPv6 29083 0t0 TCP [fd00::34]:53 (LISTEN)
named 1770 named 512u IPv4 29049 0t0 UDP 10.0.2.52:53
named 1770 named 513u IPv4 29052 0t0 UDP 10.0.2.53:53
named 1770 named 514u IPv4 29054 0t0 UDP 10.0.2.54:53
named 1770 named 515u IPv4 29056 0t0 UDP 10.0.2.56:53
named 1770 named 516u IPv4 29058 0t0 UDP 10.0.2.57:53
named 1770 named 517u IPv4 29060 0t0 UDP 10.0.2.58:53
named 1770 named 518u IPv4 29062 0t0 UDP 10.0.2.60:53
named 1770 named 519u IPv4 29064 0t0 UDP 10.0.2.61:53
named 1770 named 520u IPv4 29066 0t0 UDP 10.0.2.62:53
named 1770 named 521u IPv6 29068 0t0 UDP [fd00::3e]:53
named 1770 named 522u IPv6 29070 0t0 UDP [fd00::3d]:53
named 1770 named 523u IPv6 29072 0t0 UDP [fd00::3a]:53
named 1770 named 524u IPv6 29074 0t0 UDP [fd00::39]:53
named 1770 named 525u IPv6 29076 0t0 UDP [fd00::38]:53
named 1770 named 526u IPv6 29078 0t0 UDP [fd00::36]:53
named 1770 named 527u IPv6 29080 0t0 UDP [fd00::35]:53
named 1770 named 528u IPv6 29082 0t0 UDP [fd00::34]:53
[root@dns-auth ~]#
別ノードから権威サーバへの疎通を確認します。
ルートドメインの NS サーバへ www.test.com のアドレスを問い合わせ、com への委任情報(com の NS サーバ情報)が回答されることを確認します。
[root@dns-client ~]# dig @10.0.2.52 www.test.com A +norec +noall +comments +authority +additional
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52702
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 7
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 09eb18a887af2862eb8796ee69c2604797737cd6e831ff2e (good)
;; AUTHORITY SECTION:
com. 87203 IN NS x.gtld-servers.net.
com. 87203 IN NS z.gtld-servers.net.
com. 87203 IN NS y.gtld-servers.net.
;; ADDITIONAL SECTION:
x.gtld-servers.net. 87203 IN A 10.0.2.56
y.gtld-servers.net. 87203 IN A 10.0.2.57
z.gtld-servers.net. 87203 IN A 10.0.2.58
x.gtld-servers.net. 87203 IN AAAA fd00::38
y.gtld-servers.net. 87203 IN AAAA fd00::39
z.gtld-servers.net. 87203 IN AAAA fd00::3a
[root@dns-client ~]#
com ドメインの NS サーバへ www.test.com のアドレスを問い合わせ、test.com への委任情報(test.com の NS サーバ情報)が回答されることを確認します。
[root@dns-client ~]# dig @10.0.2.56 www.test.com A +norec +noall +comments +authority +additional
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20165
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: ba90c83a8c1000583b063d5169c2607d829a1c68d16ed15f (good)
;; AUTHORITY SECTION:
test.com. 172800 IN NS ns1.test.com.
test.com. 172800 IN NS ns2.test.com.
;; ADDITIONAL SECTION:
ns1.test.com. 172800 IN A 10.0.2.61
ns2.test.com. 172800 IN A 10.0.2.62
ns1.test.com. 172800 IN AAAA fd00::3d
ns2.test.com. 172800 IN AAAA fd00::3e
[root@dns-client ~]#
test.com ドメインの NS サーバへ www.test.com のアドレスを問い合わせ、回答されることを確認します。
[root@dns-client ~]# dig @10.0.2.61 www.test.com A +norec +noall +comments +answer +authority +additional
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52710
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8dc848d13e21baede889110069c2609883098a1b2d345a5f (good)
;; ANSWER SECTION:
www.test.com. 604800 IN A 3.4.5.6
;; AUTHORITY SECTION:
test.com. 604800 IN NS ns1.test.com.
test.com. 604800 IN NS ns2.test.com.
;; ADDITIONAL SECTION:
ns1.test.com. 604800 IN A 10.0.2.61
ns2.test.com. 604800 IN A 10.0.2.62
ns1.test.com. 604800 IN AAAA fd00::3d
ns2.test.com. 604800 IN AAAA fd00::3e
[root@dns-client ~]#
キャッシュサーバの設定
非再帰問い合わせ(反復問い合わせ)の際、デフォルトではルートヒントを元に、インターネット上のルート DNS サーバへ最初の問い合わせを行います。本検証環境では、先に構築した検証環境内のルート DNS サーバへ問い合わせるように設定を変更します。
キャッシュサーバ(BIND)のコンフィグ設定
キャッシュサーバ(BIND)の /etc/named.conf を設定します。設定に関する詳細につきましては、named.conf 内のコメントをご参照ください。
/etc/named.conf
// アクセス元のアドレス範囲(キャッシュサーバ自身および検証環境内のIPアドレス)に対し、ACLで別名をつけます。
acl "MySubnet" { 127.0.0.1; 10.0.2.0/24; ::1; fd00::0/64; };
options {
listen-on port 53 { any; 127.0.0.1; };
listen-on-v6 port 53 { any; ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// 検証環境内のIPアドレスからのクエリに応答します。
allow-query { MySubnet; };
// キャッシュサーバなのでスタブリゾルバからの再帰問合せに応じ、権威サーバへの非再帰問合せ(反復問い合わせ)を行います。
recursion yes;
allow-recursion { MySubnet; };
// キャッシュサーバなのでキャッシュでの応答に対応します。
allow-query-cache { MySubnet; };
// DNSSECの有効/無効の設定です。本検証環境では無効とします。
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
zone "." IN {
// ルートヒントをインターネットのルートドメイン接続情報から、検証環境内のルートドメイン接続情報へ変更します。
type hint;
// file "named.ca";
file "localhints.ca";
};
include "/etc/named.rfc1912.zones";
//include "/etc/named.root.key";
named.conf の構文をチェックします。何も表示されなければ問題ありません。
[root@dns-cache ~]# named-checkconf
[root@dns-cache ~]#
キャッシュサーバ(BIND)のルートヒント設定
検証環境用のルートヒントファイルを用意します。
[root@dns--cache ~]# cd /var/named
[root@dns--cache named]# vi localhints.ca
[root@dns--cache named]# chown root:named localhints.ca
[root@dns--cache named]# cat localhints.ca
. 518400 IN NS x.root-servers.net.
. 518400 IN NS y.root-servers.net.
. 518400 IN NS z.root-servers.net.
x.root-servers.net. 518400 IN A 10.0.2.52
y.root-servers.net. 518400 IN A 10.0.2.53
z.root-servers.net. 518400 IN A 10.0.2.54
x.root-servers.net. 518400 IN AAAA fd00::34
y.root-servers.net. 518400 IN AAAA fd00::35
z.root-servers.net. 518400 IN AAAA fd00::36
[root@dns--cache named]#
キャッシュサーバ(BIND)のサービス開始と動作確認
初回なのでサービスの自動起動の設定と、サービスの開始を同時に行います。
※ 開始だけならば、systemctl start named を実行します。
[root@dns-cache ~]# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
[root@dns-cache ~]#
起動状況を確認します。
[root@dns-cache ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-03-24 20:35:45 JST; 1min 9s ago
Process: 24125 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 24121 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z ">
Main PID: 24126 (named)
Tasks: 7 (limit: 23224)
Memory: 20.0M
CGroup: /system.slice/named.service
└24126 /usr/sbin/named -u named -c /etc/named.conf
3月 24 20:35:45 dns-cache.mydomain named[24126]: command channel listening on ::1#953
3月 24 20:35:45 dns-cache.mydomain named[24126]: managed-keys-zone: loaded serial 0
3月 24 20:35:45 dns-cache.mydomain named[24126]: zone 0.in-addr.arpa/IN: loaded serial 0
3月 24 20:35:45 dns-cache.mydomain named[24126]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip>
3月 24 20:35:45 dns-cache.mydomain named[24126]: zone localhost.localdomain/IN: loaded serial 0
3月 24 20:35:45 dns-cache.mydomain named[24126]: zone localhost/IN: loaded serial 0
3月 24 20:35:45 dns-cache.mydomain named[24126]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
3月 24 20:35:45 dns-cache.mydomain named[24126]: all zones loaded
3月 24 20:35:45 dns-cache.mydomain named[24126]: running
3月 24 20:35:45 dns-cache.mydomain systemd[1]: Started Berkeley Internet Name Domain (DNS).
[root@dns-cache ~]#
キャッシュサーバの 53(DNS)ポートの状況を確認します。
[root@dns-cache ~]# lsof -nP -iUDP:53 -iTCP:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 24126 named 21u IPv4 48865 0t0 TCP 127.0.0.1:53 (LISTEN)
named 24126 named 22u IPv4 48867 0t0 TCP 10.0.2.67:53 (LISTEN)
named 24126 named 23u IPv6 48869 0t0 TCP [::1]:53 (LISTEN)
named 24126 named 24u IPv6 48871 0t0 TCP [fd00::43]:53 (LISTEN)
named 24126 named 25u IPv6 48873 0t0 TCP [fe80::a00:27ff:fee0:1947]:53 (LISTEN)
named 24126 named 512u IPv4 48863 0t0 UDP 127.0.0.1:53
named 24126 named 513u IPv4 48866 0t0 UDP 10.0.2.67:53
named 24126 named 514u IPv6 48868 0t0 UDP [::1]:53
named 24126 named 515u IPv6 48870 0t0 UDP [fd00::43]:53
named 24126 named 516u IPv6 48872 0t0 UDP [fe80::a00:27ff:fee0:1947]:53
[root@dns-cache ~]#
別ノードからキャッシュサーバへの疎通を確認します。
疎通を確認する前にキャッシュをクリアしておきます。
※ 起動直後のため本来必要ありませんが、備忘録として記載しておきます。
[root@dns-cache ~]# rndc flush
[root@dns-cache ~]#
参考:rndc について
rndc は bind パッケージに含まれるツールです。
[root@dns-cache named]# rpm -qf `which rndc`
bind-9.11.36-16.el8_10.6.x86_64
[root@dns-cache named]#
キャッシュサーバへ www.test.com のアドレスを問い合わせ、回答されることを確認します。
[root@dns-client ~]# dig @10.0.2.67 www.test.com A +noall +comments +answer +authority +additional
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44955
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: becf8bfa4a5b456703cfd17b69c27a0e7ab9ebb65d1b1dbf (good)
;; ANSWER SECTION:
www.test.com. 604800 IN A 3.4.5.6
;; AUTHORITY SECTION:
test.com. 172800 IN NS ns1.test.com.
test.com. 172800 IN NS ns2.test.com.
;; ADDITIONAL SECTION:
ns2.test.com. 172800 IN A 10.0.2.62
ns1.test.com. 172800 IN A 10.0.2.61
ns2.test.com. 172800 IN AAAA fd00::3e
ns1.test.com. 172800 IN AAAA fd00::3d
[root@dns-client ~]#
キャッシュをファイルにダンプし登録状況を確認します。
ダンプ先は named.conf の dump-file ステートメントに定義されているパスです。
[root@dns-cache ~]# rndc dumpdb
[root@dns-cache ~]# cat /var/named/data/cache_dump.db
<snip>
; authanswer
. 87107 IN NS z.root-servers.net.
87107 IN NS x.root-servers.net.
87107 IN NS y.root-servers.net.
; glue
com. 87107 NS z.gtld-servers.net.
87107 NS y.gtld-servers.net.
87107 NS x.gtld-servers.net.
; glue
test.com. 172704 NS ns2.test.com.
172704 NS ns1.test.com.
; glue
ns1.test.com. 172704 A 10.0.2.61
; glue
172704 AAAA fd00::3d
; glue
ns2.test.com. 172704 A 10.0.2.62
; glue
172704 AAAA fd00::3e
; authanswer
www.test.com. 604704 A 3.4.5.6
; authanswer
x.gtld-servers.net. 87107 A 10.0.2.56
; authanswer
87107 AAAA fd00::38
; authanswer
y.gtld-servers.net. 87107 A 10.0.2.57
; authanswer
87107 AAAA fd00::39
; authanswer
z.gtld-servers.net. 87107 A 10.0.2.58
; authanswer
87107 AAAA fd00::3a
; glue
x.root-servers.net. 87107 A 10.0.2.52
; glue
87107 AAAA fd00::34
; glue
y.root-servers.net. 87107 A 10.0.2.53
; glue
87107 AAAA fd00::35
; glue
z.root-servers.net. 87107 A 10.0.2.54
; glue
87107 AAAA fd00::36
<snip>
[root@dns-cache ~]#
参考:委任情報のキャッシュについて
委任情報(NS サーバのホスト名とそのアドレス)は親と子で同じレコードを持ちます。
キャッシュされるのはどちらか気になったので確認しました。
com の NS サーバ(10.0.2.56)に登録されている test.com NS 情報を確認します。
[root@dns-client ~]# dig @10.0.2.56 test.com NS +norec | grep test.com
; <<>> DiG 9.11.36-RedHat-9.11.36-16.el8_10.6 <<>> @10.0.2.56 test.com NS +norec
;test.com. IN NS
test.com. 172800 IN NS ns2.test.com.
test.com. 172800 IN NS ns1.test.com.
ns1.test.com. 172800 IN A 10.0.2.61
ns2.test.com. 172800 IN A 10.0.2.62
ns1.test.com. 172800 IN AAAA fd00::3d
ns2.test.com. 172800 IN AAAA fd00::3e
[root@dns-client ~]#
test.com の NS サーバ(10.0.2.61)に登録されている test.com の NS 情報を確認します。
[root@dns-client ~]# dig @10.0.2.61 test.com NS +norec | grep test.com
; <<>> DiG 9.11.36-RedHat-9.11.36-16.el8_10.6 <<>> @10.0.2.61 test.com NS +norec
;test.com. IN NS
test.com. 604800 IN NS ns2.test.com.
test.com. 604800 IN NS ns1.test.com.
ns1.test.com. 604800 IN A 10.0.2.61
ns2.test.com. 604800 IN A 10.0.2.62
ns1.test.com. 604800 IN AAAA fd00::3d
ns2.test.com. 604800 IN AAAA fd00::3e
[root@dns-client ~]#
キャッシュされている test.com の NS 情報ですが、TTL から親(com)ドメインに登録されていた情報とわかります。
[root@dns-cache ~]# cat /var/named/data/cache_dump.db | grep test.com
test.com. 172704 NS ns2.test.com.
172704 NS ns1.test.com.
ns1.test.com. 172704 A 10.0.2.61
ns2.test.com. 172704 A 10.0.2.62
www.test.com. 604704 A 3.4.5.6
[root@dns-cache ~]#
BIND では親ドメインの委任情報がキャッシュされるようですが、RFC では特に規定されていないようです。他の DNS 製品では違った結果になる可能性があります。