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

閉じた環境で内部 DNS サーバー(ネームサーバー)を構築する手順です。

DNS サーバーは Linux(RedHat 7.5)と bind と chroot の組み合わせです。

 

以前、chroot を調査しつつ DNS サーバーを構築した手順です。

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

 

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

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

 

下の記事は DNS 入門編です。

【初心者向け】 ドメイン、DNSの仕組みの解説

 

 

 

 

内部 DNS サーバーを構築する

今回は、下図のように完全に閉じた環境(ローカルネットワーク環境)です。

 

■構成図

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

 

■構成・環境

  • 完全に内部に閉じた DNS 環境
  • 外部からのアクセスなし
  • DNSサーバー(ネームサーバー)は一台構成
  • DNSサーバー1台、ファイルサーバー1台、クライアント1台の環境
  • chroot で bind が乗っ取られても問題ない構成にする

 

サーバー構成

以下のサーバー構成で各サーバーを構築・設定します。

 

■DNS サーバー(ネームサーバー)

  • OS:RedHat 7.5
  • IPアドレス:172.31.47.210
  • bind バージョン:9.9.4

 

■ファイルサーバー

  • OS:RedHat 7.5
  • IPアドレス:172.31.47.199

 

■クライアント

  • OS:Windows Server 2016 Data Center
  • IPアドレス:172.31.42.120

 

 

 

DNS サーバー(ネームサーバー)構築手順

DNS サーバー(ネームサーバー)側での作業になります。

 

手順の概要

  1. ファイアウォールの確認
  2. bind のインストール
  3. bind-chroot のインストール
  4. サービス起動および自動起動の設定
  5. bind の設定(named.confの設定)
  6. bind の設定(正引きゾーンファイル)
  7. bind の設定(逆引きゾーンファイルの作成&編集)
  8. /etc/resolv.conf の編集

 

 

ファイアウォールの確認

最初に DNS サーバー(ネームサーバー)のファイアウォールの状態を確認します。

 

今回は AWS 環境を利用して環境を構築しましたが、そもそも AWS の RedHat Linux(CentOS も)にはファイアウォール(firewalld)はインストールされていません。

その理由として AWS EC2 インスタンスは「セキュリティグループ」が利用できることが挙げられます。

 

【AWS】RedHat の EC2 インスタンスにはファイアウォール(firewalld)はインストールされていない

 

 

bind のインストール

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

bind は追加レポジトリなしで yum コマンドでインストールできます。

[root@ip-172-31-47-210 ~]# yum install bind 
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos 

 

~ 省略 ~
 
Installed: 
  bind.x86_64 32:9.9.4-61.el7_5.1 
 
Dependency Installed: 
  bind-libs.x86_64 32:9.9.4-61.el7_5.1 
 
Complete! 
[root@ip-172-31-47-210 ~]#

 

 

bind-chroot のインストール

次に「bind-chroot」をインストールします。

bind-chroot も追加レポジトリなしで yum コマンドでインストールできます。

[root@ip-172-31-47-210 ~]# yum install bind-chroot 
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos 

 

~ 省略 ~

Installed: 
  bind-chroot.x86_64 32:9.9.4-61.el7_5.1 
 
Complete! 
[root@ip-172-31-47-210 ~]#

 

 

 

サービス起動および自動起動の設定

named と chroot-named の 2つのサービスをインストールしましたが、chroot を利用するので以下のように設定します。

  • named  → 自動起動 は disabled のまま(自動起動しない)
  • named-chroot → 自動起動を enable にする(自動起動する)

 

named はインストールはしても「disabled」の状態にしておきます。

 

タマちゃん
named をインストールしても disabled のままにしておくなら、そもそも named-chroot だけインストールすればいいんじゃないの?

 

山ちゃん
named をインストールすることによって bind のライブラリ(bind-libs)もインストールされて bind の機能を利用できるようになるんだよ。

 

 

■named のサービスの設定

named は「disable」のままにしておきます。

[root@ip-172-31-47-210 ~]# systemctl list-unit-files | grep named.service 
named.service                                 disabled ← disabled になっています。 
systemd-hostnamed.service                     static 
[root@ip-172-31-47-210 ~]#

 

 

何のため、named サービスが起動していないことも確認します。

[root@ip-172-31-47-210 ~]# 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@ip-172-31-47-210 ~]#

 

 

 

■named-chroot のサービスの設定

named-chroot が自動起動するように設定します。

 

最初に現在の状態を確認します。

[root@ip-172-31-47-210 ~]# systemctl list-unit-files | grep named-chroot.service 
named-chroot.service                          disabled ← disabled(自動起動しない)になっています。 
[root@ip-172-31-47-210 ~]#

 

 

named-chroot が自動起動するように設定します。

[root@ip-172-31-47-210 ~]# systemctl enable named-chroot.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/named-chroot.service to /usr/lib/systemd/system/named-chroot.service. 
[root@ip-172-31-47-210 ~]# 

 

 

「enabled(自動起動)」になっていることを確認します。

[root@ip-172-31-47-210 ~]# systemctl list-unit-files | grep named-chroot.service 
named-chroot.service                          enabled ← enabled になっています。 
[root@ip-172-31-47-210 ~]#

 

 

更にここで「named-chroot」のサービスを起動します。

最初に現在のステータスを確認します。

[root@ip-172-31-47-210 ~]# systemctl status named-chroot.service 
● named-chroot.service – Berkeley Internet Name Domain (DNS) 
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled) 
   Active: inactive (dead) 
[root@ip-172-31-47-210 ~]#

 

 

次に「named-chroot」サービスを起動します。

[root@ip-172-31-47-210 ~]# systemctl start named-chroot.service 
[root@ip-172-31-47-210 ~]# 

 

 

実際に起動しているかどうかステータスを確認します。

※systemctl コマンドに「-l」プションを付けると、行が途中で終了せずに、行の最後まで表示されるのでお勧めです。

[root@ip-172-31-47-210 ~]# systemctl status named-chroot.service -l 
● 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 Mon 2018-09-24 04:06:21 UTC; 59min ago 
  Process: 6078 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS) 
  Process: 6076 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z “$NAMEDCONF”; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS) 
 Main PID: 6080 (named) 
   CGroup: /system.slice/named-chroot.service 
           mq6080 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot 
 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: command channel listening on ::1#953 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: managed-keys-zone: loaded serial 0 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: zone 0.in-addr.arpa/IN: loaded serial 0 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: zone localhost/IN: loaded serial 0 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: zone localhost.localdomain/IN: loaded serial 0 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: 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 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: all zones loaded 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal named[6080]: running 
Sep 24 04:06:21 ip-172-31-47-210.ap-northeast-1.compute.internal systemd[1]: Started Berkeley Internet Name Domain (DNS). 
[root@ip-172-31-47-210 ~]#

 

 

 

DNS サーバーの設計

以下の設計とします。

  • 内部ドメイン名 : tama-chan.local
  • DNS サーバー IP アドレス : 172.31.47.210
  • ファイルサーバー IP アドレス : 172.31.47.199
  • クライアント IP アドレス : 172.31.42.120
  • 正引きゾーンファイル : /var/named/chroot/var/named/tama-chan.local.zone
  • 逆引きゾーンファイル : /var/named/chroot/var/named/47.31.172.in-addr.arpa.zone
  • named.confファイル : /var/named/chroot/etc/named.conf

 

 

bind の設定(named.confの設定)

設定ファイル(named.conf)が「/var/named/chroot/etc/」ディレクトリに作成されているか確認します。

named/ nis/ 
[root@ip-172-31-47-210 ~]# cd /var/named/chroot/etc/ 
[root@ip-172-31-47-210 etc]# ls 
localtime  named.conf        named.rfc1912.zones  pki        rndc.key 
named      named.iscdlv.key  named.root.key       protocols  services 
[root@ip-172-31-47-210 etc]#

 

 

■named.conf の編集

named.conf ファイルを編集します。

編集する前に named.conf ファイルのバックアップを取得します。

[root@ip-172-31-47-210 etc]# pwd 
/var/named/chroot/etc 
[root@ip-172-31-47-210 etc]# cp -ip named.conf named.conf.org_20180924 ← バックアップを取ります。
[root@ip-172-31-47-210 etc]# ls -l named.conf named.conf.org_20180924 
-rw-r—– 1 root named 1705 Mar 22  2016 named.conf 
-rw-r—– 1 root named 1705 Mar 22  2016 named.conf.org_20180924 
[root@ip-172-31-47-210 etc]#

 

 

■オリジナルの named.conf ファイル

[root@ip-172-31-47-210 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@ip-172-31-47-210 etc]#

 

 

以下のように編集します。

[root@ip-172-31-47-210 etc]# vi named.conf 

 

~ 省略 ~

options { 
        listen-on port 53 { any; };  ← 127.0.0.1 から any に編集し、すべてのIPアドレスに対して LISTEN するようにします。 
        listen-on-v6 port 53 { ::1; };  ← IPv6 で LISTEN しないようにコメントアウトします。
        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; }; ← localhost から any に編集し、 すべてのコンピュータからのクエリを受け付けます。
 

 

~ 省略 ~

 

        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”; 
        allow-query     { any; }; ← allow-queryを「any」にします。 
}; 
 
zone “47.31.172.in-addr.arpa” IN { ← ここから逆引きのゾーンファイルの情報を追加します。 
        type master; 
        file “47.31.172.in-addr.arpa.zone”; 
        allow-query { any; }; ← allow-queryを「any」にします。 
}; 
 
include “/etc/named.rfc1912.zones”; 
include “/etc/named.root.key”; 

 

 

 

 

編集したら diff コマンドで修正箇所を確認します。

[root@ip-172-31-47-210 etc]# diff named.conf named.conf.org_20180924 
13,14c13,14 
<       listen-on port 53 { any; }; 
<       # listen-on-v6 port 53 { ::1; }; 
— 
>       listen-on port 53 { 127.0.0.1; }; 
>       listen-on-v6 port 53 { ::1; }; 
19c19 
<       allow-query     { any; }; 
— 
>       allow-query     { localhost; }; 
55,66d54 
< }; 

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

< zone “47.31.172.in-addr.arpa” IN { 
<       type master; 
<       file “47.31.172.in-addr.arpa.zone”; 
<       allow-query { any; }; 
[root@ip-172-31-47-210 etc]#

 

 

更に named.conf ファイルの構文チェックをします。

named-checkconf コマンドで何もメッセージが出力されなければ問題ありません。

[root@ip-172-31-47-210 etc]# named-checkconf /var/named/chroot/etc/named.conf
[root@ip-172-31-47-210 etc]#

 

 

chroot を利用している場合は、「-t」オプションでエラーが出力されるか確認します。

何もメッセージが出力されなければ問題ありません。

[root@ip-172-31-47-210 etc]# named-checkconf -t /var/named/chroot /etc/named.conf
[root@ip-172-31-47-210 etc]#

 

 

 

named.conf の解説

named.conf の各設定項目についてオリジナルの「named.conf」ファイルを例に解説します。

 

listen-on port 53 { 127.0.0.1; };

リスン(Listen)するポート番号とリスンするIPアドレスを指定します。

この場合はリスンするポート番号は53番です。

IPアドレスの設定は複数のNICを持っている場合、特定のNICでリスンしたい場合に指定します。

デフォルトでは「127.0.0.1」とローカルホストのループバックアドレスが設定されていますが、この設定の場合は自分自身の名前解決はできますが、他のサーバーからアクセスをして名前解決をすることはできません。

例えば、サーバーAが1つのNICを持ち、IPアドレスが「192.168.1.10」の場合、他のサーバーが「192.168.1.10」にアクセスをすることが出来れば、サーバーAを利用して名前解決をすることができます。

anyを指定すると、ホストが持つすべての IP アドレスで名前解決を受け付けることができるようになります。

「listen-on port」がない場合は、すべてのインタフェースで名前解決を待ち受けることになります。(listen-on-v6 と逆です。)

 

listen-on-v6 port 53 { ::1; };

DNSサーバーを IPv6 対応とする場合に、「listen-on-v6」の設定を追加します。

IPv4(listen-on port 53)と同様に、リスン(Listen)するポート番号と IPv6 のアドレスを記述します。

デフォルトでは「::1」が指定されているので、IPv4 のローカルホストのループバックアドレス同様、自分自身の名前解決はできますが、他のサーバーからアクセスをして名前解決をすることはできません。

「listen-on-v6」がない場合、もしくはコメントアウトされている場合は、IPv6 対応にはなりません。(listen-on と逆です。)

 

directory “/var/named”;

ゾーンファイルが格納されているディレクトリを絶対パスで指定します。

コンフィグに記載される相対パスは、この「directory」で指定されているディレクトリが起点となります。

 

dump-file “/var/named/data/cache_dump.db”;

rndcコマンドを使ってDNSキャッシュの内容を調査する際にダンプ先のファイルを指定します。

rndc コマンドは BIND を操作する機能を持ったコマンドです。

 

statistics-file “/var/named/data/named_stats.txt”;

rndcコマンドを使って調査する際に DNS の統計情報を保存するファイルを指定します。

 

memstatistics-file “/var/named/data/named_mem_stats.txt”;

サーバが終了時にメモリ使用統計を書き出すファイルへのパス名です。

 

allow-query { localhost; };

どこからの名前解決の問い合わせを許可するかを設定します。

デフォルトは「localhost」なので自分自身のみ問い合わせが可能です。

  • localhost ← 自分自身のみ
  • any ← どこからも問い合わせが可能

192.168.1.0/24 のようなサブネットでの指定も可能です。

acl ステートメントで設定したアドレスリストを指定することも可能です。

 

 

named.confの注意書き

– If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.

– AUTHORITATIVE DNSサーバーを構築する場合、再帰を有効にしないでください。

 

– If you are building a RECURSIVE (caching) DNS server, you need to enable recursion.

– RECURSIVE(キャッシング)DNSサーバーを構築する場合は、再帰を有効にする必要があります。

 

– If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users.

– 再帰的DNSサーバーにパブリックIPアドレスがある場合は、正当なユーザーにクエリを制限するためにアクセス制御を有効にする必要があります。

 

Failing to do so will cause your server to become part of large scale DNS amplification attacks.

そうしないと、サーバーが大規模なDNS増幅攻撃の一部になる可能性があります。

 

Implementing BCP38 within your network would greatly reduce such attack surface

ネットワーク内にBCP38を実装することで、このような攻撃の可能性が大幅に軽減されます

 

recursion yes;

BIND をキャッシュサーバーとして設定するか記述します。(リゾルバーとして設定します)
デフォルトでは yes に設定されています。

■キャッシュサーバー(キャッシュDNSサーバー)

クライアントからの問い合わせ要求を受けると、コンテンツサーバーに対して再帰的に問い合わせを行い、結果をクライアントに返す DNS サーバーです。

キャッシュサーバーの役割は、不明な DNS 名の名前解決なので recursion yes; の設定とルートゾーンの定義が必要になります。

その反面、セキュリティ上注意が必要になります。

キャッシュサーバーを構築する場合は、以下のルートサーバへの hint 情報が必要になるので必ず設定します。

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

 

 

■コンテンツサーバー(権威サーバー)

管理するドメインの情報 (ゾーン情報) を持ち、キャッシュサーバからの問合せに回答する DNS サーバです。
コンテンツサーバー(権威サーバー)として動作させたい場合は「recursion no;」と設定します。

誰からの問い合わせ要求に対しても回答するサーバーを「オープンリゾルバー」と言います。

仮にオープンリゾルバーとして機能している場合、DDoS 攻撃の標的になったり、踏み台となる恐れがあります。

また、ネットワークのトラフィック量が増加してサービスが不安定になる恐れもあります。

 

セキュリティを考慮した対策

権威DNSサーバーとして運用している場合

recursion no; の設定をします。

キャッシュサーバー(リゾルバー)として運用している場合

acl を設定したうえで、recursion yes; の設定をします。

 

dnssec-enable yes;

dnssec とは「DNS Security Extensions」の略です。

DNSSEC機能を使用すると、ゾーン情報に署名を付加することができ、それにより関しているゾーンが正しいゾーン情報であることを担保することができます。

その結果、DNSキャッシュポイズニングを防ぐことが出来ます。

公開鍵(トラストアンカー)を利用しますが、パケットを暗号化して情報を秘匿する機能はありません。

デフォルトで yes(有効)に設定されています。

ただデフォルトで有効になっていてもサーバー管理者が使いこなせているのかと言われれば、ほとんど使いこなせていないと思います。

DNSSECは「信頼の連鎖」を作るものなので、上位の DNS サーバーが DNSSEC の設定をしていなければ、「dnssec-enable yes;」の設定を入れてもあまり意味がありません。

 

 

dnssec-validation yes;

DNSSEC署名検証を行うかどうか設定します。

デフォルトでは yes(有効)に設定されています。

 

 

 

DNSSEC を利用しない場合

DNSSEC を利用しない場合は、コンフィグを編集します。

 

■デフォルト

[root@ip-172-31-47-210 etc]# vi named.conf 

 

~ 省略 ~

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

~ 省略 ~

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

 

 

■編集後

以下のように編集します。

[root@ip-172-31-47-210 etc]# vi named.conf 

~ 省略 ~

 
        dnssec-enable no; ← no に変更します。 
        dnssec-validation no; ← no に変更します。 
 
        /* Path to ISC DLV key */ 
        # bindkeys-file “/etc/named.iscdlv.key”; ← コメントアウトします。 
 
        # managed-keys-directory “/var/named/dynamic”; ← コメントアウトします。 
 
        # session-keyfile “/run/named/session.key”; ← コメントアウトします。 
}; 
 

~ 省略 ~

# include “/etc/named.root.key”; ← コメントアウトします。 

 

 

編集したら「named-chroot」サービスを起動します。

[root@ip-172-31-47-210 ~]# systemctl start named-chroot.service 
[root@ip-172-31-47-210 ~]# 

 

 

 

bind の設定(正引きゾーンファイル)

次にゾーンファイル(tama-chan.local.zone)を作成します。

  • 場所:/var/named/chroot/var/named/tama-chan.local.zone

 

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

 

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

[root@ip-172-31-47-210 named]# pwd 
/var/named/chroot/var/named 
[root@ip-172-31-47-210 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@ip-172-31-47-210 named]#

 

このサンプルを参考に「tama-chan.local」のゾーンファイル/var/named/chroot/var/named/tama-chan.local.zone」を作成します。

最初にコピーを取ります。

[root@ip-172-31-47-210 named]# cp -ip /var/named/chroot/var/named/named.localhost /var/named/chroot/var/named/tama-chan.local.zone 
[root@ip-172-31-47-210 named]# ls -l /var/named/chroot/var/named/named.localhost /var/named/chroot/var/named/tama-chan.local.zone 
-rw-r—– 1 root named 152 Jun 21  2007 /var/named/chroot/var/named/named.localhost 
-rw-r—– 1 root named 152 Jun 21  2007 /var/named/chroot/var/named/tama-chan.local.zone 
[root@ip-172-31-47-210 named]#

 

 

以下のようにゾーンファイルを設定します。

[root@ip-172-31-47-210 named]# vi 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       172.31.47.210 
ns      IN      A       172.31.47.210 
file    IN      A       172.31.47.199 
client  IN      A       172.31.42.120

 

設定をしたら構文が正しいかどうかチェックします。

[root@ip-172-31-47-210 named]# named-checkzone tama-chan.local /var/named/chroot/var/named/tama-chan.local.zone 
zone tama-chan.local/IN: loaded serial 0 
OK ← OK が表示されれば問題ありません。 
[root@ip-172-31-47-210 named]#

 

 

 

 

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

完全に閉じた環境なので不要と言えば不要ですが、逆引きゾーンファイルの設定もします。

  • 逆引きゾーンファイル名 : 47.31.172.in-addr.arpa.zone

 

最初に「逆引きゾーンファイル(47.31.172.in-addr.arpa.zone)」は、以下のように正引きのゾーンファイル「tama-chan.local.zone」をコピーして作成します。

[root@ip-172-31-47-210 named]# cp -ip /var/named/chroot/var/named/tama-chan.local.zone /var/named/chroot/var/named/47.31.172.in-addr.arpa.zone 
[root@ip-172-31-47-210 named]# ls -l /var/named/chroot/var/named/tama-chan.local.zone /var/named/chroot/var/named/47.31.172.in-addr.arpa.zone 
-rw-r—– 1 root named 266 Sep 24 07:08 /var/named/chroot/var/named/47.31.172.in-addr.arpa.zone 
-rw-r—– 1 root named 266 Sep 24 07:08 /var/named/chroot/var/named/tama-chan.local.zone 
[root@ip-172-31-47-210 named]#

 

 

以下のように編集します。

[root@ip-172-31-47-210 named]# vi 47.31.172.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 
                NS      ns.tama-chan.local. 
210     IN      PTR     tama-chan.local. 
210     IN      PTR     ns.tama-chan.local. 
199     IN      PTR     file.tama-chan.local.

 

 

named-chroot の再起動

ここまで設定したら「named-chroot」サービスの再起動をします。

[root@ip-172-31-47-210 named]# systemctl status named-chroot -l 
● named-chroot.service – Berkeley Internet Name Domain (DNS) 
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled) 
   Active: active (running) since Mon 2018-09-24 11:15:15 UTC; 3min 16s ago 
  Process: 7718 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS) 
  Process: 7813 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS) 
  Process: 7811 ExecStartPre=/bin/bash -c if [ ! “$DISABLE_ZONE_CHECKING” == “yes” ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z “$NAMEDCONF”; else echo “Checking of zone files is disabled”; fi (code=exited, status=0/SUCCESS) 
 Main PID: 7815 (named) 
   CGroup: /system.slice/named-chroot.service 
           mq7815 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot 
 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: zone 0.in-addr.arpa/IN: loaded serial 0 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: zone localhost/IN: loaded serial 0 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: zone localhost.localdomain/IN: loaded serial 0 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: 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 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: zone tama-chan.local/IN: loaded serial 0 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: zone 47.31.172.in-addr.arpa.zone/IN: loaded serial 0 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: all zones loaded 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal named[7815]: running 
Sep 24 11:15:15 ip-172-31-47-210.ap-northeast-1.compute.internal systemd[1]: Started Berkeley Internet Name Domain (DNS). 
[root@ip-172-31-47-210 named]#

 

 

/etc/resolv.conf の編集

/etc/resolv.conf ファイルに自分自身「127.0.0.1」を追加して、自分自身で名前解決する設定を入れます。

 

RedHat 7系では「NeworkManger.service」で起動している場合は、直接「/etc/resolv.conf」を書き換えることができません。

※書き換えても再起動すると設定が消えます。

そのため「nmcli」コマンドを使用して設定をします。

まずはデバイスの名前を確認します。

[root@ip-172-31-47-210 network-scripts]# nmcli device 
DEVICE  TYPE      STATE      CONNECTION 
eth0    ethernet  connected  System eth0 
lo      loopback  unmanaged  — 
[root@ip-172-31-47-210 network-scripts]#

 

最初に NIC の設定を「dhcp」から「none(スタティックIP)」に変更します。

■変更前

[root@ip-172-31-47-210 etc]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
# Created by cloud-init on instance boot automatically, do not edit. 

BOOTPROTO=dhcp 
DEVICE=eth0 
HWADDR=06:D5:99:8E:95:8C 
ONBOOT=yes 
TYPE=Ethernet 
USERCTL=no 
PROXY_METHOD=none 
BROWSER_ONLY=no 
DEFROUTE=yes 
IPV4_FAILURE_FATAL=no 
IPV6INIT=no 
NAME=”System eth0″ 
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 
[root@ip-172-31-47-210 etc]#

 

 

以下のコマンドを実行し「BOOTPROTO」「none(スタティックIP)」に変更します。

[root@ip-172-31-47-210 etc]# nmcli connection modify “System eth0” ipv4.dns “172.31.0.2 127.0.0.1”
[root@ip-172-31-47-210 etc]#

 

コマンドの結果を反映させるために「NetworkManger.service」を再起動します。

[root@ip-172-31-47-210 etc]# systemctl restart NetworkManager.service
[root@ip-172-31-47-210 etc]#

 

変更内容を確認します。

■変更後

[root@ip-172-31-47-210 etc]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=none ← BOOTPROTO が none(スタティックIP)になっています。
DEVICE=eth0
HWADDR=06:D5:99:8E:95:8C
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=”System eth0″
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
IPADDR=172.31.47.210 ← IPアドレス(スタティックIP)が追加されています。
PREFIX=24
[root@ip-172-31-47-210 etc]#

 

 

更に以下のコマンドを実行して DNS サーバーを指定します。

※最初に設定したIPアドレス(127.0.0.1)がプライマリ DNS になります。

[root@ip-172-31-47-210 etc]# nmcli connection modify “System eth0” ipv4.dns “127.0.0.1 172.31.0.2”
[root@ip-172-31-47-210 etc]#

 

 

NetworkManger.service を再起動します。

[root@ip-172-31-47-210 named]# systemctl restart NetworkManager.service

 

 

変更内容を確認します。

■コマンド実行後

[root@ip-172-31-47-210 etc]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=none ← BOOTPROTO が none(スタティックIP)になっています。
DEVICE=eth0
HWADDR=06:D5:99:8E:95:8C
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PROXY_METHOD=none
BROWSER_ONLY=no
DNS1=127.0.0.1 ← プライマリ DNS、セカンダリ DNS の設定が追加されています。
DNS2=172.31.0.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=”System eth0″
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
IPADDR=172.31.47.210
PREFIX=24
[root@ip-172-31-47-210 etc]#

 

/etc/resolv.conf ファイルを確認します。

[root@ip-172-31-47-210 named]# cat /etc/resolv.conf
# Generated by NetworkManager
search ap-northeast-1.compute.internal
nameserver 127.0.0.1 ← 設定されています。

nameserver 172.31.0.2
[root@ip-172-31-47-210 named]#

 

 

nmcli コマンドの使い方に関しては以下の記事を参考にしてください。

 

【CentOS7】 nmcli コマンドを使用して複数NIC環境の設定をする手順

 

 

 

【正引き】DNS サーバー(ネームサーバー)の動作確認

ここまで来たら DNSサーバーの動作確認をして名前解決ができるか確認します。

 

RedHat 7系の場合はデフォルトで「nslookup」コマンドがインストールされていないので、必要な場合は yum コマンドでインストールします。

[root@ip-172-31-47-210 named]# yum install bind-utils

 

nslookup コマンドで確認します。

[root@ip-172-31-47-210 named]# nslookup tama-chan.local 
Server:         127.0.0.1 
Address:        127.0.0.1#53 
 
Name:   tama-chan.local 
Address: 172.31.47.210 
 
[root@ip-172-31-47-210 named]#

 

 

続けて、他の名前解決の動作確認をします。

[root@ip-172-31-47-210 named]# nslookup ns.tama-chan.local 
Server:         127.0.0.1 
Address:        127.0.0.1#53 
 
Name:   ns.tama-chan.local 
Address: 172.31.47.210 
 
[root@ip-172-31-47-210 named]# nslookup file.tama-chan.local 
Server:         127.0.0.1 
Address:        127.0.0.1#53 
 
Name:   file.tama-chan.local 
Address: 172.31.47.199 
 
[root@ip-172-31-47-210 named]# nslookup client.tama-chan.local 
Server:         127.0.0.1 
Address:        127.0.0.1#53 
 
Name:   client.tama-chan.local 
Address: 172.31.42.120 
 
[root@ip-172-31-47-210 named]#

 

 

【逆引き】DNS サーバー(ネームサーバー)の動作確認

次に逆引きができるか確認します。

[root@ip-172-31-47-210 ~]# nslookup 172.31.47.210 
Server:         127.0.0.1 
Address:        127.0.0.1#53 
 
210.47.31.172.in-addr.arpa      name = ns.tama-chan.local. 
 
[root@ip-172-31-47-210 ~]#

 

dig コマンドで確認します。

[root@ip-172-31-47-210 ~]# dig -x 172.31.47.210 
 
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 172.31.47.210 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35808 
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 
 
;; OPT PSEUDOSECTION: 
; EDNS: version: 0, flags:; udp: 4096 
;; QUESTION SECTION: 
;210.47.31.172.in-addr.arpa.    IN      PTR 
 
;; ANSWER SECTION: 
210.47.31.172.in-addr.arpa. 86400 IN    PTR     ns.tama-chan.local. 
 
;; AUTHORITY SECTION: 
47.31.172.in-addr.arpa. 86400   IN      NS      ns.tama-chan.local. 
 
;; ADDITIONAL SECTION: 
ns.tama-chan.local.     86400   IN      A       172.31.47.210 
 
;; Query time: 0 msec 
;; SERVER: 127.0.0.1#53(127.0.0.1) 
;; WHEN: Wed Sep 26 13:01:39 UTC 2018 
;; MSG SIZE  rcvd: 117 
 
[root@ip-172-31-47-210 ~]#

 

 

DNS クライアント側の設定

次にクライアントの Windows から名前解決ができるか確認します。

ファイアウォールの確認

AWS の EC2 インスタンスには「セキュリティグループ」があるので、ファイアウォールはデフォルトで「無効」になっていました。

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

 

 

 

DNS サーバーの設定の編集

Windows の DNS サーバーの設定を変更します。

 

NIC を選択して右クリックし

「プロパティ」

をクリックします。

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

 

 

 

 

「インターネットプロトコル バージョン4(TCP/IPv4)」

を選択して

「プロパティ」

ボタンをクリックします。

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

 

 

 

下図のように「次の DNS サーバーのアドレスを使う」にチェックを入れて、DNS サーバーに今回設定した DNS サーバーの「172.31.47.210」を設定し、その下にデフォルトの DNS サーバー(ここでは例として 172.31.0.2 を設定しています)を追加して「OK」ボタンをクリックします。

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

 

 

【正引き】クライアントからの動作確認

クライアントからの正引きの動作確認をします。

c:\>nslookup tama-chan.local 
サーバー:  UnKnown 
Address:  172.31.47.210 
 
名前:    tama-chan.local 
Address:  172.31.47.210 
 
 
c:\>

 

続けて他のサーバーの名前解決ができるか確認します。

c:\>nslookup ns.tama-chan.local 
サーバー:  UnKnown 
Address:  172.31.47.210 
 
名前:    ns.tama-chan.local 
Address:  172.31.47.210 
 
 
c:\>nslookup file.tama-chan.local 
サーバー:  UnKnown 
Address:  172.31.47.210 
 
名前:    file.tama-chan.local 
Address:  172.31.47.199 
 
 
c:\>nslookup client.tama-chan.local 
サーバー:  UnKnown 
Address:  172.31.47.210 
 
名前:    client.tama-chan.local 
Address:  172.31.42.120 
 
 
c:\> 

 

 

【逆引き】クライアントからの動作確認

クライアントからの逆引きの動作確認をします。

C:\>nslookup 172.31.47.210 
サーバー:  ns.tama-chan.local 
Address:  172.31.47.210 
 
名前:    ns.tama-chan.local 
Address:  172.31.47.210 
 
 
C:\>

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください