Introduction
This document is intended to help people who need to deploy native IPv6 across their existing IPv4 network. This example will use IS-IS as it is the simplest IGP when dual-stacking.

The diagram above shows the basic layout of the network before the IPv6 deployement.
interface Loopback0
ip address 10.0.0.1 255.255.255.255
ip router isis
!
interface FastEthernet0/0
ip address 10.1.1.1 255.255.255.252
ip router isis
!
interface FastEthernet1/0
ip address 10.1.2.1 255.255.255.252
ip router isis
!
router isis
net 49.4169.5000.0801.6800.0003.00
is-type level-2-only
metric-style wide
set-overload-bit on-startup wait-for-bgp
log-adjacency-changes all
!
router bgp 55555
bgp default local-preference 1000
bgp log-neighbor-changes
bgp deterministic-med
redistribute connected route-map AS-PIMP-ACCESS
redistribute static route-map AS-PIMP-ACCESS
neighbor as-pimp peer-group
neighbor as-pimp remote-as 55555
neighbor as-pimp update-source Loopback0
neighbor as-pimp next-hop-self
neighbor as-pimp send-community both
neighbor as-pimp soft-reconfiguration inbound
neighbor 1.0.0.2 peer-group as-pimp
neighbor 1.0.0.2 description rtr2
neighbor 1.0.0.3 peer-group as-pimp
neighbor 1.0.0.3 description rtr3
no auto-summary
no synchronization
!
route-map AS-PIMP-SUPERNETS permit 10
set local-preference 2000
set community 55555:55555
!
route-map AS-PIMP-ACCESS permit 10
set local-preference 2000
set community 55555:10000 no-export
!
The section above shows the relevant parts of the configuration of rtr1 to our ISIS/BGP setup.
The first thing we need to do is configure some IPv6 addresses on our interfaces, but in order to do that we need to plan our IPv6 numbering scheme. Below is a simple example.
- Assignment: 1234:BEEF::/32
- Router Loopbacks: 5555:555::/48
- rtr1: 1234:BEEF::1/128
- rtr2: 1234:BEEF::2/128
- rtr3: 1234:BEEF::3/128
- Router Links: 1234:BEEF:1::/48
- rtr1-rtr2: 1234:BEEF:1:1::/64
- rtr2-rtr3: 1234:BEEF:1:2::/64
- rtr1-rtr3: 1234:BEEF:1:3::/64
As you can see from the example, IPv4 addressing really isn't all that different from IPv4, except that it's now once again possible to split your addressing space into more readable chunks. It may seem wasteful to give an entire /64 to links with only two routers, I do it this way for readability. You could use /112 or similar if you liked.
Lets add these new IPs to our interfaces. The following example is for rtr1. Note that we're disabling the Router Advertisement autoconfiguration feature.
interface Loopback0
ipv6 nd ra suppress
ipv6 address 1234:BEEF::1/128
!
interface FastEthernet0/0
ipv6 nd ra suppress
ipv6 address 1234:BEEF:1:1::1/64
!
interface FastEthernet1/0
ipv6 nd ra suppress
ipv6 address 1234:BEEF:1:3::1/64
!
You should now be able to ping between the devices with ping6 on the console. Note that there is still no routing between the devices, you can't ping interfaces which aren't directly connected.
You can show the addresses on interfaces with the "show ipv6 interface brief" or "sh ipv6 int bri". The FE80:: prefixed addresses are "Link Local" addresses generated from the MAC address of the interface.
rtr1#sh ipv6 interface brief FastEthernet0/0 [up/up] FE80::21A:6CFF:FE34:661A 1234:BEEF:1:1::1 FastEthernet1/0 [up/up] FE80::21A:6CFF:FE34:6619 1234:BEEF:1:3::1
Loopback0 [up/up] FE80::21A:6CFF:FE34:661B 1234:BEEF:1::1 rtr1#
Next we need to enable the IPv6 address-family in IS-IS and enable IPv6 routing on our interfaces.
router isis
address-family ipv6
multi-topology
!
!
interface Loopback0
ipv6 router isis
!
interface FastEthernet0/0
ipv6 router isis
!
interface FastEthernet1/0
ipv6 router isis
!
You should now be able to ping all of the IPv6 link and loopback addresses of all of the routers from any other router.
It's now time to configure BGP to carry IPv6 prefixes. We do this by creating a seperate IPv6iBGP mesh between the routers, we do this so that the next-hop address is in the correct address-family when using next-hop-self and to allow different IPv6 BGP topology.
First we need to tell BGP not to automatically enable IPv4 for peers.
router bgp 55555
no bgp default ipv4-unicast
!
Next we will create the IPv6 BGP sessions and enable the ipv6-unicast address family. Note that it's recommended that you try to keep your IPv6 deployment as similar to the IPv4 network as possible, to that end we're going to re-use the existing route-maps.
router bgp 55555
neighbor as-pimp-v6 peer-group
neighbor as-pimp-v6 remote-as 55555
neighbor as-pimp-v6 update-source Loopback0
neighbor as-pimp-v6 next-hop-self
neighbor as-pimp-v6 send-community both
neighbor as-pimp-v6 soft-reconfiguration inbound
neighbor 1234:BEEF::2 peer-group as-pimp-v6
neighbor 1234:BEEF::2 description rtr2 v6
neighbor 1234:BEEF::3 peer-group as-pimp-v6
neighbor 1234:BEEF::3 description rtr3 v6
address-family ipv6
redistribute connected route-map AS-PIMP-ACCESS-V6
redistribute static route-map AS-PIMP-ACCESS-V6
neighbor as-vostron send-community both neighbor as-vostron default-originate route-map AS41695-ACCESS neighbor as-vostron soft-reconfiguration inbound
neighbor 1234:BEEF::2 activate
neighbor 1234:BEEF::3 activate
no synchronization
!
route-map AS-PIMP-SUPERNETS-V6 permit 10
set local-preference 2000
set community 55555:55555
!
route-map AS-PIMP-ACCESS-V6 permit 10
set local-preference 2000
set community 55555:10000 no-export
!
Once that's done on all of the routers the new sessions should come up. You can view the status of the BGP sessions with "show bgp ipv6 unicast summary". Note how this is different to the default "show ip bgp summary" command. Simiarly you could use "show bgp ipv4 unicast summary" to view your IPv4 sessions.
Lets add a hypothetical customer to interface FastEthernet 3/0 on rtr1. We'll give them a link network of 1234:BEEF:10:1::/64 and an routed assigned network of 1234:BEEF:100:1::/48. The customer's router should be 1234:BEEF:10:1::2/64
interface FastEthernet3/0
ipv6 nd ra suppress
ipv6 address 1234:BEEF:10:1::1/64
no cdp enable
!
ipv6 route 1234:BEEF:100:1::/48 1234:BEEF:100:1::2
The customer should now have IPv6 connectivity to your network. However, this isn't much use without some connectivity to the outside world, so lets setup a BGP session to get transit from the outside world from our hypothetical transit provider, V6Net.
V6Net have given us a link of 1234:6000:3ef::/64 with their router being 1234:6000:3ef::1/64 and our router being 1234:6000:3ef::2/64. Their AS number is 66666. We also add a static network statement to announce our /32 supernet, and a static route to fix the /32 in the routing table. Finally we create a default static route to our new transit provider incase there are any prefixes missing.
interface GigabitEthernet3/0
ipv6 nd ra suppress
ipv6 address 1234:6000:3ef::2/64
no cdp enable
! router bgp 55555
network 1234:BEEF::/32 route-map AS-PIMP-SUPERNETS
neighbor 1234:6000:3ef::1 remote-as 66666
address-family ipv6
neighbor 1234:6000:3ef::1 activate
!
!
ipv6 route 1234:BEEF::/32 Null0
ipv6 route ::/0 1234:6000:3ef::1
Your network and your customers should now be able to reach the IPv6 internet!
Remember that this guide is just an example and doesn't cover some of the things you need to do to protect your devices on the internet. |