DNSサーバーもDHCPサーバーも1台で兼任させるが、冗長化のためゾーン転送を利用して2台分を設定する。
・ AlmaLinux: 9.4 ・ bind: 9.16.23 ・ dhcp-server: 4.4.2
・ プライマリIPアドレス: 192.168.1.11 ・ セカンダリIPアドレス: 192.168.1.12
プライマリサーバーの設定
パッケージをインストールする。
# dnf install bind dhcp-server
DNSサーバーの設定ファイルの内容を下記に変更する。
options {
listen-on port 53 { any; };
listen-on-v6 { none; };
directory "/var/named/";
…
// LAN内からの問い合わせを許可
allow-query {
localhost;
192.168.1.0/24;
};
…
// ゾーン転送を許可するIPを設定
allow-transfer {
192.168.1.12;
};
// 自分で名前解決できないときの丸投げ先
forwarders {
192.168.1.254;
8.8.8.8;
};
};
…
zone "example.jp." {
type master;
file "example.jp.zone";
// 自身からの変更を許可
allow-update {
localhost;
192.168.1.12;
};
};
…
さっき指定したzoneファイルを作成する。
※LAN内のDDNSに使用するため更新間隔を短く
※”admin.example.jp.”は”admin@example.jp”という管理者のE-mailという意味らしい
$TTL 86400
@ IN SOA sv1.example.jp. admin.example.jp. (
2024071501
300
60
3600
300
)
IN NS sv1.example.jp.
IN NS sv2.example.jp.
sv1 IN A 192.168.1.11
sv2 IN A 192.168.1.12
作成したらファイルの所有者を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, 192.168.1.12;
# 更新を通知するDNSサーバーを指定
zone example.jp. {
primary localhost;
}
}
SELinuxとファイアウォールに例外を追加する。
# setsebool -P named_write_master_zones true # firewall-cmd --add-service=dns --permanent # firewall-cmd --add-service=dhcp --permanent # firewall-cmd --reload
サービスを有効にして起動。
# systemctl enable --now named # systemctl enable --now dhcpd
セカンダリサーバーの設定
パッケージをインストールする。
# dnf install bind dhcp-server
DNSサーバーの設定ファイルを変更または追記する。
options {
listen-on port 53 { any; };
listen-on-v6 { none; };
directory "/var/named/";
…
allow-query {
localhost;
192.168.1.0/24;
};
…
forwarders {
192.168.1.254;
8.8.8.8;
};
};
…
zone "example.jp." {
type slave;
file "example.jp.zone";
masters {
192.168.1.11;
};
};
…
DHCPサーバーの設定ファイルに下記を追記する。
ddns-update-style interim;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.121 192.168.1.140;
option routers 192.168.1.254;
option domain-name "example.jp";
option domain-name-servers 192.168.1.11, 192.168.1.12;
zone example.jp. {
primary 192.168.1.11;
}
}
SELinuxとファイアウォールに例外を追加する。
# firewall-cmd --add-service=dns --permanent # firewall-cmd --add-service=dhcp --permanent # firewall-cmd --reload
サービスを有効にして起動。
# systemctl enable --now named # systemctl enable --now dhcpd
補足
ゾーンを再読み込みする
保持しているゾーンの情報をリロードする。mastersのシリアルが保持しているシリアルよりも大きければゾーン転送が行われる。
# rndc reload example.jp
現在のDNSレコードの確認
rndcでdumpして現在のDNSレコードを確認する。
# rndc dumpdb -zones # less /var/named/data/cache_dump.db
DNSレコードの更新テスト
nsupdateを使用してDNSサーバーを更新をテストするにはbind-utilsをインストールし、nsupdateコマンドを実行する。実行したら対話型コンソールになるので下記のような感じで入力する。何もエラーが出なければOK。
※INはインターネットの意味らしいが未指定でも問題ない
>server 127.0.0.1 >update add test.example.jp. 3600 IN A 192.168.1.222 >send >server 127.0.0.1 >update delete test.example.jp. IN >send
DNSレコードの削除
まれにDNSレコードのIPアドレスが一切更新されなくなるクライアントがある。nsupdateコマンドを実行して古いDNSレコードを削除するとそのうち直る。
>server 127.0.0.1 >update delete test.example.jp. >send