IP Tutorials

This tutorial explains how to enable IPv6 routing dual stacking, 6to4 Tunneling, RIPng, EIGRPv6 and OSPFv3 in Cisco router including packet tracer example.

Dual Stacking

dual stak

This is the most common type of migration strategy because, it's the easiest on us—it allows our devices to communicate using either IPv4 or IPv6. Dual stacking lets you upgrade your devices and applications on the network one at a time. As more and more hosts and devices on the network are upgraded, more of your communication will happen over IPv6, and after you've arrived—everything's running on IPv6, and you get to remove all the old IPv4 protocol stacks you no longer need.

Plus, configuring dual stacking on a Cisco router is amazingly easy—all you have to do is enable IPv6 forwarding and apply an address to the interfaces already configured with IPv4. It will look something like this:

Router(config)#ipv6 unicast-routing
Router(config)#interface fastethernet 0/0
Router(config-if)#ipv6 address 2001:db8:3c4d:1::/64 eui-64
Router(config-if)#ip address

6to4 Tunneling

6to4 tunneling is really useful for carrying IPv6 data over a network that's still IPv4. It's quite possible that you'll have IPv6 subnets or other portions of your network that are all IPv6, and those networks will have to communicate with each other. Not so complicated, but when you consider that you might find this happening over a WAN or some other network that you don't control, well, that could be a bit ugly.

So what do we do about this if we don't control the whole network? Create a tunnel that will carry the IPv6 traffic for us across the IPv4 network, that's what.

The whole idea of tunneling isn't a difficult concept, and creating tunnels really isn't as hard as you might think. All it really comes down to is snatching the IPv6 packet that's happily traveling across the network and sticking an IPv4 header onto the front of it.

configure the tunnel on each router:

Router1(config)#int tunnel 0
Router1(config-if)#ipv6 address 2001:db8:1:1::1/64
Router1(config-if)#tunnel source
Router1(config-if)#tunnel destination
Router1(config-if)#tunnel mode ipv6ip
Router2(config)#int tunnel 0
Router2(config-if)#ipv6 address 2001:db8:2:2::1/64
Router2(config-if)#tunnel source
Router2(config-if)#tunnel destination
Router2(config-if)#tunnel mode ipv6ip

To use IPv6 on your router, you must, at a minimum, enable the protocol and assign IPv6 addresses to your interfaces, like this:

Router(config)# ipv6 unicast-routing
Router(config)# interface type [slot_#/]port_#
Router(config-if)# ipv6 address ipv6_address_prefix/prefix_length [eui-64]

The ipv6 unicast-routing command globally enables IPv6 and must be the first IPv6 command executed on the router. The ipv6 address command assigns the prefix, the length, and the use of EUI-64 to assign the interface ID. Optionally, you can omit the eui-64 parameter and configure the entire IPv6 address. You can use the show ipv6 interface command to verify an interface’s configuration. Here’s an example configuration, with its verification:

Router(config)# ipv6 unicast-routing

By default, IPv6 traffic forwarding is disabled, so using this command enables it. Also, as you’ve probably guessed, IPv6 isn’t enabled by default on any interfaces either, so we have to go to each interface individually and enable it. There are a few different ways to do this, but a really easy way is to just add an address to the interface. You use the
interface configuration command ipv6 address <ipv6prefix>/ <prefix-length > [eui-64] to get this done.

Router(config)# interface fastethernet0/0
Router(config-if)# ipv6 address 2001:1cc1:dddd:2::/64 eui-64
Router(config-if)# end
Router# show ipv6 interface fastethernet0/0
FastEthernet0/0 is administratively down, line protocol is down
IPv6 is enabled, link-local address is FE80::207:EFF:FE46:4070
No Virtual link-local address(es):
Global unicast address(es):
2001:1CC1:DDDD:2:207:EFF:FE46:4070, subnet is
2001:1CC1:DDDD:2::/64 [EUI/TEN]
Joined group address(es):

To set up a static DNS resolution table on the router, use the ipv6 host command; you can also specify a DNS server with the ip name-server command:

Router(config)# ipv6 host hostname [port_#] ipv6_address1 [ipv6_address2…]
Router(config)# ip name-server DNS_server_IPv6_address

The ip name-server command can be used to assign both IPv4 and IPv6 DNS servers.

Routing and IPv6

As in IPv4, routers in IPv6 find best paths to destinations based on metrics and administrative distances; and like IPv4, IPv6 routers look for the longest matching prefix in the IPv6 routing table to forward a packet to its destination. The main difference is that the IPv6 router is looking at 128 bits when making a routing decision instead of 32 bits.


Routing Information Protocol next generation (RIPng) is actually similar to RIP for IPv4, with these characteristics:

  • It's a distance vector protocol.
  • The hop-count limit is 15.
  • Split horizon and poison reverse are used to prevent routing loops.
  • It is based on RIPv2.
  • Cisco routers running 12.2(2) T and later support RIPng.

These are the enhancements in RIPng:

  • An IPv6 packet is used to transport the routing update.
  • The ALL-RIP routers multicast address (FF02::9) is used as the destination address in routing

advertisements and is delivered to UDP port 521.

  • Routing updates contain the IPv6 prefix of the router and the next-hop IPv6 address.

Enabling RIPng is a little bit different than enabling RIP for IPv4. First, you use the ipv6 router rip tag command to enable RIPng globally:

Router(config)# ipv6 router rip tag

This takes you into a subcommand mode, where you can change some of the global values for RIPng, such as disabling split horizon, the administrative distance, and timers. The tag is a locally significant identifier used to differentiate between multiple RIP processes running on the router. Unlike RIP for IPv6, there is no network command to include interfaces in RIPng. Instead, you must enable RIPng on a per-interface basis with the ipv6 rip tag enable command:

Router(config)# interface type [slot_#/]port_#
Router(config-if)# ipv6 rip tag enable

The tag parameter associates the interface with the correct RIPng routing process. To view the routing protocol configuration, use the show ipv6 rip command:

Router# show ipv6 rip
RIP process "RIPPROC1", port 521, multicast-group FF02::9,
pid 187
Administrative distance is 120. Maximum paths is 16
Updates every 30 seconds, expire after 180
Holddown lasts 0 seconds, garbage collect after 120
Split horizon is on; poison reverse is off
Default routes are not generated
Periodic updates 2, trigger updates 0

In this example, the tag is RIPPROC1 for the name of the RIPng routing process and RIPng is enabled on FastEthernet0/0. To view the IPv6 routing table for RIPng, use the show ipv6 route rip command.

The 12 in the interface command again references the AS number that was enabled in the configuration mode. Last to check out in our group is what OSPF looks like in the IPv6 routing protocol.


As with RIPng, EIGRPv6 works much the same as its IPv4 predecessor does—most of the features that EIGRP provided before EIGRPv6 will still be available.

EIGRPv6 is still an advanced distance-vector protocol that has some link-state features. The neighbor discovery process using hellos still happens, and it still provides reliable communication with reliable transport protocol that gives us loop-free fast convergence using the Diffusing Update Algorithm (DUAL).

Hello packets and updates are sent using multicast transmission, and as with RIPng, EIGRPv6’s multicast address stayed almost the same.

In IPv4 it was; in IPv6, it’s FF02::A (A = 10 in hexadecimal notation).
But obviously, there are differences between the two versions. Most notably, and just as with RIPng, the use of the network command is gone, and the network and interface to be advertised must be enabled from interface configuration mode.

But you still have to use the router configuration mode to enable the routing protocol in EIGRPv6 because the routing process must be literally turned on like an interface with the no shutdown command The configuration for EIGRPv6 is going to look like this:

Router1(config)#ipv6 router eigrp 12

The 12 in this case is still the autonomous system (AS) number. The prompt changes to
and from here you must perform a no shutdown:

Router1(config-rtr)#no shutdown

Other options also can be configured in this mode, like redistribution. So now, let's go to the interface and enable IPv6:

Router1(config-if)#ipv6 eigrp 12

The 12 in the interface command again references the AS number that was enabled in the configuration mode. Last to check out in our group is what OSPF looks like in the IPv6 routing protocol.


The new version of OSPF continues the trend of the routing protocols having many similarities with their IPv4 versions. The foundation of OSPF remains the same—it is still a link-state routing protocol that divides an entire internetworks or autonomous system into areas, making a hierarchy. In OSPF version 2, the router ID (RID) is determined by the highest IP addresses assigned to the router (or you could assign it).

In version 3, you assign the RID, area ID, and link-state ID, which are all still 32-bit values but are not found using the IP address anymore because an IPv6 address is 128 bits. Changes regarding how these values are assigned, along with the removal of the IP address information from OSPF packet headers, makes the new version of OSPF capable of being routed over almost any Network layer protocol!

Adjacencies and next-hop attributes now use link-local addresses, and OSPFv3 still uses multicast traffic to send its updates and acknowledgments, with the addresses FF02::5 for OSPF routers and FF02::6 for OSPF-designated routers. These new addresses are the replacements for and, respectively.

Other, less flexible IPv4 protocols don’t give us the ability that OSPFv2 does to assign specific networks and interfaces into the OSPF process—however, this is something that is still configured under the router configuration process. And with OSPFv3, just as with the other IPv6 routing protocols we have talked about, the interfaces and therefore the networks attached to them are configured directly on the interface in interface configuration mode.

The configuration of OSPFv3 is going to look like this:

Router1(config)#ipv6 router osfp 10

The 12 in the interface command again references the AS number that was enabled in the configuration mode. Last to check out in our group is what OSPF looks like in the IPv6 routing protocol.

You get to perform some configurations from router configuration mode like summarization and redistribution, but we don’t even need to configure OSPFv3 from this prompt if we configure OSPFv3 from the interface.

When the interface configuration is completed, the router configuration process is added automatically and the interface configuration looks like this:

Router1(config-if)#ipv6 ospf 10 area

So, if we just go to each interface and assign a process ID and area—poof, we are done.