
In this article, we’ll configure the internetwork using five routers connected together but we are not going to add IPv6 on the 871W router or to the LAN and WLAN networks connected to the R1, R2, and R3 routers, to keep things simple and easier to understand.
So let’s get started by adding IPv6 to the corp, R1, R2, and R3 routers. We’ll then add both the RIP and OSPF routing protocols and finish the article by running through some verification commands.
Corp#config t
Corp(config)#ipv6 unicast-routing
Corp(config)#int f0/1
Corp(config-if)#ipv6 address 2001:db8:3c4d:11::/64 eui-64
Corp(config-if)#int s0/0/0
Corp(config-if)#ipv6 address 2001:db8:3c4d:12::/64 eui-64
Corp(config-if)#int s0/0/1
Corp(config-if)#ipv6 address 2001:db8:3c4d:13::/64 eui-64
Corp(config-if)#int s0/1/0
Corp(config-if)#ipv6 address 2001:db8:3c4d:14::/64 eui-64
Corp(config-if)#int s0/2/0
Corp(config-if)#ipv6 address 2001:db8:3c4d:15::/64 eui-64
Corp(config-if)#^Z
Corp#copy run start
Destination filename
[startup-config]
?[enter]
Building configuration…
[OK]
Corp#
In the preceding configuration, we changed the subnet address for each interface only slightly. Let’s take a look at the routing table:
corp#sh ipv6 route
IPv6 Routing Table – 12 enteries
Codes: C- connected, L-local, S-static, R-RIP, B-BGP, U-per-user static route I1-ISIS L1, I2-ISIS L2, IA-ISIS interarea, IS-ISIS summary O-OSPF intra, OI-OSPF inter, OE1-OSPF ext 1, OE2-OSPF ext 2
ON1-OSPF NSSA ext 1, ON2-OSPF NSSA ext 2
C 2001:DB8:3C4D:11::/64 [0/0] via ::, FastEtherner0/1
L 2001:DB8:3C4D:11:21A:2FFF:FE55:C9E9/128 [0/0] via ::, FastEthernet0/1
C 2001:DB8:3C4D:12::/64 [0/0] via ::, Serial0/0/0
C 2001:DB8:3C4D:13::/64 [0/0] via ::, Serial0/0/1
L 2001:DB8:3C4D:13:21A:2FFF:FE55:C9E9/128 [0/0] via ::, Serial0/0/1
C 2001:DB8:3C4D:14::/64 [0/0] via ::, Serial0/1/0
L 2001:DB8:3C4D:14:21A:2FFF:FE55:C9E9/128 [0/0] via ::, Serial0/1/0
C 2001:DB8:3C4D:15::/64 [0/0] via ::, Serial0/2/0
L 2001:DB8:3C4D:15:21A:2FFF:FE55:C9E9/128 [0/0] via ::, Serial0/2/0
L FE80::/10 [0/0] via ::, Null0
L FF00::/8 [0/0] via ::, Null0
Corp#
So what’s up with the two addresses for each interface? One shows C connected, and one shows L? well, the connected address is the IPv6 address we configured on each interface, and the L is the automatically assigned link-local. Notice in the link-local address that the FF: FE is inserted into the address to create the eui-64 address.
One more thing before we move on to the R1 router. Notice that when addressing the interfaces, we added a different number to the subnet number for each one. Also note that they closely match our IPv4 private addresses. We did it this way to make administration easier. Okay let’s configure the R1 router now:
R1#config t
R1(config)#ipv6 unicast-routing
R1(config)#int s0/0/0
R1(config-if)#ipv6 address 2001:db8:3c4d:12::/64 eui-64
R1(config-if)#int s0/0/1
R1(config-if)#ipv6 address 2001:db8:3c4d:13::/64 eui-64
R1(config-if)#^z
R1#show ipv6 route
IPv6 routing table – 6 entries
[codes cut]
C 2001:DB8:3C4D:12::/64 [0/0] via ::, Serial0/0/0
L 2001:DB8:3C4D:12:21A:6DFF:FE64:9B2/128 [0/0] via ::, Serial0/0/0
C 2001:DB8:3C4D:13::/64 [0/0] via ::, Serial0/0/1
L 2001:DB8:3C4D:12:21A:2FFF:FE55:C9E9/128 [0/0] via ::, Serial0/0/1
L FE80::/10 [0/0] via ::, NULL0
L FF00::/8 [0/0] via ::, Null0
R1#
Notice that we used the exact same IPv6 subnet addresses on each side of the link. Let’s configure the RC2 and R3 routers, and then add RIPv6:
R2#config t
R2(config)#ipv6 unicast-routing
R2(config)#int s0/2/0
R2(config-if)#ipv6 address 2001:db8:3c4d:14::/64 eui-64
R2(config-if)#do show ipv6 route
IPv6 Routing Table – 4 entries
C 2001:DB8:3C4D:14::/64 [0/0] via ::, Serial0/2/0
L 2001:DB8:3C4D:14:213:60FF:FE20:4E4C/128 [0/0] via ::, Serial0/2/0
L FE80::/10 [0/0] via ::, Null0
L FF00::/8 [0/0] via ::, Null0
R2(config-if)#
Looking good! Let’s go to R3:
R3#config t
R3(config)#ipv6 unicast-routing
R3(config)#int s0/0/1
R3(config-if)#ipv6 address 2001:db8:3c4d:15::/64 eui-64
R3(config-if)#do show ipv6 route
IPv6 Routing Table – 4 entries
C 2001:DB8:3C4D:15::/64 [0/0] via ::, Serial0/0/1
L 2001:DB8:3C4D:14:21A:6DFF:FE37:A44E/128 [0/0] via ::, Serial0/0/1
L FE80::/10 [0/0] via ::, Null0
L FF00::/8 [0/0] via ::, Null0
R3(config-if)#
Again, notice that we used the exact same IPv6 subnet addresses on each side of the links from the Corp router to the R1, R2, and R3 routers. Now let’s start adding routing protocols!
Configuring RIPng
This is really the easy part all we need to do is to go to each interface on each of our routers and type in one command. Here we go:
Corp#config t
Corp(config)#int f0/1
Corp(config-if)#pv6 rip ?
WORD user selecrted string identifying this RIP process
Corp(config-if)#ipv6 rip 1 enable
Corp(config-if)#int s0/0/0
Corp(config-if)#ipv6 rip 1 enable
Corp(config-if)#int s0/0/1
Corp(config-if)#ipv6 rip 1 enable
Corp(config-if)#int s0/1/0
Corp(config-if)#ipv6 rip 1 enable
Corp(config-if)#int s0/2/0
Corp(config-if)#ipv6 rip 1 enable
Let’s configure the R1 router:
R1#config t
R1(config)#int s0/0/0
R1(config-if)#ipv6 rip 1 enable
R1(config-if)int s0/0/1
R1(config-if)#ipv6 rip 1 enable
R2 config:
R2#config t
R2(config)#int s0/2/0
R2(config-if)#ipv6 rip enable 1
R3 config:
R3#config t
R3(config)#int s0/0/1
R3(config-if)#ipv6 rip 1 enable
Okay, time to verify our IPv6 routing tables and configurations/
Verifying RIPng
We’re going to start with the usual ip route command. Here’s the output from the R3 router:
R3#sh ipv6 route
R 2001:DB8:3C4D:11::/64 [120/2] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
R 2001:DB8:3C4D:12::/64 [120/2] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
R 2001:DB8:3C4D:13::/64 [120/2] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
R 2001:DB8:3C4D:14::/64 [120/2] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
C 2001:DB8:3C4D:15::/64 [0/0] via ::, Serial0/0/1
L 2001:DB8:3C4D:15:21A:6DFF:FE37:A44E/128 [0/0] via ::, Serial 0/0/1
L FE80::/10 [0/0] via ::, Null0
L FE00::/8 [0/0] via ::, Null0
R3#
Wow, looks just like the regular IPv4 RIP table, including the administrative distance and hop count. We can see subnets 11, 12, 13, 14, and 15.
Let’s take a look at a few more verification commands.
R3#sh ipv6 protocols
iPv6 Routing Protocol is “Connected”
IPv6 Routing Protocol is “static”
IPv6 Routing Protocol is “rip 1”
Interfaces:
Serial0/0/1Redistribution:
None
R3#
Not too much information provided with the show ipv6 protocols command. Let’s try the show ipv6 rip command.
R3#sh ipv6 rip
RIP process “1”, port 521, multicast-group FF02::9, pid 60
Administrative distance is 120. Maximum paths is 16
Updates every 30 seconds, expire after 180
Hold down lasts 0 seconds, garbage collect after 120
Split horizon is on; poison reverse is off
Default routes are not generated
Periodic updates 44, trigger updates 19
Interfaces:
Serial0/0/1
Redistribution:
None
Okay, now we’re talking! We can see that the administrative distance is still 120, plus the multicast group, maximum-paths, and times. So let’s go ahead and try two more verification commands, beginning with the show ipv6 interface s0/0/1 command:
R3#sh ipv6 interface serial 0/0/1
Serial0/0/1 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::21A:6DFF:FE37:A44E
Global unicast address(es):
2001:DB8:3C4D:1:21A:6DFF:FE37:A44E, subnet is 2001:DB8:3C4D:1::/64 [EUI]
Joined group address(es):
FF02::1
FF02::2
FF02::9FF02::1:FF37:A44E
MTU is 1500 bytes
ICMP error messages limited to one every 100 miliseconds
ICMP redirects are enabled
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 miliseconds
Hosts use stateless auto config for addresses.
This got us some pretty good information too. But wait, the best is yet to come: the debug ipv6 rip command this should be good:
R3#debug ipv6 rip
*MAY 24 18:31:11.959: RIPng: Sending multicast update on Serial0/0/1 for 1
*MAY 24 18:31:11.959: src=FE80::21A:6DFF:FE37:A44E
*MAY 24 18:31:11.959: dst=FF02::9 (serial0/0/1)
*MAY 24 18:31:11.959: sport=521, dport=521, length=32
*MAY 24 18:31:11.959: command=2, version=1, mbz=0, #rte=1
*MAY 24 18:31:11.959: tag=0, metric=1, prefix=2001:DB8:3C4D:1::/64
*MAY 24 18:40:44.079: %LINEPROTO-5-UPDOWN: Line Protocol on Interface serial0/0/0, changed state to down
*MAY 24 18:31:11.959: Ripng: response received from FE80::21A:2FFF:FE55:C9E8 on serial0/0/1 for 1
*MAY 24 18:31:11.959: src=FE80::21A:2FFF:FE55:C9E8 (serial0/0/1)
*MAY 24 18:31:11.959: dst=FF02::9
*MAY 24 18:31:11.959: sport=521, dport=521, length=32
*MAY 24 18:31:11.959: command=2, version=1, mbz=0, #rte=1
*MAY 24 18:31:11.959: tag=0, metric=16, prefix=2001:DB8:3C4D:12::/64
*MAY 24 18:31:11.959: RIPng: 2001:DB8:3C4D:12::/64, path FE80::21A:2FFF:FE55:C9E8/serial0/0/1 unreachable
*MAY 24 18:31:11.959: RIPng: 2001:DB8:3C4D:12::/64, expired, ttg is 120
*MAY 24 18:31:11.959: RIPng: Triggered update requested
*MAY 24 18:31:11.959: RIPng: generating triggered update for 1
*MAY 24 18:31:11.959: RIPng: Suppressed null multicast update on Serial0/0/1 for 1
Now this is interesting. We can see that the source and destination ports used are 521 (yes, we are still using UDP) and that network/subnet 12 is unreachable. This is because the s0/0/0 interface of our corp router has just decided to go bad. Either way, we can see that RIPng still has some basic IPv4 RIP characteristics. Let’s go ahead and add OSPFv3 to our routers.
Configuring OSPFv3
Just as with the RIPng configuration, all we have to do to enable OSPF on the internetwork is to go to each interface that we want to run it.
Here is the corp configuration:
Corp#config t
Corp(config)#int f0/1
Corp(config-if)#ipv6 ospf 1 ?
Area set the OSPF area ID
Corp(config-if)#ipv6 ospf 1 area 0
Corp(config)#int s0/0/1
Corp(config-if)#ipv6 ospf 1 area 0
Corp(config)#int s0/1/0
Corp(config-if)#ipv6 ospf 1 area 0
Corp(config)#int s0/2/0
Corp(config-if)#ipv6 ospf 1 area 0
Corp(config)#^z
Corp#
That wasn’t so bad actually somewhat easier than with IPv4. Let’s configure the other three routers:
R1#config t
R1(config)#int s0/0/1
R1(config-if)#ipv6 ospf 1 area 0
R1(config-if)#
*May 24 19:24:55:.279: %OSPFv3-5-ADJCHG: -Process 1, Nbr 172.16.10.2 on
Serial0/0/1 from LOADING to FULL, Loading Done
Sweet! R1 has become adjacent to the corp router. One interesting output line is that the IPv4 RIP is being used in the OSPFv3 adjacent change.
R2#config t
R2(config)#int s0/2/0
R2(config-if)#ipv6 ospf 1 area 0
R2(config-if)#
*May 24 19:27:31:399: %OSPFv3-5-ADJCHG: Process 1, Nbr 172.16.10.3 on
Serial0/1/0 from LOADING to FULL, Loading Done
Again, our adjacency popped up this is great. One more router, then we’ll do some verification:
R3#config t
R3(config)#int s0/0/1
R3(config-if)#ipv6 ospf 1 area 0
R3(config-if)#
*May 24 19:29:07:231: %OSPFv3-5-ADJCHG: Process 1, Nbr 172.16.10.4 on
Serial0/2/0 from LOADING to FULL, Loading Done
Without even verifying our network, it seems to me that it’s up and running. But, we’ve still go to verify.
Verifying OSPFv3
It’ll start as usual with the show ipv6 route command:
R3#sh ipv6 route
IPv6 Routing table – 7 entries
O 2001:DB8:3C4D:11::/64 [110/65] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
O 2001:DB8:3C4D:13::/64 [110/65] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
O 2001:DB8:3C4D:14::/64 [110/65] via FE80::21A:2FFF:FE55:C9E8, Serial0/0/1
C 2001:DB8:3C4D:15::/64 [0/0] via ::, Serial0/0/1
L 2001:DB8:3C4D:15:21A:6DFF:FE37:A44E/128 [0/0] via ::, Serial0/0/1
L FE80::/10 [0/0] via ::, Null0
L FE00::/8 [0/0] via ::, Null0
R3#
Perfect. We see all the subnets (except 12, which is down because of that bad interfaces). Let’s take a look at the show ipv6 protocols command:
R3#sh ipv6 protocols
IPv6 Routing Protocol is “connected”
IPv6 Routing Protocol is “static”
IPv6 Routing Protocol is “rip 1” interfaces:
Serial0/0/1
Redistribution:
None
IPv6 Routing Protocol is “ospf 1”
Interfaces (Area 0):
Serial0/0/1
Redistribution:
None
For the next command, we want to go back to the Corp router so can we see more connection: show ipv6 ospf neighbour.
Corp#sh ipv6 ospf neighbour
Neighbor ID Pri State Dead Time Interface ID Interface
172.16.10.4 1 FULL/ 00:00:36 6 Serial0/2/0
172.16.10.3 1 FULL/ 00:00:33 16 Serial0/1/0
172.16.10.2 1 FULL/ 00:00:30 6 Serial0/0/1
Corp#
Wait! We need to do our debugging commands. We’ll use two of them: debugipv6 ospf packet and debug ipv6 ospf hello (almost the same commands we used with IPv4):
Corp#debug ipv6 ospf packet OSPFv3 packet debugging is on Corp#
*May 24 19:38:12.283: OSPFv3: rcv. V:3 t:1 1:40 rid:172.16.10.3 aid:0.0.0.0 chk:E1D2 inst:0 from Serial0/1/0
Corp#
*May 24 19:38:15.103: OSPFv3: rcv. V:3 t:1 1:40 rid:172.16.10.4 aid:0.0.0.0 chk:7EBB inst:0 from Serial0/2/0
Corp#
*May 24 19:38:18.875: OSPFv3: rcv. V:3 t:1 1:40 rid:172.16.10.2 aid:0.0.0.0 chk:192D inst:0 from Serial0/0/1
Corp#
*May 24 19:38:22.283: OSPFv3: rcv. V:3 t:1 1:40 rid:172.16.10.3 aid:0.0.0.0 chk:E1D2 inst:0 from Serial0/1/0
Corp#un all
All possible deugging has been turned off
Corp#debug ipv6 ospf hello
OSPFv3 hello events debugging is on
Corp#
*May 24 19:38:32.283: OSPFv3: Rcv hello from 172.16.10.3 area from serial0/1/0 FE80::213:60FF:FE20:FE20:4E4C interface ID 16
*May 24 19:38:32.283: OSPFv3: End of hello processing
Corp#
*May 24 19:38:35.103: OSPFv3: Rcv hello from 172.16.10.4 area from serial0/2/0 FE80::21A:6DFF:FE20:FE37:A44E interface ID 16
*May 24 19:38:35.103: OSPFv3: End of hello processing
Corp#
*May 24 19:38:38.875: OSPFv3: Rcv hello from 172.16.10.2 area from serial0/0/1 FE80::213:6DFF:FE64:FE20:9B2 interface ID 16
*May 24 19:38:38.875: OSPFv3: End of hello processing
Corp#un all
All possible debugging has been turned off
Corp#
Holy output! Now that is what we call a fun article. We even had an interface go bad, just like in the real world. We really hope you found this article as rewarding and interesting as we did. The best thing you can do to learn IPv6 is to nick some routers and just have a go at it!