It occurred to me that we should eliminate the distinction between feelers – peers we connect to on average every couple minutes to test entries in addrman – and the extra outbound peers we connect to if our tip is stale (#11560). Instead, why not just sync headers with feeler connections, and if we happen to learn of a new block from that feeler when our tip had been stale, consider evicting an older connection (just as we do with our extra outbounds)?
It seems to me that this should increase the cost to an adversary trying to eclipse a node, because they’d need to control a large fraction of the addrman in order to withhold the most-work chain for any sizeable amount of time.
Moreover since we’re already making these feeler connections already, it should be a small amount of additional bandwidth to sync headers with such a peer. (Perhaps we should avoid doing this in IBD…?) @EthanHeilman Any thoughts?