[DNSOP] Re: Is DELEXT too restrictive?
Roy Arends <[email protected]> Wed, 29 Jul 2026 13:46:18 +0100
| Newsgroups | gmane.ietf.dnsop |
|---|---|
| Message-ID | <[email protected]> |
--===============0374427324507355260== Content-Type: multipart/alternative; boundary="Apple-Mail=_C6C9E508-F734-41A0-B480-83384981BDBF" --Apple-Mail=_C6C9E508-F734-41A0-B480-83384981BDBF Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On 29 Jul 2026, at 12:56, Philip Homburg <[email protected]> = wrote: >=20 >> The DE flag was introduced as a capability negotiation mechanism, >> indicating that the resolver understands DELEG. Omitting the NS >> RRset was a natural optimisation of the protocol semantics adopted >> for DELEG (why send NS it if it is not used), but not the purpose >> of the DE flag itself. >=20 > For unsigned zones, there is no need for a capability negotiation. = Just > putting both NS and DELEG records in the Authority section is fine.=20 > If I remember correctly, somebody tested whether this would cause any > problems. So originally, DE was just an optimization. Philip, My recollection is slightly different. The DE flag really was introduced as a capability negotiation mechanism. = Later, it turned out that sending both NS and DELEG in the referral = didn=E2=80=99t actually cause interoperability problems (I believe = Shumon and I were the ones who tested this). Even after that, we kept the DE flag because it provided a useful signal = for measuring deployment and adoption. My recollection is also that the current behaviour (sending either NS or = Delegation Types depending on the value of the DE flag) came later. In = other words, I don=E2=80=99t think DE was originally introduced as an = optimisation; the optimisation followed from the protocol semantics that = eventually evolved around it. In any case, I don=E2=80=99t think the historical motivation is the = important question. The question today is whether DELEG/DELEXT should = define the NS interaction for all future Delegation Types, or whether = that should be left to the individual Delegation Type specifications. > Later it was found that sending DELEG records to legacy resolvers = could > cause DNSSEC validation errors. So DE became required, but that does > not change the original purpose of DE. >=20 >>> do we want the extra >>> complexity for this optimization or not. What does it mean = operationally, >>> when delegation replies get bigger due to inclusion of NS records. >>=20 >> The Response size gets larger when all Delegation Types and NS >> records are included, compared to solely Delegation Types. That is >> indeed a consequence of my proposed modification. However, new >> Delegation Types do not necessarily need to have a DELEG RRset, so >> the cost of larger responses now should be offset against even >> larger responses in the future, if we dont make the change. >=20 > One option is to split the range of new parent types into delegation = types > and informational types. That makes it possible to keep the = optimization > while allowing new types that can be combined with NS. Assume that, in the future, a new Delegation Type supersedes DELEG. = Existing resolvers understand DELEG and NS, but not the new type. With the current DELEXT semantics (or with a split where =E2=80=9Cdelegati= on types=E2=80=9D suppress NS), the referral would contain the new = Delegation Type but no NS RRset. Since the resolver doesn=E2=80=99t = implement the new Delegation Type, it cannot use it, and because there = is no NS RRset, it cannot fall back to the legacy delegation either. The = delegation therefore becomes unusable for those resolvers. My suggestion is slightly different. If a resolver does not implement = any of the Delegation Types in the referral, but the referral validates = correctly, it falls back to the NS RRset. Therefore the NS RRset needs = to be included in the referral. On the other hand, if the resolver does implement a Delegation Type, it = follows that Delegation Type=E2=80=99s specification. If that = specification requires that NS not be used (as DELEG does), then the = resolver MUST ignore the NS RRset.=20 This is similar in spirit to DNSSEC algorithm agility. A resolver is not = expected to understand future algorithms immediately; the protocol = defines how implementations behave until they do. I=E2=80=99m suggesting = DELEXT should provide a similar compatibility story for future = Delegation Types, rather than requiring every future =E2=80=9Cdelegation=E2= =80=9D type to inherit DELEG=E2=80=99s semantics. Roy= --Apple-Mail=_C6C9E508-F734-41A0-B480-83384981BDBF Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 <html aria-label=3D"message body"><head><meta http-equiv=3D"content-type" = content=3D"text/html; charset=3Dutf-8"></head><body = style=3D"overflow-wrap: break-word; -webkit-nbsp-mode: space; = line-break: after-white-space;"><br = id=3D"lineBreakAtBeginningOfMessage"><div><br><blockquote = type=3D"cite"><div>On 29 Jul 2026, at 12:56, Philip Homburg = <[email protected]> wrote:</div><br = class=3D"Apple-interchange-newline"><div><div><blockquote = type=3D"cite">The DE flag was introduced as a capability negotiation = mechanism,<br>indicating that the resolver understands DELEG. Omitting = the NS<br>RRset was a natural optimisation of the protocol = semantics adopted<br>for DELEG (why send NS it if it is not used), but = not the purpose<br>of the DE flag itself.<br></blockquote><br>For = unsigned zones, there is no need for a capability negotiation. = Just<br>putting both NS and DELEG records in the Authority section is = fine. <br>If I remember correctly, somebody tested whether this would = cause any<br>problems. So originally, DE was just an optimization. = <br></div></div></blockquote><div><br></div><div><p class=3D"p1">Philip, = My recollection is slightly different.</p><p class=3D"p1">The DE flag = really was introduced as a capability negotiation mechanism. Later, it = turned out that sending both NS and DELEG in the referral didn=E2=80=99t = actually cause interoperability problems (I believe Shumon and I were = the ones who tested this).</p><p class=3D"p1">Even after that, we kept = the DE flag because it provided a useful signal for measuring deployment = and adoption.</p><p class=3D"p1">My recollection is also that the = current behaviour (sending either NS or Delegation Types depending on = the value of the DE flag) came later. In other words, I don=E2=80=99t = think DE was originally introduced <span = class=3D"s1"><i>as</i></span> an optimisation; the optimisation = followed from the protocol semantics that eventually evolved around = it.</p></div><div><p class=3D"p1">In any case, I don=E2=80=99t think the = historical motivation is the important question. The question today is = whether DELEG/DELEXT should define the NS interaction for all future = Delegation Types, or whether that should be left to the individual = Delegation Type specifications.</p></div><div><br></div><blockquote = type=3D"cite"><div><div>Later it was found that sending DELEG records to = legacy resolvers could<br>cause DNSSEC validation errors. So DE became = required, but that does<br>not change the original purpose of = DE.<br><br><blockquote type=3D"cite"><blockquote type=3D"cite">do we = want the extra<br>complexity for this optimization or not. What does it = mean operationally,<br>when delegation replies get bigger due to = inclusion of NS records.<br></blockquote><br>The Response size gets = larger when all Delegation Types and NS<br>records are included, = compared to solely Delegation Types. That is<br>indeed a consequence of = my proposed modification. However, new<br>Delegation Types do not = necessarily need to have a DELEG RRset, so<br>the cost of larger = responses now should be offset against even<br>larger responses in the = future, if we dont make the change.<br></blockquote><br>One option is to = split the range of new parent types into delegation types<br>and = informational types. That makes it possible to keep the = optimization<br>while allowing new types that can be combined with = NS.<br></div></div></blockquote><br></div><div><p class=3D"p1">Assume = that, in the future, a new Delegation Type supersedes DELEG. Existing = resolvers understand DELEG and NS, but not the new type.</p><p = class=3D"p1">With the current DELEXT semantics (or with a split where = =E2=80=9Cdelegation types=E2=80=9D suppress NS), the referral would = contain the new Delegation Type but no NS RRset. Since the resolver = doesn=E2=80=99t implement the new Delegation Type, it cannot use it, and = because there is no NS RRset, it cannot fall back to the legacy = delegation either. The delegation therefore becomes unusable for those = resolvers.</p><p class=3D"p1">My suggestion is slightly different. If a = resolver does not implement any of the Delegation Types in the referral, = but the referral validates correctly, it falls back to the NS RRset. = Therefore the NS RRset needs to be included in the referral.</p><p = class=3D"p1">On the other hand, if the resolver does implement a = Delegation Type, it follows that Delegation Type=E2=80=99s = specification. If that specification requires that NS not be used (as = DELEG does), then the resolver MUST ignore the NS RRset. </p><p = class=3D"p1">This is similar in spirit to DNSSEC algorithm agility. A = resolver is not expected to understand future algorithms immediately; = the protocol defines how implementations behave until they do. I=E2=80=99m= suggesting DELEXT should provide a similar compatibility story for = future Delegation Types, rather than requiring every future = =E2=80=9Cdelegation=E2=80=9D type to inherit DELEG=E2=80=99s = semantics.</p></div><div>Roy</div></body></html>= --Apple-Mail=_C6C9E508-F734-41A0-B480-83384981BDBF-- --===============0374427324507355260== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRE5TT1AgbWFp bGluZyBsaXN0IC0tIGRuc29wQGlldGYub3JnClRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwg dG8gZG5zb3AtbGVhdmVAaWV0Zi5vcmcK --===============0374427324507355260==--