Home CCNA Configuring a Basic DHCPv4 Server on a Cisco Router
CCNA

Configuring a Basic DHCPv4 Server on a Cisco Router

Four-Step Vertical Diagram Showing The Dhcpv4 Server Configuration Sequence: Exclude Addresses, Create Pool, Set Network And Gateway, Add Optional Parameters

A Cisco router doesn’t need a dedicated server to hand out IP addresses — IOS can run the DHCP server role itself, assigning and managing addresses from a defined pool to clients on the LAN without any separate hardware or software required. This is the “Easy IP” setup common in small offices and labs, and it’s built from a small, predictable set of commands.

This guide walks through excluding addresses, creating and configuring a pool, a complete worked example, and every verification command worth knowing — including two mismatches worth watching for that show up often in real configs.

Step 1: Excluding IPv4 Addresses

By default, a DHCPv4 server will assign every address in its pool — including ones you’ve already assigned manually to routers, servers, printers, or anything else with a static configuration. Excluding those addresses first prevents the server from ever offering them to a DHCP client and creating a conflict.

Router(config)# ip dhcp excluded-address <first-ip> <last-ip>

A single address or a range works the same way — just repeat the first address for both arguments to exclude only one. Anything with a manually configured address on the subnet — the router’s own interface, static servers, printers — should be excluded before the pool is ever used.

Step 2: Creating a DHCPv4 Pool

Router(config)# ip dhcp pool <pool-name>
Router(dhcp-config)#

This creates the pool and drops you into DHCP pool configuration mode, indicated by the (dhcp-config)# prompt. Use a descriptive name — LAN, SALES-VLAN10, whatever actually identifies what the pool is for — since a router with several pools quickly becomes hard to manage with generic names.

Step 3: Configuring Pool Parameters

Two parameters are required; the rest are optional but commonly configured.

Required:

Router(dhcp-config)# network <network-address> <subnet-mask>
Router(dhcp-config)# default-router <gateway-address>

network attaches the actual address range to the pool — and needs the subnet mask included, not just the network address alone, or the pool won’t know where the address range actually ends. default-router sets the gateway address clients receive, typically the router’s own LAN-facing interface closest to the clients on that subnet. One gateway is usual, but multiple can be configured for redundancy.

Optional:

Router(dhcp-config)# dns-server <dns-ip-address> [second-dns-ip]
Router(dhcp-config)# domain-name <name>
Router(dhcp-config)# lease {days [hours] [minutes] | infinite}
Router(dhcp-config)# netbios-name-server <server-ip-address>

lease sets how long a client keeps an address before needing to renew — lease 0 12 for a 12-hour lease, lease 7 for seven days, or lease infinite for no expiration at all. Shorter leases are common in labs specifically because they make renewal behavior observable quickly; production networks more often use several days.

Sizing a Pool Correctly

It’s easy to configure a pool that technically works but wastes addresses or runs out sooner than expected. Worth working through the actual numbers rather than guessing.

Shrinking Bar Diagram Showing How A /24 Network'S 256 Total Addresses Reduce To 254 Usable And Then To 244 Actually Available After Excluding 10 Addresses
Every Excluded Address Comes Out Of The 254 Usable Addresses, Not In Addition To Them.

A /24 network gives 256 total addresses. Subtract the network address and broadcast address — always unusable — and a /24 starts at 254 usable addresses, which is exactly what show ip dhcp pool reports as “Total addresses” in the example above. Every excluded address comes out of that 254, not in addition to it: excluding ten addresses for static devices leaves 244 actually available to lease, not 254.

This matters most when planning a pool for a subnet that also needs static addresses for infrastructure — printers, access points, a handful of servers. Reserve those addresses at one end of the range (low addresses like .1–.10, or high addresses like .245–.254 are both common conventions), exclude the whole block up front, and size the subnet itself with enough headroom for both the static reservations and realistic future DHCP growth — not just today’s client count.

Full Worked Example

Router0 acts as the DHCPv4 server for the 192.168.1.0/24 LAN, with its own gateway address (192.168.1.1) and nine addresses reserved above it for static devices:

Router0> enable
Router0# configure terminal
Router0(config)# ip dhcp excluded-address 192.168.1.1 192.168.1.10
Router0(config)# ip dhcp pool LAN
Router0(dhcp-config)# network 192.168.1.0 255.255.255.0
Router0(dhcp-config)# default-router 192.168.1.1
Router0(dhcp-config)# dns-server 8.8.8.8 8.8.4.4
Router0(dhcp-config)# domain-name networkustad.com
Router0(dhcp-config)# lease 7
Router0(dhcp-config)# exit
Router0(config)# exit
Router0# write memory
Two-Column Reference Card Separating Required Dhcp Pool Commands (Network, Default-Router) From Optional Ones (Dns-Server, Domain-Name, Lease, Netbios-Name-Server)
Only Two Commands Are Required To Make A Dhcp Pool Functional — Everything Else Fills In The Extras Clients Can Use.

DHCPv4 service is enabled by default on most Cisco IOS images. If it’s ever been disabled, no service dhcp in global config mode turns it off — and service dhcp turns it back on.

Verifying the Configuration

From the Running Config

Router0# show running-config | begin dhcp
ip dhcp excluded-address 192.168.1.1 192.168.1.10
!
ip dhcp pool LAN
 network 192.168.1.0 255.255.255.0
 default-router 192.168.1.1

Piping through | begin dhcp skips straight to the relevant section instead of scrolling through the entire running config.

Address Bindings

Router0# show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address      Client-ID/Hardware address     Lease expiration     Type
192.168.1.11    0001.6310.AAC0                 --                   Automatic
192.168.1.12    00DD.FFB6.CD58                 --                   Automatic

This is the direct list of every IP-to-MAC binding the server currently has active — the fastest way to confirm clients are actually getting addresses, and which specific address each client landed on within the pool.

Message Statistics

Router0# show ip dhcp server statistics

Shows counters for DHCP messages sent and received — Discovers, Offers, Requests, Acks — useful for confirming the server is actually seeing client traffic at all, separate from whether individual leases succeeded.

Pool Details

Router0# show ip dhcp pool LAN
Pool LAN :
 Utilization mark (high/low)    : 100 / 0
 Subnet size (first/next)       : 0 / 0
 Total addresses                : 254
 Leased addresses               : 2
 Excluded addresses             : 10
 Pending event                  : none

 1 subnet is currently in the pool :
 Current index        IP address range                    Leased/Excluded/Total
 192.168.1.11         192.168.1.1 - 192.168.1.254          2 / 10 / 254

Note the excluded count here — 10 — matching the ten addresses (192.168.1.1 through 192.168.1.10) reserved in the excluded-address range configured earlier. It’s worth actually checking that these two numbers agree in a real router: if the pool’s “Excluded addresses” count doesn’t match what you configured, it usually means an exclusion command didn’t take effect the way you expected, or was entered after clients had already leased from that range.

From the Client Side

C:\>ipconfig /all

Ethernet adapter Local Area Connection:

   Physical Address. . . . . . . . . :  00-01-63-10-AA-C0
   IP Address. . . . . . . . . . . . :  192.168.1.11
   Subnet Mask . . . . . . . . . . . :  255.255.255.0
   Default Gateway . . . . . . . . . :  192.168.1.1
   DHCP Enabled. . . . . . . . . . . :  Yes
   DHCP Server . . . . . . . . . . . :  192.168.1.1
   DNS Servers . . . . . . . . . . . :  8.8.8.8
                                         8.8.4.4

If the client received an address, subnet mask, default gateway, and DNS servers all matching what the pool was configured to hand out, the server is working correctly end to end.

Scenario: Multiple Pools on One Router

A single router can host more than one DHCP pool at once — common when a router (or Layer 3 switch) serves several VLANs, each needing its own address range and gateway.

Router0(config)# ip dhcp excluded-address 192.168.10.1 192.168.10.10
Router0(config)# ip dhcp pool VLAN10-SALES
Router0(dhcp-config)# network 192.168.10.0 255.255.255.0
Router0(dhcp-config)# default-router 192.168.10.1
Router0(dhcp-config)# dns-server 8.8.8.8
Router0(dhcp-config)# exit

Router0(config)# ip dhcp excluded-address 192.168.20.1 192.168.20.10
Router0(config)# ip dhcp pool VLAN20-ENGINEERING
Router0(dhcp-config)# network 192.168.20.0 255.255.255.0
Router0(dhcp-config)# default-router 192.168.20.1
Router0(dhcp-config)# dns-server 8.8.8.8
Router0(dhcp-config)# exit

IOS matches an incoming DHCP request to the correct pool automatically, based on which subnet the request came from — either the receiving interface’s own address (for a directly connected client) or the giaddr field stamped by a relay agent (for a client reached through DHCP relay on a different subnet). There’s no need to manually map interfaces to pools; the subnet defined in each pool’s network command handles that matching on its own.

show ip dhcp pool without a pool name lists every pool configured on the router at once — a fast way to confirm all of them are sized and excluded correctly, rather than checking each one individually.

Common Mistakes Worth Checking For

Beyond the table below, a few habits catch most real-world DHCP server problems before they become client complaints. Always configure exclusions before creating the pool, not after — a pool that’s already been active for even a few minutes can hand out an address you meant to reserve, and that address won’t clear itself once the exclusion is added retroactively. Check show ip dhcp pool after any configuration change, not just when something looks broken — catching a mismatched exclusion count immediately is far easier than tracing it back after several clients have already leased from the wrong range. And when a pool serves a subnet that also has static infrastructure, document the reserved range somewhere outside the router configuration itself — a comment in a network diagram, a shared spreadsheet, anything that survives longer than institutional memory — since exclusions that make sense to whoever configured them originally are easy to misinterpret months later.

SymptomLikely CauseFix
network command rejected or pool serves wrong rangeSubnet mask omitted from the network commandAlways include the mask — network 192.168.1.0 255.255.255.0, not just the network address alone
Excluded count doesn’t match what was configuredExclusion added after clients already leased addresses in that range, or a typo in the rangeCompare show ip dhcp pool output against the actual ip dhcp excluded-address line in the running config
Router hands out its own gateway address to a clientip dhcp excluded-address missing or configured after the pool was already activeConfigure exclusions before creating the pool, covering the router’s own interface at minimum
Client gets no address at allDHCP service disabled, or pool exhaustedCheck service dhcp is active and show ip dhcp pool for remaining available addresses

FAQs

What are the steps to configure a DHCPv4 server on a Cisco router?

Exclude any manually-assigned addresses with ip dhcp excluded-address, create a pool with ip dhcp pool <name>, configure the required network (with subnet mask) and default-router commands, then optionally add dns-server, domain-name, and lease. Verify with show ip dhcp binding.

How do I exclude IP addresses from a DHCPv4 pool?

Use ip dhcp excluded-address <first-ip> <last-ip> in global configuration mode, entered before creating the pool. This covers a single address (repeat it for both arguments) or a full range.

What commands verify DHCPv4 configuration on a Cisco router?

show ip dhcp binding for active leases, show ip dhcp pool <name> for pool utilization and exclusion counts, show running-config | begin dhcp for the raw configuration, and show ip dhcp server statistics for message counters.

How can I verify DHCPv4 settings from a client computer?

Run ipconfig /all on a Windows client and confirm the IP address, subnet mask, default gateway, and DNS servers all match what the server’s pool is configured to hand out — this confirms the full exchange completed successfully, not just that some address showed up.

Why does the network command need a subnet mask?

Without it, the pool has no reliable way to know where the address range actually ends — a network command with only the network address risks defaulting to an incorrect classful mask rather than the subnet actually in use. Always pair network with the explicit subnet mask.

What’s the fastest way to confirm exclusions are actually working as configured?

Compare show ip dhcp pool <name>‘s “Excluded addresses” count against the actual range in ip dhcp excluded-address. If the numbers don’t match, something in the exclusion configuration isn’t taking effect the way it was intended.

Can one router run DHCP pools for more than one VLAN at once?

Yes — a router or Layer 3 switch can host as many pools as needed, each with its own network command defining a different subnet. IOS automatically matches an incoming request to the correct pool based on which subnet it originated from, whether that’s a directly connected interface or a request arriving through DHCP relay from elsewhere.

About This Content

Author Expertise: 10 years of experience in Enterprise network architecture, routing and switching, IPv4/IPv6 management, network automation, and security fundamentals.. Certified in: CCNP, CCNA
Avatar Of Asad Ijaz
Asad Ijaz

Editor & Founder

Lead Networking Architect and Editor at NetworkUstad. CCNP and CCNA certified, with 10+ years of experience in enterprise network design, implementation, and troubleshooting. Writes practical tutorials on routing, IPv4 management, network automation, and security fundamentals.

Related Articles