centos7.7でDNSサーバを立てる(bind)


CentOS7.7にDNSサーバの設定を行います。
最終的には同一セグメント内の別サーバからDNS解決するまでを目標とします。

1.DNSパッケージインストール(bind,bind-utils)

DNSサーバ用のパッケージとして、bindをインストールします。
また、DNS系コマンド(nslookup等)向けに、bind-utilsをインストールします。

bindインストール
# yum install bind
《中略》
完了しました!
bind-utilsインストール
# yum install bind-utils
《中略》
完了しました!

2.DNS設定ファイル編集(/etc/named.conf)

デフォルトから一部のみ変更しています。

設定部 設定項目 内容 意味
options listen-on 53 { 192.168.142.31; }; 自身のDNS-NWインターフェースの指定
allow-query 192.168.142.0/24 DNS問合せ元のホスト指定
zone "test.local" ゾーン名(正引きルール)
type master このゾーンはこのサーバがマスター
file "test.local" ゾーンデータのファイル名
allow-update none 他DNSの更新を反映しない
zone "142.168.192.in-addr.arpa" ゾーン名(逆引きルール)
/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 { 127.0.0.1; };
        listen-on port 53 { 192.168.142.31; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        //allow-query     { localhost; };
        allow-query     { 192.168.142.0/24; };

        /*
         - 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.root.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 "test.local" IN {
        type master;
        file "test.local";
        allow-update { none; };
};

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

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

3.正引き用設定ファイル作成

test.localドメインの正引き設定ファイルを作成します。

設定部 設定項目 内容 意味
$ TTL 86400 ゾーンレコードTTL秒。
@ IN SOA cent77-01.test.local. root.test.local. プライマリDNSサーバ、管理者メールアドレス(FQDN)
2020020501 ; Serial ゾーン情報のシリアル番号(バージョン)
28800 ; Refresh セカンダリDNSサーバーの更新確認間隔(秒)
14400 ; Retry 更新失敗時の再試行時間(秒)
3600000 ; Expire 更新失敗時の情報利用時間(秒)
86400 ) ; Minimum レコードのTTL(秒)
IN NS cent77-01.test.local. 自身が管理しているゾーンのDNSサーバー(FQDN)
cent77-01 IN A 192.168.142.31 正引きレコード
cent77-02 IN A 192.168.142.32 正引きレコード
/var/named/test.local
$TTL      86400
@         IN       SOA     cent77-01.test.local.  root.test.local.(
                                        2020020501 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        86400 )    ; Minimum
            IN NS cent77-01.test.local.
cent77-01   IN A 192.168.142.31
cent77-02   IN A 192.168.142.32

4.逆引き用設定ファイル作成

test.localドメインの逆引き設定ファイルを作成します。

設定部 設定項目 内容 意味
cent77-01 IN A 192.168.142.31 逆引きレコード
cent77-02 IN A 192.168.142.32 逆引きレコード
/var/named/test.local.rev
$TTL      86400
@         IN       SOA     cent77-01.test.local.  root.test.local.(
                                        2020020501 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        86400 )    ; Minimum
     IN NS cent77-01.test.local.
31   IN PTR cent77-01.test.local.
32   IN PTR cent77-02.test.local.

5.DNSコンフィグ確認

各設定のコンフィグ内容が正しいかを確認していきます。

・基本設定ファイル

/etc/named.conf
# named-checkconf

・ゾーン設定ファイル

/var/named/test.local
# named-checkzone test.local /var/named/test.local
zone test.local/IN: loaded serial 2020020501
OK
/var/named/test.local.rev
# named-checkzone test.local.rev /var/named/test.local.rev
zone test.local.rev/IN: loaded serial 2020020501
OK

6.firewalld設定

DNS通信を許可します。

DNS通信許可
# firewall-cmd --add-service=dns --permanent
success
firewallの再起動
#firewall-cmd --reload
success
firewallの設定内容の確認
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: dhcpv6-client dns nfs ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

7.サービス起動

DNSサービスを起動します。

DNS関連サービスの起動
# systemctl start named
OS起動時のDNSサービス自動起動設定
# systemctl enable named
動作確認
# 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 土 2020-02-08 02:51:20 JST; 2h 59min ago
  Process: 1218 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1193 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1220 (named)
   CGroup: /system.slice/named.service
           mq1220 /usr/sbin/named -u named -c /etc/named.conf

 2月 08 04:20:31 cent77-01 named[1220]: network unreachable resolving '0.centos.pool.ntp.org/A/IN': 2620:7:6000:...f35#53
 2月 08 04:20:31 cent77-01 named[1220]: network unreachable resolving '0.centos.pool.ntp.org/AAAA/IN': 2620:7:60...f35#53

8.DNSクライアント設定

クライアントとなるサーバ側の設定としては、パッケージのインストールを行い、リゾルバ設定を記述すればOKです。

パッケージインストール
# yum install bind-utils
《中略》
完了しました!
リゾルバ設定
# vi /etc/resolv.conf
/etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.142.31
domain test.local

8.DNS動作確認

DNSクライアント側から、nslookupコマンドでDNSサーバの応答を確認します。

正引き確認
# nslookup 192.168.142.31
31.142.168.192.in-addr.arpa     name = cent77-01.test.local.
逆引き確認
# nslookup cent77-01
Server:         192.168.142.31
Address:        192.168.142.31#53

Name:   cent77-01.test.local
Address: 192.168.142.31

以上です。

参考

DNSサーバーの種類(キャッシュサーバーとコンテンツサーバー)
http://cos.linux-dvr.biz/archives/category/bind-dns%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e6%a7%8b%e7%af%89

BINDの設定(named.conf)
http://cos.linux-dvr.biz/archives/87

BINDの設定(正引き情報設定)
http://cos.linux-dvr.biz/archives/95

BINDの設定(逆引き情報設定)
http://cos.linux-dvr.biz/archives/108

DNSサーバ (bind-9.2) の設定
http://park12.wakwak.com/~eslab/pcmemo/linux/bind/bind2.html

BINDによるDNSの運用
http://www.fc-lab.com/network/server/dns/check.html

CentOS 7: bindをインストールして内部ネットワーク向けにDNSサーバを立ち上げる
https://www.hiroom2.com/2016/05/02/centos-7%E3%81%ABbind%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E5%86%85%E9%83%A8%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%90%91%E3%81%91%E3%81%ABdns%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B/

[CentOS7] dig, host, nslookup, nsupdateコマンドをインストールする
https://410gone.click/blog/2016/03/22/centos7-dig-nslookup-host/