I run a DHCP server using Linux’s dhcpd program to serve addresses to a bunch of clients.Â These clients are connected over several wireless links, and the radios are sometimes quirky.Â Specifically, some clients never get the DHCPOFFER unless the ‘always-broadcast’ parameter is on.Â This usually works out fine.
Today, however, we had a problem where we just saw a bunch of incoming DHCPDISCOVER messages, to which the server would reply with a DHCPOFFER. The devices would just continually send discover messages, and none would ever DHCPREQUEST an address.
From what I can conclude, I think that the clients were confused when they received multiple broadcast responses back for their DHCPDISCOVER message.Â The client would then send another discover message, which just caused a never-ending loop of requests and offers.
To resolve the problem, I turned off always-broadcast for a few minutes.Â This made the clients wait for a random period of time before discovering again.Â Some clients accepted the IP fine even though it wasn’t broadcast.Â For the ones that didn’t, I then re-enabled always-broadcast, and they picked up an address the next time that they tried.
For a long term solution, we’re working on subnetting the two /24 networks that are currently together into smaller /26 or /27 blocks.Â That should reduce the possibility of having this happen again.