次のような感じで、リースした IP アドレスを Dynamic DNS でネームサーバに登録する DHCP サーバを CentOS 6 で作っていたのですが、なぜか CentOS 7 にすると同じような設定でも DDNS での更新が失敗するようになりました。
dhcpd.conf
log-facility daemon;
not authoritative;
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
subnet 10.1.1.0 netmask 255.255.255.0 {
default-lease-time 21600;
max-lease-time 43200;
range dynamic-bootp 10.1.1.100 10.1.1.200;
option routers 10.1.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.1.1.10;
option domain-name "test";
option domain-search "test";
ddns-domainname "test";
ddns-ttl 3600;
}
CentOS 6 で成功していたときは次のようなログが記録されていました。
dhcpd: Added new forward map from aaa.test to 10.1.1.100 dhcpd: added reverse map from 100.1.1.10.in-addr.arpa. to aaa.test
CentOS 7 で失敗したときには次のようなログが記録されていました。
dhcpd: Unable to add forward map from aaa.test to 10.1.1.100: not found
各バージョンは次の通りです。
CentOS 6.5 / dhcp-4.1.1-38.P1.el6.centos.x86_64 CentOS 7.0.1406 / dhcp-4.2.5-27.el7.centos.x86_64
試行錯誤の結果、CentOS 7 でも dhcpd.conf で zone でネームサーバを明示すれば大丈夫でした。
log-facility daemon;
not authoritative;
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
subnet 10.1.1.0 netmask 255.255.255.0 {
default-lease-time 21600;
max-lease-time 43200;
range dynamic-bootp 10.1.1.100 10.1.1.200;
option routers 10.1.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.1.1.10;
option domain-name "test";
option domain-search "test";
ddns-domainname "test";
ddns-ttl 3600;
zone test. {
primary 10.1.1.10;
}
zone 1.1.10.in-addr.arpa. {
primary 10.1.1.10;
}
}
CentOS 7 で zone を書いて成功したときは次のようなログが記録されました(CentOS 6 で成功していたときのログと同じです)。
dhcpd: Added new forward map from aaa.test to 10.1.1.100 dhcpd: Added reverse map from 100.1.1.10.in-addr.arpa. to aaa.test
CentOS 6 の dhcpd だと zone を記述していなくても SOA レコードから権威サーバを探して更新先のネームサーバを特定しているっぽいのだけど (nsupdate も同じような動作するよね?)、CentOS 7 の dhcpd だと SOA レコードの検索はせずに、zone で指定されたネームサーバに直接更新を掛けているようでした。
実際、SOA レコードとか NS レコードを適当に書いても更新に成功しました。