Tunneling IPv6 Through an Existing IPv4 Network

Tunneling IPv6 Through an Existing IPv4 Network

Problem

You want to connect two IPv6 networks through an existing IPv4 network that doesn't natively support IPv6.

Solution

The easiest way to pass IPv6 traffic through a section of IPv4 network that doesn't offer native IPv6 support is to create a simple GRE tunnel:

Router1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#interface Loopback1
Router1(config-if)#ip address 10.15.1.11 255.255.255.255
Router1(config-if)#exit
Router1(config)#interface Tunnel1
Router1(config-if)#ipv6 address BBBB:1::1/126
Router1(config-if)#ipv6 rip RIP_PROC enable
Router1(config-if)#tunnel source 10.15.1.11
Router1(config-if)#tunnel destination 172.16.11.9
Router1(config-if)#exit
Router1(config)#end
Router1#

And then you configure the device on the other end similarly:

Router9#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router9(config)#interface Loopback1
Router9(config-if)#ip address 172.16.11.9 255.255.255.255
Router9(config-if)#exit
Router9(config)#interface Tunnel1
Router9(config-if)#ipv6 address BBBB:1::2/126
Router9(config-if)#ipv6 rip RIP_PROC enable
Router9(config-if)#tunnel source 172.16.11.9
Router9(config-if)#tunnel destination 10.15.1.11
Router9(config-if)#exit
Router9(config)#end
Router9#

Discussion

This example is actually simpler than a lot of GRE tunnel configuration examples because the protocol used to support the tunnel end points is different from the protocol that will be passing through the tunnel. As a result, we can freely use whatever routing protocol we like to distribute the routing information about the tunnel source and destination addresses without worrying about recursive routing problems. For more information on recursive routing, please refer to Chapter 12.

Also, as we mention in Chapter 12, we have deliberately created loopback interfaces to support these tunnel source and destination addresses. This is because we want to make sure that these interfaces never become unavailable due to a link failure. If there is any network path to the tunnel destination, we want to keep the tunnel up.

In the example, we have configured the tunnel interfaces to pass IPv6 routing information using RIP. However, this was just for demonstration purposes. You could use whatever protocol is most convenient for this purpose.

Note that starting in IOS Version 12.3(7)T, Cisco modified the tunnel destination command to allow it to accept an IPv6 address. This makes it possible to construct GRE tunnels to carry IPv4 traffic through an existing IPv6 network in exactly the same way that we have tunneled IPv6 traffic through an existing IPv4 network in this recipe.

See Also