On 12/06/2015 15:46, Paul Vixie wrote:
> connections weren't considered when EDNS was first described, nor > when it was later redescribed. > > i think if you're specifying an option that refers to the connection > (for example, to negotiate better "close" rules than is present in > raw tcp/53 today) then any responder who acks your signal can be > expected to know whether it can do so honestly and effectively. if > the signal's meaning is "please change to these better 'close' rules > for this tcp session" then the responder should be able to say "ok i > changed to these better 'close' rules for this tcp session" without > worrying about whether subsequent transactions in the same session > repeat this negotiation. That would be ideal, yes. > however, that's not the world we live in. consider for example > proxy_dns (available as open source on > https://github.com/BII-Lab/DNSoverHTTP) which is perfectly capable of > carrying individual dns transactions over several parallel http(s) > sessions, and to whom any new EDNS signalling will be opaque at least > initially. this naive dns client only understands framing, not > content, and it works. i think this naivety is likely present in some > dns-aware load balancers as well. and i think that none of these are > "broken" or in any way "noncompliant". I think there's scope for a long argument on this last point. RFC 2671 (§4.1) says "OPT RRs shall never be ... forwarded". RFC 6891 is even more explicit in §6 about middleboxes. It's perhaps a shame that EDNS doesn't support the separation of "hop-by-hop" options vs "end-to-end" options that IPv6 has. To my mind proxy_dns is absolutely non-conformant, but clearly *some* EDNS options may be safely forwarded whilst others shouldn't be. However without a separation in the option number space (or a brand new OPT-alike RR) there's no way for an implementation to know without it being hard-coded for each then-known option. > furthermore, proxy-dns will use TCP on the regenerated far-end DNS > transaction if it heard the original near-side DNS transaction via > TCP. therefore even without multiplexing, putting a connection level > negotiation into the OPT could make this TCP initiator ask (by > opaquely carrying its payload) for something it doesn't understand > and promise to do something it won't do. > > a rule of protocol evolution is, existing speakers should not become > broken due to a spec change. If only that were existing _conformant_ speakers ;-) > so, connection semantics will have to be negotiated at the framing > level not the content level. > > so, you might explore the use of a zero length request, which > currently means nothing. The issue with that (and potentially anything else we might come up with) is that there's no guarantee *whatever we write* that some naive non-conformant implementation will find a way to forward the magic sequence. kind regards, Ray _______________________________________________ DNSOP mailing list DNSOP@ietf.org https://www.ietf.org/mailman/listinfo/dnsop