I've been using SLAAC for a long time, but I recently got a new router (Google Nest Wifi Pro).
Since then, I've been frequently losing my primary IPv6 address, despite its valid_lft not expiring and the advertised prefix not changing.
It will disappear for a few minutes then come back. This appears to be a reaction to router advertisements that do not include a prefix (only a route).
I'm able to tell that by running 2 terminal sessions:
- sudo radvdump | ts
This will show timestamped router advertisements as they arrive. - while sleep 1; do echo; date -Isec; ip -6 address show scope global primary; done
This shows the mngtmpaddr every second.
We start off looking good:
1:
Jun 29 20:10:18 #
Jun 29 20:10:18 # radvd configuration generated by radvdump 2.18
Jun 29 20:10:18 # based on Router Advertisement from fe80::<redacted>
Jun 29 20:10:18 # received by interface eno1
Jun 29 20:10:18 #
Jun 29 20:10:18
Jun 29 20:10:18 interface eno1
Jun 29 20:10:18 {
Jun 29 20:10:18 AdvSendAdvert on;
Jun 29 20:10:18 # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
Jun 29 20:10:18 AdvManagedFlag off;
Jun 29 20:10:18 AdvOtherConfigFlag on;
Jun 29 20:10:18 AdvReachableTime 0;
Jun 29 20:10:18 AdvRetransTimer 0;
Jun 29 20:10:18 AdvCurHopLimit 64;
Jun 29 20:10:18 AdvDefaultLifetime 3600;
Jun 29 20:10:18 AdvHomeAgentFlag off;
Jun 29 20:10:18 AdvDefaultPreference medium;
Jun 29 20:10:18 AdvLinkMTU 1500;
Jun 29 20:10:18 AdvSourceLLAddress on;
Jun 29 20:10:18
Jun 29 20:10:18 prefix 2601:646:a001:7b3::/64
Jun 29 20:10:18 {
Jun 29 20:10:18 AdvValidLifetime 6396;
Jun 29 20:10:18 AdvPreferredLifetime 6396;
Jun 29 20:10:18 AdvOnLink on;
Jun 29 20:10:18 AdvAutonomous on;
Jun 29 20:10:18 AdvRouterAddr off;
Jun 29 20:10:18 }; # End of prefix definition
Jun 29 20:10:18
Jun 29 20:10:18
Jun 29 20:10:18 RDNSS 2601:646:a001:7b3:<redacted>
Jun 29 20:10:18 {
Jun 29 20:10:18 AdvRDNSSLifetime infinity; # (0xffffffff)
Jun 29 20:10:18 }; # End of RDNSS definition
Jun 29 20:10:18
Jun 29 20:10:18 }; # End of interface definition
Alles anzeigen
2:
2023-06-29T20:10:19-07:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:646:a001:7b3:<redacted>/64 scope global tentative dynamic mngtmpaddr noprefixroute
valid_lft 6396sec preferred_lft 6396sec
2023-06-29T20:10:20-07:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:646:a001:7b3:<redacted>/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 6395sec preferred_lft 6395sec
...
Alles anzeigen
Then, a few minutes later, another RA comes in with only a route (no prefix), and the IPv6 address goes away:
1:
Jun 29 20:14:38 #
Jun 29 20:14:38 # radvd configuration generated by radvdump 2.18
Jun 29 20:14:38 # based on Router Advertisement from fe80::<redacted>
Jun 29 20:14:38 # received by interface eno1
Jun 29 20:14:38 #
Jun 29 20:14:38
Jun 29 20:14:38 interface eno1
Jun 29 20:14:38 {
Jun 29 20:14:38 AdvSendAdvert on;
Jun 29 20:14:38 # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
Jun 29 20:14:38 AdvManagedFlag off;
Jun 29 20:14:38 AdvOtherConfigFlag on;
Jun 29 20:14:38 AdvReachableTime 0;
Jun 29 20:14:38 AdvRetransTimer 0;
Jun 29 20:14:38 AdvCurHopLimit 64;
Jun 29 20:14:38 AdvDefaultLifetime 3600;
Jun 29 20:14:38 AdvHomeAgentFlag off;
Jun 29 20:14:38 AdvDefaultPreference medium;
Jun 29 20:14:38
Jun 29 20:14:38 route fd45:d984:d7e3:1::/64
Jun 29 20:14:38 {
Jun 29 20:14:38 AdvRoutePreference low;
Jun 29 20:14:38 AdvRouteLifetime 1800;
Jun 29 20:14:38 }; # End of route definition
Jun 29 20:14:38
Jun 29 20:14:38 }; # End of interface definition
Alles anzeigen
2:
2023-06-29T20:14:38-07:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:646:a001:7b3:<redacted>/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 6137sec preferred_lft 6137sec
2023-06-29T20:14:39-07:00
2023-06-29T20:14:40-07:00
2023-06-29T20:14:41-07:00
2023-06-29T20:14:42-07:00
2023-06-29T20:14:43-07:00
...
Alles anzeigen
Then, the original RA comes through again, and we're back to good:
1:
Jun 29 20:15:58 #
Jun 29 20:15:58 # radvd configuration generated by radvdump 2.18
Jun 29 20:15:58 # based on Router Advertisement from fe80::<redacted>
Jun 29 20:15:58 # received by interface eno1
Jun 29 20:15:58 #
Jun 29 20:15:58
Jun 29 20:15:58 interface eno1
Jun 29 20:15:58 {
Jun 29 20:15:58 AdvSendAdvert on;
Jun 29 20:15:58 # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
Jun 29 20:15:58 AdvManagedFlag off;
Jun 29 20:15:58 AdvOtherConfigFlag on;
Jun 29 20:15:58 AdvReachableTime 0;
Jun 29 20:15:58 AdvRetransTimer 0;
Jun 29 20:15:58 AdvCurHopLimit 64;
Jun 29 20:15:58 AdvDefaultLifetime 3600;
Jun 29 20:15:58 AdvHomeAgentFlag off;
Jun 29 20:15:58 AdvDefaultPreference medium;
Jun 29 20:15:58 AdvLinkMTU 1500;
Jun 29 20:15:58 AdvSourceLLAddress on;
Jun 29 20:15:58
Jun 29 20:15:58 prefix 2601:646:a001:7b3::/64
Jun 29 20:15:58 {
Jun 29 20:15:58 AdvValidLifetime 6056;
Jun 29 20:15:58 AdvPreferredLifetime 6056;
Jun 29 20:15:58 AdvOnLink on;
Jun 29 20:15:58 AdvAutonomous on;
Jun 29 20:15:58 AdvRouterAddr off;
Jun 29 20:15:58 }; # End of prefix definition
Jun 29 20:15:58
Jun 29 20:15:58
Jun 29 20:15:58 RDNSS 2601:646:a001:7b3:<redacted>
Jun 29 20:15:58 {
Jun 29 20:15:58 AdvRDNSSLifetime infinity; # (0xffffffff)
Jun 29 20:15:58 }; # End of RDNSS definition
Jun 29 20:15:58
Jun 29 20:15:58 }; # End of interface definition
Alles anzeigen
2:
2023-06-29T20:15:58-07:00
2023-06-29T20:15:59-07:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:646:a001:7b3:<redacted>/64 scope global tentative dynamic mngtmpaddr noprefixroute
valid_lft 6056sec preferred_lft 6056sec
2023-06-29T20:16:00-07:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:646:a001:7b3:<redacted>/64 scope global tentative dynamic mngtmpaddr noprefixroute
valid_lft 6055sec preferred_lft 6055sec
...
Alles anzeigen
Note that the *_lft values resume where they were.
What's causing this behavior?
It doesn't happen with my Pop!_OS (Ubuntu) laptop via WiFi, my old MacBook Pro (wired or WiFi), or any other device I have AFAICT