IPv6 was created as IPv6 addresses were becoming exhausted. IPv6 addresses are 128 bits long.

IPv6 defines two major types of unicast addresses. Global unicast addresses work like a public IPv4 address in that companies obtain a unique prefix with all addresses beginning at that prefix. An IPv6 prefix is often compared to an IPv4 network address.

Unique local unicast addresses work like RFC1918. A company can randomly create their own unique local prefix and use it without any issues. They cannot however just choose to randomly start using a global unicast address, as the IEEE must assign these.

A global unicast prefix includes the network and subnet part of the address, using up the first half (64 bits) of the IPv6 address. The remainder 64 bits of the IPv6 address is used for hosts.

A link-local address cannot be used to send traffic past the local subnet. Hosts create their own link-local address even without a global unicast or local unicast address has been assigned. Keep this in mind if you receive a question asking if an IPv6 routing protocol will establish a neighbourship relationship, but only one or no routers have a global unicast or local unicast address assigned, as the routing protocol will use the link-local address to negotiate the neighbourship.

IPv6 hosts and routers create their own link-local address for each interface using some basic rules. All link-local addresses start with the asme 16-digit prefix (FE80:0000:0000:0000). The router or host then forms the final 16 hex digits using EUI-64 rules.

IPv6 prefix types:

FF: Multicast
– FF02::1 All IPv6 Addresses
– FF02::2 All IPv6 Routers
– FF02::5 All OSPF Routers
– FF02::6 All OSPF DR’s
– FF02:10 All EIGRP Routers
– (Note that the last digits are the same as their IPv6 counterparts, with 224.0.0.5 and 224.0.0.6 being All OSPF routers and all OSPF DR’s respectively)
2 or 3: Global unicast (Public address range)
– FE80: Link-Local address space (Private address range)
– FD: Unique local unicast (Private address range)

Assigning IPv6 addresses to hosts

There are three different ways to assign an IPv6 address to a host.

1. Statically configure it.
2. Use Stateful DHCP
3. Use SLAAC

Stateful DHCPv6

Stateful DHCPv6 follows the same general process from IPv4 DHCP.

1. A DHCP server exists somewhere on the network
2. Hosts use DHCP messages to ask for a lease of an IP address and other relevant information.
3. The server replies, providing an IP address, subnet mask, default gateway and DNS servers.

One huge difference between IPv4 DHCP and IPv6 DHCP, is that the IPv6 DHCP server does not supply the default router IP address. Instead, NDP lets the host ask which router is the default gateway on their subnet.

If a DHCPv6 server sits no a remote subnet, the use of a DHCPv6 relay agent will be used.

For example, a DHCPv6 server sits on a remote subnet, and host A requests an IPv6 address, the host begins its attempt to learn an address by sending a DHCPv6 Solicit message. This message is goes to the all IPv6 multicast address of FF02::1:2, and routers will respond to the message via the link-local subnet CONFIRM ME

Stateless Address Autoconfiguration (SLAAC)

SLAAC does not require a server to lease the IPv6 addresses and record which host has the address, as is the case with a DHCPv6 server.

SLAAC also uses NDP to determine the IPv6 prefix (Subnet ID), the prefix length (Subnet mask equivilent) and the default routers IPv6 address. The host uses SLAAC rules to build the rest of the IPv6 address. Finally, the host uses stateless DHCPv6 to learn the DNS server address.

To summarize, SLAAC does the following
SLAAC creates its Unicast Address, NDP obtains the Prefix, Prefix Length and Default router, and the Stateless DHCPv6 server provides the DNS servers.

After NDP has discovered the Prefix, Prefix Length and Default router, SLAAC creates the host portion by performing the following steps.

1. Choose a randomly generated host portion, or by using the host’s MAC address and using EUI-64 rules.

If the host uses EUI-64 rules, the host takes the MAC address assigned to itself, splits 6 byte address in half, and inserts FFFE in between the two, and then inverts the seventh bit of the first byte.

For example:

A host would take its MAC address of 10BF:487D:A027, split it in half.
– 10BF:48 7D:A027, and insert FFFE in between the two.
– 10BF:48FF:FE7D:A027, and then invert the seventh bit of the first byte.
– 10BF in binary is 0001 0000 1010 1111. The seventh bit in this is 0001 000, so we invert the 0 to be a 1 0001 000 > 0001 0010. Place this back into Hex, and you have the final EUI-64 MAC address.
The final EUI-64 address would look like this: 12BF:48FF:FE7D:A027

Configuring IPv6 address on Routers

1. Enable IPv6 routing with the IPv6 unicast-routing global command.
2. Enable IPv6 on an interface using the IPv6 address address/length subcommand in interface mode.

Example configuration:

interface GigabitEthernet0/0
no ip address
duplex auto
speed auto
ipv6 address 2001:DB8:111:2::1/64
!
interface GigabitEthernet0/1
no ip address
duplex auto
speed auto
ipv6 address 2001:DB8:111:3::/64 eui-64

The configuration on Gig0/0 uses ::1 as it’s address, with the /64 prefix, and Gig0/1 uses the EUI-64 rules to form its host portion of the address. (Note that no host portion of the address is configured on Gig0/1, but a ::/64 EUI-64.)

Routing Protocols with IPv6

EIGRPv6

Similarities:
– Hello packets sent to FF02::A link-local multicast address (Instead of 224.0.0.10 for IPv4)
– Metric: The same (Uses bandwidth + delay as the default)
– Still uses DUAL when no feasible successor routes are found and the route in the routing table goes down
– Still uses load balancing (Default 4 hops)
– Enabled per interface, instead of network

OSPFv3

Example config:

Router 1 > Router 2

Router 1

Router(config)#ipv6 unicast-routing
Router(config)#ipv6 router ospf 1
Router(config-rtr)#router-id 1.1.1.1
Router(config)#int gig0/2
Router(config-if)#ipv6 address 2001:22::1/64
Router(config-if)#no shut
Router(config-if)#ipv6 ospf 1 area 2

Router 2

Router(config)#ipv6 unicast-routing
Router(config)#ipv6 router ospf 1
Router(config-rtr)#router-id 2.2.2.2
Router(config)#int gig0/2
Router(config-if)#ipv6 address 2001:22::2/64
Router(config-if)#no shut
Router(config-if)#ipv6 ospf 1 area 2

About The Author

Timothy started his networking career in 2014, working for one of the largest telecommunication operators in Australia. He has a passion for networking and cyber security. When he's not working, he's obsessing over German Shepherd Dogs.