Re: nominalism of standards (Re: TCP fallback on timeout)

2017-04-28 Thread 顧孟勤
You're off course right about the long tail of outdated devices. But you
should have more trust into what can happen, if only there is sufficient
incentive.

Look at how long it took for HTTPS to get any meaningful traction. For the
longest time, only e-commerce bothered with encryption. Then we had
Snowden, Letsencrypt, and the browser-manufacturers/search-engines getting
a lot more strict about encryption.

And all of a sudden, people either upgraded their ancient software,
installed​ a proxy that hides the limitations from the internet at large,
or switched​ to a cloud provider that ensures modern standards.

I'm sure the same would happen if you gave people enough incentive to
switch to TCP enabled name servers. Many administrator would probably
discover that they already support TCP or could do so with minimal effort.
And the rest would use one of the approaches outlined above.

As an example for how to provide this incentive, imagine Letsencrypt
requiring TCP. Half a year from now, they won't allow new accounts without
TCP support. A year from now, they won't sign new domains unless they can
be verified by TCP. And two years from now, even certificate renewals
require TCP. If this policy was advertised clearly enough, I'd expect the
transition to work just fine. The last stragglers are then the same people
who wouldn't use Letsencrypt in the first place, as they haven't even made
the switch to HTTPS yet.

You'll never completely eliminate the long tail. But you shouldn't fear it
either.


Markus


On Apr 28, 2017 16:50, "Paul Vixie via Unbound-users" <
unbound-users@unbound.net> wrote:

Paul Vixie wrote:
>
> >> ...
>
> >
>
> > i'll go further: i think that's a good clarification of and alteration
>
> > to the standards. i just don't think it's wise to expect a tcp-only
>
> > initiator, or a tcp-only responder, to function reliably. (ever.) so the
>
> > standard is nominal, and should guide other standards, but in this case
>
> > may give unusable guidance to implementers and operators.
>
>
> let me put that differently and perhaps more understandably:
>
>
> <
> be able to put all of the DNS genies back into their bottles. Too many
>
> implementations have guessed differently when presented with a loose
>
> specification, and interoperability today is a moving, organic target.
>
> When I periodically itch to rewrite the specification from scratch, I
>
> know there are too many things that must be said that also cannot be
>
> said. It’s as though, in a discussion of the meaning of some bit
>
> pattern, a modern description of the protocol—written with full
>
> perspective on all that has been done in the DNS field—would have to
>
> say, “It could mean x but some implementations will think it means y so
>
> you must be cautious.”>>
>
>
> http://queue.acm.org/detail.cfm?id=1242499
>
>
> --
>
> P Vixie
>
>


nominalism of standards (Re: TCP fallback on timeout)

2017-04-28 Thread Paul Vixie via Unbound-users
Paul Vixie wrote:
>> ...
> 
> i'll go further: i think that's a good clarification of and alteration
> to the standards. i just don't think it's wise to expect a tcp-only
> initiator, or a tcp-only responder, to function reliably. (ever.) so the
> standard is nominal, and should guide other standards, but in this case
> may give unusable guidance to implementers and operators.

let me put that differently and perhaps more understandably:

<>

http://queue.acm.org/detail.cfm?id=1242499

-- 
P Vixie



Re: TCP fallback on timeout

2017-04-28 Thread Paul Vixie via Unbound-users


David Conrad wrote:
> On Apr 27, 2017, 4:28 PM -0700, Paul Vixie via Unbound-users
> , wrote:
> 
>> so in effect, TCP is not required, and will never be required. the
>> installed base and its long tail matter more than the wording of 1035. 
> 
> https://tools.ietf.org/html/rfc7766, proposed standard updates 1035 and
> 1123: 
> 
> "   This document therefore updates the core DNS protocol specifications
>  such that support for TCP is henceforth a REQUIRED part of a full DNS
>  protocol implementation."
> 
> Yes, I know about the "installed base" argument and usually agree with
> it. However, Internet standards evolve and, when it makes sense, the
> Internet follows suit. In this case, I think the benefits of TCP support
> given DNSSEC, privacy, spoof protection, etc., will be sufficient to
> move the needle over time.

i'll go further: i think that's a good clarification of and alteration
to the standards. i just don't think it's wise to expect a tcp-only
initiator, or a tcp-only responder, to function reliably. (ever.) so the
standard is nominal, and should guide other standards, but in this case
may give unusable guidance to implementers and operators.

-- 
P Vixie



Re: TCP fallback on timeout

2017-04-28 Thread David Conrad via Unbound-users
On Apr 27, 2017, 4:28 PM -0700, Paul Vixie via Unbound-users 
, wrote:

> so in effect, TCP is not required, and will never be required. the
> installed base and its long tail matter more than the wording of 1035.

https://tools.ietf.org/html/rfc7766, proposed standard updates 1035 and 1123:

"   This document therefore updates the core DNS protocol specifications
     such that support for TCP is henceforth a REQUIRED part of a full DNS
     protocol implementation."

Yes, I know about the "installed base" argument and usually agree with it. 
However, Internet standards evolve and, when it makes sense, the Internet 
follows suit. In this case, I think the benefits of TCP support given DNSSEC, 
privacy, spoof protection, etc., will be sufficient to move the needle over 
time.

Regards,
-drc


Re: TCP fallback on timeout

2017-04-27 Thread Paul Vixie via Unbound-users


Havard Eidnes via Unbound-users wrote:
>> Unfortunately, DNS servers aren't required to support TCP.
> 
> IMHO, that is an all too commonly held misconception.  Publishing name
> servers need to support TCP as well.  I'm pretty sure section 4.2 of
> RFC 1035 mandates it.  It doesn't use the formal requirements keywords
> because it predates the RFC which defined their use in this document
> series.

"mandate" and "required" would be stronger words than the context could
sustain.

in practical terms, there are and have always been and will always be
authority name servers who never set TC=1 on UDP, and which do not
support TCP, either by design or because of firewalls. these name
servers work just fine, and that "works just fine" attribute has first
mover advantage: any client that uses only TCP will get no service from
those name servers, and the client not the server will be found "at
fault" for the nonfunction, and so the client will be "fixed" rather
than the server.

so in effect, TCP is not required, and will never be required. the
installed base and its long tail matter more than the wording of 1035.

-- 
P Vixie



Re: TCP fallback on timeout

2017-04-27 Thread Havard Eidnes via Unbound-users
> Unfortunately, DNS servers aren't required to support TCP.

IMHO, that is an all too commonly held misconception.  Publishing name
servers need to support TCP as well.  I'm pretty sure section 4.2 of
RFC 1035 mandates it.  It doesn't use the formal requirements keywords
because it predates the RFC which defined their use in this document
series.

Regards,

- Håvard


Re: TCP fallback on timeout

2017-04-27 Thread Jacob Hoffman-Andrews via Unbound-users
On 04/27/2017 07:27 AM, Viktor Dukhovni via Unbound-users wrote:
> On Wed, Apr 26, 2017 at 08:14:09PM -0700, Jacob Hoffman-Andrews wrote:
>
>> I'm trying to understand Unbound's TCP fallback better. Is it expected
>> that Unbound will fall back to TCP when UDP queries timeout, or only if
>> it receives a truncated ANSWER?
> Only when truncated as you observed.
Thanks for the info.

Another question: For CA queries in general (A, , TXT, CAA), Let's
Encrypt has gotten feedback that using TCP to query authoritative
resolvers is more secure and less likely to be spoofed. Unfortunately,
DNS servers aren't required to support TCP. This is another reason why
we've been considering running to recursive resolvers, one with
tcp-upstream: yes, and one with tcp-upstream: no. The idea would be that
the CA software (Boulder) would first attempt to query the tcp-upstream:
yes instance, and fall back to the tcp-upstream: no instance on errors.
In your opinion, is this a reasonable setup, and does it meaningfully
increase protections against spoofing?



Re: TCP fallback on timeout

2017-04-27 Thread Viktor Dukhovni via Unbound-users
On Wed, Apr 26, 2017 at 08:14:09PM -0700, Jacob Hoffman-Andrews wrote:

> I'm trying to understand Unbound's TCP fallback better. Is it expected
> that Unbound will fall back to TCP when UDP queries timeout, or only if
> it receives a truncated ANSWER?

Only when truncated as you observed.

> Specifically, I'm trying to make CAA queries, and finding that, when
> querying a certain DNS provider (NetRegistry), UDP queries time out but
> TCP queries succeed.

That provider has a misconfigured (often Arbor Networks) firewall
in front of their nameservers, and the firewall is dropping queries
for all but a set of "standard" RRtypes.  Ofen in my experience
(when the firewall is Arbor Networks) IPv6 UDP queries also work,
when the nameservers have IPv6 addresses.  In other words, the
filtering is in place only for UDP+IPv4.

The right thing to do is to not implement work-arounds for the
problem on the client end.  Instead, let operational errors lead
to failure, but notify the operator so they remediate the issue.
This will fix lookup issues for CAA, CDS, TLSA, SMIMEA, OPENPGPKEY,
whether the resolver is unbound, BIND, ...

If you email me a small list of problem domains (served by the
problem nameservers), I can get the ball rolling, open a new
entry under:

https://github.com/dns-violations/dns-violations

and notify the errant provider.

-- 
Viktor.


TCP fallback on timeout

2017-04-26 Thread Jacob Hoffman-Andrews via Unbound-users
I'm trying to understand Unbound's TCP fallback better. Is it expected
that Unbound will fall back to TCP when UDP queries timeout, or only if
it receives a truncated ANSWER?

Specifically, I'm trying to make CAA queries, and finding that, when
querying a certain DNS provider (NetRegistry), UDP queries time out but
TCP queries succeed. Specifically, if I set tcp-upstream: yes, I can get
a response, but if I set tcp-upstream: no (the default), I get timeouts
from Unbound, and I never see it fall back to TCP.

I'm considering running two Unbound instances: one with tcp-upstream:
yes, and one with tcp-upstream: no, and having my application implement
fallback between the two. That is, if a query to the first instance
times out, query the second instance. Is that a reasonable approach?

Thanks,
Jacob