Skip to content

CoE: ISP Prefix Re-delegation Left a Dead IPv6 Prefix on Every Client

Field Value
Date 2026-08-10
Severity Medium (IPv6 unusable for roughly 22 h per client on the delegated prefix; IPv4 unaffected, every unit healthy, nothing logging an error)
Duration Onset 2026-08-10 14:57 local, decaying per client over the dead prefix’s remaining valid lifetime — measured at expire=22h24m
Impact Clients kept selecting a source address on a withdrawn global prefix. Measured two-sidedly from a MainWireless client: the default source address lost 100 % of packets while the same probe forced onto the new prefix lost 0 %
Resolution The deprecating-RA emitter and the prefix-change detector documented at Dead-prefix deprecation
Measurements engram 853v2wsdp3 (measurement), engram q2sa2d6308 (event)

The ISP re-delegated the estate’s global IPv6 prefix (2600:4040:27d5:5d0*2600:4040:27db:5f0*). FireRouter rewrote every bond0.*_v6.conf at 14:56 and restarted the DHCP dnsmasq at 14:57.

dnsmasq’s constructor:<iface> mode is documented to handle address deprecation and deletion — but a restarted dnsmasq has no memory of the prefix it previously advertised, so it cannot deprecate what it never knew. It stopped mentioning the old prefix instead of withdrawing it with preferred lifetime 0 (RFC 4862 §5.5.3).

Clients therefore held the dead prefix for its remaining valid lifetime, and RFC 6724 default source selection kept choosing it. Roughly 22 hours of coin-flip IPv6 per client, with the router completely healthy and nothing logging an error.

Nothing was watching. That is the half that mattered. No detector on this estate compared an observed global prefix against a recorded one, and no emitter could withdraw a prefix the appliance had already forgotten. Both halves were built in response to this incident and are documented in the runbook rather than here.

The operational machinery this incident produced lives in Dead-prefix deprecation — when the ISP re-delegates: the RA-WATCH-PREFIX-CHANGE detector with its stated detection latency, the bounded deprecating-RA emitter, and the reason AdvPreferredLifetime 0 rather than AdvValidLifetime 0 is what does the work.