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 type | How it is obtained | Example format | Primary use |
|---|---|---|---|
| Global unicast | Configured with a routable prefix, manually or with EUI-64 | 2001:db8:1:1:250:fff:fedc:401/64 | Communication that can be routed beyond the local link |
| Link-local | Generated automatically when IPv6 is enabled on the interface, unless explicitly configured otherwise | fe80::250:fff:fedc:401 | Neighbor 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.
- Start with the 48-bit MAC address and split it into two 24-bit halves.
- Insert
FFFEbetween the halves, producing eight hexadecimal bytes. - Invert the universal/local bit in the first byte. In the example, the first byte changes from
00to02. - Group the resulting eight bytes into four 16-bit hexadecimal fields.
- Append the resulting 64-bit identifier to the configured IPv6 /64 prefix.
| Conversion stage | Value | Explanation |
|---|---|---|
| Original MAC | 00:50:0F:DC:04:01 | A 48-bit Layer 2 hardware address |
| Split into halves | 00:50:0F and DC:04:01 | Separates the first and final 24 bits |
| Insert FFFE | 00:50:0F:FF:FE:DC:04:01 | Expands the value to 64 bits |
| Invert universal/local bit | 02:50:0F:FF:FE:DC:04:01 | The first byte changes from 00 to 02 |
| Group as IPv6 fields | 0250:0FFF:FEDC:0401 | The 64-bit interface identifier |
| Append to prefix | 2001:db8:1:1:250:fff:fedc:401/64 | The 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 upindicates that the interface is operational and its link protocol is active. - IPv6 enablement:
IPv6 is enabledconfirms 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::/64address 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 mode | Command | Purpose |
|---|---|---|
| Global configuration | ipv6 unicast-routing | Enables router-wide IPv6 routing and forwarding |
| Interface configuration | interface FastEthernet0/0 | Selects the interface to configure |
| Interface configuration | ipv6 address 2001:db8:1:1::/64 eui-64 | Assigns the global prefix and generates the interface identifier with modified EUI-64 |
| Privileged EXEC | show ipv6 interface FastEthernet0/0 | Displays detailed IPv6 addresses, enablement, and interface status |
| Privileged EXEC | show ipv6 interface brief | Provides 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.