ローカルの検証環境にルートのDNSサーバを構築
ローカルの検証環境にDNSルートサーバを含む権威サーバおよびキャッシュサーバを構築しました。検証環境内で非再帰問い合わせを完結させます。
※ここでは実際に動作したシステムの設定を掲載していますが内容について保証するものではありません。
また異常系の動作およびセキュリティについては未確認です。流用される場合は各自の責任でお願いします。
※今回、逆引き、root化、DNSSEC、IPv6 等については考慮していません。
検証環境の構成は以下のとおりです。
スペック等はすべてのサーバで同じです。
仮想環境 | VirtualBox 6.1.26 |
仮想マシン | 仮想CPU×1、メモリ×1G ネットワーク:NATネットワーク×1 ハードディスク:16G(thin、実際のサイズは2G以下) |
OS | CentOS 7.7.1908 |
DNS | BIND 9.11.4 |
構築手順は以下のとおりです。
※OS、BIND等はインストール済みとします。
DNSポートの開放
FirewallでDNSポートへのアクセスを許可する
※下記はDNSルートサーバでの設定です。他のサーバの設定についてはDNSルートサーバと同様のため掲載は省略します。
[root@root-16 ~]# firewall-cmd --add-service=dns --permanent
success
[root@root-16 ~]# firewall-cmd --reload
success
[root@root-16 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client dns ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
DNSルートサーバの構築
ローカル環境にDNSルートサーバを構築し、testサブドメインを委任するための情報を登録します。構築後、サーバ単体での動作確認を行います。
コンフィグの設定
/etc/named.confの設定
※変更箇所および構成確認に必要なコードのみ掲載しています。
options {
// 指定したアドレスでクエリを受け付ける
listen-on port 53 { 10.0.2.16; 127.0.0.1; };
// 指定した問い合わせ元からのクエリを受け付ける
//(権威なのですべて受け付ける)
allow-query { any; };
// 再帰問い合わせのクエリへの対応
// (キャッシュサーバではないので受け付けない)
recursion no;
allow-recursion { none; };
// 指定した問い合わせ元に対してキャッシュの内容で回答する
// (キャッシュサーバではないので回答しない)
allow-query-cache { none; };
};
//zone "." IN {
// type hint;
// file "named.ca";
//};
// rootゾーンに関する設定
zone "." IN {
type master;
file "root.zone";
};
権限を確認
[root@root-16 ~]# ll /etc/named.conf
-rw-r-----. 1 root named 2163 8月 24 06:28 /etc/named.conf
構文チェック
[root@root-16 ~]# named-checkconf; echo $?
0
rootゾーンの設定
/var/named/root.zoneの設定
$TTL 3600S
@ IN SOA x.root-servers.net. root.squat.test. (
1657574902
60S
120S
360S
120S )
IN NS x.root-servers.net.
x.root-servers.net. IN A 10.0.2.16
@ IN A 10.0.2.16
test. IN NS ns.test.
ns.test. IN A 10.0.2.17
権限を確認
[root@root-16 ~]# ll /var/named/root.zone
-rw-r-----. 1 root named 290 8月 24 06:07 /var/named/root.zone
構文チェック
[root@root-16 ~]# named-checkzone -i local . /var/named/root.zone
zone ./IN: loaded serial 1657574902
OK
サービス再起動後の状況確認
確認1
[root@root-16 ~]# 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 水 2022-08-31 06:22:23 JST; 1min 28s ago
<中略>
8月 31 06:22:23 root-16.squat.test named[1068]: managed-keys-zone: Unable to fetch DNSKEY set '.': ncache nxrrset
※ DNSKEYについては何も考慮していないので何やらメッセージが出てる
確認2
[root@root-16 ~]# rndc status
version: BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 (Extended Support Version)
running on root-16.squat.test: Linux x86_64 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019
boot time: Wed, 24 Aug 2022 20:59:04 GMT
last configured: Wed, 24 Aug 2022 20:59:04 GMT
configuration file: /etc/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 7 (0 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 3/150
server is up and running
DNSポートの待ち受け(LISTEN)状況を確認
53(domain)ポートを参照
[root@root-16 ~]# lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 1350 named 21u IPv4 19524 0t0 TCP localhost:domain (LISTEN)
named 1350 named 22u IPv4 19526 0t0 TCP root-16.squat.test:domain (LISTEN)
named 1350 named 23u IPv6 19528 0t0 TCP localhost:domain (LISTEN)
named 1350 named 512u IPv4 19522 0t0 UDP localhost:domain
named 1350 named 513u IPv4 19525 0t0 UDP root-16.squat.test:domain
named 1350 named 514u IPv6 19527 0t0 UDP localhost:domain
動作確認
設定したゾーン情報を参照できることを確認
[root@root-16 ~]# dig @10.0.2.16 . any +norec
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.16 . any +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42321
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;. IN ANY
;; ANSWER SECTION:
. 3600 IN SOA x.root-servers.net. root.squat.test. 1657574902 60 120 360 120
. 3600 IN NS x.root-servers.net.
. 3600 IN A 10.0.2.16
;; ADDITIONAL SECTION:
x.root-servers.net. 3600 IN A 10.0.2.16
;; Query time: 0 msec
;; SERVER: 10.0.2.16#53(10.0.2.16)
;; WHEN: 木 8月 25 06:10:16 JST 2022
;; MSG SIZE rcvd: 140
権威サーバへの非再帰問い合わせを想定した動作確認
(NOERRORでtestドメインのNSを回答している)
[root@root-16 ~]# dig @10.0.2.16 www.squat.test +norec
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.16 www.squat.test +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15761
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.squat.test. IN A
;; AUTHORITY SECTION:
test. 3600 IN NS ns.test.
;; ADDITIONAL SECTION:
ns.test. 3600 IN A 10.0.2.17
;; Query time: 0 msec
;; SERVER: 10.0.2.16#53(10.0.2.16)
;; WHEN: 木 8月 25 06:13:01 JST 2022
;; MSG SIZE rcvd: 76
TLDサーバ(test)の構築
ローカル環境にTLDサーバ(test)を構築し、squat.testサブドメインを委任するための情報を登録します。構築後、サーバ単体での動作確認を行います。
コンフィグの設定
/etc/named.confの設定
※変更箇所および構成確認に必要なコードのみ掲載しています。
※ルートサーバと同様のコメントについては省略しています。
options {
listen-on port 53 { 10.0.2.17; 127.0.0.1; };
allow-query { any; };
recursion no;
allow-recursion { none; };
allow-query-cache { none; };
};
//zone "." IN {
// type hint;
// file "named.ca";
//};
// testゾーンに関する設定
zone "test" IN {
type master;
file "test.zone";
};
権限を確認
[root@tld-17 ~]# ll /etc/named.conf
-rw-r-----. 1 root named 2165 8月 26 09:23 /etc/named.conf
構文チェック
[root@tld-17 ~]# named-checkconf; echo $?
0
testゾーンの設定
/var/named/test.zoneの設定
$TTL 86400
@ IN SOA ns.test. root.squat.test. (
1656218725
28800
14400
3600000
86400)
IN NS ns.test.
ns.test. IN A 10.0.2.17
@ IN A 10.0.2.17
squat.test. IN NS ns.squat.test.
ns.squat.test. IN A 10.0.2.18
権限を確認
[root@tld-17 ~]# ll /var/named/test.zone
-rw-r-----. 1 root named 256 8月 26 09:41 /var/named/test.zone
構文チェック
[root@tld-17 ~]# named-checkzone -i local test /var/named/test.zone
zone test/IN: loaded serial 1656218725
OK
サービス再起動後の状況確認
確認1
[root@tld-17 ~]# 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 金 2022-08-26 09:49:27 JST; 44s ago
<以下略>
確認2
[root@tld-17 ~]# rndc status
version: BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 (Extended Support Version)
running on tld-17.squat.test: Linux x86_64 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019
boot time: Fri, 26 Aug 2022 00:49:27 GMT
last configured: Fri, 26 Aug 2022 00:49:27 GMT
configuration file: /etc/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 7 (0 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 3/150
server is up and running
DNSポートの待ち受け(LISTEN)状況を確認
53(domain)ポートを参照
[root@tld-17 ~]# lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 1406 named 21u IPv4 20347 0t0 TCP localhost:domain (LISTEN)
named 1406 named 22u IPv4 20349 0t0 TCP tld-17.squat.test:domain (LISTEN)
named 1406 named 23u IPv6 20351 0t0 TCP localhost:domain (LISTEN)
named 1406 named 512u IPv4 20345 0t0 UDP localhost:domain
named 1406 named 513u IPv4 20348 0t0 UDP tld-17.squat.test:domain
named 1406 named 514u IPv6 20350 0t0 UDP localhost:domain
動作確認
設定したゾーン情報を参照できることを確認
[root@tld-17 ~]# dig @10.0.2.17 test any +norec
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.17 test any +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44826
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test. IN ANY
;; ANSWER SECTION:
test. 86400 IN SOA ns.test. root.squat.test. 1656218725 28800 14400 3600000 86400
test. 86400 IN NS ns.test.
test. 86400 IN A 10.0.2.17
;; ADDITIONAL SECTION:
ns.test. 86400 IN A 10.0.2.17
;; Query time: 0 msec
;; SERVER: 10.0.2.17#53(10.0.2.17)
;; WHEN: 金 8月 26 09:52:44 JST 2022
;; MSG SIZE rcvd: 129
権威サーバへの非再帰問い合わせを想定した動作確認
(NOERRORでsquat.testドメインのNSを回答している)
[root@tld-17 named]# dig @10.0.2.17 www.squat.test +norec
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.17 www.squat.test +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1848
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.squat.test. IN A
;; AUTHORITY SECTION:
squat.test. 86400 IN NS ns.squat.test.
;; ADDITIONAL SECTION:
ns.squat.test. 86400 IN A 10.0.2.18
;; Query time: 0 msec
;; SERVER: 10.0.2.17#53(10.0.2.17)
;; WHEN: 金 8月 26 09:53:59 JST 2022
;; MSG SIZE rcvd: 76
squat.testドメインのNSの構築
ローカル環境にsquat.testドメインのNSを構築し、同ドメインのAレコード(wwwなど)を登録します。構築後、サーバ単体での動作確認を行います。
コンフィグの設定
/etc/named.confの設定
※変更箇所および構成確認に必要なコードのみ掲載しています。
※ルートサーバと同様のコメントについては省略しています。
options {
listen-on port 53 { 10.0.2.18; 127.0.0.1; };
allow-query { any; };
recursion no;
allow-recursion { none; };
allow-query-cache { none; };
};
//zone "." IN {
// type hint;
// file "named.ca";
//};
zone "squat.test" IN {
type master;
file "squat.test.zone";
};
権限を確認
[root@ns ~]# ll /etc/named.conf
-rw-r-----. 1 root named 2177 8月 26 10:27 /etc/named.conf
構文チェック
[root@ns ~]# named-checkconf; echo $?
0
squat.testゾーンの設定
/var/named/squat.test.zoneの設定
$TTL 60
@ IN SOA ns.squat.test. root.squat.test. (
1656218725
28800
14400
3600000
86400)
IN NS ns.squat.test.
ns.squat.test. IN A 10.0.2.18
@ IN A 10.0.2.18
@ IN MX 10 mail
mail IN A 10.0.2.18
www IN A 10.0.2.18
権限を確認
[root@ns ~]# ll /var/named/squat.test.zone
-rw-r-----. 1 root named 289 8月 26 10:38 /var/named/squat.test.zone
構文チェック
[root@ns ~]# named-checkzone squat.test /var/named/squat.test.zone
zone squat.test/IN: loaded serial 1656218725
OK
サービス再起動後の状況確認
確認1
[root@ns ~]# 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 金 2022-08-26 10:40:50 JST; 13s ago
<以下略>
確認2
[root@ns ~]# rndc status
version: BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 (Extended Support Version)
running on ns.squat.test: Linux x86_64 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019
boot time: Fri, 26 Aug 2022 01:40:50 GMT
last configured: Fri, 26 Aug 2022 01:40:50 GMT
configuration file: /etc/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 7 (0 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 3/150
server is up and running
DNSポートの待ち受け(LISTEN)状況を確認
53(domain)ポートを参照
[root@ns ~]# lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 1359 named 21u IPv4 19640 0t0 TCP localhost:domain (LISTEN)
named 1359 named 22u IPv4 19642 0t0 TCP ns.squat.test:domain (LISTEN)
named 1359 named 23u IPv6 19644 0t0 TCP localhost:domain (LISTEN)
named 1359 named 512u IPv4 19638 0t0 UDP localhost:domain
named 1359 named 513u IPv4 19641 0t0 UDP ns.squat.test:domain
named 1359 named 514u IPv6 19643 0t0 UDP localhost:domain
動作確認
設定したゾーン情報を参照できることを確認
[root@ns ~]# dig @10.0.2.18 squat.test any +norec
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.18 squat.test any +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7106
;; flags: qr aa; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;squat.test. IN ANY
;; ANSWER SECTION:
squat.test. 60 IN SOA ns.squat.test. root.squat.test. 1656218725 28800 14400 3600000 86400
squat.test. 60 IN NS ns.squat.test.
squat.test. 60 IN A 10.0.2.18
squat.test. 60 IN MX 10 mail.squat.test.
;; ADDITIONAL SECTION:
ns.squat.test. 60 IN A 10.0.2.18
mail.squat.test. 60 IN A 10.0.2.18
;; Query time: 0 msec
;; SERVER: 10.0.2.18#53(10.0.2.18)
;; WHEN: 金 8月 26 10:42:18 JST 2022
;; MSG SIZE rcvd: 166
権威サーバへの非再帰問い合わせを想定した動作確認
(NOERRORでwww.squat.testのAレコードを回答している)
[root@ns ~]# dig @10.0.2.18 www.squat.test +norec
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.18 www.squat.test +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23675
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.squat.test. IN A
;; ANSWER SECTION:
www.squat.test. 60 IN A 10.0.2.18
;; AUTHORITY SECTION:
squat.test. 60 IN NS ns.squat.test.
;; ADDITIONAL SECTION:
ns.squat.test. 60 IN A 10.0.2.18
;; Query time: 0 msec
;; SERVER: 10.0.2.18#53(10.0.2.18)
;; WHEN: 金 8月 26 10:43:35 JST 2022
;; MSG SIZE rcvd: 92
DNSキャッシュサーバから権威サーバへの通信確認
DNSポートへの通信確認
※ 攻撃と判断される可能性があるので、管理しているサーバ以外へのncatは控えてください。
DNSルートサーバのDNSポートへの通信確認("Connected"が表示されることを確認)
[root@cache ~]# ncat -vz 10.0.2.16 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.2.16:53.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
TLDサーバ(test)のDNSポートへの通信確認("Connected"が表示されることを確認)
[root@cache ~]# ncat -vz 10.0.2.17 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.2.17:53.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
squat.testドメインのNSサーバのDNSポートへの通信確認("Connected"が表示されることを確認)
[root@cache ~]# ncat -vz 10.0.2.18 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.2.18:53.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
DNSキャッシュサーバの構築
ローカル環境にDNSキャッシュサーバを構築し、DNSルートサーバへの参照を外部からローカルへ切り替えます。構築後、自身への非再帰問い合わせで動作を確認します。
コンフィグの設定
/etc/named.confの設定
※変更箇所および構成確認に必要なコードのみ掲載しています。
acl my-domain {
10.0.2.0/24;
localhost;
};
options {
// 指定したアドレスでクエリを受け付ける
listen-on port 53 { 10.0.2.19; 127.0.0.1; };
// my-domainリストで定義した問い合わせ元からのクエリを受け付ける
allow-query { my-domain; };
// 再帰問い合わせのクエリへの対応
// (キャッシュサーバなので受け付ける)
recursion yes;
// ここで指定した問い合わせ元からの再帰問い合わせを受け付ける
allow-recursion { my-domain; };
// ここで指定した問い合わせ元に対し、キャッシュがあればキャッシュで回答する
allow-query-cache { my-domain; };
// DNSSECは無効
dnssec-enable no;
dnssec-validation no;
};
権限を確認
[root@cache ~]# ll /etc/named.conf
-rw-r-----. 1 root named 2166 8月 26 11:02 /etc/named.conf
構文チェック
[root@cache ~]# named-checkconf; echo $?
0
DNSルートサーバへの参照の設定
/var/named/named.caの設定
(参照先を外部のDNSルートサーバからローカルに構築したDNSルートサーバへ変更)
; <<>> DiG 9.11.3-RedHat-9.11.3-3.fc27 <<>> +bufsize=1200 +norec @a.root-servers.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46900
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS x.root-servers.net.
;; ADDITIONAL SECTION:
x.root-servers.net. 518400 IN A 10.0.2.16
;; Query time: 24 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Thu Apr 05 15:57:34 CEST 2018
;; MSG SIZE rcvd: 811
権限を確認
[root@cache ~]# ll /var/named/named.ca
-rw-r-----. 1 root named 658 8月 22 06:13 /var/named/named.ca
サービス再起動後の状況確認
確認1
[root@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 金 2022-08-26 12:14:37 JST; 6s ago
<以下略>
確認2
[root@cache ~]# rndc status
version: BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 (Extended Support Version)
running on cache.squat.test: Linux x86_64 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019
boot time: Fri, 26 Aug 2022 03:14:37 GMT
last configured: Fri, 26 Aug 2022 03:14:37 GMT
configuration file: /etc/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 103 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 3/150
server is up and running
DNSポートの待ち受け(LISTEN)状況を確認
53(domain)ポートを参照
[root@cache ~]# lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 1579 named 21u IPv4 21515 0t0 TCP localhost:domain (LISTEN)
named 1579 named 22u IPv4 21517 0t0 TCP cache.squat.test:domain (LISTEN)
named 1579 named 23u IPv6 21519 0t0 TCP localhost:domain (LISTEN)
named 1579 named 512u IPv4 21513 0t0 UDP localhost:domain
named 1579 named 513u IPv4 21516 0t0 UDP cache.squat.test:domain
named 1579 named 514u IPv6 21518 0t0 UDP localhost:domain
動作確認
自身への再帰問い合わせ
(NOERRORで回答)
[root@cache ~]# dig @10.0.2.19 www.squat.test
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.19 www.squat.test
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26552
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.squat.test. IN A
;; ANSWER SECTION:
www.squat.test. 60 IN A 10.0.2.18
;; AUTHORITY SECTION:
squat.test. 86400 IN NS ns.squat.test.
;; ADDITIONAL SECTION:
ns.squat.test. 86400 IN A 10.0.2.18
;; Query time: 2 msec
;; SERVER: 10.0.2.19#53(10.0.2.19)
;; WHEN: 金 8月 26 12:17:18 JST 2022
;; MSG SIZE rcvd: 92
クライアントからDNSキャッシュサーバへの通信確認
DNSポートへの通信確認
※ 攻撃と判断される可能性があるので、管理しているサーバ以外へのncatは控えてください。
DNSキャッシュサーバのDNSポートへの通信確認("Connected"が表示されることを確認)
[root@stub-20 ~]# ncat -vz 10.0.2.19 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.2.19:53.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
再帰問い合わせの動作確認
クライアントからDNSキャッシュサーバへ再帰問い合わせを行い、DNSキャッシュサーバ上でキャッシュおよびDNSパケットを確認します。クライアントからDNSキャッシュサーバへ再帰問い合わせ
[root@stub-20 ~]# dig @10.0.2.19 www.squat.test
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.0.2.19 www.squat.test
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44458
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.squat.test. IN A
;; ANSWER SECTION:
www.squat.test. 60 IN A 10.0.2.18
;; AUTHORITY SECTION:
squat.test. 86400 IN NS ns.squat.test.
;; ADDITIONAL SECTION:
ns.squat.test. 86400 IN A 10.0.2.18
;; Query time: 9 msec
;; SERVER: 10.0.2.19#53(10.0.2.19)
;; WHEN: 金 8月 26 13:14:20 JST 2022
;; MSG SIZE rcvd: 92
再帰問い合わせ前後のDNSキャッシュサーバのキャッシュの状況
<再帰問い合わせ実行前>
DNSキャッシュサーバのキャッシュをクリア
[root@cache ~]# rndc flush; echo $?
0
キャッシュをダンプ
[root@cache ~]# rndc dumpdb
ダンプ先のファイルパスを確認
[root@cache ~]# grep cache_dump.db /etc/named.conf
dump-file "/var/named/data/cache_dump.db";
キャッシュがクリアされていることを確認
[root@cache ~]# cat /var/named/data/cache_dump.db
;
; Start view _default
;
;
; Cache dump of view '_default' (cache _default)
;
$DATE 20220826033945
;
; Address database dump
;
; [edns success/4096 timeout/1432 timeout/1232 timeout/512 timeout]
; [plain success/timeout]
;
;
; Unassociated entries
;
;
; Bad cache
;
;
; SERVFAIL cache
;
;
; Start view _bind
;
;
; Cache dump of view '_bind' (cache _bind)
;
$DATE 20220826033945
;
; Address database dump
;
; [edns success/4096 timeout/1432 timeout/1232 timeout/512 timeout]
; [plain success/timeout]
;
;
; Unassociated entries
;
;
; Bad cache
;
;
; SERVFAIL cache
;
; Dump complete
<再帰問い合わせ実行後>
再帰問い合わせでキャッシュされた内容を確認
[root@cache ~]# rndc dumpdb
[root@cache ~]# cat /var/named/data/cache_dump.db | head -n 22
;
; Start view _default
;
;
; Cache dump of view '_default' (cache _default)
;
$DATE 20220826034340
; authanswer
. 3583 IN NS x.root-servers.net.
; glue
x.root-servers.net. 3583 A 10.0.2.16
; glue
test. 3583 NS ns.test.
; glue
ns.test. 3583 A 10.0.2.17
; glue
squat.test. 86383 NS ns.squat.test.
; glue
ns.squat.test. 86383 A 10.0.2.18
; authanswer
www.squat.test. 43 A 10.0.2.18
;
再帰問い合わせ時のDNSパケット
DNSキャッシュサーバでwiresharkを起動しDNSパケットをキャプチャ
[root@cache ~]# tshark -i1 -f 'port 53' -w /tmp/test.pcap
Running as user "root" and group "root". This could be dangerous.
Capturing on 'enp0s3'
10 ^C
キャプチャしたDNSパケットを確認
[root@cache ~]# tshark -i1 -r /tmp/test.pcap
Running as user "root" and group "root". This could be dangerous.
1 0.000000000 10.0.2.20 -> 10.0.2.19 DNS 85 Standard query 0xadaa A www.squat.test
2 0.000508249 10.0.2.19 -> 10.0.2.16 DNS 85 Standard query 0xfa58 A www.squat.test
3 0.000761562 10.0.2.19 -> 10.0.2.16 DNS 70 Standard query 0x9907 NS
4 0.007814595 10.0.2.16 -> 10.0.2.19 DNS 118 Standard query response 0xfa58
5 0.007833710 10.0.2.16 -> 10.0.2.19 DNS 117 Standard query response 0x9907 NS x.root-servers.net
6 0.008024474 10.0.2.19 -> 10.0.2.17 DNS 85 Standard query 0x1a8e A www.squat.test
7 0.008582782 10.0.2.17 -> 10.0.2.19 DNS 118 Standard query response 0x1a8e
8 0.009221115 10.0.2.19 -> 10.0.2.18 DNS 85 Standard query 0xad4a A www.squat.test
9 0.009759276 10.0.2.18 -> 10.0.2.19 DNS 101 Standard query response 0xad4a A 10.0.2.18
10 0.009868167 10.0.2.19 -> 10.0.2.20 DNS 134 Standard query response 0xadaa A 10.0.2.18
※ .16:root, .17:tld(testのNS), .18:squat.testのNS, .19:Cache, .20:Client
1 クライアントからDNSキャッシュサーバへの再帰問い合わせ
2,3 DNSキャッシュサーバからDNSルートサーバへの非再帰問い合わせ
4,5 DNSルートサーバからDNSキャッシュサーバへの回答
6 DNSキャッシュサーバからTLDサーバ(testドメインのNS)への非再帰問い合わせ
7 TLDサーバからDNSキャッシュサーバへの回答
8 DNSキャッシュサーバからsquat.testドメインのNSへの非再帰問い合わせ
9 squat.testドメインのNSからDNSキャッシュサーバへの回答
10 DNSキャッシュサーバからクライアントへの回答