Description
RFC 8305 defines a "Happy Eyeballs" behavior that allows clients to try IPv6 first but fail over to IPv4 when it's unavailable in a timely manner. There is a proposal to extend this further to handle the increasing number of endpoint candidates (eg, QUIC, mutliple SVCB records, etc) which clients might try (see https://datatracker.ietf.org/doc/html/draft-pauly-v6ops-happy-eyeballs-v3-01)
An ongoing operational concern is that while this Happy Eyeballs behavior greatly improves user experience (eg, a user has multiple protocols and IP versions and IP addresses to try) it can hide partial failures in the network. For example, if a content provider (or ISP) has broken IPv6 then they may not notice as dual-stack users will fallback to IPv4.
It would be highly valuable if NEL could report these sorts of issues where a client had multiple endpoints it could connect to and some were unreachable.
Some considerations:
- Would this want to have multiple IP addresses and protocols in a single report? (eg, the list of those that were tried and failed and which succeeded, along with timing information?) Or would this want to be a new type of report that just reports that the failure is for alternate endpoint that was tried but that the client succeeded with a different endpoint?
- Normally alternate connection attempts are abandoned on the success of one race. When NEL is enabled would we want to keep running the other attempt longer to see if it would have succeeded given more time? Reporting the timing for when it was abandoned, when the alternate that was used succeeded, and when/if this failed attempt would have succeded might give valuable insight (eg, to differentiate a case where IPv6 just doesn't work vs being a few milliseconds slower and losing a race)
- It will be important to balance privacy and providing useful data, and to also make sure that reporting works even in the face of failures that might have caused a Happy Eyeballs use of an alternate. For example, it would be nice to know both the client IPv6 and IPv4 addresses, but this might not be possible in all cases (eg, if either is missing/broken entirely) or in cases where doing so would leak too much privacy-wise.