BINDでDNSサーバを構築する!(Rocky Linux 9)

Rocky Linux 9を使用して、BINDでDNSサーバを構築します。宅内の小規模な環境の名前解決用の設定を行います。

サーバを構築する環境を確認する!

サーバを構築するOS環境を確認します。

# hostnamectl
 Static hostname: vmsnms01.loc.lab4ict.com
       Icon name: computer-vm
         Chassis: vm
      Machine ID: 39f2f77b642b4abe96b05142172223f9
         Boot ID: 23d6cfd6e0b04ac2a454055aaa3c937e
  Virtualization: oracle
Operating System: Rocky Linux 9.1 (Blue Onyx)      
     CPE OS Name: cpe:/o:rocky:rocky:9::baseos
          Kernel: Linux 5.14.0-162.6.1.el9_1.x86_64
    Architecture: x86-64
 Hardware Vendor: innotek GmbH
  Hardware Model: VirtualBox

Firewalldの通信許可設定を行う!

DNSの問い合わせに対する通信許可設定を行います。

# firewall-cmd --add-service=dns --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-services
cockpit dhcpv6-client dns ssh

BINDをインストールする!

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

# dnf -y install bind bind-utils
...
========================================================================================================================
 Package                          Architecture          Version                          Repository                Size
========================================================================================================================
Installing:
 bind                             x86_64                32:9.16.23-11.el9                appstream                488 k
Upgrading:
 bind-libs                        x86_64                32:9.16.23-11.el9                appstream                1.2 M
 bind-license                     noarch                32:9.16.23-11.el9                appstream                 13 k
 bind-utils                       x86_64                32:9.16.23-11.el9                appstream                200 k
Installing dependencies:
 bind-dnssec-doc                  noarch                32:9.16.23-11.el9                appstream                 46 k
 python3-bind                     noarch                32:9.16.23-11.el9                appstream                 61 k
 python3-ply                      noarch                3.11-14.el9.0.1                  baseos                   103 k
Installing weak dependencies:
 bind-dnssec-utils                x86_64                32:9.16.23-11.el9                appstream                113 k

Transaction Summary
========================================================================================================================
Install  5 Packages
Upgrade  3 Packages
...
Complete!

BINDで名前解決するための基本設定を行う!

Bindの設定ファイルは、「/etc/named.conf」です。名前解決のレコードは、別なゾーンファイルという設定ファイルに記述します。

# vi /etc/named.conf

リッスンするインターフェースの設定を行います。ループバックと、DNSサーバ自身のアドレスを設定します。

listen-on port 53 { 127.0.0.1; 10.1.20.1; };

名前解決のリクエストを受け付けるアドレスを設定します。ループバックと、自身のネットワークアドレスを設定します。

allow-query     { localhost; 10.1.0.0/16; };

名前解決を行うためのAレコードを記述します。
「/etc/named.conf」の末尾に、名前解決を行うためのゾーンファイルの設定を記述します。

zone "loc.lab4ict.com" {
    type master;
    file "/etc/named/loc.lab4ict.com.zone";
    allow-query { any; };
    allow-transfer { none; };
};

BINDで名前解決を行うためのゾーンファイルを作成する!

「/etc/named.conf」で設定したゾーンファイルを作成します。

# /etc/named/loc.lab4ict.com.zone
$TTL 8h
@ IN SOA loc.lab4ict.com. root.loc.lab4ict.com. (
                          2023062401 ; serial number
                          1d         ; refresh period
                          3h         ; retry period
                          3d         ; expire time
                          3h )       ; minimum TTL

                  IN NS   vmsnms01.loc.lab4ict.com.
                  IN MX   10 vmsmai01.loc.lab4ict.com.

vmsnms01               IN A    10.1.20.1
router01               IN A    10.1.0.1

BINDの起動設定を行う!

Bindの起動設定を行います。

# systemctl enable --now named.service
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
# systemctl status named.service 
● named.service - Berkeley Internet Name Domain (DNS)
     Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2023-06-24 13:12:16 JST; 23s ago
    Process: 2446 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf >
    Process: 2448 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 2449 (named)
      Tasks: 4 (limit: 11062)
     Memory: 16.5M
        CPU: 51ms
     CGroup: /system.slice/named.service
             └─2449 /usr/sbin/named -u named -c /etc/named.conf
...

名前解決の確認を行う!

名前解決ができることを確認します。

# nslookup
> server 127.0.0.1
Default server: 127.0.0.1
Address: 127.0.0.1#53
> router01.loc.lab4ict.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	router01.loc.lab4ict.com
Address: 10.1.0.1
> server 10.1.20.1
Default server: 10.1.20.1
Address: 10.1.20.1#53
> router01.loc.lab4ict.com
Server:		10.1.20.1
Address:	10.1.20.1#53

Name:	router01.loc.lab4ict.com
Address: 10.1.0.1
> www.google.com
Server:		10.1.20.1
Address:	10.1.20.1#53

Non-authoritative answer:
Name:	www.google.com
Address: 142.250.207.4
Name:	www.google.com
Address: 2404:6800:4004:820::2004

おわりに

BINDを使用する場合は、bindの設定と名前解決するためのゾーンファイルの作成をそれぞれ行って、名前解決をできるようにします。

関連記事

参考書籍(Amazon)