DHCP clients not getting an address across a router
If clients on the same subnet as your DHCP server get addresses but clients one router away get nothing, the server is fine. The discovery never reaches it. DHCP clients find the server by broadcast, and a router doesn't forward broadcasts. You bridge that gap with a relay on the router interface facing the clients.
What it means
A client with no lease sends DHCPDISCOVER to 255.255.255.255. That broadcast dies at the first router. A DHCP relay (IP helper) catches it on the client-facing interface, rewrites it as a unicast to the server, and stamps the gateway address (giaddr) so the server knows which pool to lease from. Without the relay, the server never hears the request.
Most common causes
- No relay on the client-side interface. The router interface facing the clients has no `ip helper-address` / `dhcrelay` pointing at the server, so broadcasts are dropped instead of forwarded.
- No return route to the client subnet. The server leases an address but its reply (and later renewals) have no route back to the remote subnet. The relay puts giaddr in the packet; the server still needs a route to that network.
- Server has no pool for the remote subnet. The server matches the pool by giaddr. If there's no scope covering the client subnet, it has nothing to offer even when the request arrives.
- Relay pointed at the wrong server address. A helper address that doesn't match where the DHCP service actually listens forwards the request into a black hole.
How to fix it
- On the router interface facing the clients, add the relay pointing at the server (`ip helper-address <server>`, or `dhcrelay <server>` on Linux).
- Confirm the server has a pool/scope that covers the client subnet.
- Add a route on the server (or its gateway) back to the client subnet.
- Renew on the client and confirm it gets an address from the right range.