Why multiple temporary IPv6 addresses when using SLAAC

Since enabling SLAAC as per my previous post I noticed that Android now has two IPv6 addresses (in addition to the link local one it already had) and Windows has the link-local one, a DHCPv6 one (marked as preferred), and two SLAAC IPv6 addresses (marked as “Temporary IPv6 Address”). Trying to find out why brought me to this superuser page that answered my question.

The long and short of it is that since SLAAC IPv6 addresses are not “centralized” (i.e. not from a DHCPv6 server), the client is at liberty to create multiple IPv6 addresses for privacy purposes. This is mainly to protect your privacy, so servers on the Internet are not able to track you consistently (nor try and collect your IPv6 address and try to make contact with your client I guess). Via the netsh interface ipv6 show addresses command on my Windows 10 machine I see that they have a duration of an hour after which they are presumably regenerated.

The netsh interface ipv6 show privacy command shows whether temporary IPv6 addresses are enabled or not. Linux has something similar.

Sure enough when I now visit https://www.whatismyip.com/ on my browser it no longer shows the DHCP assigned IPv6 address but one of the temporary ones (and no, it does not even show the SLAAC generated IPv6 address based on the EUI-64 MAC address; it’s a temporary random address that appears in ipconfig or netsh interface ipv6 show addresses as temporary).