ヘルプ:DNSサーバー構築(BIND)(AlmaLinux9)

提供:あわ自由帳

メインページ > ヘルプ:目次 > ヘルプ:自宅サーバー構築(AlmaLinux9)  > DNSサーバー構築(BIND)(AlmaLinux9)

編集中です。

  • 自宅サーバーにインストールし記事修正(2024年04月07日)
  • ローカルIPアドレス:192.168.1.2

BINDインストール

bind、bind-chrootインストール

[root@host2 ~]# dnf -y install bind-chroot

BIND設定

BIND設定

[root@host2 ~]# vi /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; }; ← コメントアウト(サーバーの全インターフェースの53番ポートをリスンする)
        // listen-on-v6 port 53 { ::1; }; ← コメントアウト(IPv6を使わない場合)
        version         "unknown"; ← bindのバージョン情報の非表示化
        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; localnets; }; ← コメントアウト
        allow-transfer { none; }; ← 追加(ゾーン情報の転送を禁止)
        allow-query     { localhost; localnets; }; ← 内部からのみ問合せを許可
        allow-recursion { localhost; localnets; }; ← 内部からのみ再帰問合せを許可
        allow-query-cache { localhost; localnets; }; ← 内部からのみキャッシュ問合せを許可
        forwarders{ 8.8.8.8; 8.8.4.4; }; ← 本DNSサーバー管理外の問合せ先としてGoogleの公開DNSサーバーを指定
・
・
        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;
        };
        category lame-servers { null; }; ← 追加(error (connection refused) resolvingというエラーログの出力抑止)
};

// 内部向け設定開始
view "internal" {
        match-clients { localnets; };
        match-destinations { localnets; };

        zone "." IN {
                type hint;
                file "named.ca";
        };

        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
        include "/etc/named/named.localnets.zones";
 }; 
// 内部向け設定終了

// 外部向けの設定開始※固定IPアドレス環境の場合のみ
view "external" {
        match-clients { any; };
        match-destinations { any; };
        include "/etc/named/named.awajp.com.zone.wan";
};
// 外部向け設定終了

ゾーン定義ファイル作成

内部向けゾーン定義ファイル作成

[root@host2 ~]# vi /etc/named/named.localnets.zones
zone "1.168.192.in-addr.arpa" {
        type master;
        file "1.168.192.in-addr.arpa.db";
};
zone "awajp.com" {
        type master;
        file "awajp.com.db";
};
// 内部向けバーチャルホスト設定開始
zone "eeljp.com" {
        type master;
        file "eeljp.com.db";
};
 // 内部向けバーチャルホスト設定終了

awanet.jpの外部向けゾーン定義ファイル作成※固定IPアドレス環境の場合のみ

[root@host2 ~]# vi /etc/named/named.awajp.com.zone.wan
zone "sudachi.jp" {
        type master;
        file "awajp.com.db.wan";
        allow-query { any; };
        allow-transfer {
                XXX.XXX.XXX.XX; ← このゾーン情報の転送先として(セカンダリネームサーバーのIPアドレス)を追加
        };
        notify yes; ← このゾーン情報変更時は即座に上記セカンダリへ反映させる
};

IPv4のみ有効にする

IPv4のみ有効にする(error (network unreachable) resolvingというエラーログの出力抑止)

[root@host2 ~]# echo OPTIONS="-4" >> /etc/sysconfig/named

ルートゾーン最新化

ルートゾーンは世界に13台しかないトップレベルドメインを管理するDNSサーバーのIPアドレスを管理しているファイルで、めったに更新されることはないが、念のため最新化しておく。

[root@host2 ~]# dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca

内部向け正引きゾーンデータベース作成

内部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成

[root@host2 ~]# vi /var/named/awajp.com.db
$TTL    86400
@       IN      SOA     awajp.com.    root.awajp.com.(
                                      2024040701 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    ns1.awajp.com.
        IN MX 10 awajp.com.
ns1     IN A     192.168.1.2 ← サーバーのプライベートIPアドレスを指定(ns1.awajp.com用)
@       IN A     192.168.1.2 ← サーバーのプライベートIPアドレスを指定(awajp.com用)
www     IN A     192.168.1.2 ← サーバーのプライベートIPアドレスを指定(www.awajp.com用)
*       IN A     192.168.1.2 ← サーバーのプライベートIPアドレスを指定(*.awajp.com用)

内部向け正引きバーチャルホストゾーンデータベース(awajp.com⇒IPアドレス)作成
※バーチャルホストを利用する場合のみ

[root@host2 ~]# vi /var/named/eeljp.com.db
$TTL    86400
@       IN      SOA     eeljp.com.  root.eeljp.com.(
                                      202404071  ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    ns1.awajp.com.
        IN MX 10 eeljp.com.
@       IN A     192.168.1.2 ← サーバーのプライベートIPアドレスを指定(eeljp.com用)
www     IN A     192.168.1.2 ← サーバーのプライベートIPアドレスを指定(www.eeljp.com用)

内部向け逆引きゾーンデータベース作成

内部向け逆引きゾーンデータベース(IPアドレス⇒ドメイン名)作成

[root@host2 ~]# vi /var/named/1.168.192.in-addr.arpa.db
$TTL    86400
@       IN      SOA     awajp.com.     root.awajp.com.(
                                      2024040701 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    ns1.awajp.com.
2             IN      PTR   ns1.awajp.com. ← サーバーIPアドレス最下位部(192.168.1.2)とドメイン名を指定
2             IN      PTR   awajp.com. ← サーバーIPアドレス最下位部(192.168.1.2)とドメイン名を指定

外部向け正引きゾーンデータベース作成

外部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成

※固定IPアドレス環境の場合のみ

[root@host2 ~]# vi /var/named/awajp.com.db.wan ← 外部向け正引きゾーンデータベース作成
$TTL    86400
@       IN      SOA     ns1.sudachi.jp.  root.awajp.com.(
                                      2021051701 ; Serial
                                      7200       ; Refresh
                                      7200       ; Retry
                                      2419200    ; Expire
                                      86400 )    ; Minimum
        IN NS    ns1.awajp.com.
        IN NS    2nd.dnsv.jp.
        IN MX 10 awajp.com.
ns1     IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ns1.awajp.com用)
@       IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(awajp.com用)
www     IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(www.awajp.com用)
ftp     IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ftp.awajp.com用)
mail    IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(mail.awajp.com用)
awajp.com. IN TXT "v=spf1 ip4:XXX.XXX.XXX.XXX ~all" ← サーバーのグローバルIPアドレスを指定(メールサーバーを構築する場合のみ)

BIND起動

BIND の設定チェック

[root@host2 ~]# named-checkconf

named.conf の記述が正しいければ、何も表示されない。

BIND起動

[root@host2 ~]# systemctl start named-chroot ← BIND起動
[root@host2 ~]# systemctl enable named-chroot ← BIND自動起動設定

BINDをchrootで起動できない

AlmaLinux9のBINDは、namedもnamed-chrootも同じディレクトリに設定ファイルを置きます。

だが、

[root@host2 ~]# systemctl start named

起動するが、

[root@host2 ~]# systemctl start named-chroot

では、エラーが出ることがあります。

[root@host2 ~]# systemctl status named-chroot
・
・
9月 20 13:47:19 host4.sudachi.jp named[5745]: using 2 UDP listeners per interface
9月 20 13:47:19 host4.sudachi.jp named[5745]: using up to 4096 sockets
9月 20 13:47:19 host4.sudachi.jp named[5745]: loading configuration from '/etc/named.conf'
9月 20 13:47:19 host4.sudachi.jp named[5745]: /etc/named.conf:71: open: /var/named/named.sudachi.jp.zone: file not found
9月 20 13:47:19 host4.sudachi.jp named[5745]: loading configuration: file not found
9月 20 13:47:19 host4.sudachi.jp named[5745]: exiting (due to fatal error)
9月 20 13:47:19 host4.sudachi.jp systemd[1]: named-chroot.service: control process exited, code=exited status=1
9月 20 13:47:19 host4.sudachi.jp systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).
9月 20 13:47:19 host4.sudachi.jp systemd[1]: Unit named-chroot.service entered failed state.
9月 20 13:47:19 host4.sudachi.jp systemd[1]: named-chroot.service failed.

AlmaLinux9のBIND-chrootは、さきに/etc/named.* とか、/var/named/*.*を、/var/named/chroot以下に自動でマウントします。

上記のエラーを見てみると、ファイルがNotFoundとなっていることから、このマウント処理がうまくいってないようです。

そんな時にチェックして欲しいのが、

[root@host2 ~]# ll /var/named/chroot/var/named

[root@host2 ~]# ll /var/named/chroot/etc/named

何かファイルが残ってませんか?

空でなければマウントできないんです。

まとめると、

  • chrootディレクトリにはファイルを残さない。
  • named-chrootがファイルをchrootディレクトリに自動マウントしてくれるので、chrootでないときと同じ場所にファイルを置く。
  • /usr/libexec/setup-named-chroot.sh /var/named/chroot onはnamed-chrootが起動時に自動実行し、終了時に自動解除してくれるので、手動操作をしない。

BIND状態取得

[root@host2 ~]# 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 Tue 2019-10-08 12:45:29 JST; 41min ago
 Main PID: 22098 (named)
   CGroup: /system.slice/named-chroot.service
           └─22098 /usr/sbin/named -u named -t /var/named/chroot

 10月 12 13:00:30 host2.sudachi.jp named[964442]: running
10月 12 13:00:30 host2.sudachi.jp systemd[1]: Started Berkeley Internet Name Domain (DNS).
10月 12 13:00:30 host2.sudachi.jp named[964442]: zone 1.168.192.in-addr.arpa/IN/internal: sending notifies>
10月 12 13:00:30 host2.sudachi.jp named[964442]: zone awajp.com/IN/internal: sending notifies (serial 2020>
10月 12 13:00:30 host2.sudachi.jp named[964442]: zone eeljp.net/IN/internal: sending notifies (serial 2020>
10月 12 13:00:30 host2.sudachi.jp named[964442]: zone sudachi.jp/IN/internal: sending notifies (serial 202>
10月 12 13:00:30 host2.sudachi.jp named[964442]: zone sudachi.jp/IN/external: sending notifies (serial 201>
10月 12 13:00:30 host2.sudachi.jp named[964442]: managed-keys-zone/internal: Key 20326 for zone . acceptan>
10月 12 13:00:30 host2.sudachi.jp named[964442]: resolver priming query complete
10月 12 13:00:30 host2.sudachi.jp named[964442]: resolver priming query complete

問合せ先DNSサーバーを自分自身に変更

  • nmtui コマンドを使って、DNSサーバーを自分自身[127.0.0.1]に変更する。
[root@host2 ~]# nmtui

[root@host2 ~]# systemctl restart NetworkManager.service ← DNSサーバー変更反映