How to interpret all the IPv6 assigned by DHCPv6 server

The DHCPv6 server assigns many different IPv6 addresses to my laptop. For example

$ ip -6 address show enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet6 fdca:xxxx/64 scope global temporary dynamic
       valid_lft 539031sec preferred_lft 20564sec
    inet6 2601:xxxx/64 scope global temporary dynamic
       valid_lft 5651sec preferred_lft 5651sec
    inet6 2601:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 5651sec preferred_lft 0sec
    inet6 fdca:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 452699sec preferred_lft 0sec
    inet6 2601:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 5651sec preferred_lft 0sec
    inet6 fdca:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 366368sec preferred_lft 0sec
    inet6 fdca:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 280036sec preferred_lft 0sec
    inet6 2601:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 5651sec preferred_lft 0sec
    inet6 fdca:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 193705sec preferred_lft 0sec
    inet6 2601:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 5651sec preferred_lft 0sec
    inet6 2601:xxxx/128 scope global dynamic noprefixroute
       valid_lft 5649sec preferred_lft 5649sec
    inet6 fdca:xxxx/128 scope global dynamic noprefixroute
       valid_lft 86237sec preferred_lft 5649sec
    inet6 fdca:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 107374sec preferred_lft 0sec
    inet6 fdca:xxxx/64 scope global mngtmpaddr noprefixroute
       valid_lft forever preferred_lft forever
    inet6 2601:xxxx/64 scope global temporary deprecated dynamic
       valid_lft 5651sec preferred_lft 0sec
    inet6 2601:xxxx/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 5651sec preferred_lft 5651sec
    inet6 fe80:xxxx/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

I roughly know that those starting with 2601 are the prefix delegated by my ISP. Those starting with fdca are the "private" addresses. And the one starting with fe80 is link local address.

However, I don't understand what all these addresses are used for. I usually use the /128 ones for accessing this machine. However, the client IP addresses shown in Adguard Home seem to be those /64 ones.

Can anyone help me understand why there are so many IPv6 addresses assigned and what do those attributes (e.g. temporary, deprecated, mngtmpaddr, etc.) mean? Thanks.

DHCPv6 assigned 'stable' IPv6 address.

SLAAC assigned 'stable' IPv6 address, derived from your MAC address.

Outgoing IPv6 address, courtesy of IPv6 privacy extensions (privext).

Deprecated (previous) privext addresses.

2 Likes

Thank you for the answer. I have one more question.

How does the system decide which IP address to use as the source IP address when communicate with others? In my AdGuard Home log, I can see some queries are coming from 2601 addresses while others are from fdca addresses. In other words, what determines the IP address seen from a server?