VMware ESXi and vSphere Cluster Management

Configure IPv6 on a Cisco Router

Learn to enable IPv6 unicast routing, configure a /64 global address with modified EUI-64, and verify link-local and global IPv6 addresses in Cisco IOS.

IPv6 configuration on a Cisco router has two separate parts: enabling router-wide IPv6 forwarding and assigning IPv6 addresses to individual interfaces. An interface can have an IPv6 address without the router being able to forward IPv6 packets between interfaces, so both parts matter.

Prerequisites and lab scenario

This lesson assumes familiarity with Cisco IOS command modes, basic interface configuration, IPv6 hexadecimal notation, prefix lengths, and the structure of a 48-bit MAC address.

In the example, an Ethernet interface connects to the IPv6 subnet 2001:db8:1:1::/64. The router will use modified EUI-64 to create the lower 64-bit interface identifier from the interface MAC address.

IPv6 routing support on Cisco IOS

IPv6 unicast routing is the router-wide capability that allows a Cisco router to forward IPv6 packets between interfaces. On many Cisco IOS configurations, IPv6 packet forwarding is not active until it is enabled explicitly in global configuration mode.

Use this command:

Router(config)# ipv6 unicast-routing

This command is different from assigning an IPv6 address. The address command gives an interface an IPv6 identity; ipv6 unicast-routing enables the router to perform IPv6 forwarding. The router also needs appropriately configured interfaces and routes, such as connected routes, static routes, or routes learned through an IPv6 routing protocol.

IPv6 address types on a router interface

Address typeHow it is obtainedExample formatPrimary use
Global unicastConfigured with a routable prefix, manually or with EUI-642001:db8:1:1:250:fff:fedc:401/64Communication that can be routed beyond the local link
Link-localGenerated automatically when IPv6 is enabled on the interface, unless explicitly configured otherwisefe80::250:fff:fedc:401Neighbor Discovery, next-hop communication, and IPv6 routing protocol communication on the local link

A global unicast address is intended to be routable beyond the local network. The documentation prefix 2001:db8::/32 is used in examples and should not be treated as a production address allocation.

A link-local address is valid only on the local Layer 2 link. Link-local addresses normally come from the FE80::/10 range. Routers use them for local-link operations such as Neighbor Discovery and communication with routing protocol neighbors. Cisco IOS automatically creates a link-local address when IPv6 is enabled on an interface, even if the administrator configures only a global prefix.

Configure a global IPv6 address with modified EUI-64

1. Enable IPv6 unicast routing globally

Enter privileged EXEC mode and then global configuration mode:

Router> enable
Router# configure terminal
Router(config)# ipv6 unicast-routing

2. Select the interface

Enter interface configuration mode for the Ethernet interface that connects to the IPv6 LAN:

Router(config)# interface FastEthernet0/0

3. Configure the prefix with EUI-64

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

The administrator supplies the network prefix, 2001:db8:1:1::/64, and the prefix length, /64. The eui-64 keyword tells IOS to generate the lower 64-bit interface identifier automatically from the interface MAC address.

The typical IPv6 subnet boundary for modified EUI-64 is /64: the first 64 bits identify the subnet, and the last 64 bits identify the interface. IOS combines the configured prefix with the generated identifier.

4. Ensure the interface is enabled

If the interface is administratively down, enable it with no shutdown:

Router(config-if)# no shutdown
Router(config-if)# end

The interface must also have an active physical link for its line protocol to become operational.

How modified EUI-64 creates the interface identifier

EUI-64 is a method for forming a 64-bit IPv6 interface identifier from a 48-bit MAC address. Modified EUI-64 adapts that process for IPv6 by inserting FFFE and inverting the universal/local bit in the first byte.

  1. Start with the 48-bit MAC address and split it into two 24-bit halves.
  2. Insert FFFE between the halves, producing eight hexadecimal bytes.
  3. Invert the universal/local bit in the first byte. In the example, the first byte changes from 00 to 02.
  4. Group the resulting eight bytes into four 16-bit hexadecimal fields.
  5. Append the resulting 64-bit identifier to the configured IPv6 /64 prefix.
Conversion stageValueExplanation
Original MAC00:50:0F:DC:04:01A 48-bit Layer 2 hardware address
Split into halves00:50:0F and DC:04:01Separates the first and final 24 bits
Insert FFFE00:50:0F:FF:FE:DC:04:01Expands the value to 64 bits
Invert universal/local bit02:50:0F:FF:FE:DC:04:01The first byte changes from 00 to 02
Group as IPv6 fields0250:0FFF:FEDC:0401The 64-bit interface identifier
Append to prefix2001:db8:1:1:250:fff:fedc:401/64The resulting global unicast address in normalized IPv6 notation

The first-byte change is important. Comparing the generated identifier with the unchanged MAC address is incorrect because modified EUI-64 changes the universal/local bit as well as inserting FFFE.

Verify the IPv6 interface configuration

Detailed interface verification

Use the following command to display IPv6 enablement, interface state, link-local addressing, and global IPv6 addresses:

Router# show ipv6 interface FastEthernet0/0

A representative result might include output similar to this:

FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::250:FFF:FEDC:401
  Global unicast address(es):
    2001:DB8:1:1:250:FFF:FEDC:401, subnet is 2001:DB8:1:1::/64 [EUI/CAL/PRE]
  Joined group address(es):
    FF02::1
    FF02::2
  • Interface state: is up, line protocol is up indicates that the interface is operational and its link protocol is active.
  • IPv6 enablement: IPv6 is enabled confirms that IPv6 is active on the interface.
  • Link-local address: The FE80:: address is the automatically generated local-link address.
  • Global address: The 2001:DB8:1:1::/64 address confirms the configured prefix.
  • Interface identifier: The final 64 bits, 0250:0FFF:FEDC:0401, match the modified EUI-64 calculation.

Brief verification

For a concise view of IPv6 addresses and interface states, use:

Router# show ipv6 interface brief

This command is useful when checking several interfaces quickly. Use the detailed command when you need to inspect the exact link-local address, global address, prefix, or IPv6 status for one interface.

Configuration and verification command reference

Configuration modeCommandPurpose
Global configurationipv6 unicast-routingEnables router-wide IPv6 routing and forwarding
Interface configurationinterface FastEthernet0/0Selects the interface to configure
Interface configurationipv6 address 2001:db8:1:1::/64 eui-64Assigns the global prefix and generates the interface identifier with modified EUI-64
Privileged EXECshow ipv6 interface FastEthernet0/0Displays detailed IPv6 addresses, enablement, and interface status
Privileged EXECshow ipv6 interface briefProvides a concise summary of IPv6 addresses and interface states

Troubleshooting common problems

The router has an IPv6 address but does not forward IPv6 packets

The likely cause is that IPv6 unicast routing is not enabled globally. Check the running configuration for ipv6 unicast-routing, add it in global configuration mode if it is absent, and confirm that the relevant interfaces are up and have valid IPv6 addresses.

Router# show running-config | include ipv6 unicast-routing
Router# configure terminal
Router(config)# ipv6 unicast-routing

The global address does not match the expected host portion

With the eui-64 option, IOS generates the lower 64 bits from the interface MAC address. Inspect the MAC address, insert FFFE between its two halves, invert the universal/local bit in the first byte, and compare that result with the global address. Do not use the unchanged MAC value as the IPv6 interface identifier.

A link-local address appears unexpectedly

This is expected. Cisco IOS automatically creates a link-local address when IPv6 is enabled on the interface. Confirm that it uses the FE80::/10 range. Link-local addressing supports essential local IPv6 functions and does not indicate that the global address configuration failed.

The configured IPv6 address is missing from verification output

  • Confirm that the correct interface name was selected.
  • Review the interface configuration and running configuration.
  • Check whether the interface is administratively down or its line protocol is down.
  • Confirm that the address command was accepted and uses a valid IPv6 prefix and prefix length.
  • Reapply the address command under the intended interface if necessary.

Complete example

Router> enable
Router# configure terminal
Router(config)# ipv6 unicast-routing
Router(config)# interface FastEthernet0/0
Router(config-if)# ipv6 address 2001:db8:1:1::/64 eui-64
Router(config-if)# no shutdown
Router(config-if)# end
Router# show ipv6 interface FastEthernet0/0
Router# show ipv6 interface brief

After this configuration, the interface should have both a link-local address and a global unicast address. The global address should use the configured 2001:db8:1:1::/64 prefix and an interface identifier derived through modified EUI-64.

Continue with this IPv6-on-Cisco-router configuration reference when reviewing the complete command sequence.