๐ŸŽฏ Lab Objectives

  • Understand the IPv6 address format and types
  • Configure global unicast and link-local addresses
  • Use EUI-64 to auto-generate interface IDs
  • Configure SLAAC for automatic address assignment
  • Configure IPv6 static routes
๐Ÿ‘ถ
IPv4 exhaustion is real โ€” all 4.3 billion IPv4 addresses are allocated. IPv6 provides 340 undecillion addresses (3.4ร—10ยณโธ). The internet backbone is already dual-stack. CCNA tests both.

Step 1 โ€” Why IPv6?

# IPv4 problems IPv6 solves:
Problem 1: Address exhaustion (only 4.3 billion IPv4 addresses)
  IPv6 fix: 128-bit addresses = 340 undecillion addresses

Problem 2: NAT complexity (private โ†’ public translation)
  IPv6 fix: every device gets a globally unique public address

Problem 3: No built-in security
  IPv6 fix: IPSec mandatory (though often optional in practice)

Problem 4: Fragmentation at every hop
  IPv6 fix: only source can fragment; routers don't

# IPv4 vs IPv6:
IPv4: 32-bit  โ†’ 192.168.1.1
IPv6: 128-bit โ†’ 2001:0db8:85a3:0000:0000:8a2e:0370:7334

Step 2 โ€” IPv6 Address Types

# IPv6 address format: 8 groups of 4 hex digits, separated by :
2001:0db8:85a3:0000:0000:8a2e:0370:7334

# Abbreviation rules:
# 1. Drop leading zeros: 0db8 โ†’ db8, 0000 โ†’ 0
2001:db8:85a3:0:0:8a2e:370:7334

# 2. Replace consecutive all-zero groups with :: (once only!)
2001:db8:85a3::8a2e:370:7334

# IPv6 address types:
Global Unicast (GUA):  2000::/3   โ†’ like public IPv4, routable on internet
  Example: 2001:db8::/32 (documentation range)

Link-Local:  FE80::/10   โ†’ only valid on local segment, NOT routed
  Every IPv6 interface auto-generates one (FE80::...)
  Used for: neighbor discovery, routing protocol hello packets

Loopback:    ::1          โ†’ like 127.0.0.1 in IPv4
Unspecified: ::           โ†’ like 0.0.0.0 in IPv4
Multicast:   FF00::/8     โ†’ like 224.0.0.0/4 in IPv4
Unique Local: FC00::/7    โ†’ like private IPv4 (not internet routable)

Step 3 โ€” Configure IPv6 on Cisco

# Enable IPv6 routing (required on routers)
ipv6 unicast-routing

# Configure a Global Unicast Address (GUA):
interface GigabitEthernet0/0
 ipv6 address 2001:db8:1::1/64
 no shutdown

# The /64 prefix is standard for most IPv6 subnets
# /64 means first 64 bits = network, last 64 bits = host

# Link-local is auto-generated but you can set it manually:
interface GigabitEthernet0/0
 ipv6 address FE80::1 link-local

# Configure multiple addresses on one interface:
interface GigabitEthernet0/0
 ipv6 address 2001:db8:1::1/64
 ipv6 address 2001:db8:2::1/64
 ipv6 address FE80::1 link-local
 no shutdown

Step 4 โ€” EUI-64 (Auto Interface ID)

# EUI-64 generates the 64-bit host portion from the MAC address
# Process:
MAC:  00:50:56:AB:CD:EF  (48-bit)
Step 1: Split into two halves: 0050:56  |  ABCDEF
Step 2: Insert FF:FE in middle: 0050:56FF:FEAB:CDEF
Step 3: Flip bit 7 of first byte: 00 โ†’ 02 (universal/local bit)
Result: 0250:56FF:FEAB:CDEF

With prefix 2001:db8::/64:
Full IPv6 address: 2001:db8::0250:56FF:FEAB:CDEF

# Configure EUI-64 on Cisco (let the router auto-generate the host part):
interface GigabitEthernet0/0
 ipv6 address 2001:db8:1::/64 eui-64
 no shutdown

# Verify what address was generated:
show ipv6 interface GigabitEthernet0/0

Step 5 โ€” SLAAC & DHCPv6

# SLAAC = Stateless Address Autoconfiguration
# Hosts auto-configure IPv6 without a DHCP server

# How SLAAC works:
1. Router sends RA (Router Advertisement) every 200 seconds
   โ†’ Contains: prefix (e.g. 2001:db8:1::/64), default gateway, flags
2. Host receives RA
3. Host generates interface ID (EUI-64 or random)
4. Host combines: RA prefix + interface ID = full IPv6 address
5. Host uses router's link-local address as default gateway

# Enable SLAAC on router interface:
interface GigabitEthernet0/0
 ipv6 address 2001:db8:1::1/64
 ipv6 nd ra interval 30      # send RA every 30 seconds (default 200)
 no ipv6 nd ra suppress      # make sure RAs are sent

# Stateful DHCPv6 (server assigns full address, like DHCPv4):
ipv6 dhcp pool IPV6_POOL
 address prefix 2001:db8:1::/64
 dns-server 2001:4860:4860::8888    # Google's IPv6 DNS
 domain-name kalirange.local

interface GigabitEthernet0/0
 ipv6 dhcp server IPV6_POOL
 ipv6 nd managed-config-flag        # tells hosts to use DHCPv6 for address

Step 6 โ€” IPv6 Static Routes

# IPv6 static route syntax:
# ipv6 route DESTINATION/PREFIX NEXT-HOP

# Next-hop by IPv6 address:
ipv6 route 2001:db8:2::/64 2001:db8:12::2

# Next-hop by link-local address (must specify exit interface too!):
ipv6 route 2001:db8:2::/64 GigabitEthernet0/1 FE80::2

# IPv6 default route:
ipv6 route ::/0 FE80::1 GigabitEthernet0/0

# Floating static (backup) โ€” higher admin distance:
ipv6 route 2001:db8:2::/64 FE80::3 GigabitEthernet0/2 200

Step 7 โ€” Verify IPv6

# Show all IPv6 addresses on all interfaces
show ipv6 interface brief
GigabitEthernet0/0  [up/up]
  FE80::1          โ† link-local (auto)
  2001:DB8:1::1    โ† global unicast (configured)

# Show IPv6 routing table
show ipv6 route
C  2001:DB8:1::/64 [0/0] via GigabitEthernet0/0, directly connected
S  2001:DB8:2::/64 [1/0] via FE80::2, GigabitEthernet0/1

# Ping IPv6
ping ipv6 2001:db8:2::1
ping 2001:db8::1 source Gi0/0   # source-specific ping

# Ping link-local (must specify interface):
ping FE80::1 GigabitEthernet0/0

# Show neighbour discovery table (IPv6 equivalent of ARP table)
show ipv6 neighbors

# On Linux:
ip -6 addr show                 # IPv6 addresses
ip -6 route show                # IPv6 routes
ping6 2001:db8::1               # IPv6 ping
โœ…
Lab Complete! IPv6 appears on every CCNA exam. Know the address types, /64 prefix convention, SLAAC, EUI-64, and how IPv6 routing differs from IPv4 (link-local next-hops need exit interface specified).
Related: Static Routing โ†’ โ† All Labs
// guided terminal

Try It Live

Type the commands from the steps above. The terminal simulates the expected output for this lab.

KaliRange ~ Terminal type help for commands