IPv6 is no longer optional — RIRs are out of IPv4, mobile carriers are v6-only, and every greenfield data center ships dual-stack. But IPv6 is exactly where multi-vendor labs get painful: OSPFv3 needs an explicit router-id on every box, BGP carries v6 prefixes in a separate address-family, and each vendor names the commands differently. This lab builds a dual-stack core across Cisco IOL (BYOI), Juniper cRPD (BYOI), and Arista cEOS (BYOI) so you can practice the parts that actually trip people up.
Bottom line: A 3-vendor IPv6 lab traditionally means sourcing three images, wiring OSPFv3 by hand, and debugging link-local next-hops. As of 2026, NetPilot deploys this dual-stack OSPFv3 + iBGP-for-IPv6 topology with real CLIs in ~2 minutes — copy the prompt at the bottom and run it.
Lab topology
Three routers run OSPFv3 in area 0 to carry loopback reachability, then form an iBGP IPv6 overlay (AS 65000) on those loopbacks to advertise a customer prefix.
2001:db8:12::/64 2001:db8:23::/64
[R1 Cisco] ------------------- [R2 Juniper] ------------------- [R3 Arista]
lo0 ::1/128 lo0 ::2/128 lo0 ::3/128
AS 65000 AS 65000 (full-mesh iBGP) AS 65000
advertises 2001:db8:cafe::/48- Loopbacks:
2001:db8:0:1::1,2001:db8:0:2::2,2001:db8:0:3::3(each /128) - OSPFv3 area
0.0.0.0on every link + loopback - iBGP full mesh (3 nodes) peering on loopbacks,
address-family ipv6 unicast
Cisco IOL configuration (R1)
ipv6 unicast-routing
!
interface Loopback0
ipv6 address 2001:DB8:0:1::1/128
ospfv3 1 ipv6 area 0
!
interface Loopback1
ipv6 address 2001:DB8:CAFE::1/128
!
interface Ethernet0/0
ipv6 address 2001:DB8:12::1/64
ospfv3 1 ipv6 area 0
!
ipv6 route 2001:DB8:CAFE::/48 Null0
!
router ospfv3 1
router-id 1.1.1.1
address-family ipv6 unicast
exit-address-family
!
router bgp 65000
bgp router-id 1.1.1.1
neighbor 2001:DB8:0:2::2 remote-as 65000
neighbor 2001:DB8:0:2::2 update-source Loopback0
neighbor 2001:DB8:0:3::3 remote-as 65000
neighbor 2001:DB8:0:3::3 update-source Loopback0
address-family ipv6 unicast
network 2001:DB8:CAFE::/48
neighbor 2001:DB8:0:2::2 activate
neighbor 2001:DB8:0:3::3 activateipv6 unicast-routingis the master switch — forget it and v6 forwarding silently stays off.- OSPFv3 has no IPv4 interface to borrow a router-id from, so
router-id 1.1.1.1is mandatory, not optional. - IOS only originates a BGP
networkstatement when a matching route already exists in the RIB — theipv6 route 2001:DB8:CAFE::/48 Null0provides it, whileLoopback1(::1) answers the verification ping. - BGP IPv6 prefixes only move once you
activatethe neighbor underaddress-family ipv6 unicast— the neighbor statement alone does nothing for v6.
Juniper cRPD configuration (R2)
set interfaces lo0 unit 0 family inet6 address 2001:db8:0:2::2/128
set interfaces eth1 unit 0 family inet6 address 2001:db8:12::2/64
set interfaces eth2 unit 0 family inet6 address 2001:db8:23::2/64
set routing-options router-id 2.2.2.2
set routing-options autonomous-system 65000
set protocols ospf3 area 0.0.0.0 interface lo0.0 passive
set protocols ospf3 area 0.0.0.0 interface eth1.0
set protocols ospf3 area 0.0.0.0 interface eth2.0
set protocols bgp group ibgp type internal
set protocols bgp group ibgp local-address 2001:db8:0:2::2
set protocols bgp group ibgp family inet6 unicast
set protocols bgp group ibgp neighbor 2001:db8:0:1::1
set protocols bgp group ibgp neighbor 2001:db8:0:3::3- Junos calls it
ospf3, not OSPFv3 — and you marklo0.0passiveso the loopback is advertised without forming an adjacency on it. family inet6 unicastunder the BGP group is Junos' equivalent of Cisco'sactivatestep.
Arista cEOS configuration (R3)
ipv6 unicast-routing
!
interface Loopback0
ipv6 address 2001:db8:0:3::3/128
ipv6 ospf 1 area 0.0.0.0
!
interface Ethernet1
ipv6 address 2001:db8:23::3/64
ipv6 ospf 1 area 0.0.0.0
!
ipv6 router ospf 1
router-id 3.3.3.3
!
router bgp 65000
router-id 3.3.3.3
neighbor 2001:db8:0:1::1 remote-as 65000
neighbor 2001:db8:0:1::1 update-source Loopback0
neighbor 2001:db8:0:2::2 remote-as 65000
neighbor 2001:db8:0:2::2 update-source Loopback0
address-family ipv6
neighbor 2001:db8:0:1::1 activate
neighbor 2001:db8:0:2::2 activate- Arista enables OSPFv3 per-interface with
ipv6 ospf 1 area(the process id is required), then a globalipv6 router ospf 1for the router-id — close to Cisco, but the interface keyword differs from IOL'sospfv3stanza.
Verification
Lead with the agent — one prompt checks every device at once and translates the per-vendor show syntax for you:
"Check OSPFv3 adjacencies and the iBGP IPv6 overlay across R1, R2, and R3, then confirm R3 can reach 2001:db8:cafe::1."
NetPilot runs the right command on each box in parallel — Cisco show ospfv3 neighbor, Juniper show ospf3 neighbor, Arista show ipv6 ospf neighbor — and returns one table with anomalies flagged. You can also verify by hand; SSH into any device and run the native commands:
! Cisco R1
show ospfv3 neighbor
show bgp ipv6 unicast summary
ping 2001:DB8:0:3::3 source Loopback0# Juniper R2
show ospf3 neighbor
show bgp summary
show route table inet6.0 protocol bgp! Arista R3
show ipv6 ospf neighbor
show bgp ipv6 unicast summary
ping ipv6 2001:db8:cafe::1Expected: a FULL OSPFv3 adjacency on each link, three established iBGP sessions, and 2001:db8:cafe::/48 in every router's inet6.0 / IPv6 RIB.
Common multi-vendor IPv6 gotchas
- Missing router-id. OSPFv3 won't start without one — there's no IPv4 address to auto-derive it from. Every vendor needs it set explicitly.
- Forgot to
activate/ setfamily inet6. The BGP session comes up, but no v6 prefixes exchange. This is the single most common "BGP is up but routes are missing" cause in IPv6 labs. - Link-local next-hops. iBGP-learned IPv6 routes can carry a link-local next-hop that isn't resolvable across the core — peering on loopbacks (as above) and running an IGP for reachability avoids it.
- OSPFv3 instance-id mismatch. All neighbors on a link must share instance-id 0 (the default) — easy to break if you copy a stanza between vendors.
ipv6 unicast-routingoff. Interfaces show addresses, adjacencies even form, but transit forwarding fails. Check it first when pings die mid-path.
Build this lab with AI
Instead of typing three vendors' worth of config and chasing the gotchas above, describe the intent and let the agent build it:
"Build a 3-router dual-stack lab with Cisco IOL, Juniper cRPD, and Arista cEOS. Run OSPFv3 in area 0 across all links and loopbacks, then add an iBGP IPv6 overlay in AS 65000 peering on loopbacks. Advertise 2001:db8:cafe::/48 from R1. Verify OSPFv3 adjacencies and end-to-end IPv6 reachability."
NetPilot designs the topology, generates the per-vendor OSPFv3 and BGP-for-IPv6 configs, deploys to cloud ContainerLab, and confirms reachability — then you SSH into real CLIs to explore. Iterate conversationally ("add SLAAC on R3's access segment and a DHCPv6 relay") and it updates every affected device.
Copy-paste ready: Grab the IPv6 dual-stack prompt from our example library — multi-vendor IPv6, OSPFv3, and BGP variants included.
Want to skip the manual config? Spin this up on an online network lab — or see how the AI network emulator builds dual-stack topologies from a prompt. Related: OSPF Multi-Vendor Lab and FRRouting in the Cloud. Try NetPilot — describe any IPv6 topology and get a working multi-vendor lab in ~2 minutes.