Home CCNA How to Troubleshoot DHCPv4 Problems
CCNA

How to Troubleshoot DHCPv4 Problems

Flowchart For Troubleshooting Dhcpv4 Client Failures, Branching Through Interface Status, Static Ip Test, And Same-Subnet Versus Relay Checks

DHCP failures rarely announce their cause directly — a client just sits without an address, or ends up with the wrong one, and the actual reason could be anywhere from a bad cable to a missing relay command to a full address pool sitting quietly exhausted. What separates a fast fix from an hour of guessing is working through the possibilities in a consistent order, rather than jumping straight to the most complicated explanation available.

This guide walks through that order: physical connectivity first, then whether DHCP works at all versus only across subnets, then relay configuration, then the debugging tools for when the problem still isn’t obvious.

Start with Physical Connectivity

Before touching any DHCP configuration, confirm the interface acting as the client’s default gateway is actually up:

Router# show interfaces gigabitEthernet 0/1
GigabitEthernet0/1 is up, line protocol is up

If the interface shows down, administratively down, or up/down (line protocol down), no DHCP troubleshooting matters until that’s resolved first — a downed port doesn’t pass any traffic at all, DHCP requests included. This sounds obvious, but it’s genuinely the most common cause of “DHCP isn’t working” tickets, and checking it first saves real time otherwise spent chasing a configuration problem that doesn’t actually exist.

Confirm the Problem Is Actually DHCP

A quick, reliable way to isolate DHCP as the actual cause: configure the client with a static IP address in the correct subnet and test basic connectivity from there.

  • Static IP works fine → the problem is specifically in the DHCP exchange. Continue troubleshooting DHCP directly.
  • Static IP also fails → the problem is broader network connectivity (routing, switching, cabling), and fixing DHCP configuration won’t help until that’s resolved first.

This single test saves a lot of wasted effort chasing DHCP settings when the real issue is somewhere else entirely.

Same Subnet vs. Across Subnets

Two-Column Comparison Separating Troubleshooting Steps For A Dhcp Client On The Same Subnet As The Server From Steps For A Client Across Subnets Requiring Relay
Whether The Client And Server Share A Subnet Determines Almost The Entire Troubleshooting Path From Here.

Once DHCP is confirmed as the actual problem, the next fork in the road is whether the client and DHCP server sit on the same subnet or VLAN, or are separated by a router somewhere in between.

  • Same subnet, still failing → the problem is local: exclusions, pool configuration, service dhcp status, or the pool being exhausted. Relay isn’t involved at all.
  • Different subnets, still failing → check ip helper-address configuration specifically, since a missing or misconfigured relay command is the single most common cause of DHCP failing across subnets while working fine locally.

Testing a client directly on the DHCP server’s own subnet (temporarily, if needed) is a fast way to confirm whether the server itself is healthy before assuming the problem is relay-related.

Verifying Relay Configuration

If the DHCP server sits on a different subnet than the client, the router interface facing the client needs ip helper-address pointing at the server:

Router# show running-config | include helper-address
 ip helper-address 172.16.0.1

Two things to confirm here: the command is actually present, and it’s on the correct interface — specifically the one facing the client subnet, not the one facing the server. A helper address configured on the wrong interface (or missing entirely) is functionally identical to having no relay at all from the client’s perspective.

Router# show ip interface gigabitEthernet 0/1

show ip interface confirms which helper address is applied on a given interface — useful for catching a helper address that got applied to the wrong interface during initial setup, which produces exactly the same symptom as a missing one.

Verifying the DHCP Service Itself Is Running

Router# show running-config | include service dhcp

If this returns no service dhcp, both the DHCP server and the relay agent functionality are disabled on that router entirely — not just the server role. This is an easy thing to overlook, since a router can have a perfectly correct pool and a perfectly correct ip helper-address line and still fail completely if this one global setting happens to be off. service dhcp in global configuration mode re-enables it; by default, the running config won’t display this line at all when it’s already enabled, since that’s simply the default state.

Understanding IP Address Conflicts

An address conflict happens when two devices end up believing they’re both entitled to the same IP address — usually from a specific sequence of events: a client’s lease expires while it’s still connected but hasn’t renewed, the server reassigns that now-expired address to a different client, and then the original client reboots and — not realizing its old lease is gone — starts using that same address again from cached configuration rather than requesting a fresh one.

Conflict detection happens on both sides, using different mechanisms:

  • The server checks with an ICMP ping before offering an address, to confirm nothing else on the network is already using it.
  • The client checks with an ARP request after receiving an address, as a final confirmation before actually configuring it.
Router# show ip dhcp conflict
IP address       Detection method    Detection time
192.168.1.15     Ping                Aug 20 2026 09:14 AM

If a conflict is detected by either method, the server pulls that address from the pool entirely and won’t reassign it until an administrator manually clears the conflict — clear ip dhcp conflict <address> or clear ip dhcp conflict * for all recorded conflicts.

Debugging When the Cause Still Isn’t Clear

When none of the above points to an obvious cause, the next step is confirming whether DHCP requests are even reaching the router at all.

Filtering Debug Output with an ACL

Running debug ip packet unfiltered on a busy interface floods the console with irrelevant traffic almost immediately. Pairing it with an extended ACL matching only DHCP’s ports narrows the output to exactly what actually matters:

Router(config)# access-list 101 permit udp any any eq 67
Router(config)# access-list 101 permit udp any any eq 68
Router(config)# exit
Router# debug ip packet 101
Before-And-After Comparison Showing Unfiltered Debug Output As Cluttered Noise Versus Clean Dhcp-Only Output After Applying An Acl Filter
Pairing Debug Ip Packet With An Acl Limits The Flood To Exactly The Traffic That Matters.

This shows only packets matching the ACL — in this case, DHCP client and server traffic on ports 67 and 68 — instead of every packet crossing the router. It’s a technique worth knowing beyond DHCP specifically: the same ACL-plus-debug ip packet pattern works for isolating debug output to any protocol or port.

Server-Side Event Debugging

Router# debug ip dhcp server events

This reports the DHCP server’s own actions directly — address assignments, database updates, and pool activity — which is the more direct tool when the question is specifically “is the server processing requests correctly,” rather than “is the traffic arriving at all.”

Always disable debugging once you’re doneno debug ip dhcp server events or undebug all — since debug output left running adds ongoing CPU load that matters on a production device.

Worked Scenario: A Branch VLAN Suddenly Stops Getting Addresses

This is a composite scenario built to walk through the troubleshooting order in practice, not a specific reported incident.

A branch office has three VLANs, all served by a single central DHCP server on VLAN 10. VLAN 20 and VLAN 30 clients suddenly stop receiving addresses, while VLAN 10 clients continue working normally.

Step 1 — physical connectivity. show interfaces on the affected VLANs’ SVIs shows both up/up. Ruled out.

Step 2 — confirm it’s actually DHCP. A test client on VLAN 20, configured with a static address in the correct range, reaches the rest of the network fine. Confirmed: this is a DHCP-specific problem, not general connectivity.

Step 3 — same subnet vs. relay. VLAN 10 (the server’s own subnet) still works, but VLAN 20 and VLAN 30 — both requiring relay — don’t. This pattern points directly at relay, not the server itself, since a genuinely broken server would affect all three VLANs equally, including its own local subnet.

Step 4 — verify relay configuration. show running-config | include helper-address on the VLAN 20 and VLAN 30 SVIs shows… nothing. The helper-address lines are missing on both interfaces, despite being present and correct on a similar branch router configured a week earlier as a template.

Root cause: during a recent SVI recreation (the interfaces were removed and re-added as part of unrelated VLAN cleanup), the ip helper-address lines were never re-applied — recreating an interface in IOS doesn’t carry forward its previous configuration automatically. Adding ip helper-address 172.16.0.1 back to both SVIs resolves the issue immediately, confirmed with debug ip dhcp server events showing successful DORA exchanges completing for new client requests on both VLANs within seconds.

This is exactly the kind of failure the same-subnet-vs-relay split in Step 3 is built to catch quickly — without it, this could easily turn into an hour of checking DNS, DHCP pool exhaustion, and switch port configuration before anyone thought to check whether the interface recreation had silently dropped a one-line command.

Troubleshooting Quick Reference

SymptomCheck FirstLikely Cause
No address at all, same subnet as servershow interfaces, then service dhcp statusDowned interface, or DHCP service disabled globally
No address at all, different subnetshow running-config | include helper-addressMissing or misplaced ip helper-address
Static IP also fails to reach resourcesGeneral connectivity troubleshootingNot a DHCP problem — routing/switching issue elsewhere
Address assigned but conflicts with another deviceshow ip dhcp conflictStale lease reused after expiration and reassignment
Unsure if requests are reaching the routerACL + debug ip packet <acl-number>Confirms whether DHCP traffic is arriving at all
Server not responding to valid requestsdebug ip dhcp server eventsServer-side processing or pool exhaustion issue

FAQs

What’s the first thing to check when a DHCP client isn’t getting an address?

Physical connectivity — confirm the relevant interface is actually up with show interfaces. A downed interface produces the exact same symptom as a DHCP configuration problem, and it’s the fastest thing to rule out first.

How do I tell if a problem is actually caused by DHCP or something else?

Configure the client with a static IP in the correct subnet and test connectivity. If that also fails, the problem is broader network connectivity, not DHCP — fixing DHCP settings won’t help until the underlying connectivity issue is resolved.

What’s the most common cause of DHCP failing across subnets but working locally?

A missing or misplaced ip helper-address command. It needs to be configured on the interface facing the client’s subnet specifically — not the one facing the DHCP server.

How does a DHCP address conflict actually happen?

Usually when a client’s lease expires while it’s still connected, the server reassigns that address to a different client, and the original client later reboots and starts using its old cached address again without realizing the lease is gone.

How do I filter debug output to show only DHCP traffic?

Create an extended ACL permitting UDP ports 67 and 68, then run debug ip packet <acl-number> referencing that ACL. This limits the debug output to DHCP traffic specifically instead of flooding the console with everything crossing the interface.

Does no service dhcp only disable the DHCP server role?

No — it disables both the local DHCP server function and DHCP relay (ip helper-address) functionality on that router. A router with a correctly configured pool and helper address can still fail completely if this one setting is off.

Why does a client sometimes keep using an address after its lease has actually expired?

If the client doesn’t receive a response to its renewal attempts — whether the unicast attempt to its original server or the broadcast fallback to any server — it may continue using its last known address rather than dropping connectivity entirely, especially if it hasn’t yet detected that the lease has lapsed. This is exactly the behavior that produces the address-conflict scenario described above once the server reassigns that same address elsewhere.

Avatar Of Muhammad Khattak
Muhammad Khattak

Author

Routing and switching specialist, CCNA certified, with extensive experience in network configuration and troubleshooting. Covers OSPF, EIGRP, VLAN management, and advanced routing concepts.

Related Articles