Update kcp-go and smux.
[dnstt.git] / TODO
blob1c54076e9d361c0ce49abe912af6a6c79bcbdb58
1 In -dot mode, if, after the TLS connection may become disconnected, the
2 redial fails to connect, it results in "operation on closed connection"
3 errors and a useless connection up until idleTimeout (2 to 4 minutes
4 later), when the stream ends. For example, see
5 1-12c59bf6/quad9_dot_1.dnstt.client.log from the 2021-08-02 dnstt-tests
6 performance measurement:
7         2021/08/02 10:00:49 recvLoop: read tcp 10.0.1.2:34788->9.9.9.9:853: read: connection reset by peer
8         2021/08/02 10:00:49 sendLoop: write tcp 10.0.1.2:34788->9.9.9.9:853: write: broken pipe
9         2021/08/02 10:00:50 tls.Dial: dial tcp 9.9.9.9:853: connect: connection refused
10         2021/08/02 10:00:50 recvLoop: read dummy dummy: operation on closed connection
11         2021/08/02 10:00:50 send: write dummy dummy: operation on closed connection
12         2021/08/02 10:00:52 send: write dummy dummy: operation on closed connection
13         ...
14         2021/08/02 10:03:02 send: write dummy dummy: operation on closed connection
15         2021/08/02 10:03:06 send: write dummy dummy: operation on closed connection
16         2021/08/02 10:03:09 end stream cde4ab0c:3
17 To fix this, we could be more persistent in redialing, and/or cause a
18 redial failure to cause the stream and session to terminate immediately.
19 We already close TLSPacketConn; we should perhaps also terminate
20 DNSPacketConn.sendLoop.
22 Randomize the source port for each query in plain-UDP mode. Currently we
23 create a socket with net.ListenUDP and use it for all queries, which
24 means all queries have the same source address. ValdikSS reports that in
25 regions of Turkmenistan, UDP associations that use the same 4-tuple are
26 blocked after a few seconds.
27 https://ntc.party/t/topic/475
28 My idea for this is to create a new PacketConn abstraction that creates
29 a bunch (≈100) of goroutines that each do a single query at a time,
30 creating a new socket for each one and waiting for a response on the
31 same socket up to a timeout. Similar to HTTPPacketConn and its multiple
32 instantiations of sendLoop.
34 Add support for DNS over QUIC
35 https://www.rfc-editor.org/rfc/rfc9250
36 https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Public+Resolvers#DNSPrivacyPublicResolvers-DNS-over-QUIC(DoQ)
37 https://github.com/AdguardTeam/dnsproxy/blob/660a2da99eb6cc2cf5db9a54f1374dd58fbb5b26/upstream/upstream_quic.go
38 https://security.googleblog.com/2022/07/dns-over-http3-in-android.html
40 Externally resolve another domain for the DoH domain, like curl --resolve
41 E.g. cloudflare.net -> doh.dns.sb