LoginSignup
1
4

More than 3 years have passed since last update.

DNS環境の構築

Last updated at Posted at 2020-10-28

1 はじめに

DNSの各種実験をするため、PC上にDNS環境を構築してみました。

2 環境

2.1 構成

VMware Workstation 15 Player上の仮想マシン3台を使いました。
・仮想マシンのCentOS版数はCentOS7.6
dns,web,clientはホスト名。本記事では、dnsサーバwebサーバと呼んでいます。
abc.testはテスト用に作成したドメイン。testは予約済トップレベルドメイン(rfc6761)。

構成
                    abc.test ドメイン
+------------------- PC(Windows10) -------------------+
|                                                     |
|                                                     |
|     client              web               dns       |
| +-----------+      +-----------+      +-----------+ |
| |           |      |           |      |           | |
| | CentOS7.6 |      | CentOS7.6 |      | CentOS7.6 | |
| |           |      |           |      |           | |
| |           |      |           |      |           | |
| +--- eth0 --+      +--- eth0 --+      +--- eth0 --+ |
|       | .105             | .109             | .100  |
|       |                  |                  |       |
|       |                  |                  |       |
|       |                  | 192.168.2.0/24   |       |
| +-------------------------------------------------+ |
| |                                                 | |                     Wifi Router
| |            VMware Workstation 15 Player         | |                    +-----------+
| |                                                 | |.x               .1 |           |
| +-------------------------------------------------+ |--------------------| DNS Cache |--->ISP
|                                                     |   192.168.2.0/24   |   server  |
+-----------------------------------------------------+                    +-----------+

2.2 設計方針

・テスト用に作成するドメインは、abc.testとする。
・dnsサーバに対する名前解決は以下にしたがう。
- abc.testドメイン以外の名前解決は、Wifi Router(192.169.2.1)に問い合わせをする。
- abc.testドメイン内の名前解決は、dnsサーバのzoneファイルをもとに行う。

3 インストール方法

3.1 bindのインストール

dnsサーバにbindをインストールします。

bindのインストール
[root@dns ~]# yum install bind

bindの版数を確認します。

httpdの版数確認
[root@dns ~]# named -v
BIND 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 (Extended Support Version) <id:7107deb>

3.2 httpdのインストール

webサーバにhttpdをインストールします。

httpdのインストール
[root@web ~]# yum install httpd

httpdの版数を確認します。

httpdの版数確認
[root@web ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr  2 2020 13:13:23

3.3 digのインストール

clientにdigコマンドをインストールします。
digコマンドのインストール/使い方は、digコマンドの使い方を参照ください。

digのインストール
[root@client ~]# yum install bind-utils

4 bindの設定ファイル編集

bindの設定ファイル編集は、以下の順序で進めます。
1. /etc/named.conf編集(ZONEステートメント等の各種ステートメントの追加/変更)
2. ZONEファイル編集(A,NSレコード等の登録)

4.1 /etc/named.conf編集

named.confの設定内容は、以下のとおりです。
デフォルトのnamed.confとの差分を示します。

named.conf設定内容
[root@dns ~]# diff -Nur /etc/named.conf.org /etc/named.conf
--- /etc/named.conf.org 2020-10-26 17:13:56.358803543 +0900
+++ /etc/named.conf     2020-10-26 20:50:19.679976755 +0900
@@ -10,7 +10,7 @@
 // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

 options {
-       listen-on port 53 { 127.0.0.1; };
+       listen-on port 53 { 192.168.2.100; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
@@ -18,7 +18,10 @@
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
-       allow-query     { localhost; };
+       allow-query     { 192.168.2.0/24; };
+       allow-recursion { 192.168.2.0/24; };
+       forward only;
+       forwarders { 192.168.2.1; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
@@ -56,6 +59,11 @@
        file "named.ca";
 };

+zone "abc.test" IN {
+        type master;
+        file "abc.test";
+};
+
 include "/etc/named.rfc1912.zones";
 include "/etc/named.root.key";

4.2 ZONEファイル編集

abc.testドメインのZONEファイルを作成します。
$TTLやネガティブキャッシュの時間は、意図的に短い値(10秒)を設定しています。

[root@dns ~]# cat /var/named/abc.test
$ORIGIN abc.test.
$TTL 10
@    IN SOA     ns.abc.test. root.abc.test. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        10 )    ; minimum

        NS      ns.abc.test.
ns      A       192.168.2.100
www     A       192.168.2.109
client  A       192.168.2.105

5 firewallの設定

bind,およびhttpdが使用するポート番号を開放します。

5.1 bindが使用するポート番号開放

bindが使用するUDPの53番ポートを開放します。
なお、firewall-cmdコマンドの使い方は、firewall-cmdコマンドの使い方を参照ください。

ポート番号開放
[root@dns ~]# firewall-cmd --add-port=53/udp
success

開放したポート番号の確認をします。53番ポートが開放されたことがわかります。

開放したポート番号の確認
[root@dns ~]# firewall-cmd --list-ports
53/udp

5.2 httpdが使用するポート番号開放

httpdが使用するTCPの80番ポートを開放します。

ポート番号開放
[root@web ~]# firewall-cmd --add-port=80/tcp
success

開放したポート番号の確認をします。80番ポートが開放されたことがわかります。

開放したポート番号の確認
[root@web ~]# firewall-cmd --list-ports
80/tcp

6 /etc/resolv.confの設定

clientで、/etc/resolv.confの設定を行います。設定内容は以下のとおりです。
domain:テスト用に作成したドメイン(abc.test)を指定します。
nameserver:dnsサーバのIPアドレスを指定します。

resolv.confの設定内容
[root@client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
domain abc.test
nameserver 192.168.2.100

7 動作確認(その1)

abc.testドメイン内のwwwサーバに対してpingを実行してみます。

test.abcドメイン内のサーバに対するping
[root@client ~]# ping -c 1 www
PING www.abc.test (192.168.2.109) 56(84) bytes of data.
64 bytes from 192.168.2.109 (192.168.2.109): icmp_seq=1 ttl=64 time=0.528 ms

--- www.abc.test ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.528/0.528/0.528/0.000 ms

次にabc.testドメイン以外のwwwサーバに対してpingを実行してみます。

test.abcドメイン以外のサーバに対するping
[root@client ~]# ping -c 1 www.example.com
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=54 time=112 ms

--- www.example.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 112.523/112.523/112.523/0.000 ms

8 動作確認(その2)

allow-queryおよびallow-recursionに指定するネットワークアドレスを
以下のように変化させたとき、DNS名前解決ができるかどうか確認してみました。
192.168.3.0/24は、この記事では未定義のネットワークアドレスです。

表中の,×はpingの実行結果です。はping応答あり、×はping異常終了を表します。
wwwは、resolv.confのdomain 設定により、www.abc.testに展開されます。
なお、pingコマンドの使い方は、pingコマンドの使い方を参照ください。

項番 allow-query allow-recursion pingの宛先(www) pingの宛先(www.example.com)
1 192.168.2.0/24 192.168.2.0/24
2 192.168.3.0/24 192.168.2.0/24 ×
3 192.168.2.0/24 192.168.3.0/24 ×
4 192.168.3.0/24 192.168.3.0/24 × ×

8.1 項番1の実行結果

wwwへのping
[root@client ~]# ping -c 1 -q www
PING www.abc.test (192.168.2.109) 56(84) bytes of data.

--- www.abc.test ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.632/0.632/0.632/0.000 ms
www.example.comへのping
[root@client ~]# ping -c 1 -q www.example.com
PING www.example.com (93.184.216.34) 56(84) bytes of data.

--- www.example.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 111.876/111.876/111.876/0.000 ms

8.2 項番2の実行結果

wwwへのping
[root@client ~]# ping -c 1 -q www
ping: www: 名前またはサービスが不明です
www.example.comへのping
[root@client ~]# ping -c 1 -q www.example.com
PING www.example.com (93.184.216.34) 56(84) bytes of data.

--- www.example.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 111.940/111.940/111.940/0.000 ms

8.3 項番3の実行結果

wwwへのping
[root@client ~]# ping -c 1 -q www
PING www.abc.test (192.168.2.109) 56(84) bytes of data.

--- www.abc.test ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.514/0.514/0.514/0.000 ms
www.example.comへのping
[root@client ~]# ping -c 1 -q www.example.com
ping: www.example.com: 名前またはサービスが不明です

8.4 項番4の実行結果

wwwへのping
[root@client ~]# ping -c 1 -q www
ping: www: 名前またはサービスが不明です
www.example.comへのping
[root@client ~]# ping -c 1 -q www.example.com
ping: www.example.com: 名前またはサービスが不明です

8.5 まとめ

ステートメント 意味
listen-on DNS問い合わせを受け付けるIPアドレスを指定します。
allow-query DNS問い合わせを受け付けるIPアドレスを指定します。abc.testドメイン内の名前解決を要求するDNSクライアントのIPアドレスを指定します。
allow-recursion 再帰問い合わせを受け付けるIPアドレスを指定します。abc.testドメイン以外の名前解決を要求するDNSクライアントのIPアドレスを指定します。
forwarders abc.testドメイン以外のドメインの名前解決をおこなうDNSサーバのIPアドレスを指定します。このDNSサーバをフォワーダと呼びます。本記事ではWifi Routerがフォワーダになります。
forward first まずフォワーダでは名前解決をします。名前解決ができなかったらdnsサーバで名前解決をします。
forward only フォワーダで名前解決をします。フォワーダで名前解決できなくても、dnsサーバで名前解決をしません。
zone zoneの定義をします。abc.testドメインの指定、zoneファイルを指定します。

9 その他(digコマンドバグっているの???)

ping,ssh,ncコマンドを使った場合、ホスト名でホストにアクセスできます。
しかし、digコマンドの場合、ホスト名を指定しても名前解決ができません。
digコマンドがおかしいのでしょうか???それとも、私の設定がおかしいのでしょうか?

sshの場合、ホスト名(ns)を指定するだけで、ホストにログインできます。

sshの場合
[root@client ~]# ssh ns
root@ns's password:
Last failed login: Sat Oct 31 19:57:09 JST 2020 from 192.168.2.105 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Sat Oct 31 19:30:48 2020 from 192.168.2.105
[root@dns ~]#

ncコマンドも、ホスト名を指定するだけで、ホストにアクセスすることができます。
なお、ncコマンドの使い方は、ncコマンドの使い方を参照ください。

ncの場合
[root@dns ~]# nc -kl 11111

クライアント側は、サーバの11111番ポートにTCPコネクションを確立することができます。

ncの場合
[root@client ~]# nc ns 11111
12345

digコマンドの場合、ドメイン名(abc.test)も指定すると、ホストにアクセスすることができます。
なお、digコマンドの使い方は、digコマンドの使い方を参照ください。

digコマンドの場合(ドメインも指定した場合)
[root@client ~]# dig www.abc.test +short
192.168.2.109

しかし、ホスト名だけを指定した場合、ホストの名前解決ができません。
以下の期待値は、wwwのIPアドレス(192.168.2.109)です。
このときの様子をtcpdumpで確認すると、ホスト名にドメイン名が補完されていません。
なお、tcpdumpコマンドの使い方は、tcpdumpの使い方を参照ください。

digコマンドの場合
[root@client ~]# dig www +short
[root@client ~]#

hostコマンドだと、ホスト名を指定しただけでも、名前解決ができます。

hostコマンドの場合
[root@client ~]# host www
www.abc.test has address 192.168.2.109

nslookupコマンドも、ホスト名だけで、名前解決ができます。

nslookupコマンドの場合
[root@client ~]# nslookup www
Server:         192.168.2.100
Address:        192.168.2.100#53

Name:   www.abc.test
Address: 192.168.2.109

上記結果より、digコマンドが、/etc/resolv.confを正しく解釈していないように思います。
ようは、digコマンドがバグっている!?

z 参考情報

Linux教科書 LPICレベル2 スピードマスター問題集 Version4.5対応
Linux教科書 LPICレベル2 Version 4.5対応 (日本語)

BINDのDNSオープンリゾルバ対策について

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4