次のような感じで、リースした 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 レコードを適当に書いても更新に成功しました。