IPv6 SLAAC

1. Introduction to IPv6 SLAAC

IPv6 SLAAC (Stateless Address Autoconfiguration) is a method that allows hosts to automatically configure their IPv6 address without using a DHCPv6 server.

In IPv6 networks, hosts can’t just pick any address at random, they need a valid Global Unicast Address (GUA) to communicate across the Internet.

But how do they get that address?

IPv6 SLAAC stateless vs stateful address assignment diagram

Figure 1 - Dynamic GUA Assignment differents approaches

There are two main approaches:

  • Stateful methods, where a DHCPv6 server assigns and tracks the addresses (similar to IPv4)

  • Stateless methods, where the host configures itself without needing any central server

SLAAC which stands for Stateless Address Autoconfiguration is the most common stateless method.

Defined in RFC 4862, it allows a host to automatically configure its Global Unicast IPv6 address without relying on DHCP.

How does SLAAC work?

All it needs is a router on the local network that can advertise a prefix. From there, the host can build its Global Unicast Address IPv6 address by:

  1. Generating a Link-Local Address using EUI-64 or a random Interface ID.

  2. Sending a Router Solicitation (RS) to request the network prefix.

  3. Receiving a Router Advertisement (RA) with the network prefix.

  4. Combining the Network Prefix with its Interface ID to form the Global Unicast Address (GUA).

Diagram showing the 4 steps of how SLAAC works with IPv6

Figure 2 - SLAAC Process Step by Step Simplified

Now that you’ve seen the big picture, let’s explore each step in detail.

2. SLAAC Step-by-Step

As soon as PC1 connects to the network and IPv6 is enabled, it automatically generates a Link-Local Address.
This address allows communication only within the local segment.

Diagram showing PC1 generating a Link-Local IPv6 address through SW1 and R1

Figure 4 - Topology we used to demonstrate SLAAC

The Link-Local Address is built from:

  • A Fixed Prefix → FE80::/64

  • An Interface ID → based on the MAC address (using EUI-64) or randomly generated.

The interface ID need to be calculated in order to create our Link Local Address, in this example we will use EUI-64.

We start by looking at the PC1 device MAC Address in order to begin the EUI-64 process :

Steps to build an IPv6 Link-Local Address using EUI-64

Figure 5 - EUI 64 Process Step by Step

PC1 have successfully generates its Link-Local Address (FE80::21A:2BFF:FE3C:4D5E), it appears now in the interface output:

C:\Users\PC1> ipconfig /all

Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix..: 
   Physical Address................: 001A.2B3C.4D5E
   Link-local IPv6 Address.........: FE80::21A:2BFF:FE3C:4D5E
   IP Address......................: 0.0.0.0
   Subnet Mask.....................: 0.0.0.0
   Default Gateway.................: 0.0.0.0
   DNS Servers.....................: 0.0.0.0
   DHCP Servers....................: 0.0.0.0
   DHCPv6 Client DUID..............: 00-01-00-01-26-AB-91-42-00-1A-2B-3C-4D-5E

Once the Link-Local Address has been created, we need to make sure no other device is already using it on the local network.

To verify this, the host runs a process called Duplicate Address Detection (DAD).

Step 2: Run Duplicate Address Detection (DAD)

Every time an IPv6 address is created, the host automatically subscribes to a special multicast group called the solicited-node multicast address.

This multicast address is derived from the last 24 bits of the IPv6 address, and it's unique for each address.

For example:

  • Link-Local Address: FE80::21A:2BFF:FE3C:4D5E

  • Last 24 bits: 3C:4D5E

  • → Solicited-node multicast address: FF02::1:FF3C:4D5E

This multicast group ensures that only devices configured with the exact same address will receive the message.

You can confirm that PC1 has joined this group with:

C:\Users\PC1> netsh interface ipv6 show joins

Interface 12: Ethernet0

Scope       References  Last  Address
----------  ----------  ----  ---------------------------------
0                    1  Yes   ff02::1           (All-nodes)
0                    1  Yes   ff02::2           (All-routers)
0                    2  Yes   ff02::1:ff3c:4d5e (For DAD)

At this point, PC1 sends a Neighbor Solicitation (NS) to the solicited-node multicast address:

  • Source address:: (unspecified, since the address is not yet valid)

  • DestinationFF02::1:FF3C:4D5E (Multicast)

  • TargetFE80::21A:2BFF:FE3C:4D5E (Link-Local Address)

Neighbor Solicitation message sent by PC1 to verify its IPv6 Link-Local Address

Figure 6 - PC1 sends NS to check if the link local address is used

Other devices like PC2 or R1 ignore this message because they are not subscribed to the FF02::1:FF3C:4D5E multicast group.

PC2 and R1 ignore the Neighbor Solicitation because they are not subscribed to the multicast group

Figure 7 - Neighbors don't respond

If another host was already using this address, it would have responded to the NS, and the address would be rejected.

Now PC1 can communicate with local devices using this Link-Local Address.
But to reach the Internet or any global destination, it still needs a Global Unicast Address (GUA).

How Is the GUA Built?

Global Unicast IPv6 Address built from a 64-bit prefix and a 64-bit interface ID

Figure 8 - Global Unicast IPv6 Address

To build its Global Unicast Address, the host needs two elements:

  • A Network Prefix, provided by the router (via SLAAC)

  • An Interface ID, generated locally using EUI-64 or a random value.

To obtain the prefix, PC1 must contact a local router using Router Solicitation.

Step 3: Send a Router Solicitation (RS)

PC1 sends a Router Solicitation (RS) to the multicast group for all routers: FF02::2

Its goal is to ask about the Network Prefix the host can use to build its GUA Address.

PC1 sends a Router Solicitation to FF02::2 to request the IPv6 network prefix

The RS message is sent automatically when PC1 apply the link local address to his interface.

Step 4: Receive Router Advertisement (RA)

The router (R1) receives the RS and responds with a Router Advertisement (RA).

Router R1 sends a Router Advertisement to PC1 with the IPv6 prefix and SLAAC flag

This RA message contains:

  • A Network Prefix, in our example:
    2001:db8:acad:1::/64

  • A set of configuration flags:

    • A (Autonomous) → Tells the host: “You’re allowed to use this prefix and build your own IPv6 address using SLAAC”

    • O (Other) → Optional info like DNS can be provided by DHCPv6

    • M (Managed) → A DHCPv6 server is required to assign the address

In a typical SLAAC configuration, the router sets only the A flag, indicating the host to build its own Global Unicast Address (GUA) using SLAAC.

  • The Network Prefix received from the router:
    2001:db8:acad:1::/64

  • Its Interface ID (generated with EUI-64 from the MAC address):
    021A:2BFF:FE3C:4D5E

  • Resulting GUA:
    2001:db8:acad:1:021A:2BFF:FE3C:4D5E/64

Step 5: Perform DAD on the Global Unicast Address (GUA)

Just like with the Link-Local Address, the host must verify that no other device is already using the same Global Unicast Address on the local network.

To do this, PC1 sends a Neighbor Solicitation (NS) message to the solicited-node multicast address derived from the last 24 bits of its GUA.

PC1 performs Duplicate Address Detection on its Global Unicast Address using a Neighbor Solicitation

  • If another device is already using this address, it will respond to the NS.

  • If there’s no response, the address is considered unique.

PC2 and R1 ignore the Neighbor Solicitation because the GUA does not belong to them

In our case, no device replies, so PC1 assigns the GUA to its interface:

Final IPv6 Configuration

At this point, PC1 has:

  • A Global Unicast Address (GUA)
    2001:db8:acad:1:021A:2BFF:FE3C:4D5E/64

  • A Link-Local Address
    FE80::21A:2BFF:FE3C:4D5E

PC1 shows its final IPv6 configuration with both a GUA and a Link-Local address

You can confirm the full configuration with:

C:\Users\PC1> ipconfig /all

Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix..: 
   Physical Address................: 001A.2B3C.4D5E
   Link-local IPv6 Address.........: FE80::21A:2BFF:FE3C:4D5E
   IPv6 Address....................: 2001:db8:acad:1:21A:2BFF:FE3C:4D5E
   Subnet Prefix...................: 2001:db8:acad:1::/64
   Default Gateway.................: FE80::1
   DHCP Servers....................: ::
   DHCPv6 Client DUID..............: 00-01-00-01-26-AB-91-42-00-1A-2B-3C-4D-5E
   DNS Servers.....................: ::

As shown above, the host has also received a Default Gateway (FE80::1) from the router via the Router Advertisement (RA). This Link-Local address is used as the next-hop for packets going outside the local network.

All of this happens automatically no DHCPv6 server needed, thanks to SLAAC.

3. Configuring SLAAC on a Cisco Router

Network diagram showing SLAAC configuration on a Cisco router using prefix 2001:db8:acad:1::/64

To enable SLAAC on a Cisco router, follow these steps:

  1. Enable IPv6 routing globally

  2. Activate IPv6 on the interface

  3. Assign a Global Unicast Address (GUA) to the interface

Once these steps are completed, the router automatically starts sending Router Advertisement (RA) messages on the local network segment. These RAs allow hosts to configure their IPv6 addresses using SLAAC.

1. Enable IPv6 Routing Globally

R1(config)# ipv6 unicast-routing

This command enables IPv6 forwarding across the router and activates RA functionality on interfaces that have IPv6 addresses.

2. Enable IPv6 on the Interface

R1(config)# interface g0/0
R1(config-if)# ipv6 enable

This enables IPv6 processing on the interface and generates a Link-Local Address automatically (prefix FE80::/64).

3. Assign a Global Unicast Address (GUA)

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

This address defines the prefix that will be advertised in RA messages.
Hosts receiving this prefix will use it to build their own GUA using SLAAC.

Verify Configuration

We can now verify the interface with:

R1# show ipv6 interface g0/0
GigabitEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::1
  No Virtual link-local address(es):
  Global unicast address(es):
    2001:db8:acad:1::1, subnet is 2001:db8:acad:1::/64
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FF00:1
    FF02::1:FF00:1
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 30000)
  ND advertised reachable time is 0 (unspecified)
  ND advertised retransmit interval is 0 (unspecified)
  ND router advertisements are sent every 200 seconds
  ND router advertisements live for 1800 seconds
  ND advertised default router preference is Medium
  Hosts use stateless autoconfig for addresses.

4. Conclusion

IPv6 SLAAC allows hosts to quickly configure their IPv6 addresses without needing a DHCP server.

Below is the global SLAAC diagram as a reminder.

Diagram showing the 4 steps of how SLAAC works with IPv6

At each step, the host checks if the Link-Local Address or the Global Unicast Address is already in use before applying it to helps avoid IP address conflicts on the network.