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.

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

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.
| Symptom | Likely Cause | Fix |
|---|---|---|
network command rejected or pool serves wrong range | Subnet mask omitted from the network command | Always 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 configured | Exclusion added after clients already leased addresses in that range, or a typo in the range | Compare 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 client | ip dhcp excluded-address missing or configured after the pool was already active | Configure exclusions before creating the pool, covering the router’s own interface at minimum |
| Client gets no address at all | DHCP service disabled, or pool exhausted | Check 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.