I'm having a problem with my Dynamic DNS and DHCP setup where clients requesting leases when none are available causes a cascading failure where existing clients have their forward and reverse DNS records removed. I'm using isc-dhcp-server and bind9 on an Ubuntu 14.04 server. The clients in this case are running OS X.
I've allocated a range of IPs for the DHCP server and hooked it up to bind for Dynamic DNS updates. When issuing IPs bind gets updated and everything works fine. However, when the pool of DHCP leases is exhausted the DHCP server starts handing out existing leases to the clients requesting a lease, then immediately revokes it. Unfortunately, this also triggers an update to DNS where the forward and reverse records for that IP are also removed, meaning the system on that IP can no longer be found by DNS. This continues sequentially throughout the whole range which removes all DNS entries until it loops around again.
I've dug through the manpage and I cannot explain this behavior. I've tried shared-network, subnet, and pools on isc-dhcp-server's configuration and they all now exhibit the same behavior. If a lease is returned from a client it gets handed out to the next system requesting one and DNS is updated okay, but the very next client asking for a lease when none are available begins the cycle again.
Any ideas on what could be causing this behavior? It's like the DHCP server is not checking its own dhcpd.leases file to see it's already issued these IPs.