1 Randomize the source port for each query in plain-UDP mode. Currently we
2 create a socket with net.ListenUDP and use it for all queries, which
3 means all queries have the same source address. ValdikSS reports that in
4 regions of Turkmenistan, UDP associations that use the same 4-tuple are
5 blocked after a few seconds.
6 https://ntc.party/t/topic/475
7 My idea for this is to create a new PacketConn abstraction that creates
8 a bunch (≈100) of goroutines that each do a single query at a time,
9 creating a new socket for each one and waiting for a response on the
10 same socket up to a timeout. Similar to HTTPPacketConn and its multiple
11 instantiations of sendLoop.
13 Add support for DNS over QUIC
14 https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Public+Resolvers#DNSPrivacyPublicResolvers-DNS-over-QUIC(DoQ)
15 https://github.com/AdguardTeam/dnsproxy/blob/660a2da99eb6cc2cf5db9a54f1374dd58fbb5b26/upstream/upstream_quic.go
17 Use uTLS for TLS camouflage