Description

some fallback directories are on IPv6, and deliver the microdescriptor consensus

but the microdescriptor consensus doesn't contain any IPv6 addresses

but it's a consensus, so IPv6-only clients try to use it to find an IPv6 relay, and fail

A solution is to teach IPv6-only clients to get (at least some of) their descriptors from the fallback directories, at least until they have some IPv6 microdescriptors. Perhaps this should happen automatically when the entire consensus fails, but for some reason it doesn't.

I have no idea how we didn't catch this during testing - perhaps there were always cached descriptors? Perhaps we broke falling back to the fallbacks for descriptors?

It fixes this issue by checking routerstatus reachability based only on the addresses in the routerstatus. (We were checking the node, but this causes issues when there is no node, and it's inaccurate anyway, as the connection address is taken from the routerstatus, not the node.)

I've tested this on an IPv6-only BSD box, and it works with and without bridges, with and without microdescriptors.

This could end up overloading the IPv6 fallbacks if we have lots of IPv6-only clients. I split that issue off into #19610, and stuck it into 0.3.0.