Re: [Add] Usage of NS in draft-ietf-add-split-horizon-authority

Paul Wouters <paul@nohats.ca> Wed, 08 February 2023 22:46 UTC

Return-Path: <paul@nohats.ca>
X-Original-To: add@ietfa.amsl.com
Delivered-To: add@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 49CD9C151543 for <add@ietfa.amsl.com>; Wed, 8 Feb 2023 14:46:08 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.094
X-Spam-Level:
X-Spam-Status: No, score=-7.094 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nohats.ca
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ohiMW6k84ABX for <add@ietfa.amsl.com>; Wed, 8 Feb 2023 14:46:02 -0800 (PST)
Received: from mx.nohats.ca (mx.nohats.ca [193.110.157.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B38FFC151541 for <add@ietf.org>; Wed, 8 Feb 2023 14:46:01 -0800 (PST)
Received: from localhost (localhost [IPv6:::1]) by mx.nohats.ca (Postfix) with ESMTP id 4PBw871j9pzD5Y; Wed, 8 Feb 2023 23:45:59 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nohats.ca; s=default; t=1675896359; bh=215yJzuBmBB/p9eNs/n43wRoGWPwt6nizpAbj0u2rNg=; h=Date:From:To:cc:Subject:In-Reply-To:References; b=NNeuE9SBXGsX403sj4bPE2JE4saw9vKUe4tkZZokOQNnsbMyzPGNFnHrhQHoyWb6j e1W/ZOtZluEvnio6BWULuPmiG0otGtsTn5xWOgi0G9RYb76iLcXfoYzxt4+0XknRx/ EtcsM9PU1FLjJgaS3o3tSK9wUPtDESUQK+GrIYjQ=
X-Virus-Scanned: amavisd-new at mx.nohats.ca
Received: from mx.nohats.ca ([IPv6:::1]) by localhost (mx.nohats.ca [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ZF3Jv59hJMQB; Wed, 8 Feb 2023 23:45:57 +0100 (CET)
Received: from bofh.nohats.ca (bofh.nohats.ca [193.110.157.194]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx.nohats.ca (Postfix) with ESMTPS; Wed, 8 Feb 2023 23:45:57 +0100 (CET)
Received: by bofh.nohats.ca (Postfix, from userid 1000) id 6846F690D46; Wed, 8 Feb 2023 17:45:56 -0500 (EST)
Received: from localhost (localhost [127.0.0.1]) by bofh.nohats.ca (Postfix) with ESMTP id 64E59690D45; Wed, 8 Feb 2023 17:45:56 -0500 (EST)
Date: Wed, 08 Feb 2023 17:45:56 -0500
From: Paul Wouters <paul@nohats.ca>
To: Benjamin Schwartz <benjamin.m.schwartz@gmail.com>
cc: tirumal reddy <kondtir@gmail.com>, Michael Richardson <mcr+ietf@sandelman.ca>, ADD Mailing list <add@ietf.org>
In-Reply-To: <CAJF-iTTJ1L0Otf5Y4EWFB=nY4EkJH--0kbuiYe97i5WeGmUHVA@mail.gmail.com>
Message-ID: <de060702-11f0-a793-d6cf-b5da83b33e35@nohats.ca>
References: <CAJF-iTQbrcdaUgewV2Xr=-ML=X+-N-3qAuXoX046WLg-J2iSpA@mail.gmail.com> <95E4717A-77AA-4BEE-807D-61DF167993D9@nohats.ca> <CAJF-iTTJ1L0Otf5Y4EWFB=nY4EkJH--0kbuiYe97i5WeGmUHVA@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/add/Z9tWR2xuThXMqMJGweziGNIClQs>
Subject: Re: [Add] Usage of NS in draft-ietf-add-split-horizon-authority
X-BeenThere: add@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Applications Doing DNS <add.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/add>, <mailto:add-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/add/>
List-Post: <mailto:add@ietf.org>
List-Help: <mailto:add-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/add>, <mailto:add-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 08 Feb 2023 22:46:08 -0000

On Wed, 8 Feb 2023, Benjamin Schwartz wrote:

>       Using a prefix based on the internal zones, toronto.nohats.ca and Vancouver.nohats.ca would have their NS records at different locations,
>       which would be much cleaner.
> 
> I think we all agree on that.  The current draft would have you publish NS RRsets, enumerating the respective allowed internal resolvers, at
> "toronto.nohats.ca" and "vancouver.nohats.ca" (even if these are not zone cuts).  If the client receives a hint that these are internally-resolved names,
> it can perform an NS query to confirm.
> 
> With a static prefix, these NS records would instead live at "_extra.toronto.nohats.ca" and "_extra.vancouver.nohats.ca".

If we ignore hashing for now, I meant for them to live at
toronto._splitdns.nohats.ca and vancouver._splitdns.nohats.ca. That way,
toronto.nohats.ca is still a non-existing zone in the public dns, which
is what most people want.

>       The hash is to make the internal zone slightly more private (the hash is over the FQDN to prevent rainbow tables)

> It sounds like your goal here is to avoid publicly revealing the "toronto" and "vancouver" labels, in this example.  I don't view that as a significant
> benefit, since it can be resolved by restructuring the names as "toronto.internal.nohats.ca", etc.

For some deployments that works, not for others.

>, and this is the most common layout for internal corporate names anyway.

[citation needed]

For fortune500 companies maybe. For SMB, this is very unlikely the case.

> Also, I think DNSOP's experience with NSEC3 suggests that using hashing to protect these names is more trouble than it's worth.

I think .com and .net would not agree with you. Regardless, the
complexities of NSEC3 is not what we are looking at here.

> I also have some concerns about how to make hashing work with the draft's "walk up the tree" behavior (Section 6, paragraph 1), which allows the client to
> validate arbitrary "local domain hints" without knowing in advance where the internal zone starts.

You receive ns1.toronto.nohats.ca. You try dig NS for:

hash(ns1.toronto.nohats.ca.)._splitdns.toronto.nohats.ca.
hash(ns1.toronto.nohats.ca.)._splitdns.nohats.ca.

I would probably try walking down the tree and skipping the root:
hash(ns1.toronto.nohats.ca.)._splitdns.ca.
hash(ns1.toronto.nohats.ca.)._splitdns.nohats.ca.

Skipping the TLD is tempting for ccTLDs, but not for gTLDs as we could
have some vanity TLDs, eg :

hash(ns1.toronto.google.)._splitdns.google.

Here using the SPL could be used again to skip some queries.

> I believe hashing is appropriate if we need to support a scenario where:
> 1. There is no transition label (e.g. "internal") between the public zone and the first confidential label, AND
> 2. The local nameservers cannot be entrusted with local authority over the public zone.

> This seems like an unusual case to me.

To me 2) is always true and 1) is a very common case.


> It also creates significant interference with DNSSEC, because it forces the client to manage two different views
> of a single zone.

Yes that is correct. That is why RFC8598 for split DNS in IKEv2,
supports receiving trust anchors (eg DNSKEY/DS), where it leverages
the IKEv2 as trusted resource (after validating the IKEv2 GW
credentials).

If you run a split-DNS and you want DNSSEC to work, there is no way
around this. The public view has a DNSSEC that proves the split-dns
zone does not exist. If the public view did prove it, and you want
to use that, you need a significant infrastructure for all your
branch networks and their DNS servers to use the same DNSSEC key,
at which point it becomes questionable if the enterprise is still
in control of the private key distribution. It is much safer to
securely deliver the individual trust anchors (eg via IKEv2).

>  For example, a client that queries "vanx.nohats.ca" will receive an NSEC response that denies the existence of "vancouver.nohats.ca",
> but this must be ignored.

If you connect to a client that claims to be vancouver.nohats.ca, you
will need to flush your cache for everything under that zone. Again,
the libreswan IKEv2 implementation does that. Upon disconnect, it also
flushes the cache for these entries.

>  Getting this right could be complicated.  Having a clear division of responsibilities, like a zone cut, seems easier.

It's not easier to tell an organization that their 100 branches need to
consolidate their DNS deployments and make it fully dependent on the
public zone, so that if the uplink to a branch dies, the entire internal
network dies.

> If the group feels that this case is important to support, I would prefer a hashing scheme that uses a stable high-entropy salt known only to the local
> network participants.  This would remove any concerns about brute-force attacks, but it would likely require an additional network-client configuration
> parameter.

This seems more complicated? It would need a specification or even
provisioning scheme to roll out. If you do provisioning anyway,
why not securely provision a list of internal domains with their
DNSKEYs and forget about all draft?

> If you are authorizing a split dns set of nameservers, you might as well support a DS record so the internal zone can be DNSSEC signed with a trust
> anchor.
> 
> I'm not sure what you mean by "trust anchor", but I agree that it would be good if the local nameserver can serve DNSSEC that validates all the way to the
> root, without having to hold a private key for the public zone.

trust anchor is a DNSSEC term, it basically means a DNSSEC DNSKEY or DS
record that is configured for an FQDN.

My point was, if we are "authorizing" an internal server to zone zone
FOO, why not also allow this mechanism to send the DNSKEY used to sign
that internal zone (as there is no DS record in the parent zone if you
want to keep your internal zones out of the public view).

> You plan to place 50 NS records in one location to support 50 different branch split zones ?
> 
> 
> No, each split zone would have its own NS RRSet, as in the present draft.  Indeed, the presence of the NS RRSet is what defines the split zone.
> 
> It sounds like you're making an assumption that each "site" would use unique NS names.  This is allowed but not required.  Even if unique hostnames are
> used for some purposes, for DNR the same names can be used at each site, allowing a small number of NS records to authorize arbitrarily many sites.

Again, you assume a fresh rollout of DNS over a multi-national
organization. That is not how split-dns zones work. The whole
point of why there are so prevalent is that it is easy to set
them up and doens't require the internal network people to talk
to the DNS people of the public zone. Usually the public zone
is hosted completely different, with different requirements,
much more anti-ddos meassures, etc etc.

>       That will cause TC and TCP.
> 
> I don't think this is a big problem.  These queries should be infrequent, and will most commonly be conveyed to the client over an encrypted (i.e.
> non-truncating) transport.

If I had a dollar for every nameserver that got TCP 53 blocked, I'd be retired :)

> The client needs PSL like awareness regardless, you don’t want .com to start claiming it is split and have believe it.
> 
> I think we can recommend this, but of course the IETF doesn't maintain a PSL.

I believe the IETF is trying to revive the dbound WG, so who knows.

Paul