BlueAllyBlueAlly
Blog

IPv6 Deployment Series Part 3: OSPFv3

Networking

RYAN HARRIS | Sr. Network Engineer 


This blog post is part of a series detailing the various parts of planning and deploying IPv6 for enterprise networks. It is meant as a primer for the network engineer or architect to understand the various concepts they may be unaware of when developing their IPv6 production design. 

If you have not read the previous posts, I highly recommend starting with Part 1 – Hierarchical Subnetting Design and an overview of Routing in Part 2 – Routing Design. 

Changes from OSPFv2 

OSPF version 3 is very similar in implementation to OSPF version 2, especially in the practical deployment. Many of the changes made in OSPFv3 extend the existing functionality to support the longer IPv6 routing prefixes. With these changes, OSPFv3 retains compatibility with IPv4, allowing it to work as a single routing protocol for both IPv4 and IPv6 networks. 

On Cisco routers, you may be familiar with using interface sub-commands for configuring OSPFv2 rather than the older network router sub-command. This style of configuration is the only way to configure an interface to participate in the OSPFv3 process. You do not explicitly have to create a routing process for OSPFv3 using the router command in global configuration mode. By configuring an interface with an OSPFv3 process, the routing process will be created. 

Non-broadcast multiaccess (NBMA) interface types must be configured with a list of neighbors in OSPFv3 using the neighbor’s router ID. 

Because router interfaces can be configured with multiple IPv6 prefixes, if OSPFv3 is configured on an interface, all prefixes will be imported into the LSDB. Additionally, you can choose to run multiple OSPFv3 instances on a link, a feature that was not possible with OSPFv2. 

Router ID 

Both OSPFv2 and OSPFv3 require a router ID to identify the router in the link-state database. This is not an issue in OSPFv2 however, because an IPv4 address is inherent to creating neighborships, and as long as there is an interface configured with an IPv4 address, the routing process will automatically choose an address to use as the router ID. There are plenty of organizations running OSPF in production without giving a second thought to the router IDs. 

The OSPFv3 process will automatically use the highest IPv4 address assigned to any loopback interface first, if there are no loopback interfaces configured, it will then use the highest IPv4 address configured on any remaining interfaces. If no interfaces are assigned with an IPv4 address, the OSPFv3 process will not start until a router ID is manually configured. 

As you can see in the output below, starting the OSPFv3 process using the interface sub-command returns an error on this router when no IPv4 addresses are assigned. 

Router1#sh ipv6 int g1 

GigabitEthernet1 is up, line protocol is up 

  IPv6 is enabled, link-local address is FE80::5054:FF:FE01:3B88  

  No Virtual link-local address(es): 

  Global unicast address(es): 

    2001:DB8:1::1, subnet is 2001:DB8:1::/64  

  Joined group address(es): 

    FF02::1 

    FF02::1:FF00:1 

    FF02::1:FF01:3B88 

  MTU is 1500 bytes 

  ICMP error messages limited to one every 100 milliseconds 

  ICMP redirects are enabled 

  ICMP unreachables are sent 

  ND DAD is enabled, number of DAD attempts: 1 

  ND reachable time is 30000 milliseconds (using 30000) 

  ND NS retransmit interval is 1000 milliseconds 

Router1#config t 

Enter configuration commands, one per line.  End with CNTL/Z. 

Router1(config)#ipv6 unicast-routing  

Router1(config)#interface g1          

Router1(config-if)#ipv6 ospf 1 area 0 

Router1(config-if)#^Z 

Router1#show ipv6 os 

Router1#show ipv6 ospf  

%OSPFv3 1 address-family ipv6 not running, please configure a router-id 

 

Router1#conf t 

Enter configuration commands, one per line.  End with CNTL/Z. 

Router1(config)#ipv6 router ospf 1 

Router1(config-rtr)#router-id 10.0.0.1 

Router1(config-rtr)#^Z 

Router1#show ipv6 ospf  

 Routing Process “ospfv3 1” with ID 10.0.0.1 

 Supports NSSA (compatible with RFC 3101) 

 Supports Database Exchange Summary List Optimization (RFC 5243) 

 Event-log enabled, Maximum number of events: 1000, Mode: cyclic 

 Router is not originating router-LSAs with maximum metric 

 Initial SPF schedule delay 50 msecs 

 Minimum hold time between two consecutive SPFs 200 msecs 

 Maximum wait time between two consecutive SPFs 5000 msecs 

 Initial LSA throttle delay 50 msecs 

 Minimum hold time for LSA throttle 200 msecs 

 Maximum wait time for LSA throttle 5000 msecs 

 Minimum LSA arrival 100 msecs 

 LSA group pacing timer 240 secs 

 Interface flood pacing timer 33 msecs 

 Retransmission pacing timer 66 msecs 

 Retransmission limit dc 24 non-dc 24 

 EXCHANGE/LOADING adjacency limit: initial 300, process maximum 300 

 Number of external LSA 0. Checksum Sum 0x000000 

 Number of areas in this router is 1. 1 normal 0 stub 0 nssa 

 Graceful restart helper support enabled 

 Reference bandwidth unit is 100 mbps 

 RFC1583 compatibility enabled 

    Area BACKBONE(0) (Inactive) 

        Number of interfaces in this area is 1 

        SPF algorithm executed 1 times 

        Number of LSA 3. Checksum Sum 0x01F8BB 

        Number of DCbitless LSA 0 

        Number of indication LSA 0 

        Number of DoNotAge LSA 0 

        Flood list length 0 

 

New LSA Types 

OSPFv3 retains all the LSA types of OSPFv2, albeit with updated formats to accommodate both IPv4 and IPv6 prefix information and they have updated the names of a couple to better reflect the contained information. Additionally, OSPFv3 adds two additional LSA types, type 8 and type 9, or the Link LSA and the Intra-Area Prefix LSA respectively. 

  • Link LSAs (Type 8) – This LSA is limited to flooding just between a router and its connected neighbors. These LSAs contain information about the link-local address of the device and of other prefixes associated with that link. 
  • Intra-Area-Prefix LSAs (Type 9) – The Type 9 LSA contains IPv6 prefixes for stub and transit networks and associates them to the LSA of either device or network. As the name suggests, the Intra-area-prefix LSA is flooded only within an area. This LSA type is most similar to a type 1 or type 2 LSA as used in IPv4. 

Configuration 

OSPFv3 is configured similarly to OSPFv2, with a few syntactical changes from the IOS-XE command-line. 

Before starting any OSPFv3 configuration, IPv6 routing needs to be enabled first. 

Router1#conf t 

Enter configuration commands, one per line.  End with CNTL/Z. 

Router1(config)#ipv6 unicast-routing 

OSPFv2 can still use the legacy “network” router sub-command although Cisco has been moving towards initializing OSPF on an interface using the “ip ospf [process ID] area [area ID]” command. This brings the most notable configuration change with OSPFv3, and that is the requirement to use the, “ipv6 ospf [process ID] area [area ID]” command. 

There are currently two command syntaxes to configure the OSPFv3 routing process on IOS-XE (tested on 17.03.06). The first syntax is the “ipv6 router ospf [process ID” command and the second is the “router ospfv3 [process ID]” command. Both will create the same routing process, but it is notable that once you have used the “router ospfv3” command, it will lock you out of using the “ipv6 router ospf” command for that process ID and convert existing configurations in the running-config to use the “router ospfv3” syntax. 

If, however, you configure the “ipv6 ospf…” interface sub-config command without first creating a routing process, it will add the “ipv6 router ospf” to your running config rather than the seemingly preferred “router ospfv3” command. 

Router1(config)#int g1 

Router1(config-if)#ipv6 ospf 1 area 0 

Router1(config-if)#do show run | sec interface GigabitEthernet1|ospf  

interface GigabitEthernet1 

 no ip address 

 negotiation auto 

 ipv6 address 2001:DB8:1::1/64 

 ipv6 ospf 1 area 0 

 no mop enabled 

 no mop sysid 

ipv6 router ospf 1 !! Note the syntax created when OSPF is started directly from an interface 

Router1(config-if)#router ospfv3 1 

Router1(config-router)#router-id 10.0.0.1 

Router1(config-router)#do sh run | sec interface GigabitEthernet1|ospf 

interface GigabitEthernet1 

 no ip address 

 negotiation auto 

 ipv6 address 2001:DB8:1::1/64 

 ipv6 ospf 1 area 0 

 no mop enabled 

 no mop sysid 

router ospfv3 1 !! Notice now that the routing instance changed syntax after I used the “router ospfv3” command 

 router-id 10.0.0.1 

 ! 

 address-family ipv6 unicast !! The router ospfv3 command structure supports address families for supporting both IPv4 and IPv6 as well as multiple VRFs under the same routing protocol/process. 

 exit-address-family 

Router1(config-router)#exit 

Router1(config)#ipv6 router ospf 1 

% OSPFv3: Use “router ospfv3 1” to configure this process 

% Failed to create routing protocol ospf  !! I can no longer enter the router subconfig with “ipv6 router ospf” 

 

As noted above, if you are configuring OSPFv3 out of the box without a configured IPv4 address on any interfaces, you will need to manually configure a router-ID under the OSPFv3 process. 

As noted in the previous post on routing in IPv6, the default reference bandwidth has not changed between versions, 100Mbps. The reference bandwidth is used in the cost calculation to determine the best path through the network. The unfortunate side-effect of this default value is that any interface capable of throughput larger than 100Mbps will result in the same cost value and a total loss of resolution to actual network capabilities. The best course of action here is to configure a valid reference bandwidth across your OSPF environment that meets your needs for the foreseeable future. 

Router1(config)#router ospfv3 1 

Router1(config-router)#auto-cost reference-bandwidth ? 

  <1-4294967>  The reference bandwidth in terms of Mbits per second 

Router1(config-router)#auto-cost reference-bandwidth 100000 !! Reference bandwidth is in Mbps – 100000 is 100Gbps 

% OSPFv3-1-IPv6:  Reference bandwidth is changed. 

        Please ensure reference bandwidth is consistent across all routers. 

Router1(config-router)#do show ipv6 ospf 

 Routing Process “ospfv3 1” with ID 10.0.0.1 

 Supports NSSA (compatible with RFC 3101) 

 Supports Database Exchange Summary List Optimization (RFC 5243) 

 Event-log enabled, Maximum number of events: 1000, Mode: cyclic 

 Router is not originating router-LSAs with maximum metric 

 Initial SPF schedule delay 50 msecs 

 Minimum hold time between two consecutive SPFs 200 msecs 

 Maximum wait time between two consecutive SPFs 5000 msecs 

 Initial LSA throttle delay 50 msecs 

 Minimum hold time for LSA throttle 200 msecs 

 Maximum wait time for LSA throttle 5000 msecs 

 Minimum LSA arrival 100 msecs 

 LSA group pacing timer 240 secs 

 Interface flood pacing timer 33 msecs 

 Retransmission pacing timer 66 msecs 

 Retransmission limit dc 24 non-dc 24 

 EXCHANGE/LOADING adjacency limit: initial 300, process maximum 300 

 Number of external LSA 0. Checksum Sum 0x000000 

 Number of areas in this router is 1. 1 normal 0 stub 0 nssa 

 Graceful restart helper support enabled 

 Reference bandwidth unit is 100000 mbps !! Verification that reference bandwidth has changed 

 RFC1583 compatibility enabled 

    Area BACKBONE(0) (Inactive) 

        Number of interfaces in this area is 1 

        SPF algorithm executed 3 times 

        Number of LSA 3. Checksum Sum 0x01F05D 

        Number of DCbitless LSA 0 

        Number of indication LSA 0 

        Number of DoNotAge LSA 0 

        Flood list length 0 

 

Interestingly, many features such as passive-interfaces are still configured under the routing process rather than at the interface level. 

Router1#sh ipv6 ospf interface  

GigabitEthernet1 is up, line protocol is up  

  Link Local Address FE80::5054:FF:FE01:3B88, Interface ID 7 (ios-if-index) 

  Area 0, Process ID 1, Instance ID 0, Router ID 10.0.0.1 

  Network Type BROADCAST, Cost: 100  !! Default ethernet interfaces are set to a network type of “broadcast” which forces a DR/BDR election 

  Transmit Delay is 1 sec, State WAITING, Priority 1 

  No designated router on this network 

  No backup designated router on this network 

  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5 

    Hello due in 00:00:03 

    Wait time before Designated router selection 00:00:24 

  Graceful restart helper support enabled 

  Index 1/1/1, flood queue length 0 

  Next 0x0(0)/0x0(0)/0x0(0) 

  Last flood scan length is 0, maximum is 0 

  Last flood scan time is 0 msec, maximum is 0 msec 

  Neighbor Count is 0, Adjacent neighbor count is 0  

  Suppress hello for 0 neighbor(s) 

Router1#conf t 

Enter configuration commands, one per line.  End with CNTL/Z. 

Router1(config)#int g1 

Router1(config-if)#ipv6 ospf network point-to-point 

Router1(config-if)#^Z                               

Router1#sh ipv6 ospf interface  

GigabitEthernet1 is up, line protocol is up  

  Link Local Address FE80::5054:FF:FE01:3B88, Interface ID 7 (ios-if-index) 

  Area 0, Process ID 1, Instance ID 0, Router ID 10.0.0.1 

  Network Type POINT_TO_POINT, Cost: 100 !! Configuring interfaces as point-to-point simplifies network operation if the interface is plugging directly into another router 

  Transmit Delay is 1 sec, State POINT_TO_POINT 

  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5 

    Hello due in 00:00:03 

  Graceful restart helper support enabled 

  Index 1/1/1, flood queue length 0 

  Next 0x0(0)/0x0(0)/0x0(0) 

  Last flood scan length is 0, maximum is 0 

  Last flood scan time is 0 msec, maximum is 0 msec 

  Neighbor Count is 0, Adjacent neighbor count is 0  

  Suppress hello for 0 neighbor(s) 

 

For further details, reference Cisco’s documentation on configuring OSPFv3.

Contact BlueAlly

Connect with BlueAlly today to learn more.