Contents

Introduction

The General Pool for Automatic Bindings

Ping-check

DHCP Remember

Fixed DHCP Bindings

DHCP Database Backup

Verification

Troubleshooting

For More Information

Introduction

This article provides configuration guidelines for operating a Cisco IOS® Classic / IOS XE IPv4 DHCP server, with a focus on providing consistent, reliable servic.

The General Pool for Automatic Bindings

Configure a general pool for each subnet that requires DHCP service. The general pool provides IP address and other information to non-server clients, such as guests, wireless phones.  In this example, DHCP service is provided for a subnet 10.10.10.0 /24, with 62 addresses reserved for static bindings, and the remaining 193 addresses in a pool (10.10.10.63 through 10.10.10.254.)  The lease duration is 6 hours, and Cisco Umbrella DNS server addresses are provided.

router(config)#ip dhcp excluded-address 10.10.10.1 10.10.10.62

ip dhcp pool BIGPOOL

network 10.10.10.0 255.255.255.0

default-router 10.10.10.1

dns-server 208.67.222.222 208.67.220.220

lease 0 6

Note: The DHCP server must have a layer 3 interface (such as an SVI) in the subnet, for it to see the DHCP traffic.

Note: If the Cisco IOS system providing the DHCP service is itself a DHCP client for its network uplink, then you can use the “import all” command under the pool, to bring in the DNS server information, and other options.

Ping-check

With ping-check configured, the DHCP server, before OFFERing a new DHCP address to a client, will attempt to ping that address, to see whether it’s in use by another device. In this example, the server will send up to three ping packets, with a 400 millisecond timeout for each, before sending a new OFFER. This will impose a 1.2 second delay between the DISCOVER and OFFER, so in highly time-critical applications, where address assignment is tightly controlled, you may want to disable this with “ip dhcp ping packets 0”, at increased risk of having multiple devices trying to use the same IP address.

router(config)#ip dhcp ping packets 3

router(config)#ip dhcp ping timeout 400

Note: ping-check caused the DHCP server to suffer from scaling problems prior to the commits of Cisco bug ID CSCdp35267 in Cisco IOS Classic 15.0(1)M and Cisco bug ID CSCua63083 in Cisco IOS XE 16.1.1. Specifically, the Cisco IOSXE 3.xE “Nova” software in older Catalyst switches does not have the scaling enhancement, so those platforms should not be used for large-scale DHCP service.

DHCP Remember

router(config)#ip dhcp remember

With DHCP remember, after a lease from a pool has expired, the address goes back into the pool, but the server “remembers” the last time it was used, and the last client ID / hardware address to which that IP address was assigned. The address will not be reassigned to a different client until the entry is the least recently used address in the pool. This avoids conflicts and also serves usefully as a historical record of DHCP clients.

The remembered bindings in the pool can be seen with the command “show ip dhcp binding [remembered]”. Example:

router#show ip dhcp binding remembered

Remembered bindings from all pools not associated with VRF:

IP address      Client-ID/              Lease expiration        Type       State      Interface

Hardware address/

User name

10.10.10.123    0146.81df.f153.fe       Jun 27 2026 01:47 PM    Remembered Terminated Vlan102

10.10.10.124    01e2.2e0b.baf5.4a       Jul 30 2026 07:50 AM    Remembered Terminated Vlan102

10.10.10.125    0146.8f75.339a.66       Jul 25 2026 06:17 AM    Remembered Terminated Vlan102

Fixed DHCP Bindings

For infrastructure equipment, such as LAN switches and access points, it’s good practice to assign fixed DHCP bindings. Even if the equipment has its IP addresses configured statically, it’s still good to set a static DHCP binding for it, if only to ensure that that address not be used by a different DHCP client.

First, configure an excluded address range for the fixed bindings. All fixed bindings as well as any static address assignments should go into this range.

For each device with a fixed binding, configure a DHCP pool entry like this:

router(config)#ip dhcp pool AARON-X1

host 10.10.10.42 255.255.255.0

client-identifier 01e2.2e0b.baf5.4a

For most devices, the client-identifier will be its interface MAC address, preceded by a 0x01 octet. However, some devices will request a DHCP addresses using only the hardware-address:

router(config)#ip dhcp pool BedroomEchoDot

host 10.10.10.24 255.255.255.0

hardware-address 66.db.f5b3.e85f

To figure out what client-identifier a given client has, you can let it pull an address from the general pool, find out what address it has, and then look in the pool’s binding table:

router#show ip dhcp binding | include Automatic

10.10.10.137 0196.8eac.8963.b4 Aug 04 2026 05:03 PM Automatic

Then delete the automatic binding, so that you can configure the static binding:

router#clear ip dhcp binding 10.10.10.137

Client-specific DHCP options may be configured under the static binding. If the address in the static binding is in the same subnet as a “network” scope in a general pool, then the options from that pool will be provided to the static binding’s client.

DHCP Database Backup

For reliable DHCP service across server reloads, it’s very important to back up the dynamic bindings to a database file. Otherwise, after the reload, the server will be unaware of the existing leases that it had handed out, and therefore will likely assign IP addresses that are already in use by other clients. This is so even if ping-check is in effect, as some devices do not reply to ICMP ECHO requests.

router(config)#ip dhcp database flash:/dhcp-bindings.db

When the DHCP server restarts, it will read the DHCP bindings from the backup file.

The DHCP database may be stored on a network server, and can be moved from one DHCP server to another, for a seamless migration, but such uses are outside the scope of this article.

Verification

To see how many bindings are assigned/available in a given pool:

router#show ip dhcp pool BIGPOOL

Pool BIGPOOL :

Utilization mark (high/low) : 100 / 0

Subnet size (first/next) : 0 / 0

Total addresses : 254

Leased addresses : 61

Excluded addresses : 62

Remembered addresses : 77

Pending event : none

1 subnet is currently in the pool :

Current index IP address range Leased/Excluded/Total

10.10.10.160 10.10.10.1 - 10.10.10.254 61 / 62 / 254

The number of available addresses will be the Total – (Leased + Excluded), so 123 in this case (254 – (61+62)).

Troubleshooting

These commands can be used to debug the Cisco IOS DHCP server:

router#debug ip dhcp server packet

router#debug ip dhcp server events

A packet capture of the DHCP transaction can be helpful, for example by running a SPAN or Embedded Packet Capture.

See: Troubleshoot DHCP in Enterprise Networks.

For More Information

See the Configuring the Cisco IOS XE DHCP Server chapter in the IOS XE IP Addressing Configuration Guide.