Prop 312: 3.2.3. Use Local Interface IPv6 Address
This ticket depends on Address IPv6
support in #33233 (moved).
If they don't have usable Address or ORPort addresses, relays (and bridges) should use publicly routable addresses from the OS interface addresses or routing table, as their IPv4 and IPv6 addresses.
Tor has local interface address resolution functions, which support most major OSes. Tor uses these functions to guess its IPv4 address. We propose using them to also guess tor's IPv6 address.
We also propose modifying the address resolution order, so interface addresses are used before the local hostname. This decision is based on our principles: interface addresses are local, trusted, and reliable; hostname lookups may be remote, untrusted, and unreliable.
If the local interface addresses are unavailable, tor opens a UDP socket to a publicly routable address, but doesn't actually send any packets. Instead, it uses the socket APIs to discover the interface address for the socket. (UDP is used because it is stateless, so the OS will not send any packets to open a connection.)
Tor already ignores private IPv4 interface addresses on public relays. We propose to also ignore private IPv6 interface addresses.
See proposal 312, section 3.2.1, general case: https://gitweb.torproject.org/torspec.git/tree/proposals/312-relay-auto-ipv6-addr.txt#n359