That’s an interesting idea. It’s conceptually possible, because the Turbo Tunnel reliability layer should permit multiplexing over multiple network paths. One way to do it might be to have NewDNSPacketConn accept a list of transport+addr pairs, and start up a recvLoop and sendLoop for each.
The user interface would need some thought. The Go flag package doesn’t make it easy to, for example, accept multiple -udp options with different values.
I think it would require a non-trivial amount of effort to implement, and I’m not likely to do it myself. Let me suggest a test that may tell us whether there’s a performance improvement that makes it worth the effort. Install dnsmasq or another local DNS forwarding proxy that supports multiple upstream resolvers. Run dnsmasq with --no-resolve and a --server option for each of the upstream resolvers. Then run dnstt-client with -udp pointing to the local dnsmasq port. The diagram would look like this:
localhost | Internet | server
| |
| .--upstream1--. |
dnstt-client---dnsmasq---< >---dnstt-server
| '--upstream2--' |
This way, distributing queries over multiple resolvers is done by dnsmasq, rather than being a feature built into dnstt-client. If you try this, please let us know if it affects performance in your case.