Skip to content

Stop Thinking in IPv4: Misconceptions That Sabotage Your IPv6 Deployment

Audience: isp6 members, cloud architects, network engineers, and security practitioners migrating workloads to IPv6 — especially those with years of IPv4 muscle memory.

Last updated: April 2026


Table of Contents

  1. Introduction
  2. Misconception 1: Microsegment Your Subnets
  3. Misconception 2: Block All ICMP
  4. Misconception 3: You Still Need NAT
  5. Misconception 4: ULA Is the New RFC 1918
  6. Misconception 5: You Need to Bolt On IPsec
  7. Misconception 6: Scan the Subnet to Find Hosts
  8. Bonus: Taming the Hex — Readable Firewall Rules
  9. Summary Cheat Sheet
  10. References & RFCs

1. Introduction

Engineers who have spent years optimising IPv4 networks bring hard-won instincts to IPv6 deployments. Many of those instincts — conserve addresses, block ICMP, hide behind NAT — were rational responses to IPv4's constraints. But applying them to IPv6 is like rationing water in a submarine: the scarcity model no longer fits.

This document identifies the most common IPv4 reflexes that actively harm an IPv6 deployment, explains why they made sense in IPv4, and shows what to do instead.

If you are an isp6 member deploying your PA allocation for the first time — whether via BYOIP to a cloud provider or on your own infrastructure — these are the mental model shifts that will determine whether your deployment succeeds cleanly or stalls on problems that were solved at the protocol level years ago.

If you are entirely new to the protocol, start with Designing the Next Internet: An Introduction to IPv6 for a ground-up tour of address anatomy, scopes, and the SLAAC bootstrap — this article then corrects the IPv4 reflexes that most commonly survive into a fresh IPv6 deployment.

flowchart LR
    subgraph ipv4["IPv4 World"]
        direction TB
        A["Conserve addresses"]
        B["Block all ICMP"]
        C["NAT everything"]
        C2["ULA = RFC 1918"]
        D["Bolt on IPsec"]
        D2["Scan the subnet"]
        E["Hex is unreadable"]
    end
    subgraph ipv6["IPv6 World"]
        direction TB
        F["Use a /64 per subnet"]
        G["ICMPv6 is load-bearing"]
        H["End-to-end is restored"]
        H2["Use Global Unicast"]
        I["It's built into the stack"]
        I2["Flow telemetry + inventory"]
        J["Plan prefixes for humans"]
    end
    A --> F
    B --> G
    C --> H
    C2 --> H2
    D --> I
    D2 --> I2
    E --> J

2. Misconception 1: Microsegment Your Subnets

The IPv4 Instinct

In IPv4, address space is scarce and expensive. A /24 gives you 254 usable hosts, and wasting addresses on a subnet with only three servers feels irresponsible. So we learned to carve /28s, /29s, and /30s — and spent years managing the resulting VLSM complexity.

Why It's Wrong in IPv6

A single /64 subnet contains 2^64 addresses — roughly 18.4 quintillion. That is more addresses in one subnet than the entire IPv4 internet has in total. Splitting a /64 into /80s or /96s to "avoid waste" is a reflex from a scarcity model that no longer applies.

More importantly, it breaks things. Core IPv6 mechanisms depend on a /64 boundary:

Mechanism Why It Needs /64 What Breaks If You Go Smaller
SLAAC (Stateless Address Autoconfiguration) Hosts generate a 64-bit Interface ID and combine it with the 64-bit prefix from Router Advertisements Hosts cannot auto-configure addresses; deployment requires manual addressing or full DHCPv6
EUI-64 Interface IDs The modified EUI-64 algorithm embeds the 48-bit MAC into a 64-bit Interface ID Interface ID generation fails; connectivity breaks silently
Privacy Extensions (RFC 8981) Random 64-bit Interface IDs rotate periodically for privacy Privacy addresses cannot be generated; tracking surface increases
NDP (Neighbor Discovery Protocol) Optimised for /64; lookup tables and solicited-node multicast assume 64 bits of host space Performance degradation; potential neighbour cache exhaustion
Secure Neighbor Discovery (SEND) Cryptographic address generation requires the full 64-bit Interface ID space Cryptographic proofs fail validation

The Rule

Give every subnet a /64. No exceptions for end-host subnets.

The only legitimate deviations from /64 are defined by the IETF:

Prefix Length Use Case Reference
/127 Point-to-point inter-router links RFC 6164
/128 Loopback and anycast addresses Convention / RFC 4291
/64 Everything else RFC 4291, RFC 7421

The /127 exception is not just about conserving nibbles — it closes a real attack surface. A p2p link numbered as a full /64 exposes roughly 18 quintillion unconfigured addresses on the router's interface. An attacker flooding that range forces the router into perpetual Layer 2 resolution, filling the neighbour cache and starving legitimate traffic — a Neighbor Cache Exhaustion attack (RFC 6583). A /127 restricts the active space to two addresses (one per end), eliminating the attack surface entirely. Reserve the full /64 in your IPAM for the link, but configure /127 on the interfaces. See Planning your isp6 allocation for the threat model and configuration pattern.

Prefix Paranoia: The Numbers

Engineers who accept the /64 rule intellectually still hesitate to allocate generously, fearing they will "run out" of prefixes. The global data says otherwise:

  • Even with worldwide IPv6 adoption approaching 50%, only 0.7% of the 2000::/3 global unicast allocation is in use (APNIC IPv6 measurement).
  • Within a typical enterprise /48, fewer than 0.1% of the available 65,536 /64 subnets are utilised.

Do not compromise your routing topology or avoid clean nibble boundaries to save a resource that will not run out. Assign /64s freely — one per VLAN, one per availability zone, one per service tier. The address space is not the constraint; your numbering discipline is.

What This Means in Practice

A /48 allocation — the standard enterprise assignment and the minimum for AWS BYOIP — gives you 65,536 /64 subnets. That is more subnets than most organisations will ever need.

2001:db8:acad::/48

/64 Subnet Purpose
2001:db8:acad:1::/64 Production / AZ-a
2001:db8:acad:2::/64 Production / AZ-b
2001:db8:acad:3::/64 Production / AZ-c
2001:db8:acad:10::/64 Staging / AZ-a
2001:db8:acad:11::/64 Staging / AZ-b
2001:db8:acad:20::/64 Management
2001:db8:acad:30::/64 CI/CD runners

If you hold a /44 allocation from isp6, the hierarchy gains a third tier. A /44 contains 16 /48 blocks — sized to assign one /48 per cloud region or per account. Each region's /48 is then subdivided into /64 subnets for its availability zones and service tiers, following the same model as the single-region case above, independently per region. The last nibble of the third address group selects the region; the fourth group selects the subnet within that region.

2001:db8:a100::/44 (16 × /48 available)

Region /48 Block /64 Subnet Purpose
eu-west-1 2001:db8:a100::/48 2001:db8:a100:1::/64 Prod / AZ-a
2001:db8:a100:2::/64 Prod / AZ-b
2001:db8:a100:3::/64 Prod / AZ-c
eu-central-1 2001:db8:a101::/48 2001:db8:a101:1::/64 Prod / AZ-a
2001:db8:a101:2::/64 Prod / AZ-b
2001:db8:a101:3::/64 Prod / AZ-c
us-east-1 2001:db8:a102::/48 2001:db8:a102:1::/64 Prod / AZ-a
2001:db8:a102:2::/64 Prod / AZ-b
2001:db8:a102:3::/64 Prod / AZ-c

3. Misconception 2: Block All ICMP

The IPv4 Instinct

In IPv4, ICMP was treated as a security liability. Smurf attacks, ICMP redirect abuse, and network reconnaissance via ping sweeps led to a widespread "block all ICMP" firewall posture. For IPv4, this was aggressive but broadly survivable — TCP and UDP continued to function, and Path MTU Discovery failures could (sometimes) be masked by MSS clamping.

Why It's Catastrophic in IPv6

In IPv6, ICMPv6 is not optional — it holds the stack up. Blocking ICMPv6 indiscriminately does not just degrade performance; it breaks fundamental network operations that have no alternative mechanism.

ICMPv6 (RFC 4443) subsumes the functions of ARP, ICMP, and IGMP from the IPv4 world. The Neighbor Discovery Protocol (NDP, RFC 4861) runs entirely over ICMPv6. Block it, and your hosts cannot discover routers, resolve link-layer addresses, or detect duplicate addresses.

ICMPv6 Message Types: What They Do and What Breaks

The table below categorises the essential ICMPv6 messages. For the full filtering guidance, see RFC 4890.

Error Messages (Types 1–127) — Must Not Be Dropped

Type Name Function Impact If Blocked
1 Destination Unreachable Informs sender that a destination or port is unreachable Connections hang instead of failing fast; applications experience long timeouts
2 Packet Too Big Carries the MTU of the constraining link; essential for PMTUD Path MTU Discovery breaks; TCP connections stall or fail on links with MTU < 1500 (common in tunnels, VPNs)
3 Time Exceeded Hop limit expired (equivalent to IPv4 TTL exceeded) Traceroute stops working; routing loops go undetected
4 Parameter Problem Malformed header or unknown extension header Silent packet drops; extremely difficult to debug
Type Name Function Impact If Blocked
133 Router Solicitation (RS) Host asks for Router Advertisements on startup Hosts cannot discover their default gateway or obtain prefix information
134 Router Advertisement (RA) Router announces prefixes, MTU, and default route No SLAAC, no default route, no on-link determination — total connectivity failure
135 Neighbor Solicitation (NS) Link-layer address resolution (replaces ARP) and Duplicate Address Detection (DAD) Cannot resolve MAC addresses; duplicate IPs go undetected; all unicast forwarding breaks
136 Neighbor Advertisement (NA) Response to NS; link-layer address confirmation Same as above — address resolution fails
137 Redirect Router informs host of a better first-hop for a destination Suboptimal routing; increased latency for affected flows

Multicast Listener Discovery (Types 130–132, 143)

Type Name Function Impact If Blocked
130 MLD Query Router queries hosts for multicast group membership Multicast groups not maintained; NDP multicast breaks
131 MLDv1 Report Host reports multicast group membership Switch/router cannot learn which groups are active
132 MLDv1 Done Host leaves a multicast group Stale multicast state; wasted bandwidth
143 MLDv2 Report Enhanced membership reporting Same as MLDv1 Report

Informational Messages (Types 128–129)

Type Name Function Recommendation
128 Echo Request ping6 — operational troubleshooting Allow (rate-limit if desired)
129 Echo Reply Response to Echo Request Allow

The NDP Dependency Chain

To understand why you cannot "just block a few types," consider how NDP messages depend on each other:

flowchart TD
    Start(["Host boots up"])
    RS["1. Router Solicitation (Type 133)<br>Host: 'Are there any routers on this link?'"]
    RA["2. Router Advertisement (Type 134)<br>Router: 'Here is prefix 2001:db8:acad:1::/64,<br>default route via me, MTU 1500'"]
    DAD["3. Duplicate Address Detection — DAD (Type 135)<br>Host: 'Is anyone already using the address I generated via SLAAC?'"]
    NS["4. Neighbor Solicitation (Type 135)<br>Host: 'What is the link-layer address of the gateway?'"]
    NA["5. Neighbor Advertisement (Type 136)<br>Gateway: 'My MAC address is aa:bb:cc:dd:ee:ff'"]
    Online(["Host is online. Block ANY step above and it isn't."])

    Start --> RS --> RA --> DAD --> NS --> NA --> Online

ICMPv6 in the Cloud (AWS)

In AWS, the infrastructure handles NDP at the hypervisor level — your EC2 instances do not need to process raw Router Advertisements or Neighbor Solicitations themselves. However, ICMPv6 still matters:

  • Security Groups are stateful and automatically allow return ICMPv6 traffic (including Packet Too Big) for established connections. If you configure a security group to allow outbound IPv6 traffic, the inbound PMTUD response is permitted implicitly.
  • Network ACLs are stateless. You must explicitly allow ICMPv6 Type 2 (Packet Too Big) inbound if you use NACLs, or PMTUD will break for traffic traversing tunnels or VPN links with reduced MTU.
  • Echo Request/Reply (Types 128/129) must be explicitly allowed in security groups if you want ping6 to work — AWS does not allow these by default.

See AWS Security Group Rules Reference for ICMPv6 configuration examples.

The Rule

Do not apply a blanket "deny all ICMPv6" policy. Follow RFC 4890 for filtering guidance. At minimum, always permit Types 1–4 (errors), 128–129 (echo), and 133–136 (NDP).


4. Misconception 3: You Still Need NAT

Why NAT Exists in IPv4

NAT was never a security feature — it was a survival mechanism. When the IETF realised in the early 1990s that the 4.3 billion IPv4 addresses would not be enough, NAT (RFC 3022) was introduced to allow multiple hosts to share a single public address. It became ubiquitous because it solved three practical problems simultaneously:

Problem How NAT Solved It (IPv4)
Address exhaustion Many-to-one mapping: hundreds of hosts behind one public IP
Perceived security Internal addresses are hidden; unsolicited inbound traffic is dropped by the stateful NAT table
Provider independence Internal addressing can remain stable when changing ISPs (using RFC 1918 space internally)

These were real benefits in IPv4. But they came at a significant cost:

mindmap
  root((The Hidden Costs of NAT))
    Breaks end-to-end connectivity
      Peer-to-peer, VoIP, gaming
    Requires ALGs for protocols embedding addresses
      SIP, FTP, H.323
    Complicates logging
      5-tuple and timestamps for attribution behind CGNAT
    Adds state to the network path
      Lost during failover, all connections reset
    Prevents inbound connections
      Without explicit port forwarding
    Makes IPsec AH mode impossible
      Requires NAT-T workaround, RFC 3947

Why IPv6 Doesn't Need It

IPv6 eliminates the root cause: there is no address scarcity. A single /48 allocation provides 65,536 /64 subnets, each with 2^64 host addresses. Every device gets a globally unique address. With scarcity gone, the three problems NAT solved in IPv4 are addressed differently:

IPv4 Problem IPv6 Solution Mechanism
Address exhaustion Eliminated 128-bit address space; RIR allocations are effectively unlimited
Security / topology hiding Stateful firewalls + Privacy Extensions Firewalls provide the same "default deny inbound" posture without address translation. Privacy Extensions (RFC 8981) rotate the Interface ID, preventing tracking.
Provider independence BYOIP or ULA + NPTv6 Bring your isp6 PA allocation to any cloud provider via BYOIP (see the AWS, Azure, and Google Cloud guides), or use ULA (RFC 4193) internally with NPTv6 (RFC 6296) for prefix translation at the border

RFC 4864 ("Local Network Protection for IPv6") formally documents how IPv6 achieves equivalent or better protection than NAT44 without address translation.

The End-to-End Principle Restored

Without NAT, IPv6 restores the original design intent of IP: any host can communicate directly with any other host, constrained only by policy (firewalls), not by architectural translation layers. This simplifies:

  • Peer-to-peer protocols — WebRTC, SIP, and gaming work without STUN/TURN/ICE traversal hacks.
  • Logging and forensics — source addresses are globally meaningful; no need to correlate NAT translation logs with flow records.
  • IPsec — AH and ESP work end-to-end without NAT Traversal encapsulation.
  • Application architecture — no ALGs, no port forwarding rules, no hairpin NAT.

When Translation Still Appears in IPv6

The IETF explicitly recommends against NAT for IPv6 (RFC 6296, Section 1). However, two translation mechanisms exist for specific transition scenarios:

Mechanism Purpose When to Use
NAT64 (RFC 6146) Translates between IPv6 clients and IPv4-only servers Transition tool for reaching legacy IPv4 services from an IPv6-only network
NPTv6 (RFC 6296) Stateless 1:1 prefix translation (IPv6-to-IPv6) Multi-homing with PA (Provider Aggregatable) space from multiple ISPs; avoids the need for PI space. Preserves end-to-end reachability (unlike NAT44).

Neither of these is "NAT as you know it." NAT64 is a transition crutch that should be retired as IPv4 dependencies are eliminated. NPTv6 is stateless, checksum-neutral, and does not map ports — it avoids the worst pathologies of NAT44.

The Rule

Do not deploy NAT66 (stateful IPv6-to-IPv6 NAT). Use stateful firewalls for security, Privacy Extensions for topology hiding, and BYOIP or NPTv6 for provider independence. Use NAT64 only as a transition mechanism to reach IPv4-only endpoints.


5. Misconception 4: ULA Is the New RFC 1918

The IPv4 Instinct

In IPv4, RFC 1918 private addresses (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) are the bedrock of enterprise networking. Every data centre, every corporate LAN, every home router uses them. When engineers accept that NAT is unnecessary in IPv6, their next instinct is to reach for the closest equivalent: Unique Local Addresses (ULA, RFC 4193, fc00::/7).

The reasoning seems sound: "We don't need NAT, but we still want private, non-internet-routable addresses for internal traffic." ULA appears to be exactly that.

Why It's a Trap

ULA has two structural problems that make it a poor default for enterprise IPv6 deployments:

1. Architectural Limitations

Problem Detail
Single /48 per site ULA provides one fd00::/48 prefix per site. For a small office this is fine; for a multi-region enterprise with hundreds of VLANs across cloud accounts and data centres, a single /48 is a severe constraint. Compare this with a /44 GUA allocation from isp6, which provides 16 × /48 blocks.
Collision domains The RFC mandates that the 40-bit Global ID be generated using a pseudo-random algorithm. In practice, implementers routinely hard-code values (fd00::, fd01::) or copy examples. When two organisations with overlapping ULA prefixes merge networks — or connect via VPN — the result is a silent addressing collision with no resolution path short of renumbering.
No global routability ULA is explicitly filtered by upstream providers. If you later need to expose an internal service externally, or peer with a partner, you must renumber to GUA — the same painful migration you were trying to avoid.

2. RFC 6724 Kills Your IPv6 Traffic

This is the subtle, devastating problem. On a dual-stack host (IPv4 + IPv6), the operating system uses RFC 6724 ("Default Address Selection for IPv6") to decide which source and destination address to prefer when multiple options exist.

RFC 6724's default policy table ranks address types by precedence:

Prefix Precedence Label Address Type
::1/128 50 0 Loopback
::/0 40 1 Global Unicast (GUA)
::ffff:0:0/96 35 4 IPv4-mapped (i.e., IPv4)
fc00::/7 30 13 ULA
2002::/16 30 2 6to4
2001::/32 5 6 Teredo

ULA (precedence 30) ranks below IPv4-mapped addresses (precedence 35). On a dual-stack host with both an IPv4 address and a ULA IPv6 address, the operating system will always prefer IPv4. You can engineer a flawless dual-stack network, publish AAAA DNS records, and configure every router correctly — and your IPv6 traffic will remain at zero because the host's address selection algorithm deprioritises ULA in favour of IPv4.

flowchart TD
    Host["Dual-Stack Host<br>Has: IPv4 + ULA IPv6"]
    DNS["DNS returns A + AAAA"]
    RFC["RFC 6724<br>Address Selection"]
    IPv4["IPv4 path selected<br>(precedence 35)"]
    IPv6["ULA IPv6 path ignored<br>(precedence 30)"]

    Host --> DNS --> RFC
    RFC -->|"Preferred"| IPv4
    RFC -->|"Deprioritised"| IPv6

    style IPv4 fill:#d4edda,stroke:#28a745
    style IPv6 fill:#f8d7da,stroke:#dc3545

This is not a misconfiguration — it is the correct, standards-compliant behaviour. The only way to ensure IPv6 is preferred on dual-stack hosts is to use Global Unicast Addresses, which have a higher precedence than IPv4-mapped addresses.

The Rule

Use Global Unicast Addresses (GUA) as your default IPv6 addressing strategy. ULA is not the IPv6 equivalent of RFC 1918 — it is a niche tool for air-gapped networks that will never need internet connectivity. For everything else, use GUA from your isp6 allocation behind stateful firewalls. If you need multi-homing without PI space, use NPTv6 (RFC 6296) with GUA, not ULA.


6. Misconception 5: You Need to Bolt On IPsec

The IPv4 Instinct

In IPv4, IPsec was an afterthought — a separate protocol suite layered on top of a network layer that had no native security. Deploying IPsec meant additional software, configuration complexity, and often dedicated hardware accelerators. Many organisations avoided it entirely, relying instead on TLS at the application layer.

IPv6: IPsec Is Part of the Architecture

IPv6 was designed with IPsec as an integral part of the protocol stack, not an add-on. The two IPsec headers — Authentication Header (AH, RFC 4302) and Encapsulating Security Payload (ESP, RFC 4303) — are defined as IPv6 extension headers, processed natively by the IPv6 stack.

IPv6 + IPsec — Native Extension Header
flowchart TB
    A["IPv6 Header<br>(Next Header = ESP)"] --> B["ESP Header"]
    B --> C["TCP / UDP"]
    C --> D["Payload"]
    D --> E["ESP Trailer"]
IPv4 + IPsec — Bolted On
flowchart TB
    A["IPv4 Header"] --> B["IPsec Headers (AH / ESP)"]
    B --> C["TCP / UDP"]
    C --> D["Payload"]

What Changed: MUST → SHOULD

The requirement level for IPsec support in IPv6 implementations has evolved:

RFC Year IPsec Requirement Status
RFC 2460 1998 MUST implement IPsec Original IPv6 spec
RFC 4294 2006 MUST implement IPsec (AH + ESP) IPv6 Node Requirements
RFC 6434 2011 SHOULD implement IPsec Relaxed; acknowledged that TLS/SSH/DTLS cover many use cases
RFC 8200 2017 SHOULD implement IPsec Current IPv6 spec (obsoletes RFC 2460)

The downgrade from MUST to SHOULD reflects practical reality: not every constrained device (IoT sensors, embedded systems) can implement full IKEv2 + ESP. But for servers, network infrastructure, and cloud workloads, IPsec support is present in the stack by default. You do not need to install additional software or purchase dedicated appliances — the capability is there, ready to be configured.

What This Means for Your Deployment

  • Host-to-host encryption is available without TLS termination proxies or VPN tunnels. ESP in transport mode encrypts the payload between two IPv6 hosts with no intermediate infrastructure.
  • Network-to-network tunnels (ESP in tunnel mode) work cleanly because there is no NAT in the path to interfere with AH integrity checks or require NAT-T encapsulation.
  • IPsec is not a replacement for TLS. Use IPsec for network-layer encryption (host-to-host, site-to-site); use TLS for application-layer authentication and encryption. They complement each other.
  • In cloud environments (AWS, GCP, Azure), managed VPN and transit gateway services handle IPsec tunnel negotiation. The "built-in" nature of IPsec in IPv6 means the overhead of establishing these tunnels is lower, but the operational model is similar to IPv4 VPNs.

The Rule

Do not treat IPsec as something you need to "add" to IPv6. It is already part of the protocol architecture. Plan your encryption strategy knowing that every IPv6 node in your infrastructure (excluding constrained IoT devices) already has IPsec capability in its network stack.


7. Misconception 6: Scan the Subnet to Find Hosts

The IPv4 Instinct

In IPv4, vulnerability scanning and host discovery are straightforward. A /24 subnet has 254 usable addresses. A security team can enumerate every host in seconds with nmap -sn 192.168.1.0/24, run a full port scan of the entire subnet in minutes, and maintain a near-real-time inventory of every device on the network. This brute-force approach works because the search space is small enough to exhaust.

Many organisations build their entire security posture on this foundation: periodic subnet scans, vulnerability assessments against discovered hosts, and compliance reports showing "100% of assets scanned." The implicit assumption is that scanning the address range is equivalent to scanning the network.

Why It's Impossible in IPv6

A single /64 subnet contains 2^64 addresses — approximately 1.8 × 10^19 (18.4 quintillion). To put this in perspective:

Scenario Time Required
Scan a /24 at 1,000 packets/sec ~0.25 seconds
Scan a /64 at 1,000 packets/sec ~584 million years
Scan a /64 at 1,000,000 packets/sec ~584,000 years
Scan a /64 at line rate (100 Gbps) ~36,000 years

Even at theoretical line rate, scanning a single /64 takes longer than recorded human history. The brute-force approach that underpins IPv4 security scanning is mathematically impossible in IPv6.

This is not a temporary tooling gap — it is a fundamental property of the address space. No amount of hardware or parallelism will make exhaustive /64 scanning viable.

What to Do Instead

IPv6 requires a shift from address-space enumeration to active host inventory and flow telemetry. You cannot find hosts by scanning for them; you must know where they are because you put them there or because they announced themselves.

IPv4 Approach IPv6 Replacement How It Works
Ping sweep / ARP scan NDP monitoring Passively observe Neighbor Solicitation and Advertisement traffic to discover active hosts on a link (RFC 4861)
Full subnet port scan Flow telemetry (NetFlow v9, IPFIX) Analyse traffic flows to identify active hosts, services, and communication patterns. IPFIX (RFC 7011) natively supports IPv6 flow keys
Scheduled vulnerability scan of IP range Agent-based scanning Deploy scanning agents on hosts that report back to a central console. The scanner knows the host exists because the agent is installed, not because it was found by probing
Asset inventory by subnet scan IPAM / CMDB integration Authoritative host inventory from your IP Address Management system and Configuration Management Database — not from network probes
Compliance: "100% of addresses scanned" Compliance: "100% of known hosts scanned" Redefine coverage in terms of registered assets, not address ranges

In cloud environments, this shift is already the norm. AWS, GCP, and Azure maintain authoritative registries of every ENI, NIC, and VM — you query the cloud API for your inventory, not the network. IPv6 extends this principle to on-premises and hybrid networks.

The Rule

Do not attempt to scan IPv6 subnets by address range. Build your security posture on authoritative host inventories (IPAM, CMDB, cloud APIs), NDP monitoring, and flow telemetry. Redefine "complete coverage" as "all known assets scanned," not "all addresses probed."


8. Bonus: Taming the Hex — Readable Firewall Rules

The Problem

A 128-bit address written in hexadecimal is intimidating. When engineers see firewall rules referencing 2001:0db8:acad:0042:a9f3:2e1b:8c05:7d3a/128, cognitive load spikes and misconfigurations follow. This leads to a perverse outcome: teams avoid writing granular IPv6 firewall policies because the addresses are "too hard to read."

The Solution: Plan Your Prefixes for Humans

The vast address space of IPv6 is not just about scale — it is an opportunity to encode meaning into your addressing scheme. When you control your prefix allocation (as you do with BYOIP), you can design subnet IDs that are simple, sequential, and self-documenting.

Example: A Readable Allocation Scheme

Starting from a /48 allocation of 2001:db8:acad::/48, assign subnet IDs using a simple ascending pattern that encodes environment and purpose:

Allocation: 2001:db8:acad::/48

Subnet ID Prefix Purpose
0001 2001:db8:acad:1::/64 Prod / Web Tier
0002 2001:db8:acad:2::/64 Prod / App Tier
0003 2001:db8:acad:3::/64 Prod / Data Tier
0004 2001:db8:acad:4::/64 Prod / Cache
0010 2001:db8:acad:10::/64 Staging / Web
0011 2001:db8:acad:11::/64 Staging / App
0012 2001:db8:acad:12::/64 Staging / Data
0020 2001:db8:acad:20::/64 Dev / Web
0021 2001:db8:acad:21::/64 Dev / App
0030 2001:db8:acad:30::/64 Management
0031 2001:db8:acad:31::/64 Monitoring
00f0 2001:db8:acad:f0::/64 CI/CD Runners
00f1 2001:db8:acad:f1::/64 Build Agents

Firewall Rules That Read Like English

With this scheme, firewall and security group rules become self-documenting. Compare:

Before (unplanned addressing):

  Source: 2001:db8:acad:a3f2::/64
  Dest:   2001:db8:acad:7b01::/64
  Port:   443
  Action: ALLOW

  # What does this rule do? No one knows without a spreadsheet.

After (planned addressing):

  Source: 2001:db8:acad:1::/64     # Prod / Web Tier
  Dest:   2001:db8:acad:2::/64     # Prod / App Tier
  Port:   443
  Action: ALLOW

  # Web tier can reach App tier on HTTPS. Obvious.

Aggregation for Broad Policies

By aligning your numbering to nibble boundaries (multiples of 4 bits), you can write aggregate rules that cover entire environments with a single prefix:

Aggregate Prefix Covers Use in Policy
2001:db8:acad::/52 Subnet IDs 00000fff (Production + Staging) "All production and staging subnets"
2001:db8:acad:1::/64 to 2001:db8:acad:4::/64 Production tiers 1–4 "All production tiers"
2001:db8:acad:10::/60 Subnet IDs 0010001f (Staging) "All staging subnets"
2001:db8:acad:20::/60 Subnet IDs 0020002f (Dev) "All dev subnets"
2001:db8:acad:30::/60 Subnet IDs 0030003f (Management) "All management subnets"

Tip: Align your subnet numbering to nibble boundaries (/52, /56, /60) so that route aggregation and firewall summarisation work cleanly. A /60 gives you 16 contiguous /64 subnets — usually enough for one environment. Plan this before you assign the first address.

Avoid the Mapping Trap

A tempting shortcut is to preserve IPv4 muscle memory by embedding the old octets inside IPv6 hex strings — for example, assigning 10.0.0.1 as 2001:db8:acad::1000:0001, or folding a /24 into the final nibble group. Do not do this. The IPv4 octet boundary is 8 bits; the IPv6 addressing architecture is designed around 4-bit nibbles. Mapping 10.0.0.0/24 into an IPv6 host portion puts meaningful structure at bit offsets that do not align to hex characters, breaking reverse-DNS zone delegation, defeating route aggregation, and producing subnet IDs that read as random hex to anyone who was not present when the scheme was invented. Design the IPv6 hierarchy on its own terms — the address space is large enough that you never need to reuse IPv4 semantics to save space.

Reserve the 0th Subnet for Core Infrastructure

The first subnet block in any allocation (…:0::/64 within a /48, or the first /48 within a /44) should be reserved for shared core infrastructure: loopbacks, point-to-point links, management networks, and anything else that is not a routable customer or workload subnet. Keeping core infrastructure at a predictable, low-numbered prefix makes firewall allow-lists, monitoring scopes, and route filters easier to write, and leaves the "first interesting block" (…:1::/64 onwards) free for the hierarchical assignment scheme that readers will actually see in logs and dashboards.

The Rule

Design your prefix plan for human readability. Use simple, sequential subnet IDs (1, 2, 3...) and align to nibble boundaries for aggregation. When you control the allocation, there is no reason for firewall rules to be a wall of inscrutable hex.


9. Summary Cheat Sheet

IPv4 Instinct IPv6 Reality Key Reference
Carve small subnets (/28, /29) to conserve space Every end-host subnet gets a /64 — no exceptions. Only 0.7% of 2000::/3 is allocated globally RFC 7421, RFC 4291
Block all ICMP at the firewall ICMPv6 is load-bearing — NDP, PMTUD, and SLAAC depend on it RFC 4890, RFC 4861
NAT everything for "security" Use stateful firewalls + Privacy Extensions; NAT is unnecessary RFC 4864, RFC 8981
ULA is the new RFC 1918 Use Global Unicast Addresses — ULA is deprioritised below IPv4 by RFC 6724 RFC 6724, RFC 4193
Bolt on IPsec as an afterthought IPsec (AH + ESP) is a native extension header in IPv6 RFC 4301, RFC 4303
Scan the subnet to find hosts Scanning a /64 takes 584 million years — use flow telemetry and host inventory RFC 7011, RFC 4861
Accept unreadable hex addresses Plan prefixes for humans — sequential IDs, nibble boundaries RFC 5375

What isp6 Handles

Several of the corrections above are already resolved for isp6 members before you touch a cloud console or a router:

Misconception What isp6 Takes Off Your Plate
Microsegment your subnets isp6 allocates /48 and /44 blocks — properly sized for the abundance model. No need to justify address space or request minimum allocations from a RIR
ULA is the new RFC 1918 Your isp6 allocation is Global Unicast Address space, registered in the RIPE Database with full RPKI coverage. ULA's RFC 6724 deprioritisation problem does not apply
You still need NAT With GUA from isp6 and BYOIP to your cloud provider, your workloads get direct end-to-end connectivity — no translation layer required
Plan prefixes for humans isp6's /48 and /44 boundaries align to nibble-friendly ranges, giving you clean starting points for a human-readable subnet hierarchy

For step-by-step BYOIP guides that show exactly what isp6 handles and what you configure on the cloud side, see the AWS, Azure, and Google Cloud guides.


10. References & RFCs

Core IPv6 Specifications

RFC Title Relevance
RFC 8200 Internet Protocol, Version 6 (IPv6) Specification Current IPv6 base specification (obsoletes RFC 2460)
RFC 4291 IP Version 6 Addressing Architecture Defines /64 interface ID boundary and address types
RFC 7421 Analysis of the 64-bit Boundary in IPv6 Addressing Comprehensive analysis of why /64 is the correct boundary
RFC 4862 IPv6 Stateless Address Autoconfiguration (SLAAC) Defines SLAAC; requires /64 prefix
RFC 8981 Temporary Address Extensions for SLAAC (Privacy Extensions) Rotating Interface IDs for privacy (obsoletes RFC 4941)
RFC 6164 Using 127-Bit IPv6 Prefixes on Inter-Router Links The one exception to /64: point-to-point links

ICMPv6 and Neighbor Discovery

RFC Title Relevance
RFC 4443 ICMPv6 for IPv6 Defines ICMPv6 message types and processing rules
RFC 4861 Neighbor Discovery for IPv6 (NDP) Router/Neighbor Solicitation and Advertisement; replaces ARP
RFC 4862 IPv6 Stateless Address Autoconfiguration DAD and SLAAC procedures
RFC 4890 Recommendations for Filtering ICMPv6 Messages in Firewalls The authoritative guide to which ICMPv6 types to allow/block
RFC 3122 Extensions to IPv6 Neighbor Discovery for Inverse Discovery Inverse ND specification

NAT and Network Protection

RFC Title Relevance
RFC 4864 Local Network Protection for IPv6 How to achieve NAT-equivalent protections without NAT
RFC 6296 IPv6-to-IPv6 Network Prefix Translation (NPTv6) Stateless prefix translation for multi-homing
RFC 6146 Stateful NAT64 IPv6-to-IPv4 translation for transition scenarios
RFC 3022 Traditional IP Network Address Translator (NAT) The original IPv4 NAT specification — for historical context
RFC 4193 Unique Local IPv6 Unicast Addresses (ULA) IPv6 equivalent of RFC 1918 private addressing

IPsec

RFC Title Relevance
RFC 4301 Security Architecture for the Internet Protocol IPsec framework specification
RFC 4302 IP Authentication Header (AH) AH specification
RFC 4303 IP Encapsulating Security Payload (ESP) ESP specification
RFC 6434 IPv6 Node Requirements Changed IPsec from MUST to SHOULD

ULA and Address Selection

RFC Title Relevance
RFC 4193 Unique Local IPv6 Unicast Addresses (ULA) Defines ULA (fc00::/7); specifies random Global ID generation
RFC 6724 Default Address Selection for IPv6 Default policy table that deprioritises ULA below IPv4 on dual-stack hosts
RFC 1918 Address Allocation for Private Internets The IPv4 private addressing standard that ULA is mistakenly treated as equivalent to

Host Discovery and Flow Telemetry

RFC Title Relevance
RFC 7011 Specification of the IPFIX Protocol IP Flow Information Export — the IPv6-native replacement for brute-force subnet scanning
RFC 7707 Network Reconnaissance in IPv6 Networks Analysis of IPv6 reconnaissance techniques and why address scanning is infeasible

Address Planning

RFC Title Relevance
RFC 5375 IPv6 Unicast Address Assignment Considerations Guidance on address planning and assignment strategies
RFC 6177 IPv6 Address Assignment to End Sites Recommends /48 to /56 for end sites

This document is provided for informational purposes. Protocol specifications and cloud provider behaviour are subject to change. Consult the linked RFCs and vendor documentation for authoritative, up-to-date information before making architectural decisions.