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.


The problem boils down to OS X misbehaving with regards to the DHCP specification. As talked about here OS X crafts its own ARP packets before even attempting to communicate over DHCP. If the DHCP Client ID is both filled-in and not unique OS X fills the ARP packet with this information in such a way that it causes a DHCP Exhaustion attack.

To correct the problem, you either cannot use the DHCP Client ID field or it must be made unique. In my case we made this "[DHCP Lease Pool][hostname]" which provided a unique Client ID that can still be retrieved with substring in the DHCP server to determine what pool of leases to assign a system to.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.