【CentOS7】 DNSサーバーの構築手順(bind-chroot、bind9.9.4)

レンタルサーバーには欠かせないDNS(Domain Name System:名前解決の仕組み)ですが、DNSの内部的な処理がどのようになっているのか詳しく調べるために、実際に検証用に DNS サーバーを構築してみました。

 

下記の記事は chroot について分かりやすく解説をしています。

 

【chroot】 なぜFTPでレンタルサーバーにアクセスしても、他のアカウントのファイルが見れないか?

 

 

DNSサーバー構築の環境・設計

以下の環境で内部DNSサーバーを構築したので、ぜひ参考にしてください。

■環境

  • OS:CentOS7 ← DNSサーバー
  • OS:Windows ← 個人パソコン

 

■設計

  • DNSサーバー:bind(9.9.4-38.el7_3.2)
  • 内部ドメイン名:tama-chan.local
  • 192.168.1.10 ns ← DNSサーバーにする
  • 192.168.1.3  PC ← 個人のWindowsパソコン

 

図解するとこんな感じになります。

bindをインストールします。

[root@centos7 ~]# yum install bind ← bindをインストール
読み込んだプラグイン:fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base                                                                             | 3.6 kB  00:00:00
epel/x86_64/metalink                                                             | 5.5 kB  00:00:00
epel                                                                             | 4.3 kB  00:00:00
extras                                                                           | 3.4 kB  00:00:00
groonga                                                                          | 2.5 kB  00:00:00
ius                                                                              | 2.3 kB  00:00:00
updates                                                                          | 3.4 kB  00:00:00
(1/5): groonga/7/x86_64/primary_db                                               | 278 kB  00:00:00
(2/5): ius/x86_64/primary_db                                                     | 203 kB  00:00:01
(3/5): epel/x86_64/updateinfo                                                    | 781 kB  00:00:01
(4/5): updates/7/x86_64/primary_db                                               | 4.7 MB  00:00:04
(5/5): epel/x86_64/primary_db                                                    | 4.7 MB  00:00:20
Determining fastest mirrors
 * base: www.ftp.ne.jp
 * epel: ftp.riken.jp
 * extras: www.ftp.ne.jp
 * ius: mirrors.kernel.org
 * updates: www.ftp.ne.jp
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ bind.x86_64 32:9.9.4-38.el7_3.2 を インストール
–> 依存性解決を終了しました。

依存性を解決しました

==========================================================
 Package            アーキテクチャー     バージョン                         リポジトリー           容量
==========================================================
インストール中:
 bind               x86_64               32:9.9.4-38.el7_3.2                updates               1.8 M ← bindのバージョンは 9.9.4-38

トランザクションの要約
==========================================================
インストール  1 パッケージ

総ダウンロード容量: 1.8 M
インストール容量: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
bind-9.9.4-38.el7_3.2.x86_64.rpm                                                 | 1.8 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 32:bind-9.9.4-38.el7_3.2.x86_64                                         1/1
  検証中                  : 32:bind-9.9.4-38.el7_3.2.x86_64                                         1/1

インストール:
  bind.x86_64 32:9.9.4-38.el7_3.2

完了しました!
[root@centos7 ~]#

 

[root@centos7 ~]# yum install bind-chroot   ←bind-chrootもインストールする
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.riken.jp
 * extras: www.ftp.ne.jp
 * ius: mirrors.kernel.org
 * updates: www.ftp.ne.jp
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ bind-chroot.x86_64 32:9.9.4-38.el7_3.2 を インストール
–> 依存性解決を終了しました。

依存性を解決しました

=========================================================
 Package                 アーキテクチャー   バージョン                        リポジトリー         容量
=========================================================
インストール中:
 bind-chroot             x86_64             32:9.9.4-38.el7_3.2               updates              85 k

トランザクションの要約
=========================================================
インストール  1 パッケージ

総ダウンロード容量: 85 k
インストール容量: 3.3 k
Is this ok [y/d/N]: y
Downloading packages:
bind-chroot-9.9.4-38.el7_3.2.x86_64.rpm                                          |  85 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 32:bind-chroot-9.9.4-38.el7_3.2.x86_64                                  1/1
  検証中                  : 32:bind-chroot-9.9.4-38.el7_3.2.x86_64                                  1/1

インストール:
  bind-chroot.x86_64 32:9.9.4-38.el7_3.2

完了しました!
[root@centos7 ~]#

[root@centos7 ~]# cd /var/named/ ←chrootができているか確認
[root@centos7 named]# ls ←chrootができているか確認
chroot  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves ←chrootができていることを確認できた。
[root@centos7 named]# 

 

bind-chroot をインストールして bind を確認したところ、現在 bind・bind-chroot サービスは起動していない状態、且つ disabled の状態です。

 

[root@centos7 etc]# cd /var/named/chroot/etc/named/ ←bind,bind-chrootインストール後にファイルの情報を確認
[root@centos7 named]# ls
[root@centos7 named]# ←まだサービスが起動していないためファイルが何もない状態

 

この /var/named/chroot が bind にとっての「/(root)」ディレクトリになります。

そのため、bind サービスは /var/named/chroot より上のディレクトリには行けなくなり、仮に bind を乗っ取られても他のディレクトリには被害が及びません。

つまり、セキュリティを確保することができます。

 

念のためサービスの状況確認と設定確認をします。

[root@centos7 named]# systemctl status named ←namedのステータス確認をしてまだ named が起動していないことを確認
● named.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@centos7 named]# systemctl status named-chroot ←named-chroot のステータス確認をしてまだ named-chroot が起動していないことを確認
● named-chroot.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@centos7 named]# systemctl list-unit-files | grep named ←サービスの自動起動設定を確認
named-chroot-setup.service                    static
named-chroot.service                          disabled
named-setup-rndc.service                      static
named.service                                 disabled
systemd-hostnamed.service                     static
[root@centos7 named]#

 

named.service も named-chroot.service も「disabled(OS再起動で自動的にサービスが上がってこない)」になっています。

named-chroot-setup.serviceが「static」となっていますが、これは毎回サービスとして起動するものではなく他のサービスに依存して起動したりしなかったりします。

つまり起動するかどうかは、その時の「環境・状況」に依存します。

まとめると

  • enabled ← OS起動時にサービスとして自動起動する。
  • disabled ← OS起動をしてもサービスとして自動起動しない。
  • static ← 他のサービスに依存する。その時の状況・環境により起動したりしなかったりする。

です。

 

インターネット上には3つの手順があるので注意

bindに関する設定で、インターネットの情報を調べてみたところ、3つの手順がありました。

  • ①bind-chrootをインストールした場合、設定ファイルを手動でコピーする必要がある派
  • ②bind-chrootをインストールした場合、設定ファイルをシェルでコピーする必要がある派
  • ③bind-chrootをインストール後に手動で設定ファイルを作成しなくても、bind-chrootサービスを起動すれば自動的にbindの設定ファイは作成される派

 

 

実際にCentOS7でnamed、named-chrootの動作確認をした

実際、手元のCentOS7の環境ではどうなのか確認するため、まずは以下の手順で試してみます。

 

1.named.serviceのみサービス起動してみる。

 →多分「/var/named/chroot/etc/namad」配下に設定ファイルはできない。

  理由は、「named-chroot.service」「named-chroot-setup.service」も起動していないから。

 

2.named-chroot.serviceを起動する。

 →多分、自動的に「/var/named/chroot/etc/namad」配下に設定ファイルができている。

  理由は、「named-chroot-setup.service」の自動起動設定が「static」になっていて、依存関係で起動していろいろとセットアップをしてくれるだろうから。

 

[root@centos7 named]# systemctl enable named.service ← namedが自動起動するように設定します。
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@centos7 named]# systemctl start named.service ← namedを起動します。
[root@centos7 named]# systemctl status named.service  ← namedが正常に起動しているか確認します。
named.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-04-16 07:01:02 JST; 6s ago
  Process: 5566 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 5563 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 5568 (named)
   CGroup: /system.slice/named.service
           mq5568 /usr/sbin/named -u named

 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: command channel listening on ::1#953
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: managed-keys-zone: loaded serial 0
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: zone 0.in-addr.arpa/IN: loaded serial 0
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: zone localhost.localdomain/IN: loaded serial 0
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: zone localhost/IN: loaded serial 0
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: 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…ial 0
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: all zones loaded
 4月 16 07:01:02 centos7.journey.dix.asia named[5568]: running
 4月 16 07:01:02 centos7.journey.dix.asia systemd[1]: Started Berkeley Internet Name Domain (DNS).
Hint: Some lines were ellipsized, use -l to show in full.

 

[root@centos7 named]# ll /var/named/chroot/etc/named/ ← 念のため /var/named/chroot/etc/named/ に設定ファイルが作成されているか確認。されていない。
合計 0

 

[root@centos7 named]# systemctl enable named-chroot ← named-chroot が自動起動するように設定 
Created symlink from /etc/systemd/system/multi-user.target.wants/named-chroot.service to /usr/lib/systemd/system/named-chroot.service.
[root@centos7 named]# systemctl start named-chroot ← named-chroot を起動する 
[root@centos7 named]# systemctl status named-chroot ← named-chroot のステータスを確認する 
named-chroot.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-04-16 07:04:06 JST; 5s ago
  Process: 5830 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 5826 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 5831 (named)
   CGroup: /system.slice/named-chroot.service
           mq5831 /usr/sbin/named -u named -t /var/named/chroot

 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: couldn’t add command channel ::1#953: address in use
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: managed-keys-zone: journal file is out of date: removing journal file
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: managed-keys-zone: loaded serial 2
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: zone 0.in-addr.arpa/IN: loaded serial 0
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: zone localhost/IN: loaded serial 0
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: zone localhost.localdomain/IN: loaded serial 0
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: 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…ial 0
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: all zones loaded
 4月 16 07:04:06 centos7.journey.dix.asia named[5831]: running
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7 named]# pwd
/var/named/chroot/etc/named
[root@centos7 named]# ls ← /var/named/chroot/etc/named/ に設定ファイルが作成されているか確認。されていない。

[root@centos7 name]# cd /var/named/chroot/etc 
[root@centos7 etc]# pwd ← しかし /var/named/chroot/etc 配下には「named.conf」ファイルが作成されている?
/var/named/chroot/etc
[root@centos7 etc]# ll
合計 24
-rw-r–r– 2 root root   292  3月  9 06:25 localtime
drwxr-x— 2 root named    6  2月 15 22:16 named
-rw-r—– 1 root named 1705  3月 22  2016 named.conf ←named.confファイルが存在する。
-rw-r–r– 1 root named 2389  2月 15 22:16 named.iscdlv.key
-rw-r—– 1 root named  931  6月 21  2007 named.rfc1912.zones
-rw-r–r– 1 root named  487  7月 19  2010 named.root.key
drwxr-x— 3 root named   25  4月 15 23:00 pki
-rw-r—– 1 root named   77  4月 16 07:01 rndc.key
[root@centos7 etc]#

 

/var/named/chroot/etc/named/ ディレクトリ配下には、設定ファイルが作成されていませんでしたが、/var/named/chroot/etc ディレクトリ配下には named.conf ファイルが作成されていました。

 

named-chroot サービスを起動すると named.conf ファイルが自動で作成されるのが正解

何が正しいのかもう一度整理します。

  • 結論は③だった
  • 「yum install named-chroot」コマンドで「named-chroot」パッケージをインストール
  • named、named-chroot サービスを自動起動に設定
  • named、named-chroot サービスを起動
  • /var/named/chroot/etc/named.conf ファイルが作成されていた
  • named のインストール直後は、/var/named/chroot/etc/named.conf は存在していない

 

[root@centos7 named]# systemctl list-unit-files | grep named ← named、named-chrootインストール直後の自動起動の設定を確認します。
named-chroot-setup.service      static
named-chroot.service         enabled
named-setup-rndc.service       static
named.service             enabled
systemd-hostnamed.service       static

[root@centos7 named]# cd /var/named/chroot/ ← 一応、named-chrootインストール直後はディレクトリあり

[root@centos7 named]# ls
dev etc run usr var

[root@centos7 named]# cd /var/named/chroot/etc/ 
[root@centos7 etc]# ls
localtime  named  named.conf  named.iscdlv.key  named.rfc1912.zones  named.root.key  pki  rndc.key

[root@centos7 etc]# cd /var/named/chroot/etc/named/ 
[root@centos7 named]# ls ← /var/named/chroot/etc/named ディレクトリにも何もファイルなし

[root@centos7 named]# 

 

 

念のため、インストール直後の「/var/named/chroot/etc/named.conf」の内容を確認します。

[root@centos7 etc]# pwd
/var/named/chroot/etc
[root@centos7 etc]# ls -l
合計 24
-rw-r–r– 2 root root   292  3月  9 06:25 localtime
drwxr-x— 2 root named    6  2月 15 22:16 named
-rw-r—– 1 root named 1705  3月 22  2016 named.conf
-rw-r–r– 1 root named 2389  2月 15 22:16 named.iscdlv.key
-rw-r—– 1 root named  931  6月 21  2007 named.rfc1912.zones
-rw-r–r– 1 root named  487  7月 19  2010 named.root.key
drwxr-x— 3 root named   25  4月 15 23:00 pki
-rw-r—– 1 root named   77  4月 16 07:01 rndc.key
[root@centos7 etc]# cat named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator’s Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::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”;
        allow-query     { localhost; };

        /*
         – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         – If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         – If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* 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”;
};

logging {
        channel default_debug {
                file “data/named.run”;
                severity dynamic;
        };
};

zone “.” IN {
        type hint;
        file “named.ca”;
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

[root@centos7 etc]#

 

named と named-chroot の2つのプロセスが起動していることが判明

namedのサービス確認をしたところ、以下のように「named」「named-chroot」が連携しているように見えますが、念のために調査をしてみると、以下の状態は連携しているのではなく、named が2つ起動していることが判明しました。

[root@centos7 etc]# ps -ef | grep named
named     1292     1  0 07:20 ?        00:00:00 /usr/sbin/named -u named
named     1303     1  0 07:20 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot
root      3213  2696  0 09:23 pts/0    00:00:00 grep –color=auto named
[root@centos7 etc]#

 

調べたところ、chroot をインストールした環境の場合、

  • named  → 自動起動 disable(自動起動しない)
  • named-chroot → 自動起動 enable(自動起動する)

という環境にする必要があるようです。

でないと、上記のように named が2つ起動している状態になってしまいます。

参考:http://blog.livedoor.jp/aspplus/archives/51888435.html

 

この場合は以下のように named の方を off にします。

[root@centos7 etc]# systemctl stop named
[root@centos7 etc]# systemctl status named
● named.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 日 2017-04-16 09:28:38 JST; 5s ago
  Process: 3227 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 1279 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1118 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 1303 (code=exited, status=0/SUCCESS)

 4月 16 07:20:01 centos7.journey.dix.asia named[1292]: running
 4月 16 09:28:37 centos7.journey.dix.asia systemd[1]: Stopping Berkeley Internet Name Domain (DNS)…
 4月 16 09:28:37 centos7.journey.dix.asia named[1292]: received control channel command ‘stop’
 4月 16 09:28:37 centos7.journey.dix.asia named[1292]: shutting down: flushing changes
 4月 16 09:28:37 centos7.journey.dix.asia named[1292]: stopping command channel on 127.0.0.1#953
 4月 16 09:28:37 centos7.journey.dix.asia named[1292]: stopping command channel on ::1#953
 4月 16 09:28:38 centos7.journey.dix.asia named[1292]: no longer listening on 127.0.0.1#53
 4月 16 09:28:38 centos7.journey.dix.asia named[1292]: no longer listening on ::1#53
 4月 16 09:28:38 centos7.journey.dix.asia named[1292]: exiting
 4月 16 09:28:38 centos7.journey.dix.asia systemd[1]: Stopped Berkeley Internet Name Domain (DNS).
[root@centos7 etc]# systemctl disable named
Removed symlink /etc/systemd/system/multi-user.target.wants/named.service.
[root@centos7 etc]# systemctl list-unit-files | grep named
named-chroot-setup.service                    static
named-chroot.service                          enabled
named-setup-rndc.service                      static
named.service                                 disabled
systemd-hostnamed.service                     static
[root@centos7 etc]# ps -ef | grep named
root      3317  2696  0 09:29 pts/0    00:00:00 grep –color=auto named
[root@centos7 etc]# ps -ef | grep named*
root      3319  2696  0 09:29 pts/0    00:00:00 grep –color=auto named
[root@centos7 etc]# ps -ef | grep chroot
root      3327  2696  0 09:30 pts/0    00:00:00 grep –color=auto chroot
[root@centos7 etc]#

 

しかし、2つの named が停止しています。。

しかし、現状

  • 「named → 自動起動 OFF」
  • 「named-chroot → 自動起動 ON」

の状態なのでOSを再起動したときにどのように動作をするのか確認した方が良いと思い、CentOS7のOSを再起動しました。

そして再起動後に確認すると、以下のように「named」が1つだけ起動している状態になりました。

しかも chroot の方が起動しています。

[root@centos7 ~]# ps -ef | grep named
named     1170     1  0 09:32 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot ←namedが1つだけ起動している状態になった。
root      2730  2684  0 09:34 pts/0    00:00:00 grep –color=auto named
[root@centos7 ~]#

 

設定的にはこれが正しいと思います。

 

 

 

 

CentOS7での named と named-chroot の設定(bind設定)まとめ

1.以下のように bind(named,named-chroot)をインストールします。

[root@centos7 ~]# yum install bind bind-chroot

 

2.以下の状態にサービス設定をします。

[root@centos7 ~]# systemctl list-unit-files | grep named
named-chroot-setup.service                    static
named-chroot.service                          enabled
named-setup-rndc.service                      static
named.service                                 disabled
systemd-hostnamed.service                     static
[root@centos7 ~]#

 

  • named → 自動起動 OFF
  • named-chroot → 自動起動 ON

 

以下のコマンドを実行して上の状態を作ります。

[root@centos7 named]# syestemctl enable named-chroot
Created symlink from /etc/systemd/system/multi-user.target.wants/named-chroot.service to /usr/lib/systemd/system/named-chroot.service.
[root@centos7 named]# systemctl start named-chroot

 

3.設定ファイル(named.conf)が自動的に作成されているか確認します。

[root@centos7 ~]# cd /var/named/chroot/etc/
[root@centos7 etc]# ls -l
合計 24
-rw-r–r– 2 root root   292  3月  9 06:25 localtime
drwxr-x— 2 root named    6  2月 15 22:16 named
-rw-r—– 1 root named 1705  3月 22  2016 named.conf
-rw-r–r– 1 root named 2389  2月 15 22:16 named.iscdlv.key
-rw-r—– 1 root named  931  6月 21  2007 named.rfc1912.zones
-rw-r–r– 1 root named  487  7月 19  2010 named.root.key
drwxr-x— 3 root named   25  4月 15 23:00 pki
-rw-r—– 1 root named   77  4月 16 07:01 rndc.key
[root@centos7 etc]#

 

4.named プロセスが1つしか起動していないことを確認する。

[root@centos7 etc]# ps -ef | grep named
named     2863     1  0 09:44 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot
root      2891  2684  0 09:49 pts/0    00:00:00 grep –color=auto named
[root@centos7 etc]#

 

以上で、named,named-chrootのインストール手順は終わりです。

この後「named.conf」ファイルを編集します。

 

 

なぜbind-chrootパッケージをインストールしたのか?

「named.conf」ファイルの編集をする前に、なぜ今回「bind-chroot(named-chroot)」パッケージをインストールしたのかを説明します。

結論から言うと、「クラッカー(攻撃者)に bind が乗っ取られてもセキュリティを確保するため」です。

chrootとは、指定のディレクトリを/(root)ディレクトリにしてしまい、それ以上の上のディレクトリにアクセスできないようにすることです。

chrootを別名「chroot監獄」などと言います。

 

 

named-chroot の目的は、bind に上のディレクトリ階層にアクセスさせないためです。

その結果、セキュリティを確保できます。

chrootについて詳しい説明は以下をご覧ください。

 

【chroot】 なぜFTPでレンタルサーバーにアクセスしても、他のアカウントのファイルが見れないか?

 

 

イメージしやすいように FTP サーバーを例に例えて説明すると、FTP サーバーも chroot を利用して各ユーザーを他のディレクトリに移動させないようにしてセキュリティを保っています。

※特に多数の人が利用する「共用レンタルサーバー」の場合は、この機能が必要になりますよね。

 

chrootのイメージ図

 

 

たとえば、FTPサーバーの場合は上図のように各ユーザーにchrootを実行して、自分が割り当てられたディレクトリ以上には上に行けないように設定されていますが、同じように bind でも chroot をすることで、最悪 bind が乗っ取られても被害を最小限に抑えることができるようになります。

 

bindの設定(named.conf、正引きゾーンファイル、逆引きゾーンファイルの作成&編集)

以下の設計とします。

  • 内部ドメイン名:tama-chan.local
  • 192.168.1.10 ns ← DNSサーバー
  • 192.168.1.3  PC
  • 正引きゾーンファイル:/var/named/chroot/var/named/tama-chan.local.zone
  • 逆引きゾーンファイル:/var/named/chroot/var/named/1.168.192.in-addr.arpa.zone
  • named.confファイル:/var/named/chroot/etc/named.conf

 

正引きゾーンファイル(tama-chan.local.zone)の作成・編集

ゾーンファイルのサンプルは、/var/named/chroot/var/named ディレクトリに、「named.localhost」ファイルがあるのでこれを利用します。

デフォルトのゾーンファイルサンプル(/var/named/chroot/var/named/named.localhost)

 

[root@centos7 named]# cd /var/named/chroot/var/named

[root@centos7 named]# cat named.localhost
$TTL 1D
@      IN    SOA  @ rname.invalid. (
                0   ; serial
                1D   ; refresh
                1H   ; retry
                1W   ; expire
                3H )  ; minimum
           NS   @
           A    127.0.0.1
           AAAA  ::1
[root@centos7 named]#

 

 

このサンプルを参考に以下のようにゾーンファイル(/var/named/chroot/var/named/tama-chan.local.zone)を作成しました。

[root@centos7 named]# cp -ip named.localhost tama-chan.local.zone ← 「named.localhost」をコピーして「tama-chan.local.zone」を作成します。

[root@centos7 named]# vi tama-chan.local.zone ← 「tama-chan.local.zone」を編集して以下のようにします。

[root@centos7 named]# cat tama-chan.local.zone
$TTL 1D
@    IN  SOA     ns.tama-chan.local. root.tama-chan.local. (
                    0   ; serial
                    1D   ; refresh
                    1H   ; retry
                    1W   ; expire
                    3H )  ; minimum
       NS    ns.tama-chan.local.
@    IN   A     192.168.1.10
ns    IN   A     192.168.1.10
PC    IN   A     192.168.1.3
[root@centos7 named]#

 

 

とりあえず必要最低限の設定だけ入れました。

最初に一気に設定してうまく稼働しなかった場合、原因の切り分け調査が大変になるので、フォワーディングの設定とかメールサーバーの設定などは後程入れていきます。

 

設定ファイルの構文が正しいかどうか構文チェックをします。

[root@centos7 named]# named-checkzone tama-chan.local /var/named/chroot/var/named/tama-chan.local.zone
zone tama-chan.local/IN: loaded serial 0
OK
[root@centos7 named]#

構文的には問題ないことが分かりました。

大規模なシステムの場合は、confファイルやzoneファイルを編集して、構文チェックをせずにいきなりbindを再起動した場合、構文が間違っていた場合はbindがエラーになり起動できなくなります。

その場合、他にも影響が出る(関係ないドメインの名前解決でもできなくなる等)ので、必ず構文チェックをしてから bind の再起動をします。

 

/etc/resolv.confの編集

/etc/resolv.confに今回のDNSサーバーのIPアドレスを追加します。

[root@centos7 named]# vi /etc/resolv.conf

↓この1行を追加する。

nameserver 127.0.0.1

この「nameserver  127.0.0.1」を追加することにより、名前解決の問い合わせを自分自身(127.0.0.1)で行うようになります。

 

named.conf の編集

次に「named.conf」を編集します。

目的は「内部DNS」サーバーの構築で、外部DNSに関しては何もしません。

あくまでも内部だけです。

以下のように内部DNSサーバーを設計してみました。

 

【設計】

  • DNSサーバー:bind(9.9.4-38.el7_3.2)
  • 内部ドメイン名:tama-chan.local
  • 192.168.1.10 ns(OS:CentOS)← DNSサーバー
  • 192.168.1.3  PC(OS:Windows)

DNSクライアントは2台(ns と PC)です。

 

今回は named-chroot をインストールしているので、編集するファイルは「/var/named/chroot/etc/named.conf」です。

[root@centos7 etc]# cd /var/named/chroot/etc
[root@centos7 etc]# vi named.conf ← named.conf を編集して以下のようにします。
[root@centos7 etc]#
cat named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator’s Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::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”;
        allow-query     { localhost; };

        /*
         – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         – If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         – If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* 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”;
};

logging {
        channel default_debug {
                file “data/named.run”;
                severity dynamic;
        };
};

zone “.” IN {
        type hint;
        file “named.ca”;
};

zone “tama-chan.local” IN { ←この tama-chan.local のゾーン情報を追加した。
        type master;
        file “tama-chan.local.zone”;
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

 

 

bind(named-chroot)のサービス再起動

ここまで設定したらnamed-chrootを再起動します。

[root@centos7 etc]# systemctl restart named-chroot ← named-chroot を再起動

[root@centos7 etc]# systemctl status named-chroot ← named-chroot のステータスを確認
named-chroot.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-04-16 11:36:09 JST; 6s ago
  Process: 3315 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 3403 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 3400 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 3405 (named)
   CGroup: /system.slice/named-chroot.service
           mq3405 /usr/sbin/named -u named -t /var/named/chroot

 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: command channel listening on ::1#953
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: managed-keys-zone: loaded serial 2
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: zone 0.in-addr.arpa/IN: loaded serial 0
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0…. 0
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: zone tama-chan.local/IN: loaded serial 0 ← tama-chan.local のゾーンファイルも読み込まれました。
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: zone localhost/IN: loaded serial 0
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: zone localhost.localdomain/IN: loaded serial 0
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: all zones loaded
 4月 16 11:36:09 centos7.journey.dix.asia named[3405]: running
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7 etc]#

 

エラーが出ていないので、ここまでは大丈夫そうです。

Linuxマシン(DNSサーバー)から名前解決の動作確認

名前解決ができるかどうか確認します。

[root@centos7 named]# nslookup tama-chan.local ← tama-chan.local ドメインに対して名前解決ができるかどうか確認してみる。
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   tama-chan.local
Address: 192.168.1.10 ← 回答が返ってきた。

[root@centos7 etc]# nslookup ns.tama-chan.local ← ns.tama-chan.localの名前解決ができるかどうか確認してみる。
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   ns.tama-chan.local
Address: 192.168.1.10 ← 回答が返ってきた。

[root@centos7 etc]#

 

[root@centos7 named]# nslookup PC.tama-chan.local ← PC.tama-chan.local の名前解決も試してみる。
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   PC.tama-chan.local
Address: 192.168.1.3  ← 回答が返ってきた。

[root@centos7 named]#

 

DNSサーバーに名前解決を投げて

「tama-chan.local」

「ns.tama-chan.local」

「PC.tama-chan.local」

のIPアドレスが返ってきました。

ここまではうまく行っているようです。

 

 

Windowsマシンから名前解決の動作確認(クエリ失敗)

DNSクライアントの Windows マシン(デスクトップPC)から動作確認をしてみました。

C:\>ping 192.168.1.10

192.168.1.10 に ping を送信しています 32 バイトのデータ:
192.168.1.10 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.1.10 からの応答: バイト数 =32 時間 =1ms TTL=64

192.168.1.10 の ping 統計:
    パケット数: 送信 = 2、受信 = 2、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 1ms、平均 = 1ms

C:\>nslookup tama-chan.local
DNS request timed out.
    timeout was 2 seconds.
サーバー:  UnKnown
Address:  192.168.1.10

*** UnKnown への要求がタイムアウトしました

C:\>nslookup ns.tama-chan.local
DNS request timed out.
    timeout was 2 seconds.
サーバー:  UnKnown
Address:  192.168.1.10

*** UnKnown への要求がタイムアウトしました

C:\>nslookup PC.tama-chan.local
DNS request timed out.
    timeout was 2 seconds.
サーバー:  UnKnown
Address:  192.168.1.10

*** UnKnown への要求がタイムアウトしました

C:\>

パソコンから ping 通信はできていますが、名前解決はできません。

原因を切り分け調査します。

 

firewalldの確認

Windowsからの通信をファイアウォールがブロックしている可能性があるので、firewalldのプロセスが起動しているかどうか確認します。

[root@centos7 named]# systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)  ← firewalldは起動していない
     Docs: man:firewalld(1)
[root@centos7 named]#

firewalldは起動していません。

 

ポートがLISTENしているか確認

本当はセキュリティ的に一覧をアップするのは危険ですが、今回の環境は完全にローカル環境なので以下にnetstatコマンドの結果を記載します。

[root@centos7 named]# netstat -tanp | grep LISTEN
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2865/named ← ?あれ?53番ポートは LISTEN 状態であるが、プロトコルはTCPで、アドレスが127.0.0.1です。ここに原因がありそうです。
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1129/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1121/cupsd
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      2865/named
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1968/master
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      1968/master
tcp6       0      0 :::110                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::143                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      1238/httpd
tcp6       0      0 ::1:53                  :::*                    LISTEN      2865/named
tcp6       0      0 :::22                   :::*                    LISTEN      1129/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      1121/cupsd
tcp6       0      0 ::1:953                 :::*                    LISTEN      2865/named
tcp6       0      0 :::25                   :::*                    LISTEN      1968/master
tcp6       0      0 :::993                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::995                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::587                  :::*                    LISTEN      1968/master
[root@centos7 named]#

 

netstatコマンドでLISTENの状態を確認したところ、以下の点に気が付きました。

1.tcp/53 であること

2.127.0.0.1:53 であること

3.IPv6でもLISTENしていること

 

まずは、/var/named/chroot/etc/named.conf を確認してみましょう。

options {
        listen-on port 53 { 127.0.0.1; }; ← LISTEN するIPアドレスが 127.0.0.1 だけです。(他のPCからはアクセスできない)
        listen-on-v6 port 53 { ::1; };  ← IPv6 で LISTEN する設定が入っています。

 

そのため、以下のように修正します。

options {
        listen-on port 53 { any; }; ← すべてのIPアドレスに対して LISTEN するようにします。(他のPCからアクセス可能)
        #listen-on-v6 port 53 { ::1; };  ← コメントアウトをして IPv6 で LISTEN しないようにします。

 

 

named.confの構文チェックをしてから、問題なければ named-chrootを再起動します。

[root@centos7 etc]# named-checkconf /var/named/chroot/etc/named.conf
[root@centos7 etc]#  ← 何も表示されなければ構文は問題ありません。

[root@centos7 etc]# named-checkconf -t /var/named/chroot /etc/named.conf
[root@centos7 etc]#  ← 何も表示されなければ構文は問題ありません。

 

特に何もエラーメッセージが出ないので named.conf ファイルは問題なさそうです。

[root@centos7 etc]# systemctl restart named-chroot ← named-chrootを再起動します。
[root@centos7 etc]# systemctl status named-chroot ← named-chrootのスタータスを確認します。
named-chroot.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-04-16 14:20:39 JST; 6s ago
  Process: 3294 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 3383 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 3380 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 3386 (named)
   CGroup: /system.slice/named-chroot.service
           mq3386 /usr/sbin/named -u named -t /var/named/chroot

 4月 16 14:20:39 centos7 named[3386]: command channel listening on ::1#953
 4月 16 14:20:39 centos7 named[3386]: managed-keys-zone: loaded serial 2
 4月 16 14:20:39 centos7 named[3386]: zone 0.in-addr.arpa/IN: loaded serial 0
 4月 16 14:20:39 centos7 named[3386]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
 4月 16 14:20:39 centos7 named[3386]: zone localhost/IN: loaded serial 0
 4月 16 14:20:39 centos7 named[3386]: zone localhost.localdomain/IN: loaded serial 0
 4月 16 14:20:39 centos7 named[3386]: 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…al 0
 4月 16 14:20:39 centos7 named[3386]: zone tama-chan.local/IN: loaded serial 0
 4月 16 14:20:39 centos7 named[3386]: all zones loaded
 4月 16 14:20:39 centos7 named[3386]: running
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7 etc]# netstat -tanp | grep LISTEN ← named-chroot の LISTEN ポートを確認します。
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 192.168.1.10:53         0.0.0.0:*               LISTEN      3386/named ← 192.168.1.10でもLISTENしています。
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      3386/named
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1129/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1121/cupsd
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      3386/named
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1968/master
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      1279/dovecot
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      1968/master
tcp6       0      0 :::110                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::143                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      1238/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      1129/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      1121/cupsd
tcp6       0      0 ::1:953                 :::*                    LISTEN      3386/named
tcp6       0      0 :::25                   :::*                    LISTEN      1968/master
tcp6       0      0 :::993                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::995                  :::*                    LISTEN      1279/dovecot
tcp6       0      0 :::587                  :::*                    LISTEN      1968/master
[root@centos7 etc]#

 

Windows パソコンから名前解決ができるようになったか確認します。

C:\>nslookup tama-chan.local
サーバー:  UnKnown
Address:  192.168.1.10

*** UnKnown が tama-chan.local を見つけられません: Query refused

 

Windowsで実行すると「UnKnown が tama-chan.local を見つけられません: Query refused」とメッセージが出ます。

まだ設定が足りないようです。

 

DNSサーバーの /var/log/messages を確認してみます。

Apr 16 14:43:16 centos7 named[3386]: client 192.168.1.3#64674 (tama-chan.local): query ‘tama-chan.local/A/IN’ denied
Apr 16 14:43:16 centos7 named[3386]: client 192.168.1.3#64675 (tama-chan.local): query ‘tama-chan.local/AAAA/IN’ denied
Apr 16 14:43:16 centos7 named[3386]: client 192.168.1.3#64676 (tama-chan.local): query ‘tama-chan.local/A/IN’ denied
Apr 16 14:43:16 centos7 named[3386]: client 192.168.1.3#64677 (tama-chan.local): query ‘tama-chan.local/AAAA/IN’ denied ←queryが来ているのは分かるが拒否されています。

 

queryは来ているけど、DNSサーバーに拒否されていますね。

再度「/var/named/chroot/etc/named.conf」を確認し、以下の設定を発見しました。

[root@centos7 etc]# cat /var/named/chroot/etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator’s Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { any; };
        #listen-on-v6 port 53 { ::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”;
        allow-query     { localhost; }; ← これが Windows パソコンからの query が拒絶されていた原因でした。

        /*
         – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         – If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         – If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* 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”;
};

logging {
        channel default_debug {
                file “data/named.run”;
                severity dynamic;
        };
};

zone “.” IN {
        type hint;
        file “named.ca”;
};

zone “tama-chan.local” IN {
        type master;
        file “tama-chan.local.zone”;
        allow-query     { localhost; }; ← これが Windows パソコンからの query が拒絶されていた原因でした。
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

[root@centos7 etc]#

 

以下のように修正しました。

[root@centos7 etc]# vi named.conf ← named.conf を以下のように編集します。

[root@centos7 etc]# cat named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator’s Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { any; };
        #listen-on-v6 port 53 { ::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”;
        allow-query     { any; }; ← allow-queryを「any」にします。

        /*
         – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         – If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         – If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* 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”;
};

logging {
        channel default_debug {
                file “data/named.run”;
                severity dynamic;
        };
};

zone “.” IN {
        type hint;
        file “named.ca”;
};

zone “tama-chan.local” IN {
        type master;
        file “tama-chan.local.zone”;
        allow-query     { any; }; ← allow-queryを「any」にします。
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

[root@centos7 etc]# 

 

 

named.confの構文チェックをしてから、問題なければ named-chrootを再起動します。

[root@centos7 etc]# named-checkconf /var/named/chroot/etc/named.conf
[root@centos7 etc]# ← 何も表示されなければ構文は問題ありません。

[root@centos7 etc]# named-checkconf -t /var/named/chroot /etc/named.conf
[root@centos7 etc]# ← 何も表示されなければ構文は問題ありません。

 

 

再度 named-chroot を再起動します。

[root@centos7 etc]# systemctl status named-chroot
named-chroot.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-04-16 15:15:44 JST; 8s ago
  Process: 4123 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 4212 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 4208 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 4213 (named)
   CGroup: /system.slice/named-chroot.service
           mq4213 /usr/sbin/named -u named -t /var/named/chroot

 4月 16 15:15:44 centos7 named[4213]: command channel listening on ::1#953
 4月 16 15:15:44 centos7 named[4213]: managed-keys-zone: loaded serial 2
 4月 16 15:15:44 centos7 named[4213]: zone 0.in-addr.arpa/IN: loaded serial 0
 4月 16 15:15:44 centos7 named[4213]: zone tama-chan.local/IN: loaded serial 0
 4月 16 15:15:44 centos7 named[4213]: zone localhost.localdomain/IN: loaded serial 0
 4月 16 15:15:44 centos7 named[4213]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
 4月 16 15:15:44 centos7 named[4213]: 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.ip6.arpa/IN: loaded serial 0
 4月 16 15:15:44 centos7 named[4213]: zone localhost/IN: loaded serial 0
 4月 16 15:15:44 centos7 named[4213]: all zones loaded
 4月 16 15:15:44 centos7 named[4213]: running
[root@centos7 etc]#

 

再度 Windows パソコンから nslookup コマンドを実行してみます。

C:\>nslookup ns.tama-chan.local
サーバー:  UnKnown
Address:  192.168.1.10

名前:    ns.tama-chan.local
Address:  192.168.1.10

C:\>nslookup PC.tama-chan.local
サーバー:  UnKnown
Address:  192.168.1.10

名前:    PC.tama-chan.local
Address:  192.168.1.3

C:\>

 

今度は名前解決ができました。

DNS設定まとめ(named.confと正引きのゾーンファイル)

結構 DNS の設定が多岐にわたったのでもう一度設定をまとめます。

DNSサーバー側

  • named-chrootをインストール
  • named-chrootのみ自動起動ON、namedは自動起動OFF
  • /var/named/chroot/etc/named.confを編集
  • /var/named/chroot/var/named/ ディレクトリ配下にゾーンファイルを作成(tama-chan.local.zone)
  • ゾーンファイルのひな型は /var/named/chroot/var/named/named.localhost を利用
  • named.confは以下のように設定

[root@centos7 etc]# cat named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator’s Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { any; }; ← 全部許可
        #listen-on-v6 port 53 { ::1; }; ← IPv6をコメントアウト
        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”;
        allow-query     { any; }; ← 全部許可

        /*
         – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         – If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         – If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* 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”;
};

logging {
        channel default_debug {
                file “data/named.run”;
                severity dynamic;
        };
};

zone “.” IN {
        type hint;
        file “named.ca”;
};

zone “tama-chan.local” IN {
        type master;
        file “tama-chan.local.zone”; ← ゾーンファイル指定
        allow-query     { any; }; ← 全部許可
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

[root@centos7 etc]# 

 

  • ゾーンファイル(/var/named/chroot/var/named/tama-chan.local.zone)は以下のように設定

[root@centos7 named]# cat tama-chan.local.zone
$TTL 1D
@       IN SOA  ns.tama-chan.local. root.tama-chan.local. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                NS      ns.tama-chan.local.
@       IN      A       192.168.1.10
ns      IN      A       192.168.1.10
PC      IN      A       192.168.1.3
[root@centos7 named]#

 

  • /etc/hostname ファイルは以下のように設定

[root@centos7 named]# cat /etc/hostname
centos7
[root@centos7 named]#

 

  • /etc/resolv.conf ファイルは以下のように設定

[root@centos7 named]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
[root@centos7 named]#

 

  • firewalldは停止
  • SELinuxは Disabled

[root@centos7 named]# getenforce
Disabled
[root@centos7 named]#

 

 

Windowsパソコン側

  • IPv6を無効にした
  • Windows ファイアウォールは「有効」(既定値の状態)

 

以上です。

 

 

CentOS7、bind、named-chroot で逆引きの設定

続けて「逆引きの設定」もします。

逆引きの設定が必要なのかと言われれば不要ですが、DNSサーバー構築の調査のために「逆引き」の設定も入れてみます。

 

CentOS7、bind、named-chrootでの設計と環境

再度、設計と環境をチェックします。

 

  • 内部ドメイン名:tama-chan.local
  • 192.168.1.10 ns ← DNSサーバー
  • 192.168.1.3  PC
  • 正引きゾーンファイル:/var/named/chroot/var/named/tama-chan.local.zone
  • 逆引きゾーンファイル:/var/named/chroot/var/named/1.168.192.in-addr.arpa.zone
  • named.confファイル:/var/named/chroot/etc/named.conf

 

逆引き用のゾーンファイルを作成・設定

逆引きゾーンファイルは、以下のように正引きのゾーンファイルをコピーして作成しました。

[root@centos7 named]# cp -ip tama-chan.local.zone 1.168.192.in-addr.arpa.zone
[root@centos7 named]# pwd
/var/named/chroot/var/named
[root@centos7 named]# cat 1.168.192.in-addr.arpa.zone
$TTL 1D
@       IN SOA  ns.tama-chan.local. root.tama-chan.local. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns.tama-chan.local.
10      IN      PTR     tama-chan.local.
10      IN      PTR     ns.tama-chan.local.
3       IN      PTR     PC.tama-chan.local.
[root@centos7 named]#

 

 

named.conf ファイルを編集

以下のように逆引きのゾーン部分を追加しました。

[root@centos7 etc]# cat named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator’s Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { any; };
        #listen-on-v6 port 53 { ::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”;
        allow-query     { any; };

        /*
         – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         – If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         – If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* 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”;
};

logging {
        channel default_debug {
                file “data/named.run”;
                severity dynamic;
        };
};

zone “.” IN {
        type hint;
        file “named.ca”;
};

zone “tama-chan.local” IN {
        type master;
        file “tama-chan.local.zone”;
        allow-query     { any; };
};

zone “1.168.192.in-addr.arpa” IN {   ← この逆引き設定の部分を追加しました。
        type master;
        file “1.168.192.in-addr.arpa.zone”;
        allow-query     { any; };
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

[root@centos7 etc]#

 

 

named.confの構文チェックをしてから、問題なければ named-chrootを再起動します。

[root@centos7 etc]# named-checkconf /var/named/chroot/etc/named.conf
[root@centos7 etc]# named-checkconf -t /var/named/chroot /etc/named.conf
[root@centos7 etc]# systemctl restart named-chroot
[root@centos7 etc]# systemctl status named-chroot
named-chroot.service – Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-04-16 16:32:13 JST; 7s ago
  Process: 3140 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 3226 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 3223 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z /etc/named.conf; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS)
 Main PID: 3228 (named)
   CGroup: /system.slice/named-chroot.service
           mq3228 /usr/sbin/named -u named -t /var/named/chroot

 4月 16 16:32:13 centos7 named[3228]: managed-keys-zone: loaded serial 2
 4月 16 16:32:13 centos7 named[3228]: zone 0.in-addr.arpa/IN: loaded serial 0
 4月 16 16:32:13 centos7 named[3228]: zone localhost/IN: loaded serial 0
 4月 16 16:32:13 centos7 named[3228]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
 4月 16 16:32:13 centos7 named[3228]: 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…al 0
 4月 16 16:32:13 centos7 named[3228]: zone 1.168.192.in-addr.arpa.zone/IN: loaded serial 0
 4月 16 16:32:13 centos7 named[3228]: zone tama-chan.local/IN: loaded serial 0
 4月 16 16:32:13 centos7 named[3228]: zone localhost.localdomain/IN: loaded serial 0
 4月 16 16:32:13 centos7 named[3228]: all zones loaded
 4月 16 16:32:13 centos7 named[3228]: running
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7 etc]#

 

 

逆引き設定の動作確認

設定が完了したので、逆引きの動作確認をします。

 

【Linuxサーバー上から】

[root@centos7 etc]# nslookup 192.168.1.10
Server:    192.168.1.10
Address:   192.168.1.10#53

 

10.1.168.192.in-addr.arpa   name = ns.tama-chan.local.
10.1.168.192.in-addr.arpa   name = tama-chan.local.

 

[root@centos7 etc]# nslookup 192.168.1.3
Server:   192.168.1.10
Address:   192.168.1.10#53

3.1.168.192.in-addr.arpa  name = PC.tama-chan.local.

[root@centos7 etc]#

 

 

【Windows PC上から】

C:\>nslookup ns.tama-chan.local
サーバー:  UnKnown
Address:  192.168.1.10

名前:    ns.tama-chan.local
Address:  192.168.1.10

C:\>nslookup PC.tama-chan.local
サーバー:  UnKnown
Address:  192.168.1.10

名前:    PC.tama-chan.local
Address:  192.168.1.3 

 

これで逆引きの設定・動作もOKですね。

かなり長くなってしまいました。

参考にしたサイト一覧

https://centossrv.com/bind.shtml

http://www.fc-lab.com/network/server/dns/zone.html