【CentOS8】DNSサーバー(BIND)インストール構築手順


CentOS8でDNSサーバーをインストール・構築・名前解決の動作確認を実施したので手順をまとめました。

CentOS8のバージョンは以下となります。

$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

今回構築するDNSサーバーのホスト名は以下とします。

$ hostname
dns.test.local

ドメインは「test.local」とします。


CentOS8「DNSサーバー(BIND)」インストール手順

CentOS8でDNSサーバーはdnfコマンドでインストールするので事前にアップデートを実施します。

$ dnf -y update

アップデート完了後以下コマンドで「BIND」をインストールします。

$ dnf -y install bind bind-utils

BINDインストール後、サービスの状態を確認します。

$ systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
$

サービスはまだ立ち上がっていないことが分かります。

namedバックアップ

named.confを編集する前にバックアップをとっておきます。

$ cp -p /etc/named.conf /etc/named.conf_old
$ ll /etc/named.*
-rw-r-----. 1 root named 1991 11月  6 07:31 /etc/named.conf
-rw-r-----. 1 root named 1984 11月  6 06:55 /etc/named.conf.rpmsave
-rw-r-----. 1 root named 1984 11月  6 06:55 /etc/named.conf_old
-rw-r-----. 1 root named 1029  9月  9 12:48 /etc/named.rfc1912.zones
-rw-r--r--. 1 root named 1070  9月  9 12:48 /etc/named.root.key
$


「named.conf」編集

「named.conf」を編集します。
今回は内部DNSサーバーを構築するため以下の設定をしました。

  • 11-13行目:ローカルネットワークを定義(192.168.0.0/24)
  • 16行目:IPv4での問い合わせ(リッスン)をすべて受け付ける
  • 17行目:IPv6の問い合わせ(リッスン)を受け付けない
  • 24行目:名前解決の問い合わせを受け付ける範囲を指定(自薦に設定したローカルネットワークを指名)
  • 66-75行目:正引き、逆引きのゾーン定義を設定
$ vim /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.
//

acl network {
        192.168.0.0/24;
};

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; network; };

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

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";
};

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";


zone "test.local" IN {
        type master;
        file "test.local";
        allow-update { none; };
};
zone "196.180.10.in-addr.arpa" IN {
        type master;
        file "196.180.10.in-addr.arpa.rev";
        allow-update { none; };
};
$

今回の設定はIPv6を使用していないため、以下コンフィグで不要なIPv6のログを抑制します。
※IPv4のみを使用します。

$ vim /etc/sysconfig/named
# 最終行に追記
OPTIONS="-4"

設定後、以下コマンドでエラーが出ないことを確認します。

$ named-checkconf

正引きゾーンファイル作成

上記、「named.conf」で定義したゾーンから設定ファイルを作成します。

ホスト名からIPアドレスを名前解決するために「正引きゾーンファイル」を作成します。
ドメイン名は「test.local」でローカルネットワーク「192.168.0.0/24」の環境を作成します。

ゾーンファイルの作成は以下のフォルダで作成します。

$ cd /var/named/
$ vim test.local

「test.local」の設定内容は以下となります。

$TTL 86400
@                 IN      SOA dns.test.local. root.test.local. (
                          2020110601 ; serial
                          3600       ; refresh 1hr
                          1800       ; retry 15min
                          604800     ; expire 1w
                          86400      ; min 24hr
)

                  IN      NS     dns.test.local.
dns               IN      A      192.168.0.100
ntp               IN      A      192.168.0.101
dhcp              IN      A      192.168.0.102

逆引きゾーンファイル作成

逆引きゾーンファイルも正引きゾーンファイルと同じフォルダ内で作成します。

$ vim 0.168.192.in-addr.arpa.rev

逆引きゾーンファイルの設定内容は以下となります。

$TTL 86400
@                IN      SOA dns.test.local. root.test.local. (
                         2020110601 ; serial
                         3600       ; refresh 1hr
                         1800       ; retry 15min
                         604800     ; expire 1w
                         86400      ; min 24hr
)

                 IN      NS     dns.test.local.
100              IN      PTR    dns.test.local.
101              IN      PTR    ntp.test.local.
102              IN      PTR    dhcp.test.local.

作成したゾーンファイルをチェック

上記でゾーンファイルを作成したら、設定内容が間違っていないか、以下コマンドで確認をします。

$ named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
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
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone test.local/IN: loaded serial 2020110601
zone 0.168.192.in-addr.arpa/IN: loaded serial 2020110601

上記のように「error」、「fail」などの文字列がなければ成功です。

「firewall」でDNSの通信を許可する

次に「firewall」でDNSの通信を許可します。

事前にfirewallで現状の通信確認をします。
「services」でdnsが許可されていません。

$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

以下コマンドでdnsを許可します。

$ firewall-cmd --add-service=dns --permanent
success

上記設定後、「firewall」を再起動します。

$ firewall-cmd --reload
success

再起動後、再度firewallの内容を確認し、「services」でdnsが許可されていることが確認できます。

$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client dns ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

$

DNS(BIND)サービス起動

上記確認後、DNSサービスを起動します。

$ systemctl start named
$ systemctl enable named

サービスを確認し、DNSが起動していることを確認します。

$ systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-11-06 07:34:54 EST; 16min ago
 Main PID: 1823 (named)
    Tasks: 4 (limit: 11327)
   Memory: 88.1M
   CGroup: /system.slice/named.service
           mq1823 /usr/sbin/named -u named -c /etc/named.conf

11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/AAAA/IN': 2620:1ec:8ec::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/A/IN': 2620:1ec:bda::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/AAAA/IN': 2620:1ec:bda::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/A/IN': 2620:1ec:bda::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/AAAA/IN': 2620:1ec:bda::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/A/IN': 2a01:111:4000::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/AAAA/IN': 2a01:111:4000::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/A/IN': 2a01:111:4000::9#53
11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/AAAA/IN': 2a01:111:4000::9#53
11月 06 07:49:06 dns.test.local named[1823]: network unreachable resolving 'a767.dscg3.akamai.net/A/IN': 2600:1480:1::c1#53
$

動作確認(名前解決)

DNSサーバーが正常に起動できたら、実際に名前解決ができるか確認をします。

「nslookup」コマンドでDNSサーバーを指名して名前解決を実施します。

正引き

$ nslookup dns.test.local 192.168.0.100
Server:         192.168.0.100
Address:        192.168.0.100#53

Name:   dns.test.local
Address: 192.168.0.100

逆引き

$ nslookup 192.168.0.100 10.192.168.0.100
100.0.168.192.in-addr.arpa     name = dns.test.local.

上記のようにうまく名前解決ができれば完成です。

以上がCentOS8のDNSサーバー構築手順となります。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!