I’ve spent more hours than I’d like to admit staring at hexadecimal address blocks trying to remember whether fe80:: was link-local or unique local. If you’ve ever felt the same way, this cheat sheet is the one I wish existed when I started working seriously with IPv6. I’ve packed it with the syntax, commands, tables, and troubleshooting steps I actually use day to day, so you can bookmark this page and stop Googling the same things over and over.
Why IPv6 Still Trips People Up
IPv4 exhaustion pushed IPv6 adoption, but the learning curve is real. The address space is enormous (2^128 addresses), the notation is unfamiliar, and the tooling is slightly different from what most of us grew up on. Once the fundamentals click, though, IPv6 is actually more logical than IPv4 subnetting ever was. Let’s get into it.
IPv6 Address Format Basics
An IPv6 address is 128 bits long, written as eight groups of four hexadecimal digits, separated by colons.
2001:0db8:0000:0042:0000:8a2e:0370:7334
A few compression rules make this easier to read and write:
| Rule | Example Before | Example After |
|---|---|---|
| Leading zeros in a group can be dropped | 0db8 | db8 |
One consecutive run of all-zero groups can be replaced with :: | 2001:0db8:0000:0000:0000:0000:0000:0001 | 2001:db8::1 |
:: can only be used once per address | N/A | Prevents ambiguity |
So the address above compresses to:
2001:db8:0:42:0:8a2e:370:7334
Quick Notation Cheat Sheet
| Notation | Meaning |
|---|---|
:: | All zeros compressed (shorthand, used once max) |
::1 | Loopback address (equivalent to IPv4’s 127.0.0.1) |
:: | Unspecified address (equivalent to IPv4’s 0.0.0.0) |
fe80::/10 | Link-local prefix |
fc00::/7 | Unique local address (ULA) prefix |
2000::/3 | Global unicast prefix range |
ff00::/8 | Multicast prefix |
IPv6 Address Types
This is the part I see confused most often, so I’ve broken it into a clean reference table.
| Address Type | Prefix | Scope | Typical Use |
|---|---|---|---|
| Global Unicast Address (GUA) | 2000::/3 | Internet-routable | Public-facing servers, WAN interfaces |
| Unique Local Address (ULA) | fc00::/7 | Private, site-local | Internal networks, similar to RFC1918 in IPv4 |
| Link-Local Address (LLA) | fe80::/10 | Single link only | Neighbor discovery, routing protocols |
| Multicast | ff00::/8 | Group communication | Router/DHCP discovery, streaming |
| Anycast | Assigned from unicast range | Nearest node in a group | CDN nodes, DNS root servers |
| Loopback | ::1/128 | Local host only | Testing, local services |
| Unspecified | ::/128 | Placeholder | Used before an address is assigned |
A quick note on multicast: IPv6 doesn’t use broadcast at all. Every function that ARP and broadcast handled in IPv4 (like discovering neighbors) is done through multicast and the Neighbor Discovery Protocol (NDP) instead.
IPv6 Subnetting Explained
Subnetting in IPv6 is simpler than IPv4 in one big way: you almost never have to do bit-level math for host addresses, because the host portion is fixed at 64 bits in virtually every standard deployment.
Standard Structure
| 48 bits: Global Routing Prefix | 16 bits: Subnet ID | 64 bits: Interface ID |
| Component | Bits | Purpose |
|---|---|---|
| Global Routing Prefix | Typically /48 | Assigned by your ISP or RIR |
| Subnet ID | 16 bits | Lets you create up to 65,536 subnets |
| Interface ID | 64 bits | Host portion, often auto-generated |
Common Prefix Lengths
| Prefix | Use Case |
|---|---|
| /48 | Standard allocation to a site/organization |
| /56 | Common allocation for small sites or home use (256 /64 subnets) |
| /64 | Standard subnet size for a single LAN segment |
| /127 | Point-to-point links (router-to-router) |
| /128 | Single host address |
Subnetting Example
Say your ISP hands you a /48: 2001:db8:1234::/48
You want to carve out subnets for different departments:
| Subnet | Address Range |
|---|---|
| Sales | 2001:db8:1234:0001::/64 |
| Engineering | 2001:db8:1234:0002::/64 |
| Guest Wi-Fi | 2001:db8:1234:0003::/64 |
| Server VLAN | 2001:db8:1234:0004::/64 |
Since the subnet ID is 16 bits, you have 65,536 possible /64 networks to work with from a single /48. That’s not a typo — IPv6 subnetting is designed to be generous so nobody has to ration addresses the way we did with IPv4.
Quick Subnetting Math Reference
| Prefix Difference | Number of Subnets Created |
|---|---|
| /48 to /56 | 256 subnets |
| /48 to /64 | 65,536 subnets |
| /56 to /64 | 256 subnets |
| /64 to /127 | Used for point-to-point, no further subnetting practical |
Configuring IPv6 on Common Platforms
Linux (using ip command)
# Assign an IPv6 address to an interface
sudo ip -6 addr add 2001:db8:1234:1::1/64 dev eth0
# Bring the interface up
sudo ip link set eth0 up
# Add a default IPv6 route
sudo ip -6 route add default via 2001:db8:1234:1::fffe
# View all IPv6 addresses
ip -6 addr show
# View the IPv6 routing table
ip -6 route show
Expected output for ip -6 addr show:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet6 2001:db8:1234:1::1/64 scope global
inet6 fe80::a00:27ff:fe4e:66a1/64 scope link
Windows (using PowerShell)
# View IPv6 configuration
Get-NetIPAddress -AddressFamily IPv6
# Assign a new IPv6 address
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 2001:db8:1234:1::1 -PrefixLength 64
# Set a default gateway
New-NetRoute -InterfaceAlias "Ethernet" -DestinationPrefix "::/0" -NextHop 2001:db8:1234:1::fffe
# Disable IPv6 temporarily on an adapter
Disable-NetAdapterBinding -Name "Ethernet" -ComponentID ms_tcpip6
Cisco IOS
interface GigabitEthernet0/1
ipv6 address 2001:db8:1234:1::1/64
ipv6 enable
no shutdown
ipv6 unicast-routing
ipv6 route ::/0 2001:db8:1234:1::fffe
Verify with:
show ipv6 interface brief
show ipv6 route
macOS
# View IPv6 addresses
ifconfig en0 | grep inet6
# Manually configure an interface
sudo networksetup -setv6manual "Wi-Fi" 2001:db8:1234:1::1 64 2001:db8:1234:1::fffe
Neighbor Discovery Protocol (NDP) in Depth
NDP is the backbone of how IPv6 hosts find each other, discover routers, and detect duplicate addresses. It replaces ARP, ICMP Router Discovery, and ICMP Redirect from the IPv4 world, all rolled into ICMPv6 messages.
| NDP Message Type | ICMPv6 Type | Purpose |
|---|---|---|
| Router Solicitation (RS) | 133 | Host asks for a Router Advertisement immediately, rather than waiting |
| Router Advertisement (RA) | 134 | Router announces itself, its prefix, and configuration options |
| Neighbor Solicitation (NS) | 135 | Host asks “who has this address” (like ARP request) |
| Neighbor Advertisement (NA) | 136 | Host responds with its Layer 2 address (like ARP reply) |
| Redirect | 137 | Router tells a host a better next hop exists for a destination |
I think of NDP as doing three jobs at once: address autoconfiguration, address resolution, and router discovery. When something feels “off” with IPv6 connectivity and nothing else explains it, checking that these five message types are actually flowing is usually where I look first.
Duplicate Address Detection (DAD)
Before a host starts using any unicast address, it sends a Neighbor Solicitation for its own tentative address. If nobody responds, the address is considered unique and moves to a “preferred” state. If another host responds, the address is marked as a duplicate and won’t be used. This is why a misconfigured static address on two devices can cause one or both machines to lose connectivity entirely rather than just conflicting quietly the way IPv4 sometimes does.
IPv6 Routing Protocol Notes
If you’re managing routed IPv6 networks rather than just host configuration, a few protocol-specific details are worth keeping handy.
| Protocol | IPv6 Support Notes |
|---|---|
| OSPFv3 | Built specifically for IPv6, runs over link-local addresses, still uses areas and LSAs conceptually like OSPFv2 |
| EIGRP for IPv6 | Cisco-proprietary, configured per-interface with ipv6 eigrp |
| BGP | Uses separate address families (address-family ipv6 unicast) to carry IPv6 routes alongside IPv4 |
| RIPng | RIP’s IPv6 successor, still uses hop-count limits, rarely used in modern networks |
| IS-IS | Supports IPv6 through additional TLVs, common in large service provider backbones |
A quick Cisco BGP example for enabling an IPv6 address family:
router bgp 65001
neighbor 2001:db8::2 remote-as 65002
address-family ipv6
neighbor 2001:db8::2 activate
exit-address-family
SLAAC vs DHCPv6 (Know the Difference)
| Method | How It Works | Provides DNS? | Common Use |
|---|---|---|---|
| SLAAC (Stateless Address Autoconfiguration) | Host generates its own address from the Router Advertisement prefix | Only with RDNSS option | Simple networks, IoT devices |
| DHCPv6 Stateful | Server assigns the full address | Yes | Enterprise networks needing central control |
| DHCPv6 Stateless | Host uses SLAAC for address, DHCPv6 for extra info (DNS, NTP) | Yes | Hybrid setups |
Verification and Diagnostic Commands
| Command | Platform | Purpose |
|---|---|---|
ping6 2001:db8::1 or ping -6 2001:db8::1 | Linux/Windows | Test reachability |
traceroute6 2001:db8::1 | Linux/macOS | Trace the path to a destination |
tracert -6 2001:db8::1 | Windows | Trace the path to a destination |
ip -6 neigh show | Linux | View the IPv6 neighbor table (like ARP) |
netsh interface ipv6 show neighbors | Windows | View neighbor cache |
show ipv6 neighbors | Cisco IOS | View neighbor discovery cache |
ss -6 -tuln | Linux | List listening IPv6 sockets |
netstat -6 | Windows | Show IPv6 connections |
Transition Mechanisms
Most networks aren’t pure IPv6 yet, so you’ll run into these transition strategies constantly:
| Mechanism | Description | When You’d Use It |
|---|---|---|
| Dual Stack | Run IPv4 and IPv6 simultaneously on the same interface | Most common approach today |
| 6to4 Tunneling | Encapsulates IPv6 traffic inside IPv4 packets | Legacy transition, largely deprecated |
| Teredo | Tunnels IPv6 through NAT’d IPv4 networks | Windows client fallback (mostly legacy) |
| NAT64/DNS64 | Lets IPv6-only clients reach IPv4-only servers | Mobile carrier networks, IPv6-only rollouts |
| ISATAP | Tunnels IPv6 over an IPv4 intranet | Enterprise transition scenarios |
IPv6 in Cloud Environments
Since so much of my own work happens in cloud environments these days, I think this deserves its own quick section rather than being buried in configuration commands.
| Provider | IPv6 Notes |
|---|---|
| AWS | VPCs support dual-stack IPv6 CIDR blocks (typically /56, subnets /64); Amazon assigns the block, you can’t bring your own by default |
| Azure | Supports dual-stack virtual networks; IPv6 public IPs are standard SKU only |
| Google Cloud | VPC subnets can be dual-stack; external IPv6 ranges are provider-assigned /96 blocks per instance in some configurations |
| Cloudflare | Full IPv6 support at the edge by default, often the easiest way to add IPv6 reachability to a site without touching backend infrastructure |
A pattern I see often: teams add IPv6 to the load balancer or CDN layer first (an easy win), while backend services stay IPv4-only for a while longer behind NAT64 or a proxy. That’s a completely reasonable way to phase in support without a big-bang migration.
Useful IPv6 Tools and Utilities
| Tool | Purpose |
|---|---|
ping6 / ping -6 | Basic reachability testing |
traceroute6 / tracert -6 | Path tracing |
ip -6 (Linux iproute2) | Address, route, and neighbor management |
radvd | Linux daemon for sending Router Advertisements |
dibbler | Cross-platform DHCPv6 server/client |
sipcalc | Command-line subnet calculator with IPv6 support |
nmap -6 | Network scanning with IPv6 targets |
dig AAAA | Query DNS for IPv6 address records |
| test-ipv6.com | Browser-based connectivity test for dual-stack setups |
Example subnet calculation with sipcalc:
sipcalc 2001:db8:1234::/48 -s 64
This breaks a /48 down into /64 subnets and shows you exactly how many you get and their ranges, which saves a lot of manual hex math.
Security Tips for IPv6
I can’t stress this enough: a lot of networks accidentally leave IPv6 wide open because firewall rules were written for IPv4 only. Don’t let that be you.
- Don’t assume IPv6 is disabled just because you didn’t configure it. Most modern OSes enable it by default, and it can bypass IPv4-only firewall rules entirely.
- Filter ICMPv6 carefully, not entirely. Unlike ICMPv4, ICMPv6 is required for core functions like Neighbor Discovery and Path MTU Discovery. Blocking it all will break your network.
- Enable RA Guard on switches to prevent rogue Router Advertisements from redirecting traffic or causing DoS via bogus default gateways.
- Use DHCPv6 Guard to block unauthorized DHCPv6 servers on your LAN.
- Watch for Privacy Extensions (RFC 4941). These randomize the interface ID for outbound connections, which helps privacy but can complicate logging and asset tracking.
- Apply the same ACL discipline as IPv4. Every IPv6-enabled interface needs its own access control, don’t just mirror IPv4 rules and assume coverage.
- Disable unnecessary tunneling protocols like Teredo and 6to4 unless you have a specific need — they can be used to bypass perimeter defenses.
Troubleshooting Checklist
When IPv6 connectivity breaks, I work through this order:
- Check the link-local address first. If
fe80::isn’t present on the interface, IPv6 isn’t even minimally functional there. - Verify Router Advertisements are being received. Use
ip -6 route show(Linux) orshow ipv6 route(Cisco) to confirm a default route learned via RA. - Confirm the global address was assigned. Check for a
2000::/3range address via SLAAC or DHCPv6. - Test with ping6 to the gateway, then to an external address. This isolates whether the issue is local or upstream.
- Check firewall rules for ICMPv6. A blocked Neighbor Solicitation/Advertisement will silently break connectivity.
- Look at the neighbor table. If
ip -6 neigh showshowsFAILEDstates, Layer 2 resolution is the problem. - Verify DNS resolution for AAAA records.
dig AAAA example.comconfirms whether DNS is returning IPv6 records at all.
Common Error Table
| Symptom | Likely Cause | Fix |
|---|---|---|
| No link-local address | Interface down or IPv6 disabled | Bring interface up, re-enable IPv6 |
| Address assigned but no internet | Missing default route from RA | Check router’s RA configuration |
| Intermittent connectivity | Duplicate Address Detection (DAD) conflict | Check for duplicate manually-assigned addresses |
| DNS resolves but connection times out | Firewall blocking IPv6 traffic specifically | Update firewall rules to include IPv6 |
| Neighbor discovery failing | ICMPv6 blocked on switch/firewall | Allow ICMPv6 types 133-136 |
Best Practices
- Always allocate at least a
/64per subnet — anything smaller breaks SLAAC and many standard features. - Document your subnetting scheme before deployment; unlike IPv4, you have so much space that inconsistent allocation becomes its own management headache.
- Use ULA (
fc00::/7) for internal-only communication when you don’t need global routability. - Keep DNS AAAA records in sync with your address plan from day one, don’t bolt it on later.
- Test dual-stack failover regularly; a broken IPv6 path with a working IPv4 fallback can hide problems for months.
- Standardize on either SLAAC or DHCPv6 per network segment to avoid inconsistent host configuration.
Real-World Use Cases
- ISPs delegating a /56 to home routers, letting each household create up to 256 subnets for smart home segmentation.
- Enterprises running dual stack during a multi-year migration, keeping IPv4 for legacy apps while shifting new services to IPv6-first.
- Mobile carriers using NAT64/DNS64 to run IPv6-only core networks while still letting devices reach the IPv4 internet.
- Content delivery networks using anycast IPv6 addresses so users are routed to the nearest edge node automatically.
- IoT deployments using SLAAC because provisioning thousands of devices with DHCP leases isn’t practical.
Common Mistakes to Avoid
- Assuming NAT is required in IPv6 — it isn’t, and trying to force NAT thinking behavior often complicates security architecture unnecessarily.
- Forgetting to update firewall and monitoring rules to cover IPv6 traffic, not just IPv4.
- Using subnet sizes smaller than /64, which breaks SLAAC and many IPv6 features that assume a 64-bit host portion.
- Confusing link-local addresses with globally routable ones during troubleshooting.
- Leaving default Router Advertisement settings unmanaged on production networks, opening the door to rogue RA attacks.
FAQs
Does IPv6 use subnet masks like IPv4? Not in the same dotted-decimal way. IPv6 uses CIDR notation exclusively (like /64), and there’s no equivalent to IPv4’s subnet mask calculations for host counts, since the host portion is standardized at 64 bits.
Do I need NAT with IPv6? No. IPv6’s address space is large enough that NAT isn’t required for address conservation. Some organizations still use NPTv6 (Network Prefix Translation) for specific renumbering scenarios, but it’s not a security requirement the way NAT is often assumed to be in IPv4.
Can IPv6 and IPv4 coexist on the same network? Yes, this is called dual stack and it’s the most common transition strategy in use today.
What’s the difference between link-local and unique local addresses? Link-local (fe80::/10) only works on the local network segment and isn’t routable. Unique local (fc00::/7) is routable within a private network but not on the public internet, similar in spirit to RFC1918 IPv4 space.
Why does my IPv6 address change periodically? That’s likely IPv6 Privacy Extensions (RFC 4941) at work, which randomizes the interface ID to prevent long-term device tracking.
Interview Questions on IPv6
- Explain the structure of an IPv6 address and how compression rules work.
- What is the difference between SLAAC and DHCPv6?
- Why doesn’t IPv6 use broadcast, and what replaces it?
- What is Neighbor Discovery Protocol, and what ICMPv6 types does it rely on?
- How would you troubleshoot a host that has an IPv6 address but no internet connectivity?
- What’s the purpose of a Unique Local Address, and how is it different from a Global Unicast Address?
- Describe how NAT64/DNS64 allows IPv6-only clients to reach IPv4 resources.
- Why is a /64 the standard subnet size in most IPv6 deployments?
- What security risks are specific to IPv6 that don’t exist in IPv4, and how do you mitigate them?
- What’s the difference between 6to4 tunneling and dual stack?
Printable Quick-Reference Summary
| Category | Key Facts |
|---|---|
| Address length | 128 bits, 8 groups of hex separated by colons |
| Loopback | ::1 |
| Link-local prefix | fe80::/10 |
| ULA prefix | fc00::/7 |
| Global unicast prefix | 2000::/3 |
| Multicast prefix | ff00::/8 |
| Standard subnet size | /64 |
| Point-to-point link size | /127 |
| Common ISP allocation | /48 or /56 |
| Address autoconfig | SLAAC or DHCPv6 |
| No broadcast | Multicast handles all group communication |
| No NAT requirement | Address space large enough to avoid it |
Official Documentation and Further Reading
- RFC 8200 – Internet Protocol, Version 6 (IPv6) Specification
- RFC 4291 – IP Version 6 Addressing Architecture
- RFC 4941 – Privacy Extensions for Stateless Address Autoconfiguration
- IANA IPv6 Address Space Registry
- Cisco IPv6 Configuration Guide
I keep this page open in a tab whenever I’m configuring or troubleshooting IPv6, and I hope it saves you the same amount of time it’s saved me.