IPv6 Routing — OSPFv3 & EIGRPv6 Configuration, Adjacency & Verification
IPv6 does not simply bolt onto existing IPv4 routing protocols — it requires dedicated protocol versions rebuilt from the ground up to handle 128-bit addresses, link-local next-hops, and IPv6-native multicast. OSPFv3 is not merely OSPF with larger address fields. It was redesigned to be address-family agnostic: the same OSPFv3 process can carry both IPv6 and IPv4 topology information simultaneously using address-family containers. The fundamental algorithmic core (Dijkstra SPF, LSA flooding, area hierarchy) is identical to OSPFv2 — but the configuration model, the LSA types, the authentication mechanism, and the neighbour discovery method are all different.
EIGRPv6 undergoes an equally significant evolution.
The classic router eigrp [asn] model with
network statements is replaced — or supplemented —
by the named EIGRP mode, which provides
a unified configuration hierarchy for both IPv4 and IPv6
address families under a single named EIGRP process. EIGRPv6
uses IPv6 link-local addresses as next-hops (just like OSPFv3),
which means the IPv6 routing table shows link-local next-hops
alongside the specific interface — a combination that confuses
engineers who expect to see global unicast next-hops.
This lab walks through the complete IPv6 routing setup:
enabling ipv6 unicast-routing, assigning
global unicast and link-local addresses, configuring
OSPFv3 using both the classic interface-level method and
the address-family method, configuring EIGRPv6 in named
mode, verifying neighbour adjacency, and interpreting
the IPv6 routing table. For IPv6 address fundamentals
see IPv6 Basic
Configuration. For the IPv4 equivalents of these
protocols see
OSPF Multi-Area Configuration and
EIGRP
Configuration. For IPv6 summarization and
prefix aggregation see
Route
Summarization & Aggregation.
1. Core Concepts — IPv6 Routing Protocol Differences
OSPFv2 vs OSPFv3 — Key Differences
| Feature | OSPFv2 (IPv4) | OSPFv3 (IPv6) |
|---|---|---|
| RFC | RFC 2328 | RFC 5340 |
| Address family | IPv4 only | Originally IPv6; extended to carry both AF (address families) via RFC 5838 |
| Network statements | network [prefix] [wildcard] area [n] under router process |
No network statements — interfaces are enabled directly with ipv6 ospf [pid] area [n] |
| Neighbour discovery | Uses interface's IPv4 address for Hello sourcing | Uses IPv6 link-local address — global unicast not required for neighbour formation |
| Next-hop in routing table | Global unicast or directly connected IPv4 next-hop | IPv6 link-local next-hop — shown as FE80::/10 address via interface |
| Router ID | Highest loopback IP or highest active interface IP (IPv4) | Must be configured manually if no IPv4 addresses exist — OSPFv3 RID is still a 32-bit dotted-decimal value |
| Authentication | Built-in MD5 or plain text via ip ospf authentication |
Uses IPsec AH/ESP on the interface — ipv6 ospf authentication ipsec |
| LSA types added | Types 1–5 (plus 7 for NSSA) — see OSPF Areas & LSAs | New: Type 8 (Link LSA — link-local address + on-link prefixes) and Type 9 (Intra-Area Prefix LSA — replaces address info stripped from Type 1/2) |
| Address info in LSAs | IPv4 prefixes embedded in Router and Network LSAs (Type 1/2) | Prefix information separated into Type 8/9 LSAs — Type 1/2 carry only topology (no addresses) |
| Configuration model | Process-centric: router ospf [pid] with network statements |
Interface-centric (classic) or address-family mode (modern) |
EIGRPv4 vs EIGRPv6 — Key Differences
| Feature | EIGRPv4 (Classic) | EIGRPv6 / Named Mode |
|---|---|---|
| Process activation | router eigrp [asn] + network statements |
Classic: ipv6 router eigrp [asn] + ipv6 eigrp [asn] on each interface. Named: router eigrp [name] with address-family ipv6 |
| Shutdown behaviour | Active by default | Classic EIGRPv6: requires no shutdown under ipv6 router eigrp — shutdown by default |
| Next-hop | Global unicast IPv4 | IPv6 link-local — displayed as FE80::xx via interface in routing table |
| Multicast address | 224.0.0.10 | FF02::A (all EIGRP routers multicast) |
| Router ID | Highest loopback or interface IPv4 | Same 32-bit dotted-decimal RID — manually configured if no IPv4 addresses |
| Auto-summary | IOS 12.x: on by default. IOS 15.x: off by default | Not applicable — IPv6 has no classful boundaries |
| Named mode advantage | N/A | Single process for both IPv4 and IPv6; consistent configuration hierarchy; supports advanced features (wide metrics, add-paths) |
Link-Local Next-Hops — Why They Appear in the IPv6 Routing Table
IPv6 routing protocols (OSPFv3, EIGRPv6, RIPng) use LINK-LOCAL addresses
(FE80::/10) as the source and next-hop for routing protocol messages.
WHY LINK-LOCAL:
Link-local addresses are automatically generated on every IPv6-enabled
interface — they exist even if no global unicast address is configured.
This means two routers can form OSPF or EIGRP adjacency using only
link-local addresses, with no global unicast addresses needed on the
transit link (common for point-to-point WAN links).
WHAT THIS MEANS IN THE ROUTING TABLE:
show ipv6 route will show entries like:
O 2001:DB8:1::/48 [110/2]
via FE80::1, GigabitEthernet0/0
The next-hop is a link-local address (FE80::1) — it is ONLY meaningful
in the context of the specified interface (Gi0/0).
FE80::1 on Gi0/0 and FE80::1 on Gi0/1 are DIFFERENT next-hops.
The interface is MANDATORY — the routing table always shows both.
WHY NOT GLOBAL UNICAST NEXT-HOPS:
When OSPFv3/EIGRPv6 sends updates, the source address is the
link-local address. The receiving router learns the neighbour's
link-local address and uses it as the next-hop in the routing table.
Global unicast addresses are advertised as PREFIXES to reach,
not as next-hops to forward through.
router-id [x.x.x.x] under the routing process.
Best practice: always configure explicit Router IDs using
loopback-style addresses (e.g., 1.1.1.1, 2.2.2.2) for
unambiguous identification.
For IPv6 address type fundamentals including link-local vs
global unicast, see
IPv6 Link-Local vs
Global Addresses and
IPv6 Neighbour
Discovery.
2. Lab Topology
┌──────────────────────────────────────────────────┐
│ OSPFv3 Area 0 (Backbone) │
│ │
OSPF Area 1 │ NetsTuts_R1 NetsTuts_R2 │ OSPF Area 2
EIGRPv6 AS 100 │ RID: 1.1.1.1 RID: 2.2.2.2 │ EIGRPv6 AS 100
│ Lo0: 2001:DB8:0:1::1/128 Lo0: 2001:DB8:0:2::2/128
│ │
┌────────────┤ Gi0/0 Gi0/0 ├────────────┐
│ │ 2001:DB8:10:12::1/64 2001:DB8:10:12::2/64
│ │ Link-local: FE80::1 Link-local: FE80::2│
│ └──────────────────────────────────────────────────┘
│ (Area 0 backbone link)
│
NetsTuts_R1 NetsTuts_R2
Gi0/1: 2001:DB8:10:1::1/64 (Area 1) Gi0/1: 2001:DB8:10:2::2/64 (Area 2)
Gi0/2: 2001:DB8:10:3::1/64 (EIGRP AS100) Gi0/2: 2001:DB8:10:4::2/64 (EIGRP AS100)
Lo1: 2001:DB8:1::/48 (Area 1 prefix) Lo1: 2001:DB8:2::/48 (Area 2 prefix)
┌──────────────────────────────────────────────────┐
│ NetsTuts_R3 │
│ RID: 3.3.3.3 │
│ Gi0/0: 2001:DB8:10:3::3/64 (EIGRP link to R1) │
│ Gi0/1: 2001:DB8:10:4::3/64 (EIGRP link to R2) │
│ Lo0: 2001:DB8:0:3::3/128 │
│ Lo1: 2001:DB8:3::/48 (EIGRP-only prefix) │
└──────────────────────────────────────────────────┘
ROUTING DESIGN:
OSPFv3: R1 ↔ R2 in Area 0; R1 has Area 1 stub; R2 has Area 2 stub
EIGRPv6: R1 ↔ R3 ↔ R2 triangle; R3 loopback advertised via EIGRP
Both protocols run simultaneously; redistribution optional
3. Step 1 — Enable IPv6 Routing and Assign Addresses
Global IPv6 Routing Enable (All Routers)
! ── MUST be done before any IPv6 routing protocol works ───────── ! ── Default state: IPv6 unicast routing is DISABLED on Cisco IOS ─ NetsTuts_R1(config)#ipv6 unicast-routing ! ^^^^^^^^^^^^^^^^^^^^ ! Enables IPv6 packet forwarding between interfaces. ! Without this, the router processes IPv6 traffic addressed ! TO ITSELF but does NOT forward IPv6 packets between interfaces. ! This is the single most common reason IPv6 routing fails. ! ── Verify it is enabled ───────────────────────────────────────── NetsTuts_R1#show ipv6 cef ! If CEF shows prefixes, ipv6 unicast-routing is on. ! If "IPv6 CEF is not running" → ipv6 unicast-routing not configured.
Interface Address Assignment — R1
! ── Configure global unicast addresses and explicit link-locals ── NetsTuts_R1(config)#interface Loopback0 NetsTuts_R1(config-if)#ipv6 address 2001:DB8:0:1::1/128 NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface Loopback1 NetsTuts_R1(config-if)#ipv6 address 2001:DB8:1::/48 ! ^^^^^^^^^^^^^^ ! Loopback with /48 — advertised as an OSPFv3 prefix into Area 1 NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#description R1-to-R2-Area0-backbone NetsTuts_R1(config-if)#ipv6 address 2001:DB8:10:12::1/64 NetsTuts_R1(config-if)#ipv6 address FE80::1 link-local ! ^^^^^^^ ! Explicit link-local — simplifies verification and troubleshooting. ! Default EUI-64 link-locals are long and hard to type in pings. NetsTuts_R1(config-if)#no shutdown NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface GigabitEthernet0/1 NetsTuts_R1(config-if)#description R1-Area1-stub-segment NetsTuts_R1(config-if)#ipv6 address 2001:DB8:10:1::1/64 NetsTuts_R1(config-if)#ipv6 address FE80::1 link-local NetsTuts_R1(config-if)#no shutdown NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface GigabitEthernet0/2 NetsTuts_R1(config-if)#description R1-to-R3-EIGRPv6 NetsTuts_R1(config-if)#ipv6 address 2001:DB8:10:3::1/64 NetsTuts_R1(config-if)#ipv6 address FE80::1 link-local NetsTuts_R1(config-if)#no shutdown NetsTuts_R1(config-if)#exit
Interface Address Assignment — R2
NetsTuts_R2(config)#ipv6 unicast-routing NetsTuts_R2(config)#interface Loopback0 NetsTuts_R2(config-if)#ipv6 address 2001:DB8:0:2::2/128 NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface Loopback1 NetsTuts_R2(config-if)#ipv6 address 2001:DB8:2::/48 NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface GigabitEthernet0/0 NetsTuts_R2(config-if)#description R2-to-R1-Area0-backbone NetsTuts_R2(config-if)#ipv6 address 2001:DB8:10:12::2/64 NetsTuts_R2(config-if)#ipv6 address FE80::2 link-local NetsTuts_R2(config-if)#no shutdown NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface GigabitEthernet0/1 NetsTuts_R2(config-if)#description R2-Area2-stub-segment NetsTuts_R2(config-if)#ipv6 address 2001:DB8:10:2::2/64 NetsTuts_R2(config-if)#ipv6 address FE80::2 link-local NetsTuts_R2(config-if)#no shutdown NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface GigabitEthernet0/2 NetsTuts_R2(config-if)#description R2-to-R3-EIGRPv6 NetsTuts_R2(config-if)#ipv6 address 2001:DB8:10:4::2/64 NetsTuts_R2(config-if)#ipv6 address FE80::2 link-local NetsTuts_R2(config-if)#no shutdown NetsTuts_R2(config-if)#exit
Interface Address Assignment — R3
NetsTuts_R3(config)#ipv6 unicast-routing
NetsTuts_R3(config)#interface Loopback0
NetsTuts_R3(config-if)#ipv6 address 2001:DB8:0:3::3/128
NetsTuts_R3(config-if)#exit
NetsTuts_R3(config)#interface Loopback1
NetsTuts_R3(config-if)#ipv6 address 2001:DB8:3::/48
NetsTuts_R3(config-if)#exit
NetsTuts_R3(config)#interface GigabitEthernet0/0
NetsTuts_R3(config-if)#description R3-to-R1-EIGRPv6
NetsTuts_R3(config-if)#ipv6 address 2001:DB8:10:3::3/64
NetsTuts_R3(config-if)#ipv6 address FE80::3 link-local
NetsTuts_R3(config-if)#no shutdown
NetsTuts_R3(config-if)#exit
NetsTuts_R3(config)#interface GigabitEthernet0/1
NetsTuts_R3(config-if)#description R3-to-R2-EIGRPv6
NetsTuts_R3(config-if)#ipv6 address 2001:DB8:10:4::3/64
NetsTuts_R3(config-if)#ipv6 address FE80::3 link-local
NetsTuts_R3(config-if)#no shutdown
NetsTuts_R3(config-if)#exit
! ── Verify address assignment ────────────────────────────────────
NetsTuts_R1#show ipv6 interface brief
GigabitEthernet0/0 [up/up]
FE80::1 ← link-local (explicit)
2001:DB8:10:12::1 ← global unicast
GigabitEthernet0/1 [up/up]
FE80::1
2001:DB8:10:1::1
GigabitEthernet0/2 [up/up]
FE80::1
2001:DB8:10:3::1
Loopback0 [up/up]
2001:DB8:0:1::1
Loopback1 [up/up]
2001:DB8:1::
4. Step 2 — OSPFv3 Configuration (Classic Interface Method)
The classic OSPFv3 configuration method activates OSPFv3
directly on each interface using the
ipv6 ospf [process-id] area [area-id]
command. There are no network statements. Each interface
is individually assigned to a process and area. This is
the most direct method and maps cleanly to per-interface
control.
R1 — OSPFv3 Process and Interface Assignment
! ── Step 1: Create the OSPFv3 process and set Router ID ────────── NetsTuts_R1(config)#ipv6 router ospf 1 ! ^^^^^^^^^^^^^^^^ ! 'ipv6 router ospf' creates the OSPFv3 process ! Process ID 1 — local significance only (same as OSPFv2) NetsTuts_R1(config-rtr)#router-id 1.1.1.1 ! ^^^^^^^^^^^^^^^^ ! 32-bit RID in dotted-decimal — MANDATORY if no IPv4 addresses ! Best practice: always configure explicitly NetsTuts_R1(config-rtr)#exit ! ── Step 2: Assign interfaces to OSPFv3 areas ──────────────────── ! ── Note: done under the INTERFACE, not under the router process ── NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ipv6 ospf 1 area 0 ! ^^^^^^ ^ ^^^^^^ ! command pid area backbone ! ↑ This activates OSPFv3 on this interface NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface GigabitEthernet0/1 NetsTuts_R1(config-if)#ipv6 ospf 1 area 1 ! ^^^^ ! Area 1 — stub area for branch segment NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface Loopback0 NetsTuts_R1(config-if)#ipv6 ospf 1 area 0 ! area 0 — loopback in backbone NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface Loopback1 NetsTuts_R1(config-if)#ipv6 ospf 1 area 1 ! area 1 — branch prefix in area 1 NetsTuts_R1(config-if)#exit ! ── Optional: set OSPFv3 interface cost ────────────────────────── NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ipv6 ospf cost 10 NetsTuts_R1(config-if)#exit ! ── Optional: passive interface (no Hellos on stub LAN) ────────── NetsTuts_R1(config)#ipv6 router ospf 1 NetsTuts_R1(config-rtr)#passive-interface GigabitEthernet0/1 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! No OSPFv3 Hellos sent on Gi0/1 — prefix still advertised ! Same concept as OSPFv2 passive-interface NetsTuts_R1(config-rtr)#exit
R2 — OSPFv3 Process and Interface Assignment
NetsTuts_R2(config)#ipv6 router ospf 1 NetsTuts_R2(config-rtr)#router-id 2.2.2.2 NetsTuts_R2(config-rtr)#exit NetsTuts_R2(config)#interface GigabitEthernet0/0 NetsTuts_R2(config-if)#ipv6 ospf 1 area 0 ! Backbone link to R1 NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface GigabitEthernet0/1 NetsTuts_R2(config-if)#ipv6 ospf 1 area 2 ! Area 2 stub segment NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface Loopback0 NetsTuts_R2(config-if)#ipv6 ospf 1 area 0 NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#interface Loopback1 NetsTuts_R2(config-if)#ipv6 ospf 1 area 2 NetsTuts_R2(config-if)#exit NetsTuts_R2(config)#ipv6 router ospf 1 NetsTuts_R2(config-rtr)#passive-interface GigabitEthernet0/1 NetsTuts_R2(config-rtr)#exit
ipv6 ospf [pid] area [n] command must
match between neighbours on the same link. The Router ID
must be unique within the OSPF domain — using 1.1.1.1 and
2.2.2.2 makes the topology self-documenting.
5. OSPFv3 Address-Family Mode (Modern Method)
IOS 15.x introduced OSPFv3 address-family mode, which mirrors the structure of named EIGRP. A single OSPFv3 process can carry both IPv4 and IPv6 topology under separate address-family containers. This is the recommended method for new deployments and is required when running OSPFv3 for IPv4 (OSPFv3 AF mode replaces OSPFv2 when the requirement is protocol standardisation).
! ── OSPFv3 Address-Family Method (modern IOS 15.x+) ────────────── ! ── Replaces the classic 'ipv6 ospf' interface command ──────────── NetsTuts_R1(config)#router ospf 1 ! ^^^^^^^^^^^^ ! Note: 'router ospf' (not 'ipv6 router ospf') in AF mode ! The same process handles both IPv4 and IPv6 AFs NetsTuts_R1(config-router)#router-id 1.1.1.1 ! ! ── Define IPv6 address-family ─────────────────────────────────── NetsTuts_R1(config-router)#address-family ipv6 unicast NetsTuts_R1(config-router-af)#area 1 range 2001:DB8:1::/48 ! ^^^^^^^^^^^^^^^^^^^ ! OSPFv3 IPv6 summarization — same concept as OSPFv2 area range ! Summarizes Area 1 IPv6 prefixes into Area 0 NetsTuts_R1(config-router-af)#exit NetsTuts_R1(config-router)#exit ! ── Assign interfaces via ospfv3 command (AF mode uses different cmd) NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ospfv3 1 ipv6 area 0 ! ^^^^^^^ ^^^ ! 'ospfv3' keyword address family area ! NOT 'ipv6 ospf' — that is the classic method NetsTuts_R1(config)#interface GigabitEthernet0/1 NetsTuts_R1(config-if)#ospfv3 1 ipv6 area 1 NetsTuts_R1(config-if)#exit ! ── IMPORTANT: Classic and AF methods are NOT compatible ───────── ! ── Do NOT mix 'ipv6 ospf' and 'ospfv3' on the same router ─────── ! ── Choose one method and use it consistently ──────────────────── ! ── Dual-stack: run both IPv4 and IPv6 under one process ───────── NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ospfv3 1 ipv4 area 0 ! IPv4 AF in OSPFv3 NetsTuts_R1(config-if)#ospfv3 1 ipv6 area 0 ! IPv6 AF in OSPFv3 NetsTuts_R1(config-if)#exit ! ← One process carries both — removes need for separate OSPFv2 process
ipv6 ospf) and
AF mode (ospfv3) is a design decision that
affects the entire router — they cannot be mixed on the
same process. For IPv6-only deployments on modern IOS,
either method works. For dual-stack deployments where
you want a single unified OSPF process for both address
families, the AF mode is the only option. The classic
method is simpler to understand and still widely used
on CCNP lab exams.
6. Step 3 — EIGRPv6 Configuration (Named Mode)
Named EIGRP mode is the recommended modern approach for
both IPv4 and IPv6 EIGRP. A single named process
(router eigrp [name]) contains separate
address-family sections for IPv4 and IPv6. Interface-level
activation is handled within the
af-interface sub-configuration. Named mode
also unlocks advanced features unavailable in classic mode:
wide metrics (64-bit), add-paths, and per-AF stub configuration.
R1 — EIGRPv6 Named Mode
! ── Named EIGRP process ────────────────────────────────────────── NetsTuts_R1(config)#router eigrp NETSTUTS ! ^^^^^^^^ ! Process name — locally significant, any string NetsTuts_R1(config-router)#address-family ipv6 unicast autonomous-system 100 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! IPv6 address family, AS number 100 ! (AS number must match on all EIGRP neighbours) NetsTuts_R1(config-router-af)#eigrp router-id 1.1.1.1 ! ^^^^^^^^^^^^^^^^^^ ! 32-bit RID — mandatory if no IPv4 addresses exist ! ── Interface-level configuration ──────────────────────────────── NetsTuts_R1(config-router-af)#af-interface GigabitEthernet0/2 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! Configure EIGRP parameters for specific interface NetsTuts_R1(config-router-af-interface)#hello-interval 5 NetsTuts_R1(config-router-af-interface)#hold-time 15 NetsTuts_R1(config-router-af-interface)#exit ! ── Passive interface (no Hellos — prefix still advertised) ────── NetsTuts_R1(config-router-af)#af-interface Loopback1 NetsTuts_R1(config-router-af-interface)#passive-interface NetsTuts_R1(config-router-af-interface)#exit ! ── Network statement (activate EIGRP on matching interfaces) ───── NetsTuts_R1(config-router-af)#network 2001:DB8::/32 ! ^^^^^^^^^^^^^^^^^^^^^^^^^ ! Activate EIGRPv6 on all interfaces with addresses in 2001:DB8::/32 ! This covers Gi0/2 (2001:DB8:10:3::/64) and Loopback1 (2001:DB8:1::/48) NetsTuts_R1(config-router-af)#exit NetsTuts_R1(config-router)#exit
R2 — EIGRPv6 Named Mode
NetsTuts_R2(config)#router eigrp NETSTUTS NetsTuts_R2(config-router)#address-family ipv6 unicast autonomous-system 100 NetsTuts_R2(config-router-af)#eigrp router-id 2.2.2.2 NetsTuts_R2(config-router-af)#af-interface GigabitEthernet0/2 NetsTuts_R2(config-router-af-interface)#hello-interval 5 NetsTuts_R2(config-router-af-interface)#hold-time 15 NetsTuts_R2(config-router-af-interface)#exit NetsTuts_R2(config-router-af)#af-interface Loopback1 NetsTuts_R2(config-router-af-interface)#passive-interface NetsTuts_R2(config-router-af-interface)#exit NetsTuts_R2(config-router-af)#network 2001:DB8::/32 NetsTuts_R2(config-router-af)#exit NetsTuts_R2(config-router)#exit
R3 — EIGRPv6 Named Mode (Hub of EIGRP Triangle)
NetsTuts_R3(config)#router eigrp NETSTUTS NetsTuts_R3(config-router)#address-family ipv6 unicast autonomous-system 100 NetsTuts_R3(config-router-af)#eigrp router-id 3.3.3.3 NetsTuts_R3(config-router-af)#af-interface GigabitEthernet0/0 NetsTuts_R3(config-router-af-interface)#hello-interval 5 NetsTuts_R3(config-router-af-interface)#hold-time 15 NetsTuts_R3(config-router-af-interface)#exit NetsTuts_R3(config-router-af)#af-interface GigabitEthernet0/1 NetsTuts_R3(config-router-af-interface)#hello-interval 5 NetsTuts_R3(config-router-af-interface)#hold-time 15 NetsTuts_R3(config-router-af-interface)#exit NetsTuts_R3(config-router-af)#af-interface Loopback1 NetsTuts_R3(config-router-af-interface)#passive-interface NetsTuts_R3(config-router-af-interface)#exit NetsTuts_R3(config-router-af)#network 2001:DB8::/32 NetsTuts_R3(config-router-af)#exit NetsTuts_R3(config-router)#exit
Classic EIGRPv6 Method (Legacy — for reference)
! ── LEGACY method — shown for comparison / older IOS ───────────── ! ── Named mode is preferred for new deployments ────────────────── ! ── Step 1: Create the IPv6 EIGRP process ──────────────────────── NetsTuts_R1(config)#ipv6 router eigrp 100 ! ^^^^^^^^^^^^^^^^^^^^ NetsTuts_R1(config-rtr)#eigrp router-id 1.1.1.1 ! ── CRITICAL: Classic EIGRPv6 is SHUTDOWN by default ───────────── NetsTuts_R1(config-rtr)#no shutdown ! ^^^^^^^^^^^ ! Without this, the EIGRP process is administratively down. ! This is the #1 reason classic EIGRPv6 fails to form adjacency. NetsTuts_R1(config-rtr)#exit ! ── Step 2: Activate on each interface (no network statements) ──── NetsTuts_R1(config)#interface GigabitEthernet0/2 NetsTuts_R1(config-if)#ipv6 eigrp 100 ! ^^^^^^^^^^^^ ! Activates EIGRP AS 100 on this interface NetsTuts_R1(config-if)#exit NetsTuts_R1(config)#interface Loopback1 NetsTuts_R1(config-if)#ipv6 eigrp 100 NetsTuts_R1(config-if)#exit ! ── KEY DIFFERENCE FROM NAMED MODE: ! Classic: activate per-interface with 'ipv6 eigrp [asn]' ! Named: activate via 'network' statement or per-interface in af-interface ! Classic: requires 'no shutdown' under 'ipv6 router eigrp' ! Named: active by default when address-family is configured
7. OSPFv3 Authentication with IPsec
OSPFv3 removed the built-in authentication mechanism present in OSPFv2 and instead relies on IPv6's native security extension: IPsec. OSPFv3 authentication uses IPsec AH (Authentication Header) for integrity-only protection or IPsec ESP (Encapsulating Security Payload) for both integrity and encryption. This provides stronger security than OSPFv2's MD5 but requires more configuration.
! ── OSPFv3 AH authentication — integrity only (no encryption) ──── ! ── Applied per-interface or per-area ───────────────────────────── ! ── Method 1: Per-area authentication (under ospf process) ──────── NetsTuts_R1(config)#ipv6 router ospf 1 NetsTuts_R1(config-rtr)#area 0 authentication ipsec spi 256 sha1 hex ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! AH with SHA-1, SPI 256 ! Key must be 40 hex chars for SHA-1 123456789012345678901234567890123456789A ! ↑ 40 hex chars = 160-bit SHA-1 key NetsTuts_R1(config-rtr)#exit ! ── Method 2: Per-interface authentication ─────────────────────── NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ipv6 ospf authentication ipsec spi 256 sha1 hex 123456789012345678901234567890123456789A NetsTuts_R1(config-if)#exit ! ── OSPFv3 ESP encryption + authentication ──────────────────────── NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ipv6 ospf encryption ipsec spi 300 esp aes-cbc 128 hex ! ^^^ ! AES-128 encryption A1B2C3D4E5F60718293A4B5C6D7E8F901A2B3C4D5E6F70819293A4B5C6D7E8F9 ! ↑ 32 hex chars = 128-bit AES key ! Then add authentication (SHA-1 or MD5): NetsTuts_R1(config-if)#ipv6 ospf encryption ipsec spi 300 esp aes-cbc 128 hex A1B2C3D4E5F60718293A4B5C6D7E8F901A2B3C4D5E6F70819293A4B5C6D7E8F9 sha1 hex 123456789012345678901234567890123456789A NetsTuts_R1(config-if)#exit ! ── NOTE: SPI and keys must match identically on BOTH ends ──────── ! ── If they differ, OSPFv3 adjacency will not form ──────────────── ! ── Verify: show crypto ipsec sa | show ipv6 ospf neighbor ────────
8. Step 4 — Full Verification
OSPFv3 Neighbour Verification
! ── show ospfv3 neighbor ─────────────────────────────────────────
NetsTuts_R1#show ospfv3 neighbor
OSPFv3 1 address-family ipv6 (router-id 1.1.1.1)
Neighbor ID Pri State Dead Time Interface ID Interface
2.2.2.2 1 FULL/BDR 00:00:33 4 GigabitEthernet0/0
! ^^^ ^^^^ ^^^^^^^^
! Neighbour's RID (dotted-decimal)
! FULL = complete adjacency
! DR/BDR election result on multi-access link
! Time remaining before hold expires
! ── Alternate command (classic method) ────────────────────────────
NetsTuts_R1#show ipv6 ospf neighbor
! (identical output — both commands work for classic OSPFv3)
! ── Detailed neighbour output ────────────────────────────────────
NetsTuts_R1#show ospfv3 neighbor detail
Neighbor 2.2.2.2
In the area 0 via interface GigabitEthernet0/0
Neighbor: interface-id 4, link-local address FE80::2 ← neighbour's link-local
Neighbor priority is 1, State is FULL, 6 state changes
DR is 2.2.2.2 BDR is 1.1.1.1
Options is 0x000013 -R -E V6-Bit
Dead timer due in 00:00:32
Neighbor is up for 00:08:44
Index 1/1/1, retransmission queue length 0, number of retransmission 0
First 0x0(0)/0x0(0)/0x0(0) Next 0x0(0)/0x0(0)/0x0(0)
Last retransmission scan length is 0, maximum is 0
Last retransmission scan time is 0 msec, maximum is 0 msec
OSPFv3 Database — New LSA Types
! ── show ospfv3 database ─────────────────────────────────────────
NetsTuts_R1#show ospfv3 database
OSPFv3 1 address-family ipv6 (router-id 1.1.1.1)
Router Link States (Area 0)
ADV Router Age Seq# Fragment ID Link count Bits
1.1.1.1 156 0x80000003 0 1 B ← ABR (B bit)
2.2.2.2 143 0x80000003 0 1 B ← ABR (B bit)
Net Link States (Area 0)
ADV Router Age Seq# Link ID Rtr count
2.2.2.2 143 0x80000001 4 2
Inter Area Prefix Link States (Area 0)
ADV Router Age Seq# Prefix
1.1.1.1 134 0x80000001 2001:DB8:1::/48 ← Area 1 prefix in Area 0
2.2.2.2 127 0x80000001 2001:DB8:2::/48 ← Area 2 prefix in Area 0
Link (Type-8) Link States (Area 0)
ADV Router Age Seq# Link ID Interface
1.1.1.1 156 0x80000001 3 GigabitEthernet0/0
2.2.2.2 143 0x80000001 4 GigabitEthernet0/0
! ← Type 8 Link LSA: carries link-local address + on-link prefixes
Intra Area Prefix Link States (Area 0)
ADV Router Age Seq# Link ID Ref lstype Ref LSID
1.1.1.1 156 0x80000002 0 0x2001 0
2.2.2.2 143 0x80000001 0 0x2001 0
! ← Type 9 Intra-Area-Prefix LSA: carries actual IPv6 prefixes
! (In OSPFv3, prefixes are SEPARATED from Router/Network LSAs)
IPv6 Routing Table — OSPFv3 Routes
NetsTuts_R1#show ipv6 route ospf
IPv6 Routing Table - default - 12 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
B - BGP, R - RIP, H - NHRP, I1 - ISIS L1, I2 - ISIS L2
IA - ISIS interarea, IS - ISIS summary, D - EIGRP, EX - EIGRP external
ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
RL - RPL, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
O 2001:DB8:0:2::2/128 [110/2]
via FE80::2, GigabitEthernet0/0 ← R2's loopback via link-local next-hop
OI 2001:DB8:2::/48 [110/3]
via FE80::2, GigabitEthernet0/0 ← Inter-area (OI) prefix from Area 2
! ── KEY: Link-local next-hop FE80::2 via Gi0/0 ───────────────────
! ── NOT a global unicast next-hop — this is OSPFv3/EIGRPv6 norm ──
NetsTuts_R1#show ipv6 route
IPv6 Routing Table - default - 16 entries
C 2001:DB8:10:12::/64 [0/0]
via GigabitEthernet0/0, directly connected
L 2001:DB8:10:12::1/128 [0/0]
via GigabitEthernet0/0, receive
O 2001:DB8:0:2::2/128 [110/2]
via FE80::2, GigabitEthernet0/0
OI 2001:DB8:2::/48 [110/3]
via FE80::2, GigabitEthernet0/0
D 2001:DB8:3::/48 [90/130816]
via FE80::3, GigabitEthernet0/2 ← EIGRPv6 route via R3's link-local
D 2001:DB8:0:3::3/128 [90/130816]
via FE80::3, GigabitEthernet0/2
L FF00::/8 [0/0]
via Null0, receive ← Multicast — always present
EIGRPv6 Neighbour Verification
! ── show ipv6 eigrp neighbors ────────────────────────────────────
NetsTuts_R1#show ipv6 eigrp neighbors
EIGRP-IPv6 VR(NETSTUTS) Address-Family Neighbors for AS(100)
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 Link-local address: Gi0/2 14 00:12:33 8 200 0 15
FE80::3
! ← Neighbour address is link-local FE80::3 on Gi0/2
! ── Named mode output includes VR(name) prefix ───────────────────
! ── Classic mode shows: "EIGRP-IPv6 Neighbors for AS(100)" ──────
! ── Detailed neighbour information ──────────────────────────────
NetsTuts_R1#show ipv6 eigrp neighbors detail
EIGRP-IPv6 VR(NETSTUTS) Address-Family Neighbors for AS(100)
H Address Interface Hold Uptime
0 Link-local address: Gi0/2 12 00:12:33
FE80::3
Version 23.0/2.0, Retrans: 1, Retries: 0, Prefixes: 3
Topology-ids from peer - 0
Topologies advertised to peer: base
Last startup serial 0
EIGRPv6 Topology Table
! ── show ipv6 eigrp topology ─────────────────────────────────────
NetsTuts_R1#show ipv6 eigrp topology
EIGRP-IPv6 VR(NETSTUTS) Topology Table for AS(100)/ID(1.1.1.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - reply Status, s - sia Status
P 2001:DB8:3::/48, 1 successors, FD is 130816
via FE80::3 (130816/128256), GigabitEthernet0/2 ← R3 is successor
P 2001:DB8:0:3::3/128, 1 successors, FD is 130816
via FE80::3 (130816/128256), GigabitEthernet0/2
P 2001:DB8:10:4::/64, 1 successors, FD is 130816
via FE80::3 (130816/128256), GigabitEthernet0/2
P 2001:DB8:2::/48, 1 successors, FD is 259072
via FE80::3 (259072/130816), GigabitEthernet0/2 ← R2's prefix via R3
Verification Command Summary
| Command | Protocol | What It Shows | Key Field to Check |
|---|---|---|---|
show ipv6 interface brief |
Both | All IPv6 addresses per interface — link-local and global unicast | State [up/up]; link-local FE80:: present; global addresses assigned |
show ospfv3 neighbor |
OSPFv3 | OSPFv3 adjacency table — neighbour RID, state, dead timer, interface | State = FULL/DR or FULL/BDR or FULL/ — any FULL state = healthy |
show ospfv3 database |
OSPFv3 | All LSA types — Router, Network, Inter-Area-Prefix, Link (T8), Intra-Area-Prefix (T9) | Type 8 (Link) and Type 9 (Intra-Area-Prefix) are OSPFv3-specific; verify both present |
show ipv6 ospf interface [int] |
OSPFv3 classic | OSPFv3 interface details — area, cost, DR/BDR, Hello/dead timers | Area assignment matches topology design; cost correct; DR/BDR elected |
show ipv6 eigrp neighbors |
EIGRPv6 | EIGRPv6 neighbour table — link-local address, interface, hold time, SRTT | Neighbour address = FE80:: link-local; Q Cnt = 0 (no stuck queued packets) |
show ipv6 eigrp topology |
EIGRPv6 | EIGRP topology table for IPv6 — successors, FD, AD per prefix | All prefixes in Passive (P) state; FD values reasonable; successors present |
show ipv6 route |
Both | Complete IPv6 routing table — C, L, O, OI, D, S prefixes | O/OI routes for OSPFv3; D routes for EIGRPv6; next-hop = FE80:: via interface |
show ipv6 route ospf |
OSPFv3 | OSPFv3-only routes — O (intra-area) and OI (inter-area) | OI routes = inter-area prefixes from other areas; via link-local next-hop |
show ipv6 protocols |
Both | All active IPv6 routing protocols — process IDs, RIDs, interfaces, neighbours | Protocol name; router ID; interfaces with protocol enabled; neighbour count |
ping ipv6 [address] |
Both | End-to-end IPv6 reachability test | 5/5 success rate; use source address to test specific paths |
9. Complete Configuration Reference & Key Points
Full IPv6 Routing Configuration — R1 (OSPFv3 + EIGRPv6 Named)
! ════════════════ R1 Complete Configuration ══════════════════════ ipv6 unicast-routing ! MUST be first — enables IPv6 forwarding ! ! ─── Interfaces ────────────────────────────────────────────────── interface Loopback0 ipv6 address 2001:DB8:0:1::1/128 ! interface Loopback1 ipv6 address 2001:DB8:1::/48 ipv6 ospf 1 area 1 ! interface GigabitEthernet0/0 description R1-to-R2-Area0 ipv6 address 2001:DB8:10:12::1/64 ipv6 address FE80::1 link-local ipv6 ospf 1 area 0 no shutdown ! interface GigabitEthernet0/1 description R1-Area1-stub ipv6 address 2001:DB8:10:1::1/64 ipv6 address FE80::1 link-local ipv6 ospf 1 area 1 no shutdown ! interface GigabitEthernet0/2 description R1-to-R3-EIGRP ipv6 address 2001:DB8:10:3::1/64 ipv6 address FE80::1 link-local no shutdown ! ! ─── OSPFv3 ────────────────────────────────────────────────────── ipv6 router ospf 1 router-id 1.1.1.1 passive-interface GigabitEthernet0/1 ! ! ─── EIGRPv6 Named Mode ────────────────────────────────────────── router eigrp NETSTUTS address-family ipv6 unicast autonomous-system 100 eigrp router-id 1.1.1.1 af-interface GigabitEthernet0/2 hello-interval 5 hold-time 15 exit-af-interface af-interface Loopback1 passive-interface exit-af-interface network 2001:DB8::/32 exit-address-family
IPv6 Routing Protocol Command Reference
| Command | Mode | Protocol | Purpose |
|---|---|---|---|
ipv6 unicast-routing |
Global config | All | Enable IPv6 packet forwarding between interfaces. Required before any IPv6 routing protocol works. |
ipv6 address FE80:: link-local |
Interface config | All | Assign explicit link-local address. Recommended over auto-generated EUI-64 link-locals. |
ipv6 router ospf [pid] |
Global config | OSPFv3 classic | Create OSPFv3 process. Configure router-id, passive-interfaces, and summarization here. |
router-id [x.x.x.x] |
Router/AF config | OSPFv3, EIGRPv6 | Set 32-bit router ID. Mandatory on IPv6-only routers. Best practice always. |
ipv6 ospf [pid] area [n] |
Interface config | OSPFv3 classic | Activate OSPFv3 on this interface and assign to specified area. Replaces network statements. |
ospfv3 [pid] ipv6 area [n] |
Interface config | OSPFv3 AF mode | AF-mode equivalent of ipv6 ospf area. Used when process created with router ospf. |
ipv6 ospf cost [n] |
Interface config | OSPFv3 | Override interface cost for OSPFv3 metric calculation. |
area [n] range [prefix/len] |
Router OSPFv3 config | OSPFv3 | Summarize IPv6 prefixes from area n as they cross the ABR. Same logic as OSPFv2 area range. |
ipv6 ospf authentication ipsec spi [n] sha1 hex [key] |
Interface config | OSPFv3 | Enable IPsec AH authentication on this interface. SPI and key must match on both ends. |
router eigrp [name] |
Global config | EIGRPv6 named | Create named EIGRP process. Name is locally significant. |
address-family ipv6 unicast autonomous-system [asn] |
Router EIGRP config | EIGRPv6 named | Enter IPv6 address-family. ASN must match on all neighbours. |
network [ipv6-prefix] |
AF config | EIGRPv6 named | Activate EIGRPv6 on interfaces matching the prefix. Advertise matching connected prefixes. |
ipv6 router eigrp [asn] |
Global config | EIGRPv6 classic | Create classic EIGRPv6 process. Requires no shutdown to activate. |
ipv6 eigrp [asn] |
Interface config | EIGRPv6 classic | Activate classic EIGRPv6 on this interface. No network statements in classic mode. |
Key Points & Exam Tips
ipv6 unicast-routingis the first command — always. Without it, the router processes IPv6 traffic addressed to itself but does not forward IPv6 packets between interfaces. No IPv6 routing protocol will work. Every IPv6 routing lab should begin with this command on every router. It is a global configuration command — not per-interface.- OSPFv3 uses interface-level activation, not network statements. In OSPFv2, you activate OSPF by listing network ranges under the router process. In OSPFv3 (classic method), you activate OSPF directly on the interface with
ipv6 ospf [pid] area [n]. The router process only contains the router-id, passive interfaces, and summarization — not the interface-to-area mappings. - IPv6 routing table next-hops are link-local addresses. Both OSPFv3 and EIGRPv6 use link-local addresses as next-hops.
show ipv6 routeshows entries likevia FE80::2, GigabitEthernet0/0. The interface name is mandatory — link-local addresses are only scoped to a single link and are meaningless without their interface context. - Classic EIGRPv6 is shutdown by default. When you create a classic EIGRPv6 process with
ipv6 router eigrp [asn], it is administratively shut down. You must issueno shutdownunder the process before it forms any adjacencies. Named mode EIGRP does not have this limitation — it activates automatically when the address-family is configured. - Router ID must be manually set on IPv6-only routers. OSPFv3 and EIGRPv6 use a 32-bit dotted-decimal Router ID — the same format as IPv4. The RID is auto-selected from IPv4 addresses if they exist. On an IPv6-only router with no IPv4 addresses configured, the process cannot start without an explicit
router-id [x.x.x.x]command. - OSPFv3 authentication uses IPsec, not built-in MD5. OSPFv2 supports authentication directly with
ip ospf authentication md5. OSPFv3 removed this built-in mechanism and uses IPv6's native IPsec framework (AH for integrity, ESP for encryption). Both routers on a link must configure identical SPI numbers and keys. - OSPFv3 adds two new LSA types. Type 8 (Link LSA) carries the link-local address and on-link prefixes for each interface. Type 9 (Intra-Area-Prefix LSA) carries the actual IPv6 prefixes that are connected to the router — this information was embedded in Type 1/2 LSAs in OSPFv2 but is separated out in OSPFv3 to keep the topology LSAs address-family agnostic. See OSPF Areas & LSAs for the OSPFv2 baseline.
- OSPFv3 classic and AF mode cannot be mixed on the same router. Interfaces using
ipv6 ospf [pid] area [n](classic) and interfaces usingospfv3 [pid] ipv6 area [n](AF mode) in the same OSPFv3 process will conflict. Choose one method per router and apply it consistently across all interfaces. - On the CCNP exam: know the differences between OSPFv2 and OSPFv3 configuration models (network statements vs interface commands), the mandatory
ipv6 unicast-routingcommand, why link-local addresses appear as next-hops, the OSPFv3 Type 8 and Type 9 LSA additions, the classic EIGRPv6 shutdown requirement, and named mode EIGRP structure. For IPv6 address assignment methods (SLAAC vs DHCPv6) see IPv6 DHCPv6 & SLAAC. For single-area OSPFv2 baseline see OSPF Single-Area Configuration.