Configuring IPv6 addresses using EUI-64

This is Part 2 of 3 of my IPv6 study notes for the CCNA. In this lesson, Configuring IPv6 addresses using EUI-64, we continue our studies of IPv6 for the CCNA. In Part 1, Introduction to IPv6 for the CCNA, we learned how to do some basic IPv6 router configurations – how to enable IPv6 routing on routers, and how to configure an IPv6 address on the router interface. In this lesson, Configuring IPv6 addresses using EUI-64, we learn one more way to configure an IPv6 address on a router interface, using a method called EUI-64.

In IPv6 Part 1 we began discussing global unicast and link-local IPv6 addresses. In this lesson we go more in depth and we learn about other IPv6 address types, specifically, unique local, multicast, anycast, unspecified, and loopback.

In Part 3, IPv6 static route configuration, we cover 1) the NDP (neighbor discovery protocol) functions of address resolution/neighbor discovery using NS/NA messages, router discovery using RS/RA messages, SLAAC, and DAD, 2) how to configure an IPv6 address using SLAAC, 3) how to configure IPv6 static routes (directly attached, recursive, and fully specified), and 4) how to configure IPv6 static routing: default, network, host, and floating static. This post constitutes Issue 26 of my CCNA 200-301 study notes.

  • Configuring IPv6 addresses using EUI-64
  • EUI-64 conversion practice
  • EUI-64 configuration (configuring IPv6 addresses)
  • EUI-64: why convert the 7th bit
  • Global unicast addresses
  • Unique local addresses
  • Link-local addresses
  • Multicast addresses
  • Multicast address scopes
  • Anycast addresses
  • Other IPv6 address types
  • Command review
  • Key learnings
  • Practice quiz questions
  • Key references

You may also be interested in CCNA 200-301 study notes.

Configuring IPv6 addresses using EUI-64

EUI-64 (Extended Unique Identifier) is a method used to generate a 64-bit interface identifier for an IPv6 host. An IPv6 interface identifier is a unique identifier for a network interface card (NIC).

EUI-64 is a method of automatically generating an IPv6 address using a specified prefix and a MAC address. The EUI-64 method converts a 48-bit MAC address into a 64-bit interface identifier. This interface identifier can then become the host portion of a /64 IPv6 address. An IPv6 address is 128 bits, so /64 means 64 bits are the network portion and 64 bits are the host portion of the address.  

The technically correct term is modified EUI-64, but just EUI-64 is commonly used. The term modified EUI-64 is more technically accurate because the original EUI-64 specification did not include the step of inverting the 7th bit of the first quartet in the modified MAC address as it is being converted into a 64-bit interface identifier, as we will see in a minute.

When you actually configure an IPv6 address on a router interface using EUI-64, the router will automatically do it for you using the specified prefix and the router’s own interface MAC address.

That said, let’s see how it’s done – how an IPv6 address can be generated using the EUI-64 method.

Here is our MAC address example: 1234 5678 90AB.

>The first step is to divide the MAC address of the interface in half. 

1234 56 | 78 90AB (the bar “|” is not part of the MAC address, it just shows where the address splits in half)

>The next step is to insert hexadecimal FFFE in the middle. 

1234 56FF FE78 90AB

>Then invert the 7th bit. If the 7th bit is a 0, make it a 1. If the 7th bit is a 1, make it a 0.  

Recall, each hexadecimal digit is 4 bits. So the 7th bit is the 3rd bit of the hexadecimal 2 in the modified MAC address 1234 56FF FE78 90AB.

The ‘1’ in the first quartet (1234) is bits 1, 2, 3, and 4. 

Then the ‘2’ is bits 5, 6, 7, and 8. And hexadecimal 2 in binary is 0010. So the 3rd bit is 1. We convert it to 0, we get 0000, which is the (new) value of the second hexadecimal character of the modified MAC address written in binary. We convert this binary value back to hexadecimal (a 4-bit character), a hexadecimal 0.

Now the process is complete. Our MAC address becomes: 1034 56FF FE78 90AB

This is the interface identifier or interface ID, and it’s 64 bits. It becomes the host portion of a /64 IPv6 address. It will be added on to the network prefix to make the complete IPv6 address.

EUI-64 conversion practice

Here are some practice conversions. Convert each MAC address to an EUI-64 interface identifier.

EUI-64-conversion practice
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

EUI-64 configuration (configuring IPv6 addresses)

Let’s configure an IPv6 address on a router interface using the EUI-64 method.

Here’s how to configure an interface using EUI-64 in Cisco CLI. 

First on G0/0, we used the command IPV6 ADDRESS, followed by the network prefix, 2001:DB8::/64, and then EUI-64. That’s it. This tells the router to use this prefix plus the EUI-64 interface identifier to generate an IPv6 address.  

The first 64 bits of the IPv6 address are taken from the prefix that is specified in the command. The other 64 bits, the interface identifier, are derived by the router from the MAC address of the router interface using the EUI-64 method.

EUI-64-configuration
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

We did the same on G0/1 and G0/2. 

Let’s first check the MAC address of each interface using the SHOW INTERFACES command. Notice, the MAC addresses of the interfaces are nearly identical, only the last digit is different, so we can expect their EUI-64 interface identifiers to be very similar.

EUI-64-ipv6-configuration
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

Next, let’s check the actual IPv6 addresses that were configured. Let’s use the SHOW IPV6 INTERFACE BRIEF command to check the IPv6 address that was generated on each interface.

Enclosed in the red rectangle in the following CLI output is G0/0’s IPv6 address, a global unicast address. Notice that EUI-64 changed the C of the MAC address to an E. And the FFFE was inserted in the middle of the MAC address to make it 64 bits in length.

Above G0/0’s global unicast address is the link-local address. Link-local addresses are automatically configured on a router interface when you configure an IPv6 address on the router interface, when IPv6 is enabled on the interface.

show-ipv6-interface-brief
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

Also note the addresses of G0/1 and G0/2. The IPv6 addresses are very similar because the MAC addresses used to generate the IPv6 addresses are very similar.

To summarize, EUI-64 allows routers to automatically generate an IPv6 address by expanding their MAC address to a 64-bit interface ID, which is then combined with the specified IPv6 address prefix.

EUI-64 why convert the 7th bit

Why the 7th bit is inverted from 1 to 0 or 0 to 1. 

MAC addresses can be divided into two types. First, UAAs, universally administered addresses, the globally unique MAC addresses assigned to the device by the manufacturer. Second, LAAs, locally administered addresses, MAC addresses manually assigned by an admin (with the MAC-ADDRESS command on the interface) or a protocol.   

The official CCNA cert guide by Odom (2020) does not really offer a technical explanation for the inversion of the 7th bit. One can assume then this is unlikely to be a question on the CCNA exam.

Online, two somewhat complementary explanations are found:

1) An explanation on networkengineering.stackexchange.com by user Eddie (Practical Networking):

In MAC address architecture, the 7th bit signifies whether the MAC address was universally or locally assigned. A value of 0 indicates the address is universally administered … Should a user manually change their MAC address, this 7th bit would be set to 1, indicating the Ethernet address was locally administered.

This is similar to Jeremy McDowell’s explanation (IPv6 Part 2 YouTube video lesson). 

Makes sense. The local router uses its unique interface MAC address to derive the interface identifier. So the modified MAC address is locally administered.

2) An explanation on https://packetlife.net/blog/2008/aug/4/eui-64-ipv6 says the answer lies buried in section 2.5.1 of RFC 2373: 

The motivation for inverting the “u” bit when forming the interface identifier is to make it easy for system administrators to hand configure local scope identifiers when hardware tokens are not available. This is expected to be case for serial links, tunnel end-points, etc. The alternative would have been for these to be of the form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler ::1, ::2, etc.

Global unicast addresses

Global unicast IPv6 addresses are the regular IPv6 addresses that hosts can use over the Internet. They are not private addresses or multicast addresses.

Global unicast addresses are globally routable, and are equivalent to public IPv4 addresses. They are used to identify nodes on the global IPv6 Internet.

To use global unicast addresses you must register with the Regional Internet Registries (RIRs). Because they are public addresses, it is expected that they are globally unique. 

The range for global unicast addresses is 2000::/3 to 3FFF::/3. This range includes all addresses from 2000 followed by 7 quartets of 0s through 3FFF followed by 7 quartets of Fs. 

2000:: to 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

This range was later updated to include many more addresses. Now all addresses not reserved for other purposes are global unicast addresses. 

The range for global unicast addresses is divided into three fields:

  • Global routing prefix: The first 48 bits of the address, which are used for routing. The first three bits of this field are always set to 001.
  • Subnet identifier: The next 16 bits of the address, which are used to identify a subnet within a site.
  • Interface ID: The last 64 bits of the address, which are used to uniquely identify a particular interface (host or other device).

This is an example of a global unicast address from IPv6 Part 1. Let’s go over it again. 

example-global-unicast-address
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

The blue part is the 48-bit global routing prefix, which is assigned to a company by the ISP. The company is free to use this /48 block of addresses however they want. 

However, because IPv6 addresses usually use a /64 prefix length, that means that the remaining 16 bits in the prefix are the subnet identifier, which can be used to make various subnets. 16 bits allows for over 65,000 subnets, more than enough for almost any purpose.

The global routing prefix and the subnet identifier together make up the IPv6 network prefix.  

The second half of the address, the host portion of the address in IPv4, is the interface identifier. This can be generated with EUI-64 as we saw or manually configured.  

Unique local addresses

IPv6 unique local addresses (ULAs) are private addresses which cannot be used over the Internet (they are not globally routable). Your ISP will simply drop packets destined for unique local addresses.

ULAs may be used freely, without centralized registration, inside a single site or organization or spanning a limited number of sites or organizations.

The address range fc00::/7 is reserved for ULAs.

FC00:: to FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

The format of a ULA is fc00::/7. However a later update requires that the 8th bit be set to 1, so all unique local addresses will begin with FD.  

Here’s an example of a unique local address. Here is a break down the parts.

Unique-local-addresses
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

>First, FD, the first 8 bits (2 hex characters), indicates that this is a unique local address. 

>The next 40 bits are called the global ID. It is recommended that this part of the address be randomly generated. 

The global ID should be unique so that addresses do not overlap if, e.g., if two companies merge. Even though ULAs do not have to be globally unique, it’s still a good idea to randomly generate the global ID and try to make it globally unique.  

>The next part of the address is the subnet identifier, just like in a global unicast address.  

The first 64 bits make up the network prefix. The last 64 bits are the interface ID.

Link-local addresses

Link-local IPv6 addresses are automatically configured on a router interface when you configure an IPv6 address on the router interface, when IPv6 is enabled on the interface.

You can use the command IPV6 ENABLE to enable IPv6 on an interface without actually configuring an IPv6 address on the interface. The router will then automatically generate a link-local IPv6 address, and that will be the only IPv6 address on the interface. 

R1(config-if)#ipv6 enable

Link-local addresses use the address block FE80::/10.

FE80:: to FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

The standard RFC 4291 is the Internet Protocol Version 6 (IPv6) Addressing Architecture. This RFC defines the format of IPv6 addresses, including the link-local address prefix of FE80::/10. The RFC states that the 54 bits after FE80 should all be 0s, which means that the only valid link-local addresses are those that start with FE8.

Here’s the same output of SHOW IPV6 INTERFACE BRIEF we saw earlier in this lesson and in IPv6 Part 1.

SHOW-IPV6-INTERFACE
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

Notice that each link-local address uses the same interface ID as the global unicast address we configured earlier in this lesson, because both link-local address and global unicast address used EUI-64 to generate the interface ID. 

Link-local means that these addresses are used for communication within a single link, a single subnet. Routers will not route packets with a link-local destination IPv6 address.

Common uses of link-local addresses:

  • Routing protocol peerings (OSPFv3 uses link-local addresses for neighbor adjacencies, e.g., sending LSAs). 
  • As the next-hop address for static routes. 
  • Neighbor discovery protocol (NDP), which is IPv6’s replacement for ARP, uses link-local addresses to function.  

NDP and IPv6 routing are covered in IPv6 Part 3. But here’s an example of one use for link-local addresses, as next-hop addresses.

PC1 in the 2001:DB8:0:1::/64 subnet wants to send a packet to PC2 in the  2001:DB8:0:2::/64 subnet.

SHOW-IPV6-INTERFACE
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

PC1 sends the packet to its default gateway 2001:DB8:0:1::1, R1. R1 looks up the destination 2001:DB8:0:2::2 in its routing table, and the next hop is FE80::3, so R1 forwards the packet to R2. R2 looks up the destination 2001:DB8:0:2::2 in its routing table and finds a next hop of FE80::5, so it forwards the packet to R3. R3 looks up the destination 2001:DB8:0:2::2 in its routing table and finds a next hop address of FE80::7, so it forwards the packet to R4, which forwards it to PC2.  

Notice that in the enclosed pink triangle part of the network, the routers only have link-local addresses. So R1, for example, would not be able to ping R3. If R1 tried to ping R3 at FE80::5, the packet would simply be dropped because the destination is a link-local address. The packet will not be routed. 

However, for next-hop addresses these link-local addresses work just fine. There is no need for any global unicast or unique local addresses on these interfaces. 

Multicast addresses

Unicast addresses are used for one-to-one communication. A unicast packet travels from one destination to another destination. 

Broadcast addresses are used for one-to-all communication, from one source to all destinations within the subnet.  

Multicast addresses are used for one-to-many communications. From one source to multiple destinations (hosts that have joined the specific multicast group).  

IPv6 uses the range FF00::/8 for multicast. 

FF00:: to FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

Unlike IPv4, IPv6 does not use broadcast. Instead, IPv6 uses multicast to send messages to a specific group of hosts. IPv6 can use multicast to send a message to all hosts in the subnet.

The main reason why IPv6 does not use broadcast is because broadcast is inefficient. When a broadcast message is sent, it is sent to every host on the network. This can cause a lot of unnecessary traffic, especially on large networks.

Multicast addresses are more efficient because they allow messages to be sent to a specific group of hosts. This means that only the hosts that are interested in the message will receive it. This can save a lot of bandwidth and improve performance.

There are a few different types of multicast addresses in IPv6. The most common type is the all-nodes multicast address, which is ff02::1. This address is used to send messages to all hosts on the same link.

Here’s a chart of some important multicast addresses, both IPv6 and IPv4 versions. You should know all of these multicast addresses for the CCNA. 

all-nodes-multicast-address
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

Notice that the IPv4 and IPv6 versions use the same last digit. For example, the all OSPF routers multicast address is FF02::5 in IPv6 and 224.0.0.5 in IPv4. The all EIGRP routers multicast address is FF02::A in IPv6, and it’s 224.0.0.10 in IPv4 (hexadecimal A is 10 in decimal).

The all nodes (all hosts) multicast address functions like a broadcast, since it’s destined for all hosts like a broadcast. IPv6 can perform broadcasts by sending traffic to this multicast address.

Multicast address scopes

IPv6 defines multiple multicast scopes which indicate how far the multicast packet should be forwarded. These multicast scopes include:

>Interface-local (FF01): interface-local multicast addresses begin with FF01. Interface-local multicast addresses are used to send messages to a group of hosts on the same network interface. They are not routable on the global IPv6 internet. These multicast addresses do not leave the local device. The router will not send traffic out of a physical interface. You might also see the term node-local used for this scope. 

There are two interface-local multicast addresses that begin with FF01:

FF01::1: This address is used to send messages to all nodes in the interface-local.

FF01::2: This address is used to send messages to all routers in the interface-local.

>Link-local (FF02): link-local scope uses FF02. These multicast addresses stay within the local subnet and are not routed between subnets. The IPv6 addresses in the previous chart of some important multicast addresses all use the link-local scope (FF02), which stays in the local subnet. 

Interface-local and link-local scopes are clearly defined and do not need any special configuration. Aside from interface-local and link-local, however, it is up to the network engineer to define the boundaries of each scope.

Multicast-address-scopes
This diagram can help visualize the different multicast address scopes. Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

>Site-local (FF05): site-local multicasts begin with FF05 and can be forwarded by routers. By definition, they should be deployed within a single physical location. However, the actual boundary of the scope needs to be defined by the network engineer.

>Organization-local (FF08): these multicasts begin with FF08. These are intended to be wider in scope than site-local multicasts. For example, the scope might be to all subnets in the company. Again, it’s up to the network engineers to configure the boundaries of the scope.

>Global (FF0E). No boundaries. These multicasts can be routed over the Internet.

Exactly how these scopes work is beyond the CCNA, but Cisco expects you to be aware of these different scopes, to know their names, and to know how to identify them using the 4th hexadecimal character in the address. Multicast configuration is beyond the scope of the CCNA. But we can identify them in the CLI.

This is from the output of SHOW IPV6 INTERFACE. This is the same router we configured the EUI-64 addresses on. We are looking at its G0/0 interface. Notice “joined group addresses”. These are the multicast groups that R1 has joined on this interface. 

show-ipv6-interface-cli
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

>FF02::1 is the all nodes or all hosts multicast address, and the multicast scope is link-local. R1’s G0/0 is a host in the 2001:DB8::/64 subnet, so it joins the all hosts multicast group in that subnet automatically. 

>R1 also joined multicast group FF02::2. This is the all routers multicast group. Being a router, R1 joins this multicast group also automatically. 

>R1 also joined multicast group FF02::1:FF36:8500. This kind of multicast address is called a solicited-node multicast address. It is covered in IPv6 Part 3.

Anycast addresses

Anycast is a new feature of IPv6. Anycast messaging is one-to-one-of-many or you could say one-to-one-of-multiple. There are multiple possible destinations, but the traffic is only sent to one. 

Anycast-addresses
Image courtesy of Wikipedia

How does anycast messaging work?  

Multiple routers are configured with the same IPv6 address. Routers use a routing protocol to advertise the address. When hosts send packets to that destination address, other routers will forward it to the nearest router configured with that IP address (the router with the smallest routing protocol metric).  

Unlike the other address types we covered, there is no specified range for anycast addresses. Use a regular unicast address, e.g., a global unicast or unique local address, and specify it as an anycast address. 

Here’s an example, configured using /128, which is like a /32 IPv4 address. 

R1(config-if)#ipv6 address 2001:db8:1:1::99/128 anycast

If a routing protocol on this interface is activated, a host route to this specific address will be advertised to other routers.

Here’s that example in the CLI. Configure it like a regular IPv6 address and add the word ANYCAST to the end of the command.

ipv6-address-anycast
Image courtesy of Jeremy’s IT Lab (Free CCNA | IPv6 Part 2 | Day 32)

Using SHOW IPV6 INTERFACE G0/0 shows two IPv6 addresses. On top is the EUI-64 address we configured earlier, as indicated by EUI at the end. Under it is the anycast address we just configured, indicated by ANY at the end. 

Note that even though this is an anycast address, it is listed under global unicast addresses in this command, but this ANY at the end tells us it is anycast.

Other IPv6 address types

1) “::” -i.e., the unspecified IPv6 address of all 0s, usually just written as a double colon. It can be used when a device does not know its IPv6 address yet. IPv6 default routes are configured to ::/0. The IPv4 equivalent of this address is 0.0.0.0/0.   

2) “::1” -i.e., 127 bits of 0 followed by a single 1. This is the IPv6 loopback address. It’s used to test the protocol stack on the local device. Messages sent to this address are processed within the local device. The IPv4 equivalent is the 127.0.0.0/8 address range. 

Command review

>Configure an IPv6 address on a router interface using the EUI-64 method:

R(config-if)#ipv6 address network-prefix/prefix-length eui-64
→to tell the router to use this network prefix plus the EUI-64 interface identifier to generate an IPv6 address

R#show interfaces interface
→to check the MAC address of each interface 

R#show ipv6 interface brief
→to check the IPv6 address that was generated on each interface using the EUI-64 method

R(config-if)#ipv6 enable
→to enable IPv6 on an interface without actually configuring an IPv6 address on the interface. The router will then automatically generate a link-local IPv6 address, and that will be the only IPv6 address on the interface

R#show ipv6 interface interface
→to identify multicast configuration in the CLI (the multicast groups the router has joined on this interface)

>Configure an anycast IPv6 address:

Use a regular unicast address, e.g., a global unicast or unique local address, and specify it as an anycast address. 

Here’s an example, configured using /128, which is like a /32 IPv4 address. 

R1(config-if)#ipv6 address 2001:db8:1:1::99/128 anycast

Free CCNA | Configuring IPv6 (Part 2) | Day 32 Lab – Notes

Key learnings

*How to generate the interface identifier from a MAC address using EUI-64.

*How to configure an IPv6 address on a router interface using EUI-64.

*IPv6 address types: global unicast, unique local, link-local, multicast, anycast, unspecified, and loopback:

  • global unicast addresses are public IPv6 addresses which can be routed over the Internet. 
  • unique local addresses. No registration is needed to use IPv6 addresses in this range. You’re free to use them in your internal networks, but these addresses aren’t routed over the Internet.  
  • link-local addresses. These are automatically configured when you enable IPv6 on an interface. You can do that by configuring another IPv6 address such as a global unicast address on an interface, or you can just use the IPV6 ENABLE command on the  interface, which will enable IPv6 on the interface and automatically configure a link-local address.  
  • IPv6 multicast addresses, including some common reserved multicast  addresses used for OSPF, RIP, and EIGRP; and multicast scopes.
  • other IPv6 address types, specifically, anycast addresses, which are used to send traffic to one destination out of multiple possible destinations. Also, the unspecified IPv6 address which is all 0s and usually just written as a double colon, and the IPv6 loopback address, which is simply written as ::1.  

*Multicast scopes: interface-local, link-local, site-local, organization-local, and global.

Practice quiz questions

Quiz question 1

R1’s G0/1 interface has a MAC address of 0D2A.4FA3.00B1. What will G0/1’s IPv6 address be after issuing the following command?

R1(config-if)#ipv6 address 2001:db8:0:1::/64 eui-64

A. 2001:db8:0:1:0B2A:4FFF:FFA3:B1

B. 2001:db8:0:1:C2A:4FFF:FEA3:B1

C. 2001:db8:0:1:0F2A:4FFF:FFA3:B1

D. 2001:db8:0:1:F2A:4FFF:FEA3:B1

The answer is D. The 7th bit of the MAC address was inverted to a 1, changing the D in the MAC address to an F.  Also, FFFE was correctly inserted into the middle of the MAC address to expand it to 64 bits.

You can find four more practice questions for this lesson (plus a bonus one) in Jeremy’s video lesson IPv6 Part 2, cited below.

Key references

Note: The resources cited below (in the “Key references” section of this document) are the main source of knowledge for these study notes/this lesson, unless stated otherwise.

Free CCNA | IPv6 Part 2 | Day 32 | CCNA 200-301 Complete Course

Free CCNA | Configuring IPv6 (Part 2) | Day 32 Lab | CCNA 200-301 Complete Course

Related content

CCNA 200-301 study notes

Compliance frameworks and industry standards

How data flow through the Internet

How to break into information security

How to get CCNA certification

Introduction to IPv6 for the CCNA

IPv6 static route configuration

IT career paths – everything you need to know

Job roles in IT and cybersecurity

The GRC approach to managing cybersecurity

The penetration testing process

The Security Operations Center (SOC) career path

Back to DTI Courses

Text copying is disabled!