How to configure IPv6 OSPFv3 on Cisco IOS Router

You are correct. OSPF and EIGRP will only accept 32-bit numbers in an ipv4 address form as router-ids. Furthermore, they will only accept decimal numbers–trying to use A-F as Hex characters will be rejected. Below is the output will you see for the IOS accepted format for both OSPF and EIGRP router-ids for IPv6:


R1(config-rtr)#router-id ?
  A.B.C.D  OSPF router-id in IP address format


R1(config-rtr)#eigrp router-id ?
  A.B.C.D  EIGRP Router-ID in IP address format


How to config with many area .could you pls exam. thanks a lots

Hi Ho H,

It’s the exact same thing, just use different area numbers and that’s it.


I am getting this error at both router.

Process OSPFv3-1-IPv6 could not pick a router-id, please configure manually

Kindly suggest.

Hello Sanjiv.

In order to clarify why you’re getting the error, first let’s look back on how a router chooses its router ID. A router ID is always in the format of an IPv4 address. The router ID is chosen in the following order:

  1. If a router ID is configured in the ospf configuration, this is used as the router ID.
  2. If no router ID is configured, then it uses the highest IP address of a loopback interface
  3. If no loopback interface exists, it will use the highest IP address of any physical interface in the “up” state.

Now if you’re using IPv4, then one of the above will be configured so you will NEVER get the above error message. If you’re using ONLY IPV6, you may have NONE of the above configured. So if that is the case, you get the error message that you observed in your configuration.

To solve the problem, define a router ID using one of the above three entities. It is always best practice however, whether you use IPv4 or IPv6, to define a router ID in the ospf configuration. This will allow you to more easily identify routers in neighbor tables when troubleshooting and when changing configurations.

I hope this has been helpful!


Can I ask what is the difference between the following 2 commands?

“ospfv3 1 ipv6 area 0”
“ipv6 ospf 1 area 0”

I just tried this and it shows up differently under the running config:

interface Ethernet0/0
no ip address
ipv6 enable
ospfv3 1 ipv6 area 0
interface Ethernet0/1
no ip address
ipv6 enable
ipv6 ospf 1 area 0

Hello Chris,

Good question, this can be confusing. Originally, OSPFv3 was created only for IPv6:

Later, OSPFv3 was updated to support address-families:

This means you can run it for IPv6 and IPv4 (and some other address families like multicast).

The “ipv6 ospf” commands are the “old” commands and the “ospfv3” commands are the newer commands.

If you use “ipv6 ospf” on an interface and later use “ospfv3” then you’ll see that the “ipv6 ospf” command will disappear.

“ipv6 router ospf” is the old way to start an IPv6 OSPF process. “router ospfv3” is the new way to start OSPFv3 with address family support.

Hope this helps!


1 Like

Thanks for that, very helpful!

something which is mentioned in other lessons but is still kind of cool to see is how OSPF uses the Link Local for all the management type data its sending…

Since I am studying for the Tshoot I am trying to lab up the majority of the topics that is covered for the exam. So I am building a ton of GNS3 labs.

I would say that really be familiar in how IPV6 OSPF is setup for example being able to identify if something was missing from the show running configuration could be paramount to passing.


My topology just mirrors this lesson in this case its simply but effective! Great lesson easy to ingest and understand


wire shark was cool understood all of it but the ca: reply form loop not sure exactly what that is but know it has to do with loop back speaking. (Edited that was the MAC address)

1 Like

I am a little confused with the set up of this lab, specially coming from ipv4 ospf. the loopbacks have the same mask?? I know ospf considers loopbacks as hosts, but i am confused by not having to set up a global ip on interface fa0/0, on both routers. Can someone please clarify?

Hello Martha

When transitioning from IPv4 to IPv6 it’s necessary to reevaluate certain issues. It’s all part of the process! Remember that routing protocols in IPv6 use the link-local addresses to exchange information. The link-local address is automatically assigned to each IPv6 enabled interface and communication between connected IPv6 devices is automatically established using these addresses. For more info on the link-local address, take a look at this lesson:

So since connectivity is established, OSPFv6 messages can be exchanged between the routers. You’ll notice that after IPv6 is enabled on the Ethernet interfaces, in the output of the show ipv6 interface brief command on each router, you see that these routers have an IP address starting with FE80 assigned to them, even though no config was applied.

As for the subnet mask or the prefix of the loopback addresses, the prefix used here is analogous to using the /32 prefix in IPv4. So you can have one loopback be assigned and the loopback on the other router be assigned The /128 mask simply states that the IP address belongs to a range that contains only one address: itself.

I hope this has been helpful!


1 Like

I’ve found a question about OSPFv3 - “What statement about configuring OSPFv3 is true?”
There answers are:

  1. the OSPFv3 routing process must be explicitly configured and enabled;
  2. OSPFv3 interfaces must be explicitly configured and enabled.
    As for me the best answer is 2, but some men suppose the right answer is 1. Can someone please clarify?

Hello Boris

The correct answer is indeed number 2. This is because in OSPFv3, a routing process does not need to be explicitly created. By enabling OSPFv3 on an interface, you will cause a routing process and its associated configuration to be created automatically. The key word in the question is “explicitly”.

An OSPFv3 routing process MUST be enabled in order for it to function, but it doesn’t EXPLICITLY have to be configured, since this is automatically done if you simply enable it on an interface.

This is verified at the following Cisco documentation:

I hope this has been helpful!


1 Like

Hello Laz.
Thanks a lot

1 Like

Hi team,

If multiple ospfv3 areas are configured, I would imagine that you can use the link local addresses for the neighbour discovery and for passing route information within the specific area.

However, when multiple areas are used including transit areas (for areas not directly connected to area 0) the use of Global Unicast addresses would be needed?

I created a topology with a virtual link going through a transit area and my remote area (not connected to backbone) received the prefix from area 0 via OSPFv3, however, it couldn’t not ping the prefix and I was only using link local addresses at the time. Once I created IPV6 addresses between the routers, the ping then worked.

If you could assist with this that would be great! :slight_smile:



Hello Andrew

This is a very interesting issue that you have found, as far as the differences in how OSPFv2 and OSPFv3 behave. If you have an OSPF topology with multiple areas, where all non-backbone areas are directly connected to area 0, you can use only link local addresses between the OSPF routers themselves. However, according to the OSPF for IPv6 RFC 5340:

The IPv6 interface address of a virtual link MUST be an IPv6
address having global scope, instead of the link-local addresses
used by other interface types. This address is used as the IPv6
source for OSPF protocol packets sent over the virtual link.

So the IPv6 address used to create the virtual link must “have a global scope” or in other words, must be global unicast addresses. Specifically, the two routers between which the virtual link is created, whose interfaces are in the same transit area, must have global unicast addresses configured on those interfaces in order for the virtual link to operate.

You can see an example of a virtual link being created using OSPFv3 at the following Cisco documentation:

I hope this has been helpful!


1 Like

Hi Laz,

Thank you for your reply – This is much appreciated!

This is clear to me now.

Kindest Regards,


1 Like

Hi Rene/Laz

  • Am I right in thinking the purpose of the ipv6 enable command is purely to activate the link local address on an interface?
  • I notice we don’t apply this command to the loopback interfaces in this lesson yet they still acquire a link local address. Is the LL address automatically active on a loopback interface?


Hello Philip

Yes you are correct. If you only enable IPv6 on an interface, it will be able to send and receive IPv6 packets, and it will automatically obtain a link local address on the interface.

The reason we don’t use this command in that particular case is because we’ve configured an IPv6 global unicast address on the loopback. When an interface is explicitly configured with an IPv6 address, it automatically becomes IPv6 enabled, and there is no need to issue the ipv6 enable command. Interestingly, if you issue the no ipv6 enable command on an interface with a configured IPv6 address, the command would be ignored. Notice that the interface also obtains a link local address as well. This behaviour is the same regardless of whether the interface is a looback or a physical interface.

I hope this has been helpful!


1 Like

Hey guys, great article :slight_smile:

I setup 3x fresh routers using the instructions in the article and everything works great.

However I ran into a weird issue when setting up OSPFv3 (still following these instructions) on a network of routers already configured with IPv4 and OSPFv2. The OSPFv3 neighbours are established ok, but when I go to ping the Global Unicast address on the Loopback interface from another router, I get this error:

% Unrecognized host or address or protocol not running.

I’ve checked over the router configs and compared them to the working set of routers, and can’t see anything I’ve missed on the IPv6 side of things. I assume the issue must be to do with the fact that IPv4 is setup on the network and/or it’s already running OSPFv2? (As the working set of routers is IPv6 only). In that case would there be some more configuration required to get everything working in “dual stack” or something?

Thanks for your help!