we can definitely add a config argument to skip the hardcoded relays & provide custom ones!
* all connections are always e2ee (even when traffic flows through a relay)
* relays are both for connection negotiation, and as a fallback when a direct connection isn't possible
* initial packet is always sent through the relay to keep a fast time-to-first-byte, while a direct connection is negotiated in parallel. typical connections send a few hundred bytes over the relay & the rest of the connection lifetime is direct
relays are the only thing among the things you listed that even have a chance of solving this problem
https://github.com/n0-computer/iroh/blob/main/iroh/docs/loca...
https://github.com/n0-computer/iroh/blob/main/iroh-relay/src...
If you use iroh as a library, you can specify your own relays.
It is important to mention that relays are interoperable, so you don't have isolated bubbles of nodes using certain relay networks. I can have the n0 relays specified and still talk to another node that is using a different set of relays.