Free tech learning for everyone, from basics to pro

Network SecurityNetworking SecurityIntermediate

IPv6 access lists on Cisco IOS: syntax, implicit rules and Neighbour Discovery

In short: IPv6 ACLs on Cisco IOS are always named, match with prefix lengths instead of wildcards and are applied with ipv6 traffic-filter. They end with hidden lines that permit Neighbour Discovery and then deny everything. Adding your own deny ipv6 any any line overrides those permits and can break IPv6 entirely, so permit the ICMPv6 messages IPv6 relies on.

Why IPv6 needs its own ACLs

An IPv4 ACL does not touch IPv6 traffic. On a dual-stack network, every interface with an IPv4 ACL needs a matching IPv6 policy, or IPv6 becomes an unfiltered side door. This is a common gap: an organisation enables IPv6 on its LAN or gets it automatically from a provider, and its carefully written IPv4 rules simply do not apply. Background on IPv6 addressing is in IPv6 explained.

Syntax differences

IPv4 vs IPv6 ACLs on Cisco IOSIPv4 ACLNumbered or namedStandard and extendedWildcard masksip access-groupImplicit deny ip any anyIPv6 ACLNamed onlyOne type, like extendedPrefix lengths, e.g. /64ipv6 traffic-filterImplicit ND permits, then deny
Figure 1. IPv6 ACLs follow the same top-down logic but differ in syntax and in the hidden lines at the end.
  • IPv6 ACLs are named only and there is just one kind, which behaves like an extended ACL: you can match source, destination, protocol, ports and more.
  • Addresses use prefix lengths (2001:db8:10::/64) or host and any, not wildcard masks.
  • They are applied to an interface with ipv6 traffic-filter NAME in|out, and to VTY lines with ipv6 access-class NAME in.
  • Lines can match IPv6-specific fields such as extension headers and the flow label, and ICMPv6 message types by name.
ipv6 access-list GUEST6-IN
 sequence 10 permit udp 2001:db8:30::/64 host 2001:db8:1::53 eq domain
 sequence 20 deny ipv6 2001:db8:30::/64 2001:db8::/48 log
 sequence 30 permit tcp 2001:db8:30::/64 any eq 443
 sequence 40 permit tcp 2001:db8:30::/64 any eq www
 sequence 50 permit icmp any any nd-ns
 sequence 60 permit icmp any any nd-na
 sequence 70 deny ipv6 any any log
!
interface Vlan30
 ipv6 traffic-filter GUEST6-IN in

This mirrors a typical IPv4 guest policy: DNS to the internal resolver, no access to the organisation's own /48, web browsing allowed.

The hidden lines at the end

IPv4 needs ARP, which is not an IP packet and so never meets an IP ACL. IPv6 uses Neighbour Discovery (ND) instead, and ND runs over ICMPv6, so it does pass through IPv6 ACLs. To avoid breaking it by accident, every IPv6 ACL on Cisco IOS ends with three implicit lines:

permit icmp any any nd-na
permit icmp any any nd-ns
deny ipv6 any any

The trap: if you add your own deny ipv6 any any log at the end, which many engineers do out of IPv4 habit, it matches before the hidden ND permits. Neighbours can no longer resolve each other's addresses and IPv6 stops working on that interface. That is why the example above permits nd-ns and nd-na explicitly before its final deny.

ICMPv6 you should not block

ICMPv6 is much more important to IPv6 than ICMP is to IPv4. Besides neighbour solicitation and advertisement, keep these working where they apply:

MessageWhy it matters
Packet too bigIPv6 routers never fragment; path MTU discovery depends on this message
Router solicitation and advertisementHosts find their gateway and prefixes (SLAAC); allow on LAN-facing interfaces only
Destination unreachable, time exceededErrors and traceroute
Echo request and replyPing; allow at least from your own monitoring

Do block router advertisements arriving from places they should not come from. On switches, RA Guard does this at Layer 2, which is a better tool than a router ACL for stopping rogue routers on a LAN.

Real-world example: a law firm's silent IPv6

A law firm's provider enabled IPv6 on its business broadband, and the firm's router began advertising a prefix to the office LAN automatically. The firm's IPv4 ACLs blocked inbound remote desktop, but there was no IPv6 policy, and an external scan found a partner's PC reachable over IPv6. The IT support company wrote an IPv6 ACL for the internet interface mirroring the IPv4 policy. Their first version ended with deny ipv6 any any log and broke IPv6 to the router itself; adding explicit ND and packet-too-big permits fixed it. They now include an IPv6 section in every firewall and ACL review.

Practice

Which command applies an IPv6 ACL to an interface?
ipv6 traffic-filter NAME in (or out).
Why can an explicit deny ipv6 any any at the end of an IPv6 ACL break connectivity?
It matches before the implicit permits for neighbour solicitation and advertisement, so Neighbour Discovery fails and hosts cannot find each other.
Why should ICMPv6 packet-too-big messages be permitted?
IPv6 routers do not fragment packets, so hosts rely on these messages for path MTU discovery. Blocking them causes large transfers to hang.

Key takeaways

  • IPv4 ACLs do not filter IPv6; dual-stack networks need both.
  • IPv6 ACLs are named only, use prefix lengths and are applied with ipv6 traffic-filter.
  • Each IPv6 ACL ends with implicit ND permits, then deny ipv6 any any.
  • An explicit final deny overrides the ND permits; permit nd-ns and nd-na yourself.
  • Keep essential ICMPv6 such as packet-too-big working.
Tracks your learning on this device only. See your progress on the learning paths.

About the author

Mohamed Fayas

Founder of FM TecHub. CCNA certified, with a BTEC HND in Network Engineering, and BEng (Hons) in Computer Networking and Cloud Security. He writes practical, plain-English guides on networking, security and cloud.

More about the author

Original content written by Mohamed Fayas for FM TecHub. © 2026 FM TecHub. You're welcome to share a link to this page; please don't copy the text elsewhere without permission.

Stay up to date by email

New notes, tools and security news from FM TecHub, explained simply. Free.

We only use your email to send these updates. See our privacy policy.