Re: [dnssd] The DNSSD WG has placed draft-sctl-service-registration in state "Call For Adoption By WG Issued"

Toke Høiland-Jørgensen <toke@toke.dk> Tue, 10 July 2018 12:49 UTC

Return-Path: <toke@toke.dk>
X-Original-To: dnssd@ietfa.amsl.com
Delivered-To: dnssd@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B4B5E131171 for <dnssd@ietfa.amsl.com>; Tue, 10 Jul 2018 05:49:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2
X-Spam-Level:
X-Spam-Status: No, score=-2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=toke.dk
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bsJTsG33j0Vk for <dnssd@ietfa.amsl.com>; Tue, 10 Jul 2018 05:48:54 -0700 (PDT)
Received: from mail.toke.dk (mail.toke.dk [IPv6:2001:470:dc45:1000::1]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 46D3313117A for <dnssd@ietf.org>; Tue, 10 Jul 2018 05:48:54 -0700 (PDT)
From: Toke Høiland-Jørgensen <toke@toke.dk>
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=toke.dk; s=20161023; t=1531226930; bh=VueVB+pKfzPygwEoplOS8V6644X6Q9rZfhTO5ywpLsw=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=NeDRV+s/UHdEns7IbLMzwz4KN1p3yy/HGaMMedgUXjAzuVqs1qcrUiA6yeEq2btou 7UYOWt5Ekc5w4GeivAaEntpppAt+krjFuS9o/E1TnipnkEyCexOcDmpBGu3nDUfs22 PxR94fo1/amQFghg0T6OMS6pC3zFGHZETRC/nZqURsPkRPeTbO5dI4+sEWSJ5fOa1D kgcgtfEmhNSgvEZrXWfCLqRDIiFCXOY6DLfYldovksMZt6/LNE/arMnoRF1CACX+tk A+OI2qNiXNFRK3By2C935l/+nHTcn4gkC7tnq71leF1rBQ3MvgQFn5ODBPdjs8P5EQ ikhTW6ps97qlg==
To: Ted Lemon <mellon@fugue.com>
Cc: David Schinazi <dschinazi@apple.com>, dnssd <dnssd@ietf.org>
In-Reply-To: <A667C059-FEBB-4159-A053-0B7AFE35F5FD@fugue.com>
References: <153064569308.5111.7449468818446130425.idtracker@ietfa.amsl.com> <EB70166C-B64B-4509-909D-76978CA00A36@apple.com> <87lgare65v.fsf@toke.dk> <AC270951-0AA4-45D0-9F1A-83067489BF27@fugue.com> <87in5td3ar.fsf@toke.dk> <A667C059-FEBB-4159-A053-0B7AFE35F5FD@fugue.com>
Date: Tue, 10 Jul 2018 14:48:50 +0200
X-Clacks-Overhead: GNU Terry Pratchett
Message-ID: <87r2kbcl3h.fsf@toke.dk>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnssd/PtKPropwgN84SdjwS3D0dh2lE18>
Subject: Re: [dnssd] The DNSSD WG has placed draft-sctl-service-registration in state "Call For Adoption By WG Issued"
X-BeenThere: dnssd@ietf.org
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: "Discussion of extensions to DNS-based service discovery for routed networks." <dnssd.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnssd>, <mailto:dnssd-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnssd/>
List-Post: <mailto:dnssd@ietf.org>
List-Help: <mailto:dnssd-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnssd>, <mailto:dnssd-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 10 Jul 2018 12:49:07 -0000

Ted Lemon <mellon@fugue.com> writes:

>>>> So another way to ensure this source verification is needed, I think.
>>>> The way I implemented it is to have the registration server only speak
>>>> TCP; that way, source address spoofing is not possible (as that would
>>>> make the handshake fail), and the server can simply implement a
>>>> straight-forward ACL policy.
>>> 
>>> This could also work, or we could use DNS cookies, but it breaks the
>>> LLN use case.
>> 
>> Wouldn't it be possible to specify both?
>
> I'm coming around to thinking this might be a good idea for some
> cases, but I also think that the anycast use case needs to be
> preserved, and that ought to be a simple two-message exchange in the
> success case. The problem is deciding when TCP makes sense.

Couldn't that just be left up to the client? I.e., the network SHOULD
provide both, clients MUST support both and if the network only supports
one use that; but if the network supports both, the client is free to
pick whatever makes the most sense for its use case.

I'm a little worried that this would lead to too many permutations to
test interoperability, and/or just lead to cherry-picking. But it's
definitely easier to specify than coming up for rules for when to do
what... :)

>>>> - It is not quite clear to me whether the sleep proxy described in
>>>> section 4 is an optional feature or if its meant to be mandatory.
>>>> Stuart explained its usefulness for devices that power off when not in
>>>> use, requiring this function will mean that registration servers will
>>>> need to be on the local link, which is somewhat limiting. Also, the
>>>> implementation complexity goes way up (I certainly don't plan to
>>>> implement this feature :)). So I think having a way for the server to
>>>> signal "no, I can't perform sleep proxying" to the client would be
>>>> good to allow things to fail in a graceful way.
>>> 
>>> Sleep proxy is advertised as a service, so devices that don't
>>> implement it can not advertise it.
>> 
>> Ah, great. As long as its in spec to not advertise that service, that's
>> good enough for me.
>> 
>>> However, this breaks the LLN single-exchange use case, so I think
>>> there's an argument that it should be required on LLNs.
>> 
>> Hmm, I'm not sure I quite understand what you mean by single-exchange
>> use case, then?
>
> An LLN device should be able to register with a sleep proxy without
> first discovering a specific sleep proxy with which to register. It
> should IOW be able to send a single DNS Update packet to an anycast
> address and get back a response of "yes, we have set up a sleep proxy
> for you."

Right. And how is it supposed to discover which anycast address to use?
Or is that going to be a special address assigned as part of the
standard?

>> What I mean is that to do sleep proxying (as I read the spec) requires
>> raw sockets, or some other way to answer neighbour requests on the
>> sleeping device's behalf. Which generally tends to be a privileged
>> operation, and raises the complexity from "just answer DNS requests".
>> And of course it requires link-local presence, which means it either
>> requires automation (such as in homenet), or lots of manual
>> configuration.
>
> Right. This is actually a really key point that we'd utterly missed.
> Since we are supporting multiple subnets, the current sleep proxy
> paradigm doesn't work. That doesn't mean it _can't_ work, but it is
> different than what we'd had in mind, and is in fact more work than
> we'd been assuming. Thanks for poking a hole in this blind spot!

Haha, you're welcome ;)

> I'm not sure what the answer is here—on a homenet it's not too hard to
> imagine a solution; on an LLN I think it's not a problem, but it's
> definitely a problem for the campus use case. I don't think this is an
> impediment to adoption, because the registration protocol is useful
> whether it supports the sleep proxy use case or not.

Agreed.

> But we need to figure out how to address this.

Hmm, only thing that comes to mind is doing the proxying at layer 3
instead; i.e., advertise the proxy's address in DNS and forward packets
to the sleeping device using encapsulation or (*shudder*) two-way NAT.
That would require the proxy to stay in the loop for everything to be
transparent, though, so not sure if it's a good solution...

>> I think it's not important enough to put in the effort to implement it,
>> basically.
>> 
>> Note that this is for my use case; I can totally agree that requiring it
>> for homenet makes sense; but service registration can be useful in other
>> contexts as well...
>
> I'm curious if I've listed the contexts that you care about, or if I
> missed some. What contexts do you have in mind?

I think my use case is covered by the campus use case, more or less.
I.e., a managed network where devices should be able to register
themselves automatically in (global) DNS with a minimum of
configuration.

I use it to find devices on my network; if I just configure devices to
run the registration daemon, and put the right discovery PTR records in
the network-local recursive resolver, I will be able to find them by
hostname on the local link, and the registration server can be
configured to (selectively) put things into global DNS as well. Since
I run this on different networks, I run registration proxy in the cloud,
where it services several networks (with different domain names). So
anything that requires link-local presence is a hassle to support...

-Toke