Skip to content
MikroTik RouterOS Docs

IP Pools in RouterOS: A Complete Guide

RouterOS Version: 7.x+ Difficulty: Beginner Estimated Time: 15 minutes

IP Pools define ranges of IP addresses for dynamic allocation by RouterOS services. They act as address reservoirs—services draw addresses when clients connect and return them when clients disconnect.

Services that use IP pools:

  • DHCP Server - Dynamic IP assignment for network clients
  • PPP (PPPoE, PPTP, L2TP, SSTP) - VPN client addressing
  • Hotspot - Captive portal client addressing
  • User Manager - RADIUS-based address assignment

Key features:

  • Multiple non-contiguous ranges in a single pool
  • Pool chaining via next-pool for overflow handling
  • Consistent address assignment for returning clients
  • IPv6 prefix pools for DHCPv6 prefix delegation
MenuPurpose
/ip poolIPv4 address pools
/ip pool usedCurrently assigned addresses
/ipv6 poolIPv6 prefix pools
/ipv6 pool usedCurrently assigned prefixes
PropertyTypeDefaultDescription
namestring-Unique pool identifier (required)
rangesIP range list-Address ranges: from-to,from-to,... (required)
next-poolstringnoneFallback pool when current exhausted
commentstring-Descriptive comment
PropertyTypeDefaultDescription
namestring-Pool identifier (required)
prefixIPv6 prefix-Base prefix to allocate from (required)
prefix-lengthinteger-Size of allocations (required)
commentstring-Descriptive comment

Create a pool for DHCP server:

# Create pool (exclude router IP .1)
/ip pool add name=dhcp-pool ranges=192.168.88.10-192.168.88.254
# Verify
/ip pool print

Important: Never include the router’s own IP in the pool range!

Reserve some addresses while using others:

# IPs .1-.9 reserved for servers, .100-.149 for printers
/ip pool add name=office-pool ranges=10.0.0.10-10.0.0.99,10.0.0.150-10.0.0.254

Automatically use secondary pool when primary exhausts:

# Primary pool
/ip pool add name=pool-primary ranges=192.168.1.10-192.168.1.100
# Overflow pool
/ip pool add name=pool-overflow ranges=192.168.1.150-192.168.1.200
# Chain them
/ip pool set pool-primary next-pool=pool-overflow

When pool-primary is full, new requests automatically get addresses from pool-overflow.

For PPPoE, L2TP, or other PPP-based VPNs:

# Create pool
/ip pool add name=vpn-pool ranges=10.10.10.2-10.10.10.254
# Create PPP profile using pool
/ppp profile add name=vpn-profile local-address=10.10.10.1 remote-address=vpn-pool

Note: PPP assigns addresses from the END of the range first (working downward).

For captive portal clients:

# Create pool
/ip pool add name=hotspot-pool ranges=10.5.50.2-10.5.50.254
# Use in hotspot
/ip hotspot add name=hs1 interface=wlan1 address-pool=hotspot-pool

For DHCPv6 prefix delegation:

# Allocate /64 prefixes from a /56 block
/ipv6 pool add name=pd-pool prefix=2001:db8:1000::/56 prefix-length=64
# Use with DHCPv6 server
/ipv6 dhcp-server add name=dhcp6 interface=bridge address-pool=pd-pool

This creates 256 available /64 prefixes for clients.

Complete DHCP setup:

# Step 1: Create pool
/ip pool add name=lan-pool ranges=192.168.88.10-192.168.88.254
# Step 2: Configure network options
/ip dhcp-server network add address=192.168.88.0/24 gateway=192.168.88.1 \
dns-server=192.168.88.1
# Step 3: Create DHCP server
/ip dhcp-server add name=dhcp-lan interface=bridge address-pool=lan-pool disabled=no
# Step 4: Verify
/ip dhcp-server print
# View all pools with usage
/ip pool print
# View addresses currently in use
/ip pool used print
# Count addresses in use
/ip pool used print count-only
# Find specific client by MAC
/ip pool used print where info~"00:11:22:33:44:55"

RouterOS tries to give the same IP to returning clients based on:

ServiceClient Identifier
DHCPMAC address
PPPUsername
HotspotMAC address

This enables predictable addressing without static reservations.

ServiceOrder
DHCPFirst available (ascending)
PPPLast available (descending)

PPP’s reverse order is by design and differs from other vendors.

Client Request
┌─────────────────┐
│ Primary Pool │───▶ Address available? ─── Yes ──▶ Assign
│ (pool-primary) │ │
└─────────────────┘ │ No
┌─────────────────┐
│ Overflow Pool │───▶ Assign from here
│ (pool-overflow)│
└─────────────────┘

Problem 1: Router’s IP Assigned to Client

Section titled “Problem 1: Router’s IP Assigned to Client”

Symptom: Network failure; router loses connectivity.

Cause: Pool range includes router’s interface IP.

Solution:

# Wrong: includes .1
/ip pool add name=bad-pool ranges=192.168.88.1-192.168.88.254
# Correct: excludes .1
/ip pool add name=good-pool ranges=192.168.88.10-192.168.88.254

Problem 2: DHCP Says “Pool Empty” But Addresses Available

Section titled “Problem 2: DHCP Says “Pool Empty” But Addresses Available”

Causes:

  • Client-ID variations causing duplicate entries
  • Infrastructure issues (faulty hardware causing reconnections)

Solutions:

# Limit one IP per MAC
/ip dhcp-server set [find] client-mac-limit=1
# Check for duplicates
/ip pool used print
# Shorten lease time to recycle faster
/ip dhcp-server set [find] lease-time=1h

Problem 3: Client Gets /32 Netmask and No Gateway

Section titled “Problem 3: Client Gets /32 Netmask and No Gateway”

Cause: Pool addresses don’t match any DHCP network entry.

Solution:

# Ensure network covers pool range
/ip dhcp-server network add address=192.168.88.0/24 gateway=192.168.88.1
# Verify pool is within network
/ip pool print
# Pool range must fall within 192.168.88.0/24

Causes:

  • Typo in pool name
  • Pools in different subnets (for DHCP)

Solution:

# Verify pool names match exactly (case-sensitive)
/ip pool print
# For DHCP, all chained pools must be in same subnet

Problem 5: Hotspot Pool Not Releasing Addresses

Section titled “Problem 5: Hotspot Pool Not Releasing Addresses”

Cause: No idle timeout configured.

Solution:

# Configure idle timeout
/ip hotspot set [find] idle-timeout=5m

Cause: Stale sessions not terminating cleanly.

Solution:

# Check actual active sessions
/ppp active print
# Configure session timeout in profile
/ppp profile set [find] session-timeout=1d

Problem 7: IPv6 Pool Exhausted After One Assignment

Section titled “Problem 7: IPv6 Pool Exhausted After One Assignment”

Cause: prefix-length not set correctly.

Solution:

# Wrong: no prefix-length means one allocation
# Correct: set prefix-length to desired size
/ipv6 pool set [find] prefix-length=64
Network SizePool RangeUsable Addresses
/24.10-.254~244
/232 × /24~509
/224 × /24~1021
/2016 × /24~4093

Formula: Usable = 2^(32-prefix) - 3 (network, broadcast, gateway)

Tip: Leave headroom for growth. A pool at 80%+ capacity may need expansion.

# List all pools
/ip pool print
# Check pool utilization
/ip pool print
# Compare "Total" vs addresses in use
# View active assignments
/ip pool used print
# View specific pool usage
/ip pool used print where pool=dhcp-pool
# Count addresses in use
/ip pool used print count-only
# Find client by MAC
/ip pool used print where info~"AA:BB:CC"
# Check IPv6 pools
/ipv6 pool print
/ipv6 pool used print
/ip dhcp-server add address-pool=my-pool ...
/ppp profile add remote-address=my-pool ...
/ip hotspot add address-pool=my-pool ...

RADIUS can specify pool per-user using Framed-Pool attribute.

  • DHCP Server - primary pool consumer for automatic IP distribution
  • DHCP Relay - centralized DHCP requires pools for each relay subnet
  • PPP Profile (/ppp profile) - uses pools for VPN clients
  • Hotspot Setup - uses pools for captive portal
  • DHCPv6 Server - uses IPv6 pools
  • Pool names are case-sensitive - Pool1pool1
  • Ranges cannot overlap with other pools or static addresses
  • Deleting pool with active assignments orphans those addresses
  • DHCP pools must match network entries - otherwise clients get /32 netmask
  • PPP assigns from end first - by design, not a bug
  • next-pool must be same subnet for DHCP (different subnets won’t route)
  • IPv6 prefix-length must be ≥ pool prefix - can’t allocate larger than source

IP Pools are address reservoirs for RouterOS services:

  1. Create pool with appropriate ranges (exclude router IPs)
  2. Configure service to use pool by name
  3. Monitor usage with /ip pool used print
  4. Chain pools with next-pool for overflow handling

Key points:

  • Never include router’s own IP in pool range
  • DHCP needs matching /ip dhcp-server network entry
  • PPP assigns from end of range (descending)
  • Pool names are case-sensitive
  • Use next-pool for automatic overflow to secondary pool