RB5009UPr+S+, RouterOS 7.23.3 (stable). WAN is PPPoE to a UK ISP (IDNet) with DHCPv6-PD delegating a static /48. The ISP lease has valid = 24h, preferred = 8h. The DHCPv6 client renews reliably.
Three manually configured addresses (from-pool="") inside the delegated /48 each become flagged deprecated (d) roughly 8 hours after being created — i.e. after exactly the lease's preferred lifetime — and never recover, even though renewals keep succeeding. This looks related to the 7.21 change where advertised lifetimes started coming from the pool/lease, but it goes further than the existing threads describe.
The smoking gun — addresses deprecated while the pool (refreshed by a successful renew ~2.5h earlier) still has hours of preferred lifetime left:
/ipv6/address/print detail where global
0 G d address=2a02:xxx:xxxx:71::1/64 from-pool="" interface=bridge1
advertise=no ...
1 G d address=2a02:xxx:xxxx:222::1/64 from-pool="" interface=wireguard1
advertise=no ...
2 G d address=2a02:xxx:xxxx:233::1/64 from-pool="" interface=wireguard2
advertise=no ...
/ipv6/pool/print detail
0 D name="pool-pd1" prefix=2a02:xxx:xxxx::/48 prefix-length=64
actual-prefix=2a02:xxx:xxxx::/48 valid-lifetime=21h35m20s
preferred-lifetime=5h35m20s
/ipv6/dhcp-client/print detail
0 interface=pppoe-out1 status=bound duid="0x00030001xxxxxxxxxxxx"
dhcp-server-v6=fe80::xxxx:xxff:fexx:xxx request=address,prefix
accept-prefix-without-address=yes add-default-route=no
use-peer-dns=no validate-server-duid=yes
pool-name="pool-pd1" pool-prefix-length=64 prefix-hint=::/48
prefix=2a02:xxx:xxxx::/48, 21h35m20s
Current config (after reverting test changes — the prints above were taken mid-testing while all three addresses were temporarily advertise=no, see finding 2):
/ipv6 address
add address=2a02:xxx:xxxx:71::1 interface=bridge1
add address=2a02:xxx:xxxx:222::1 advertise=no interface=wireguard1
add address=2a02:xxx:xxxx:233::1 advertise=no interface=wireguard2
/ipv6 nd
set [ find default=yes ] advertise-dns=yes dns=2a02:xxx:xxxx:71::1 hop-limit=64 interface=bridge1
/ipv6 dhcp-client
add interface=pppoe-out1 pool-name=pool-pd1 pool-prefix-length=64 prefix-hint=::/48 request=address,prefix use-peer-dns=no
/system scheduler
add name=ipv6-restamp interval=1h start-time=startup on-event=":foreach a in=[/ipv6/address/find where !dynamic] do={/ipv6/address/set \$a advertise=[/ipv6/address/get \$a advertise]}"
- The deprecated flag doesn't extend to the RAs. tcpdump on a LAN host while the bridge1 address was flagged deprecated showed the PIO still carrying constant full lifetimes (valid 86400s / pref 28800s — the lease's original values, not the decaying remainder). SLAAC clients stay healthy. The flag is router-internal.
advertise=noclears the flag instantly but does NOT opt the address out of whatever this deprecation mechanism is. All three addresses were setadvertise=no; thedflag vanished immediately on each — and ~8h later all three were deprecated again (that is the state shown in the prints above). So any modification of the address entry merely re-stamps the lease lifetime snapshot for another cycle. The stamping applies to every manual address inside the PD prefix, advertised or not. The same is true of disable/enable, and even of a no-opsetwriting an identical value: each results in one more preferred-lifetime interval.- Static ND prefix entries DO override the lease lifetimes for clients. After removing the dynamic entry (via
advertise=no) and adding a static entry with valid=30d preferred=7d, tcpdump shows the PIO advertising valid 2592000s / pref 604800s, and client kernels hold those lifetimes. So the LAN side can be decoupled; the router's own addresses cannot. (Since reverted — not needed once the scheduler below was in place.) dhcp6-pd-preferred(new in 7.22) is unrelated — it only sets the RFC 9762 P flag in the PIO.
Impact: all of the router's global addresses spend most of their life flagged deprecated, which demotes them in RFC 6724 source-address selection for router-originated traffic, and the state is simply wrong for a manually configured address. There appears to be no configuration that prevents it. Current workaround is the ipv6-restamp scheduler shown in the config above: hourly no-op sets on every static address re-stamp the snapshot before the ~8h can elapse.
Expected behaviour: either renews refresh the lifetimes of manual addresses inside the delegated prefix (as they refresh the pool), or manual addresses keep infinite lifetimes as they did before 7.21.
Supout captured while the fault was live has been submitted to support as SUP-221645.




