Addressing & Services
Set up a DHCP server on an interface
Hand out addresses, gateway, and DNS to clients on a subnet.
Why it differs: MikroTik splits this into three separate objects you must create in the right order, which is why its DHCP setup fails more often than anyone else's.
Router / switch / AP
MikroTik RouterOS
GUI or CLIWritten against RouterOS 7.x
Steps
- Easiest path — the wizard: IP → DHCP Server → DHCP Setup button, pick the interface, accept the prompts.
- Manual, in order:
/ip pool add name=pool10 ranges=192.168.10.100-192.168.10.200 /ip dhcp-server add name=dhcp10 interface=vlan10 address-pool=pool10 lease-time=1d disabled=no/ip dhcp-server network add address=192.168.10.0/24 gateway=192.168.10.1 dns-server=192.168.10.1- Verify:
/ip dhcp-server lease print
Gotchas & notes
- Three objects are required: pool, server, and network. Skipping the
network entry is the classic failure — clients get an IP but no gateway or DNS, so 'DHCP works but there is no internet'. - A new DHCP server is created disabled when added manually. Set
disabled=no or flip the checkbox; a missing lease with no log entry usually means this. - The interface must already have the IP address configured, and it must be the bridge (not a bridge member port) in a switched setup.
- Use the DHCP Setup wizard for a new subnet — it creates all three objects consistently, then edit afterwards.
- Check for a competing DHCP server on the segment with
/ip dhcp-server alert add interface=vlan10 — it logs rogue servers.
Vendor documentation ↗NGFW / router
Fortinet FortiGate (FortiOS)
GUI or CLIWritten against FortiOS 7.2 – 7.6
Steps
- GUI: Network → Interfaces → edit the interface → enable DHCP Server → set the address range, netmask, default gateway (
Same as Interface IP), and DNS. - CLI:
config system dhcp server → edit 0 → set interface "vlan10" → set default-gateway 192.168.10.1 → set netmask 255.255.255.0 → config ip-range → edit 1 → set start-ip 192.168.10.100 → set end-ip 192.168.10.200 → next → end → next → end - Verify: Dashboard → DHCP monitor, or
execute dhcp lease-list
Gotchas & notes
- DHCP is configured inside the interface settings, not in a separate services menu — people hunt for a DHCP section and do not find one.
- The DNS setting defaults to *Same as System DNS*; if the FortiGate's own DNS is unset or wrong, every client inherits the problem. Check Network → DNS.
execute dhcp lease-list is the fast CLI check, and execute dhcp lease-clear <mac> releases a stuck lease.- DHCP relay is a different mode on the same interface — you cannot have server and relay simultaneously.
Vendor documentation ↗Controller-managed gateway / switch / AP
Ubiquiti UniFi Network
GUIWritten against UniFi Network 8.x – 9.x (UDM / UDM-Pro / UXG)
Steps
- Settings → Networks → <network> — DHCP is part of the network definition.
- Set *DHCP Mode*
DHCP Server, the *DHCP Range*, *Lease Time*, and optionally *DHCP Name Server* and *DHCP DNS Search Domain*. - Save; the gateway provisions.
Gotchas & notes
- Creating a network enables DHCP by default with an auto-chosen range — convenient, but it means a new VLAN starts serving addresses before you have thought about it.
- The DHCP range must be inside the network's subnet and must not overlap your static addressing. UniFi will accept a range that collides with devices you assigned by hand.
- *DHCP Name Server* defaults to
Auto (the gateway). Point it at your own DNS server explicitly if you run internal DNS, or name resolution for internal hosts silently fails. - Advanced options (option 43, 66, custom options) are under the network's advanced DHCP settings and vary by controller version.
Vendor documentation ↗Router / switch
Cisco IOS / IOS-XE
CLIWritten against IOS-XE 17.x (Catalyst 9000, ISR 1000/4000)
Steps
- Exclude the addresses you use statically first:
ip dhcp excluded-address 192.168.10.1 192.168.10.99 ip dhcp pool VLAN10 → network 192.168.10.0 255.255.255.0 → default-router 192.168.10.1 → dns-server 192.168.10.1 → lease 1- Save:
copy running-config startup-config - Verify:
show ip dhcp binding, show ip dhcp pool
Gotchas & notes
ip dhcp excluded-address is a global command, not part of the pool, and it is easy to forget. Without it IOS will happily lease out your gateway and server addresses.- The pool covers the whole
network statement minus exclusions — there is no start/end range concept like other vendors. service dhcp must be enabled (it is by default); no service dhcp somewhere in the config silently disables everything.- Clear a stuck binding with
clear ip dhcp binding <ip> or clear ip dhcp binding *. - For clients on a different subnet, configure
ip helper-address <dhcp-server> on their SVI instead of a local pool.
Vendor documentation ↗NGFW
Palo Alto Networks PAN-OS
GUI or CLIWritten against PAN-OS 10.2 / 11.x
Steps
- Network → DHCP → DHCP Server → Add.
- Pick the *Interface*, set *Mode*
enabled (or auto), add the IP *Pool*, and set the options: Gateway, Subnet Mask, Primary/Secondary DNS. - Commit.
- Verify: Network → DHCP → DHCP Server shows leases, or CLI
show dhcp server lease interface all
Gotchas & notes
- *Mode*
auto probes for an existing DHCP server on the segment and disables itself if it finds one. That is a useful safety feature and also a confusing one — a server in auto mode that never hands out addresses is doing this deliberately. - The Inheritance Source option can pull DNS and other options from a DHCP client interface (typically the WAN), which is handy for small branch setups.
- The interface must be a Layer 3 interface with an IP, in a zone, in a virtual router — DHCP will not save otherwise.
- Needs a Commit like everything else on the platform.
Vendor documentation ↗Router / firewall (FreeBSD)
Netgate pfSense CE
GUIWritten against pfSense CE 2.7 / Plus 24.x
Steps
- Services → DHCP Server → select the interface tab → tick *Enable DHCP server on this interface*.
- Set the *Range* (from/to), and optionally DNS servers, gateway, domain name, and lease times.
- Save.
- Verify: Status → DHCP Leases.
Changed across versions
- 2.7.0 and earlierISC DHCP only — it's the sole backend, no chooser exists.
- 2.7.1+Kea is available as an opt-in preview alongside ISC DHCP (pick the backend in System → Advanced → Networking). ISC DHCP is EOL upstream and Kea is slated to become the default in a future release, but as of this writing neither the switchover nor an ISC removal date has landed — some advanced options and static-mapping behaviors still differ between the two, so check which one is active before assuming a setting applies.
Gotchas & notes
- The interface must have a static IP; pfSense hides the DHCP server tab for any interface set to DHCP client, which looks like the feature is missing.
- Leave *DNS servers* blank to hand out the firewall's own resolver (the usual correct choice when DNS Resolver is enabled) — filling it in with public DNS bypasses your local resolver and breaks internal name resolution.
- The range must not include the interface IP; pfSense validates this and will refuse to save.
- Status → DHCP Leases has a handy button to convert an active lease into a static mapping.
Vendor documentation ↗NGFW
SonicWall (SonicOS)
GUIWritten against SonicOS 7.3.x (Gen7 TZ/NSa/NSsp; current General Release line is 7.3.2/7.3.3 — note Gen8 TZ80/TZ280+/NSa 2800+ hardware instead runs the separate SonicOS 8.x line)
Steps
- MANAGE → Network → DHCP Server (this lives under a flat Network → DHCP Server menu in the older SonicOS 6.5 UI).
- On the Dynamic DHCP Server tab, click Add.
- General settings: pick the Interface the scope serves (e.g., X1 or a VLAN sub-interface), then set Range Start, Range End, and Lease Time.
- Set the Gateway (usually defaults to the interface's own IP) and, if you want clients to get something other than the firewall's own resolvers, fill in DNS Server 1/2/3 on the same scope.
- Save, then confirm the new scope shows as Enabled in the scope list.
- Verify: same page's lease table (or the Current DHCP Leases tab) fills in as clients pick up addresses.
Changed across versions
- 7.0SonicOS 7 replaced the classic 6.5 left-hand navigation with the MONITOR / INVESTIGATE / MANAGE tab structure; DHCP Server moved from a top-level Network menu item into MANAGE → Network → DHCP Server.
Gotchas & notes
- There is no E-CLI equivalent for creating or editing a DHCP scope — SonicWall keeps the CLI to bootstrap/network-basics and diagnostics, and DHCP server config is GUI-only.
- Unlike MikroTik or pfSense, which split pool + network + server into separate objects, SonicOS bundles range, gateway, and DNS into one scope tied directly to an interface — fewer moving parts, but people coming from a split model go looking for a separate 'pool' object that doesn't exist here.
- The interface must already have a static IP in the target subnet before you create the scope; scopes created against an interface without one will sit inactive with no obvious error.
- If you leave the scope's DNS fields blank, clients inherit whatever the firewall itself uses (set in Network → DNS) — not a public resolver by default, which trips people up if the box's own DNS was never configured.
Vendor documentation ↗Cloud-managed business routers, switches & Orbi Pro/WiFi APs
NETGEAR Insight (Cloud Management Platform)
GUI or CLIWritten against Insight Cloud Portal/App 10.0.x (cloud mgmt); switch-side CLI varies by line — Smart Switch "Lite CLI" firmware 6.0.10.5+/7.0.9.5+, fully-managed M4200/M4300 CLI 12.0.11.x
Steps
- Router / Orbi Pro AP (the only devices that actually serve client subnets): Insight portal or app → Locations → [location] → Devices → [router or Orbi Pro] → LAN Settings (or the VLAN tab if you're running multiple VLANs) → toggle DHCP Server on for that subnet → set Starting IP, Ending IP, Subnet Mask, Lease Time, Gateway IP (defaults to the device's own LAN IP), and the DNS Server(s) to hand to clients.
- There is no CLI path on the router/Orbi Pro side — no console port, no SSH, nothing. If the toggle isn't in the Insight GUI, the feature doesn't exist on that device, full stop.
- Smart Switches: don't run a DHCP server for client subnets in normal deployments — that's the router's job. Neither the switch web GUI nor the Lite CLI exposes a 'DHCP server' object.
- Fully-managed M4200/M4300 (Layer-3 capable) only: local switch GUI → System → IP Addressing/Routing menu (naming varies by model) → DHCP Server → Pool Configuration → create a pool, bind it to a VLAN interface, set network/mask, default-router, dns-server, lease time. CLI equivalent over console/SSH:
configure → ip dhcp pool <name> → network <subnet> <mask> → default-router <gateway> → dns-server <ip1> <ip2> → exit, then bring the VLAN interface up with ip address <ip> <mask> and enable the DHCP service. Treat exact sub-keywords as firmware-branch-dependent — confirm with ? context help or show running-config after applying.
Gotchas & notes
- The single biggest trap coming from a single-OS vendor: 'NETGEAR' isn't one CLI or one GUI. On a router or Orbi Pro AP, DHCP server config lives ONLY in the Insight cloud portal/app — there's no local fallback if Insight is unreachable or the account is locked out.
- Smart Switches don't do DHCP server at all in typical use — if a Cisco/Aruba habit says 'just SSH in and configure the pool,' that instinct doesn't map onto this tier.
- Only the M4200/M4300 line can act as a DHCP server, and only because it's a real L3 switch with the IOS-like CLI — everything below that tier is L2-only for this purpose.
- Insight's DHCP Server toggle is per-VLAN/subnet, not a standalone top-level object — if you don't see it, you're probably looking at the wrong VLAN tab.
Vendor documentation ↗