How To

Configure Cisco Dynamic ARP Inspection (DAI)

ARP has no way to verify that a reply is honest. A host asks “who has 192.168.10.1?” and believes whatever answer comes back first, so an attacker on the same VLAN can answer with its own MAC, plant itself as the gateway in every victim’s ARP cache, and quietly read or alter their traffic. That attack is ARP spoofing, and dynamic ARP inspection is how a Cisco switch stops it.

Original content from computingforgeeks.com - post 169504

Dynamic ARP inspection, or DAI, intercepts every ARP packet on an untrusted port and checks the sender’s IP and MAC against the DHCP snooping binding table. If the pair matches a real lease, the ARP is forwarded. If it does not, the switch drops it and logs the violation. Because it leans on that table, DAI only works once DHCP snooping is already in place.

This guide enables DAI on a switch that already runs DHCP snooping, trusts the uplink, then watches a legitimate DHCP client pass while a statically addressed host with no binding is blocked.

Tested June 2026 on Cisco IOS 15.2, with a static host on an untrusted port to trigger a real denial.

How dynamic ARP inspection works

DAI sorts ports into trusted and untrusted, the same split DHCP snooping uses. ARP on a trusted port is forwarded without a second look, so uplinks toward the rest of the network and the link to the DHCP server are trusted. ARP on an untrusted port is held up and validated: the switch reads the sender IP and sender MAC out of the ARP packet and looks for a binding that matches that pair on that VLAN.

A device that leased its address through DHCP has a binding, so its ARP sails through. A device with no binding does not, and that is the important case. An attacker spoofing the gateway’s IP has no lease for it, so the forged ARP is dropped before it can poison a single cache. The same logic also blocks a host that simply uses a static address, which is why legitimate static devices like servers and printers need an explicit exception, covered at the end.

The lab topology

The lab reuses the DHCP snooping setup with one addition. SW1 runs snooping and DAI on VLAN 1, with Gi0/1 to the DHCP server trusted. A DHCP client sits on the untrusted Gi0/2, and a statically addressed host with no lease sits on the untrusted Gi0/3 to play the part of the spoofer.

DAI topology where SW1 permits the DHCP client ARP that matches the snooping binding and drops the static host ARP that has no binding

The same four nodes built in GNS3, where the configuration below was applied and tested on real Cisco IOS:

GNS3 canvas with a DHCP client, a static host, SW1, and a DHCP server for the dynamic ARP inspection lab

Snooping is already running from the previous guide, so only DAI needs adding.

Configure dynamic ARP inspection

DAI has one hard prerequisite: DHCP snooping must already be enabled on the same VLAN, because DAI reads the bindings snooping creates. With that in place, turn inspection on for the VLAN:

ip arp inspection vlan 1

As with snooping, every port is untrusted the moment you enable it, including the uplink toward the rest of the network. Trust the link to the DHCP server and any uplink that carries legitimate ARP, leaving user ports untrusted:

interface GigabitEthernet0/1
 ip arp inspection trust
 exit

That is the whole change: snooping already running from before, DAI armed on the VLAN, and the uplink trusted. Confirm it took.

Verify DAI is on

Check that inspection is active on the VLAN before trusting it to defend anything:

show ip arp inspection vlan 1

The configuration and operation both read active for VLAN 1, and DHCP logging is set to deny so dropped ARPs are logged:

 Vlan     Configuration    Operation   ACL Match          Static ACL
 ----     -------------    ---------   ---------          ----------
    1     Enabled          Active

 Vlan     ACL Logging      DHCP Logging      Probe Logging
 ----     -----------      ------------      -------------
    1     Deny             Deny              Off

With inspection confirmed active on the VLAN, put it to the test with two hosts that differ in exactly one way: one has a DHCP lease, the other does not.

Permitted versus denied

The DHCP client leased its address, so a binding exists for it. When it pings the gateway, its ARP matches that binding and the switch lets it through. The ping succeeds cleanly:

DHCP client ping to the gateway succeeds 100 percent because its ARP matches the DHCP snooping binding

The static host is a different story. It never asked for a lease, so the binding table has nothing for its address. The instant it sends an ARP to reach the same gateway, DAI finds no matching binding and drops the request, and the ping fails completely:

Static host ping to the gateway fails because it has no DHCP snooping binding so DAI drops its ARP

Two hosts on the same switch, the same VLAN, the same gateway, and only the one with a real lease can resolve it. A spoofer claiming the gateway’s address would meet exactly the same wall the static host just did.

Read the inspection counters

The statistics command turns that behavior into numbers, which is what you watch on a live network to know DAI is doing its job:

Cisco IOS show ip arp inspection statistics for VLAN 1: 5 forwarded, 7 dropped, 7 DHCP drops, 3 DHCP permits

The forwarded and DHCP-permit counts cover the legitimate ARP that passed, validated against the client’s binding. The seven drops, all counted as DHCP drops, are the static host’s ARP attempts, refused because no binding backs them. On a real network a climbing drop counter on a user VLAN is your early warning that something is forging ARP.

Practice dynamic ARP inspection

Run the questions to lock in what DAI validates, why it needs DHCP snooping, which ports to trust, and how static hosts are handled, then use the flashcards for quick recall.

Loading quiz...

Flip through the deck until the binding-table check, the trust rule, and the ARP ACL exception are automatic, or grab the Anki pack to review them anywhere:

Loading flashcards...

Letting legitimate static hosts through

The static host in the lab was blocked because DAI had nothing to validate it against, and a real network is full of devices that never use DHCP: servers, printers, and management interfaces with fixed addresses. For those, write an ARP ACL that states the IP and MAC pair you trust, then point DAI at it. Create the list first:

arp access-list STATIC-HOSTS
 permit ip host 192.168.10.50 mac host 0050.7966.6850
 exit

Then tell DAI to apply that ACL on the VLAN, so the listed pair is permitted alongside the DHCP-learned bindings:

ip arp inspection filter STATIC-HOSTS vlan 1

DAI checks the ACL first and falls back to the DHCP bindings for any address the ACL does not list, so with that filter in place the server keeps working while every unlisted, unleased ARP is still dropped. DAI rounds out the access-layer defenses that start with port security and DHCP snooping and sit beside access control lists on every VLAN. The CCNA 200-301 study roadmap shows where each of these fits.

Keep reading

Configure Samba File Share on Debian 13 / 12 Debian Configure Samba File Share on Debian 13 / 12 Setup WireGuard VPN on Ubuntu 24.04 / Debian 13 / Rocky Linux 10 Debian Setup WireGuard VPN on Ubuntu 24.04 / Debian 13 / Rocky Linux 10 Use NetworkManager nmcli on Ubuntu and Debian Debian Use NetworkManager nmcli on Ubuntu and Debian Remote Access vs Site-to-Site VPN Explained Networking Remote Access vs Site-to-Site VPN Explained Configure Cisco DHCP Snooping to Block Rogue Servers Networking Configure Cisco DHCP Snooping to Block Rogue Servers Configure KVM Networking With virsh, nmcli and brctl in Linux Virtualization Configure KVM Networking With virsh, nmcli and brctl in Linux

Leave a Comment

Press ESC to close