Proposal for using NAPTR/URI records
Petr Spacek
pspacek at redhat.com
Thu Feb 26 09:17:44 EST 2015
On 25.2.2015 21:58, Nico Williams wrote:
> On Wed, Feb 25, 2015 at 03:22:20PM -0500, Nathaniel McCallum wrote:
>>> Use URI RRs, but not NAPTR. That's my take.
>>>
>>> SRV RRs don't fit well because of the lack of a URI scheme (could be
>>> http: or https:, but hopefully just http:) and the lack of a local
>>> part (which can be overcome by using the port number and a fixed local
>>> part, though it will upset some people, and perhaps rightly so). If
>>> SRV RRs are already in use for this use-case, so be it, but URI would
>>> be more fitting for a standard. NAPTR seems a little overwrought for
>>> this use case, and anyways, it's the tool I'd reach for last: when
>>> nothing else will work.
>>>
>>
>> The problem is that SRV RRs are currently used for KDC discovery. But
>> they can't represent a MS-KKDCP endpoint.
>
> We agree violently: your reply to this point restates mine without the
> details :)
>
>> I'm happy to have a scheme like this and just use URI RRs:
>> * krb5+https://kdc.example.com/kdc
>> * krb5+http://kdc.example.com/kdc
>> * krb5+tcp://kdc.example.com
>> * krb5+udp://kdc.example.com
>> * krb5://kdc.example.com
>
> Wait a minute. You want to _replace_ the existing SRV-based discovery
> method for the _kerberos _udp and _tcp cases? Is that right? If so,
> why?
>
> My guess: to economize on DNS queries. Of course, one could
> send three queries concurrently, but the full set of possible
> optimizations would be difficult to achieve.
>
> So do one query for _kerberos.realm.name. looking for URI RRs, and let's
> define a krb5 URI scheme, so that then we'd have:
>
> _kerberos.example.com. IN URI 1 1 http://kdc.example.com:1234/local-part
> _kerberos.example.com. IN URI 1 1 kdc:kdc.example.com:88/udp
> _kerberos.example.com. IN URI 1 1 kdc:kdc.example.com:88/tcp
> ...
>
> One query gets you all the answers (or some, if you truncate, though if
> you want DNSSEC you're probably not truncating). If you find nothing,
> then you query _kerberos.{_udp, _tcp}.example.com. and benefit from all
> the cached records for ., com. and example.com.
>
> BUT, since SRV is what existing installations have, the better way
> forward would be to reverse this and first query for _kerberos.{_udp,
> _tcp}.example.com. then _kerberos.example.com.
>
> AND, since the client would start with the "legacy" queries, might as
> well publish URI RRs there too:
>
> ; SRV RR for UDP
> _kerberos._udp.example.com. IN SRV 1 1 88 kdc.example.com.
>
> ; URI RRs for proxy, UDP, and TCP, why not?
> _kerberos._udp.example.com. IN URI 1 1 http://kdc.example.com:1234/local-part
> _kerberos._udp.example.com. IN URI 1 1 kdc:kdc.example.com:88/udp
> _kerberos._udp.example.com. IN URI 1 1 kdc:kdc.example.com:88/tcp
>
> ; SRV RR for TCP
> _kerberos._tcp.example.com. IN SRV 1 1 88 kdc.example.com.
>
> ; URI RRs for proxy, UDP, and TCP, why not?
> _kerberos._tcp.example.com. IN URI 1 1 http://kdc.example.com:1234/local-part
> _kerberos._tcp.example.com. IN URI 1 1 kdc:kdc.example.com:88/udp
> _kerberos._tcp.example.com. IN URI 1 1 kdc:kdc.example.com:88/tcp
>
> Publishing extra RRs is cheap; extra queries are not.
>
> This way we can have a single query get the client all the answers.
>
> Let's call that the goldilocks proposal.
>
> (A bit presumptuous. Maybe it isn't quite just right yet.)
>
>> However, that wouldn't provide backwards compatibility with SRV. Also,
>> MIT seems to be hesitant about adding any new method with higher
>> priority than SRV search. Also, in the past MIT has expressed a
>
> No kidding: SRV is what existing clients do and what sites publish.
>
>> dislike of the above types of URI schemes. I do think that the above
>> scheme has the advantage of being able to set priorities (between
>> transports) with a single RR.
>
> I'm with them on this :)
>
>> Would MIT be interested in doing the above but making it a lower
>> priority than SRV (for now)?
>
> See my goldilocks proposal above.
Personally I very much agree with Nico's proposal (or my understanding of it):
Keep current SRV tcp/udp records + add URI which can hold the same information
as SRV tcp/udp.
My expectation is that URI-aware client will do DNS query for URI record first
and get all the information at once instead of doing 3 separate queries.
Fallback to 'classic' SRV tcp/udp should be done only if no URI records exist.
Also, I do not buy argument that an admin who is not able to properly
configure SRV+URI records will be able to configure NAPTR records. There is
little operation experience with NAPTR in comparison with SRV.
--
Petr Spacek @ Red Hat
More information about the krbdev
mailing list