インストール
今回はDNSサーバーもDHCPサーバーも1台で兼任させる。
まずインストールする。
※Version bind9.11.26 dhcp4.3.6
# dnf install bind dhcp-server
DNSサーバーの設定
bindから設定する。
設定ファイルの内容を下記に変更する。
options {
    // zoneファイルの保存場所
    directory "/var/named/";
    // LAN内からの問い合わせを許可
    allow-query {
        localhost;
        192.168.1.0/24;
    };
    // 自分で名前解決できないときの丸投げ先
    forwarders {
        192.168.1.254;
        8.8.8.8;
    };
};
zone "example.jp." {
    type master;
    file "example.jp.zone";
    // 自身からの変更を許可しておく
    allow-update {
        localhost;
    };
};
さっき指定したzoneファイルを作成する。
※admin.example.jp.の部分はadmin@example.jpという管理者のE-mailという意味らしい
$TTL 86400
@    IN    SOA    dns.example.jp.    admin.example.jp. (
           2022032319
           10800
           36400
           604800
           86400
)
       IN    NS   dns.example.jp.
dns    IN    A    192.168.1.11
作成したらファイルの所有者をnamedに変更する。
# chown named:named /var/named/example.jp.zone
DHCPサーバーの設定
設定ファイルを下記のように編集する。
# DNSサーバーに更新要求を送信する設定
ddns-update-style interim;
# 普通のDHCPの設定
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.101 192.168.1.120;
    option routers 192.168.1.254;
    option domain-name "example.jp";
    option domain-name-servers 192.168.1.11;
    # 更新を通知するDNSサーバーを指定
    zone example.jp. {
        primary localhost;
    }
}
その他の必要な設定
SELinuxとFirewallに例外を追加する。
# setsebool -P named_write_master_zones true # firewall-cmd --add-service=dns --permanent # firewall-cmd --add-service=dhcp --permanent # firewall-cmd --reload
サービスを有効にして起動。
# systemctl enable named # systemctl start named # systemctl enable dhcpd # systemctl start dhcpd
補足
nsupdate
nsupdateを使用してDNSサーバーを更新をテストするには bind-utils をインストールし、nsupdateコマンドを実行する。実行したら対話型コンソールになるので下記のような感じで入力する。何もエラーが出なければOK。
>server 127.0.0.1 >update add test.example.jp. 3600 A 192.168.1.222 >send >server 127.0.0.1 >update delete test.example.jp. >send
rndc
rndcでdumpして現在のDNSレコードを確認する。
# rndc dumpdb -zones # cat /var/named/named_dump.db | grep dns.example.jp.