rfc9103.original.xml | rfc9103.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="utf-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Process | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
or - mmark.miek.nl" --> | nsus="true" docName="draft-ietf-dprive-xfr-over-tls-12" indexInclude="true" ipr= | |||
<rfc version="3" ipr="trust200902" docName="draft-ietf-dprive-xfr-over-tls-12" s | "trust200902" number="9103" prepTime="2021-08-23T21:11:13" scripts="Common,Latin | |||
ubmissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/20 | " sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude=" | |||
01/XInclude" updates="1995, 5936, 7766" consensus="true"> | true" updates="1995, 5936, 7766" xml:lang="en"> | |||
<link href="https://datatracker.ietf.org/doc/draft-ietf-dprive-xfr-over-tls-12 | ||||
<front> | " rel="prev"/> | |||
<title abbrev="XFR-over-TLS">DNS Zone Transfer-over-TLS</title><seriesInfo value | <link href="https://dx.doi.org/10.17487/rfc9103" rel="alternate"/> | |||
="draft-ietf-dprive-xfr-over-tls-12" stream="IETF" status="standard" name="Inter | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
net-Draft"></seriesInfo> | <front> | |||
<author initials="W." surname="Toorop" fullname="Willem Toorop"><organization>NL | <title abbrev="XFR over TLS">DNS Zone Transfer over TLS</title> | |||
net Labs</organization><address><postal><street></street> | <seriesInfo name="RFC" value="9103" stream="IETF"/> | |||
<street>Science Park 400</street> | <author initials="W." surname="Toorop" fullname="Willem Toorop"> | |||
<city>Amsterdam</city> | <organization showOnFrontPage="true">NLnet Labs</organization> | |||
<code>1098 XH</code> | <address> | |||
<country>The Netherlands</country> | <postal> | |||
</postal><email>willem@nlnetlabs.nl</email> | <street>Science Park 400</street> | |||
</address></author> | <city>Amsterdam</city> | |||
<author initials="S." surname="Dickinson" fullname="Sara Dickinson"><organizatio | <code>1098 XH</code> | |||
n>Sinodun IT</organization><address><postal><street></street> | <country>Netherlands</country> | |||
<street>Magdalen Centre</street> | </postal> | |||
<street>Oxford Science Park</street> | <email>willem@nlnetlabs.nl</email> | |||
<city>Oxford</city> | </address> | |||
<code>OX4 4GA</code> | </author> | |||
<country>United Kingdom</country> | <author initials="S." surname="Dickinson" fullname="Sara Dickinson"> | |||
</postal><email>sara@sinodun.com</email> | <organization showOnFrontPage="true">Sinodun IT</organization> | |||
</address></author> | <address> | |||
<author initials="S." surname="Sahib" fullname="Shivan Sahib"><organization>Brav | <postal> | |||
e Software</organization><address><postal><street></street> | <extaddr>Magdalen Centre</extaddr> | |||
<city>Vancouver, BC</city> | <street>Oxford Science Park</street> | |||
<country>Canada</country> | <city>Oxford</city> | |||
</postal><email>shivankaulsahib@gmail.com</email> | <code>OX4 4GA</code> | |||
</address></author> | <country>United Kingdom</country> | |||
<author initials="P." surname="Aras" fullname="Pallavi Aras"><organization>Sales | </postal> | |||
force</organization><address><postal><street></street> | <email>sara@sinodun.com</email> | |||
<city>Herndon, VA</city> | </address> | |||
<country>United States</country> | </author> | |||
</postal><email>paras@salesforce.com</email> | <author initials="S." surname="Sahib" fullname="Shivan Sahib"> | |||
</address></author> | <organization showOnFrontPage="true">Brave Software</organization> | |||
<author initials="A." surname="Mankin" fullname="Allison Mankin"><organization>S | <address> | |||
alesforce</organization><address><postal><street></street> | <postal> | |||
<city>Herndon, VA</city> | <city>Vancouver</city> | |||
<country>United States</country> | <region>BC</region> | |||
</postal><email>allison.mankin@gmail.com</email> | <country>Canada</country> | |||
</address></author> | </postal> | |||
<date year="2021" month="May" day="26"></date> | <email>shivankaulsahib@gmail.com</email> | |||
<area>Internet</area> | </address> | |||
<workgroup>dprive</workgroup> | </author> | |||
<keyword>DNS</keyword> | <author initials="P." surname="Aras" fullname="Pallavi Aras"> | |||
<keyword>operations</keyword> | <organization showOnFrontPage="true">Salesforce</organization> | |||
<keyword>privacy</keyword> | <address> | |||
<postal> | ||||
<abstract> | <city>Herndon</city> | |||
<t>DNS zone transfers are transmitted in clear text, which gives attackers the | <region>VA</region> | |||
opportunity to collect the content of a zone by eavesdropping on network | <country>United States of America</country> | |||
connections. The DNS Transaction Signature (TSIG) mechanism is specified to | </postal> | |||
restrict direct zone transfer to authorized clients only, but it does not add | <email>paras@salesforce.com</email> | |||
confidentiality. This document specifies the use of TLS, rather than clear | </address> | |||
text, to prevent zone content collection via passive monitoring of zone | </author> | |||
transfers: XFR-over-TLS (XoT). Additionally, this specification updates RFC1995 | <author initials="A." surname="Mankin" fullname="Allison Mankin"> | |||
and RFC5936 with respect to efficient use of TCP connections, and RFC7766 with | <organization showOnFrontPage="true">Salesforce</organization> | |||
respect to the recommended number of connections between a client and server | <address> | |||
for each transport.</t> | <postal> | |||
</abstract> | <city>Herndon</city> | |||
<region>VA</region> | ||||
</front> | <country>United States of America</country> | |||
</postal> | ||||
<middle> | <email>allison.mankin@gmail.com</email> | |||
</address> | ||||
<section anchor="introduction"><name>Introduction</name> | </author> | |||
<t>DNS has a number of privacy vulnerabilities, as discussed in detail in | <date month="08" year="2021"/> | |||
<xref target="I-D.ietf-dprive-rfc7626-bis"></xref>. Stub client to recursive res | <area>Internet</area> | |||
olver query privacy has received the | <workgroup>dprive</workgroup> | |||
most attention to date, with standards track documents for both DNS-over-TLS | <keyword>DNS</keyword> | |||
(DoT) <xref target="RFC7858"></xref> and DNS-over-HTTPS (DoH) <xref target="RFC8 | <keyword>operations</keyword> | |||
484"></xref>, and a proposal for | <keyword>privacy</keyword> | |||
DNS-over-QUIC <xref target="I-D.ietf-dprive-dnsoquic"></xref>. There is ongoing | <abstract pn="section-abstract"> | |||
work on DNS privacy | <t indent="0" pn="section-abstract-1">DNS zone transfers are transmitted i | |||
requirements for exchanges between recursive resolvers and authoritative | n cleartext, which gives attackers the | |||
servers <xref target="I-D.ietf-dprive-phase2-requirements"></xref> and some sugg | opportunity to collect the content of a zone by eavesdropping on network | |||
estions for how | connections. The DNS Transaction Signature (TSIG) mechanism is specified to | |||
signaling of DoT support by authoritative nameservers might work. However, there | restrict direct zone transfer to authorized clients only, but it does not add | |||
is currently no RFC | confidentiality. This document specifies the use of TLS, rather than cleartext | |||
that specifically defines recursive to authoritative DNS-over-TLS (ADoT).</t> | , | |||
<t><xref target="I-D.ietf-dprive-rfc7626-bis"></xref> established that stub clie | to prevent zone content collection via passive monitoring of zone | |||
nt DNS query | transfers: XFR over TLS (XoT). Additionally, this specification updates RFC 19 | |||
transactions are not public and needed protection, but on zone transfer | 95 | |||
<xref target="RFC1995"></xref> <xref target="RFC5936"></xref> it says only:</t> | and RFC 5936 with respect to efficient use of TCP connections and RFC 7766 wit | |||
h | ||||
<artwork>"Privacy risks for the holder of a zone (the risk that someone | respect to the recommended number of connections between a client and server | |||
gets the data) are discussed in [RFC5936] and [RFC5155]." | for each transport.</t> | |||
</artwork> | </abstract> | |||
<t>In what way is exposing the full contents of a zone a privacy risk? The | <boilerplate> | |||
contents of the zone could include information such as names of persons used in | <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | |||
names of hosts. Best practice is not to use personal information for domain | "exclude" pn="section-boilerplate.1"> | |||
names, but many such domain names exist. The contents of the zone could also | <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | |||
include references to locations that allow inference about location information | > | |||
of the individuals associated with the zone's organization. It could also | <t indent="0" pn="section-boilerplate.1-1"> | |||
include references to other organizations. Examples of this could be:</t> | This is an Internet Standards Track document. | |||
</t> | ||||
<ul> | <t indent="0" pn="section-boilerplate.1-2"> | |||
<li>Person-laptop.example.org</li> | This document is a product of the Internet Engineering Task Force | |||
<li>MX-for-Location.example.org</li> | (IETF). It represents the consensus of the IETF community. It has | |||
<li>Service-tenant-from-another-org.example.org</li> | received public review and has been approved for publication by | |||
</ul> | the Internet Engineering Steering Group (IESG). Further | |||
<t>Additionally, the full zone contents expose all the IP addresses of endpoints | information on Internet Standards is available in Section 2 of | |||
held in the DNS records which can make reconnaissance and attack targeting easie | RFC 7841. | |||
r, particularly for | </t> | |||
IPv6 addresses or private networks. There may also be regulatory, policy or othe | <t indent="0" pn="section-boilerplate.1-3"> | |||
r reasons why the | Information about the current status of this document, any | |||
zone contents in full must be treated as private.</t> | errata, and how to provide feedback on it may be obtained at | |||
<t>Neither of the RFCs mentioned in <xref target="I-D.ietf-dprive-rfc7626-bis">< | <eref target="https://www.rfc-editor.org/info/rfc9103" brackets="non | |||
/xref> | e"/>. | |||
contemplates the risk that someone gets the data through eavesdropping on | </t> | |||
network connections, only via enumeration or unauthorized transfer as described | </section> | |||
in the following paragraphs.</t> | <section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | |||
<t>Zone enumeration is trivially possible for DNSSEC zones which use NSEC; i.e. | ude" pn="section-boilerplate.2"> | |||
queries for the authenticated denial of existence records allow a client to | <name slugifiedName="name-copyright-notice">Copyright Notice</name> | |||
walk through the entire zone contents. <xref target="RFC5155"></xref> specifies | <t indent="0" pn="section-boilerplate.2-1"> | |||
NSEC3, a mechanism | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
to provide measures against zone enumeration for DNSSEC signed zones (a goal | document authors. All rights reserved. | |||
was to make it as hard to enumerate a DNSSEC signed zone as an unsigned zone). | </t> | |||
Whilst this is widely used, it has been demonstrated that zone walking is | <t indent="0" pn="section-boilerplate.2-2"> | |||
possible for precomputed NSEC3 using attacks such as those described in | This document is subject to BCP 78 and the IETF Trust's Legal | |||
<xref target="NSEC3-attacks"></xref>. This prompted further work on an alternati | Provisions Relating to IETF Documents | |||
ve | (<eref target="https://trustee.ietf.org/license-info" brackets="none | |||
mechanism for DNSSEC authenticated denial of existence - NSEC5 | "/>) in effect on the date of | |||
<xref target="I-D.vcelak-nsec5"></xref> - however questions remain over the prac | publication of this document. Please review these documents | |||
ticality of this | carefully, as they describe your rights and restrictions with | |||
mechanism.</t> | respect to this document. Code Components extracted from this | |||
<t><xref target="RFC5155"></xref> does not address data obtained outside zone en | document must include Simplified BSD License text as described in | |||
umeration (nor does | Section 4.e of the Trust Legal Provisions and are provided without | |||
<xref target="I-D.vcelak-nsec5"></xref>). Preventing eavesdropping of zone trans | warranty as described in the Simplified BSD License. | |||
fers (this document) | </t> | |||
is orthogonal to preventing zone enumeration, though they aim to protect the | </section> | |||
same information.</t> | </boilerplate> | |||
<t><xref target="RFC5936"></xref> specifies using TSIG <xref target="RFC8945"></ | <toc> | |||
xref> for authorization of the clients | <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | |||
of a zone transfer and for data integrity, but does not express any need for | n="section-toc.1"> | |||
confidentiality, and TSIG does not offer encryption.</t> | <name slugifiedName="name-table-of-contents">Table of Contents</name> | |||
<t>Section 8 of the NIST guide on 'Secure Domain Name System (DNS) Deployment' | <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | |||
<xref target="nist-guide"></xref> discusses restricting access for zone transfer | c.1-1"> | |||
s using ACLs and | <li pn="section-toc.1-1.1"> | |||
TSIG in more detail. It also discusses the possibility that specific deployments | <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref der | |||
might choose to use a lower level network layer to protect zone transfers, e.g., | ivedContent="1" format="counter" sectionFormat="of" target="section-1"/>. <xref | |||
IPSec.</t> | derivedContent="" format="title" sectionFormat="of" target="name-introduction"> | |||
<t>It is noted that in all the common open source implementations | Introduction</xref></t> | |||
such ACLs are applied on a per query basis (at the time of writing). Since reque | </li> | |||
sts typically occur on | <li pn="section-toc.1-1.2"> | |||
TCP connections authoritatives must therefore accept any TCP connection and | <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref der | |||
then handling the authentication of each zone transfer (XFR) request individuall | ivedContent="2" format="counter" sectionFormat="of" target="section-2"/>. <xref | |||
y.</t> | derivedContent="" format="title" sectionFormat="of" target="name-terminology">T | |||
<t>Because both AXFR (authoritative transfer) and IXFR (incremental transfer) ar | erminology</xref></t> | |||
e typically carried out over TCP | </li> | |||
from authoritative DNS protocol implementations, encrypting zone transfers | <li pn="section-toc.1-1.3"> | |||
using TLS <xref target="RFC8499"></xref>, based closely on DoT <xref target="RFC | <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref der | |||
7858"></xref>, seems like a simple step forward. | ivedContent="3" format="counter" sectionFormat="of" target="section-3"/>. <xref | |||
This document specifies how to use TLS (1.3 or later) as a transport to prevent | derivedContent="" format="title" sectionFormat="of" target="name-threat-model"> | |||
zone | Threat Model</xref></t> | |||
collection from zone transfers.</t> | </li> | |||
<t>This document also updates the previous specifications for zone transfers to | <li pn="section-toc.1-1.4"> | |||
clarify and extend them, mainly with respect to TCP usage:</t> | <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" form | |||
at="counter" sectionFormat="of" target="section-4"/>. <xref derivedContent="" f | ||||
<ul> | ormat="title" sectionFormat="of" target="name-design-considerations-for-x">Desig | |||
<li><eref target="IXFR">RFC1995</eref> and <eref target="AXFR">RFC5936</eref> ar | n Considerations for XoT</xref></t> | |||
e both updated to add further | </li> | |||
specification on efficient use of TCP connections</li> | <li pn="section-toc.1-1.5"> | |||
<li>Section 6.2.2 of <eref target="DNS Transport over TCP - Implementation | <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" form | |||
Requirements">RFC7766</eref> is updated with a new recommendation about the numb | at="counter" sectionFormat="of" target="section-5"/>. <xref derivedContent="" f | |||
er of | ormat="title" sectionFormat="of" target="name-connection-and-data-flows-i">Conne | |||
connections between a client and server for each transport.</li> | ction and Data Flows in Existing XFR Mechanisms</xref></t> | |||
</ul> | <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | |||
</section> | n-toc.1-1.5.2"> | |||
<li pn="section-toc.1-1.5.2.1"> | ||||
<section anchor="document-work-via-github"><name>Document work via GitHub</name> | <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent= | |||
<t>[THIS SECTION TO BE REMOVED BEFORE PUBLICATION] The Github repository for thi | "5.1" format="counter" sectionFormat="of" target="section-5.1"/>. <xref derived | |||
s | Content="" format="title" sectionFormat="of" target="name-axfr-mechanism">AXFR M | |||
document is at <eref target="https://github.com/hanzhang0116/hzpa-dprive-xfr-ove | echanism</xref></t> | |||
r-tls">https://github.com/hanzhang0116/hzpa-dprive-xfr-over-tls</eref>. | </li> | |||
Proposed text and editorial changes are very much welcomed there, but any | <li pn="section-toc.1-1.5.2.2"> | |||
functional changes should always first be discussed on the IETF DPRIVE WG (dns-p | <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent= | |||
rivacy) mailing list.</t> | "5.2" format="counter" sectionFormat="of" target="section-5.2"/>. <xref derived | |||
</section> | Content="" format="title" sectionFormat="of" target="name-ixfr-mechanism">IXFR M | |||
echanism</xref></t> | ||||
<section anchor="terminology"><name>Terminology</name> | </li> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", & | <li pn="section-toc.1-1.5.2.3"> | |||
quot;SHALL", "SHALL NOT", "SHOULD", | <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent= | |||
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", &q | "5.3" format="counter" sectionFormat="of" target="section-5.3"/>. <xref derived | |||
uot;MAY", and "OPTIONAL" in this | Content="" format="title" sectionFormat="of" target="name-data-leakage-of-notify | |||
document are to be interpreted as described in BCP 14 <xref target="RFC2119"></x | -and-">Data Leakage of NOTIFY and SOA Message Exchanges</xref></t> | |||
ref> | <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | |||
<xref target="RFC8174"></xref> when, and only when, they appear in all capitals, | ction-toc.1-1.5.2.3.2"> | |||
as shown here.</t> | <li pn="section-toc.1-1.5.2.3.2.1"> | |||
<t>Privacy terminology is as described in Section 3 of <xref target="RFC6973"></ | <t indent="0" pn="section-toc.1-1.5.2.3.2.1.1"><xref derived | |||
xref>.</t> | Content="5.3.1" format="counter" sectionFormat="of" target="section-5.3.1"/>. < | |||
<t>DNS terminology is as described in <xref target="RFC8499"></xref>. Note that | xref derivedContent="" format="title" sectionFormat="of" target="name-notify">NO | |||
as in <xref target="RFC8499"></xref>, the | TIFY</xref></t> | |||
terms 'primary' and 'secondary' are used for two servers engaged in zone transfe | </li> | |||
rs.</t> | <li pn="section-toc.1-1.5.2.3.2.2"> | |||
<t>DoT: DNS-over-TLS as specified in <xref target="RFC7858"></xref></t> | <t indent="0" pn="section-toc.1-1.5.2.3.2.2.1"><xref derived | |||
<t>XFR-over-TCP: Used to mean both IXFR-over-TCP <xref target="RFC1995"></xref> | Content="5.3.2" format="counter" sectionFormat="of" target="section-5.3.2"/>. < | |||
and AXFR-over-TCP <xref target="RFC5936"></xref>.</t> | xref derivedContent="" format="title" sectionFormat="of" target="name-soa">SOA</ | |||
<t>XoT: XFR-over-TLS mechanisms as specified in this document which apply to bot | xref></t> | |||
h AXFR-over-TLS and IXFR-over-TLS</t> | </li> | |||
<t>AXoT: AXFR-over-TLS</t> | </ul> | |||
<t>IXoT: IXFR over-TLS</t> | </li> | |||
</section> | </ul> | |||
</li> | ||||
<section anchor="threat-model"><name>Threat Model</name> | <li pn="section-toc.1-1.6"> | |||
<t>The threat model considered here is one where the current contents and size o | <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" form | |||
f the zone are considered | at="counter" sectionFormat="of" target="section-6"/>. <xref derivedContent="" f | |||
sensitive and should be protected during transfer.</t> | ormat="title" sectionFormat="of" target="name-updates-to-existing-specifi">Updat | |||
<t>The threat model does not, however, consider the existence of a zone, the act | es to Existing Specifications</xref></t> | |||
of | <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | |||
zone transfer between two entities, nor the identities of the nameservers | n-toc.1-1.6.2"> | |||
hosting a zone (including both those acting as hidden primaries/secondaries | <li pn="section-toc.1-1.6.2.1"> | |||
or directly serving the zone) as sensitive information. The proposed mechanism | <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent= | |||
does not attempt to obscure such information. The reasons for this include:</t> | "6.1" format="counter" sectionFormat="of" target="section-6.1"/>. <xref derived | |||
Content="" format="title" sectionFormat="of" target="name-update-to-rfc-1995-for | ||||
<ul> | -ixfr">Update to RFC 1995 for IXFR over TCP</xref></t> | |||
<li>much of this information can be obtained by various methods, including activ | </li> | |||
e scanning of the DNS</li> | <li pn="section-toc.1-1.6.2.2"> | |||
<li>an attacker who can monitor network traffic can relatively easily infer rela | <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent= | |||
tions between | "6.2" format="counter" sectionFormat="of" target="section-6.2"/>. <xref derived | |||
nameservers simply from traffic patterns, even when some or all of the traffic i | Content="" format="title" sectionFormat="of" target="name-update-to-rfc-5936-for | |||
s encrypted | -axfr">Update to RFC 5936 for AXFR over TCP</xref></t> | |||
(in terms of current deployments)</li> | </li> | |||
</ul> | <li pn="section-toc.1-1.6.2.3"> | |||
<t>The model does not consider attacks on the mechanisms that trigger a zone tra | <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent= | |||
nsfer, e.g., NOTIFY messages.</t> | "6.3" format="counter" sectionFormat="of" target="section-6.3"/>. <xref derived | |||
<t>It is noted that simply using XoT will indicate a desire by the zone owner th | Content="" format="title" sectionFormat="of" target="name-updates-to-rfcs-1995-a | |||
at the contents of the zone | nd-59">Updates to RFCs 1995 and 5936 for XFR over TCP</xref></t> | |||
remain confidential and so could be subject to blocking (e.g., via blocking of p | <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | |||
ort 853) if an attacker had | ction-toc.1-1.6.2.3.2"> | |||
such capabilities. However this threat is likely true of any such mechanism that | <li pn="section-toc.1-1.6.2.3.2.1"> | |||
attempts to encrypt data | <t indent="0" pn="section-toc.1-1.6.2.3.2.1.1"><xref derived | |||
passed between nameservers, e.g., IPsec.</t> | Content="6.3.1" format="counter" sectionFormat="of" target="section-6.3.1"/>. < | |||
</section> | xref derivedContent="" format="title" sectionFormat="of" target="name-connection | |||
-reuse">Connection Reuse</xref></t> | ||||
<section anchor="design-considerations-for-xot"><name>Design Considerations for | </li> | |||
XoT</name> | <li pn="section-toc.1-1.6.2.3.2.2"> | |||
<t>The following principles were considered in the design for XoT:</t> | <t indent="0" pn="section-toc.1-1.6.2.3.2.2.1"><xref derived | |||
Content="6.3.2" format="counter" sectionFormat="of" target="section-6.3.2"/>. < | ||||
<ul> | xref derivedContent="" format="title" sectionFormat="of" target="name-axfrs-and- | |||
<li><t>Confidentiality. Clearly using an encrypted transport for zone transfers | ixfrs-on-the-same">AXFRs and IXFRs on the Same Connection</xref></t> | |||
will | </li> | |||
defeat zone content leakage that can occur via passive surveillance.</t> | <li pn="section-toc.1-1.6.2.3.2.3"> | |||
</li> | <t indent="0" pn="section-toc.1-1.6.2.3.2.3.1"><xref derived | |||
<li><t>Authentication. Use of single or mutual TLS (mTLS) authentication (in com | Content="6.3.3" format="counter" sectionFormat="of" target="section-6.3.3"/>. < | |||
bination | xref derivedContent="" format="title" sectionFormat="of" target="name-xfr-limits | |||
with access control lists (ACLs)) can complement and potentially be an alternati | ">XFR Limits</xref></t> | |||
ve to TSIG.</t> | </li> | |||
</li> | <li pn="section-toc.1-1.6.2.3.2.4"> | |||
<li><t>Performance.</t> | <t indent="0" pn="section-toc.1-1.6.2.3.2.4.1"><xref derived | |||
Content="6.3.4" format="counter" sectionFormat="of" target="section-6.3.4"/>. < | ||||
<ul> | xref derivedContent="" format="title" sectionFormat="of" target="name-the-edns-t | |||
<li>Existing AXFR and IXFR mechanisms have the burden of backwards | cp-keepalive-edns">The edns-tcp-keepalive EDNS(0) Option</xref></t> | |||
compatibility with older implementations based on the original specifications | </li> | |||
in <xref target="RFC1034"></xref> and <xref target="RFC1035"></xref>. For exampl | <li pn="section-toc.1-1.6.2.3.2.5"> | |||
e, some older AXFR servers don’t | <t indent="0" pn="section-toc.1-1.6.2.3.2.5.1"><xref derived | |||
support using a TCP connection for multiple AXFR sessions or XFRs of different | Content="6.3.5" format="counter" sectionFormat="of" target="section-6.3.5"/>. < | |||
zones because they have not been updated to follow the guidance in <xref target= | xref derivedContent="" format="title" sectionFormat="of" target="name-backwards- | |||
"RFC5936"></xref>. | compatibility">Backwards Compatibility</xref></t> | |||
Any implementation of XoT would obviously be required to | </li> | |||
implement optimized and interoperable transfers as described in <xref target="RF | </ul> | |||
C5936"></xref>, | </li> | |||
e.g., transfer of multiple zones over one connection.</li> | <li pn="section-toc.1-1.6.2.4"> | |||
<li>Current usage of TCP for IXFR is sub-optimal in some cases i.e. | <t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent= | |||
connections are frequently closed after a single IXFR.</li> | "6.4" format="counter" sectionFormat="of" target="section-6.4"/>. <xref derived | |||
</ul></li> | Content="" format="title" sectionFormat="of" target="name-update-to-rfc-7766">Up | |||
</ul> | date to RFC 7766</xref></t> | |||
</section> | </li> | |||
</ul> | ||||
<section anchor="connection-and-data-flows-in-existing-xfr-mechanisms"><name>Con | </li> | |||
nection and Data Flows in Existing XFR Mechanisms</name> | <li pn="section-toc.1-1.7"> | |||
<t>The original specification for zone transfers in <xref target="RFC1034"></xre | <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" form | |||
f> and <xref target="RFC1035"></xref> was | at="counter" sectionFormat="of" target="section-7"/>. <xref derivedContent="" f | |||
based on a polling mechanism: a secondary performed a periodic query for the SOA | ormat="title" sectionFormat="of" target="name-xot-specification">XoT Specificati | |||
(start of zone authority) record (based | on</xref></t> | |||
on the refresh timer) to determine if an AXFR was required.</t> | <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | |||
<t><xref target="RFC1995"></xref> and <xref target="RFC1996"></xref> introduced | n-toc.1-1.7.2"> | |||
the concepts of IXFR and NOTIFY | <li pn="section-toc.1-1.7.2.1"> | |||
respectively, to provide for prompt propagation of zone updates. This has | <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent= | |||
largely replaced AXFR where possible, particularly for dynamically updated | "7.1" format="counter" sectionFormat="of" target="section-7.1"/>. <xref derived | |||
zones.</t> | Content="" format="title" sectionFormat="of" target="name-connection-establishme | |||
<t><xref target="RFC5936"></xref> subsequently redefined the specification of AX | nt">Connection Establishment</xref></t> | |||
FR to improve | </li> | |||
performance and interoperability.</t> | <li pn="section-toc.1-1.7.2.2"> | |||
<t>In this document we use the term "XFR mechanism" to describe the en | <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent= | |||
tire set of | "7.2" format="counter" sectionFormat="of" target="section-7.2"/>. <xref derived | |||
message exchanges between a secondary and a primary that concludes in a | Content="" format="title" sectionFormat="of" target="name-tls-versions">TLS Vers | |||
successful AXFR or IXFR request/response. This set may or may not include</t> | ions</xref></t> | |||
</li> | ||||
<ul> | <li pn="section-toc.1-1.7.2.3"> | |||
<li>NOTIFY messages</li> | <t indent="0" pn="section-toc.1-1.7.2.3.1"><xref derivedContent= | |||
<li>SOA queries</li> | "7.3" format="counter" sectionFormat="of" target="section-7.3"/>. <xref derived | |||
<li>Fallback from IXFR to AXFR</li> | Content="" format="title" sectionFormat="of" target="name-port-selection">Port S | |||
<li>Fallback from IXFR-over-UDP to IXFR-over-TCP</li> | election</xref></t> | |||
</ul> | </li> | |||
<t>The term is used to encompass the range of permutations that are possible and | <li pn="section-toc.1-1.7.2.4"> | |||
is useful to distinguish the 'XFR mechanism' from a single XFR | <t indent="0" pn="section-toc.1-1.7.2.4.1"><xref derivedContent= | |||
request/response exchange.</t> | "7.4" format="counter" sectionFormat="of" target="section-7.4"/>. <xref derived | |||
Content="" format="title" sectionFormat="of" target="name-high-level-xot-descrip | ||||
<section anchor="axfr-mechanism"><name>AXFR Mechanism</name> | tions">High-Level XoT Descriptions</xref></t> | |||
<t>The figure below provides an outline of an AXFR mechanism including NOTIFYs.< | </li> | |||
/t> | <li pn="section-toc.1-1.7.2.5"> | |||
<t indent="0" pn="section-toc.1-1.7.2.5.1"><xref derivedContent= | ||||
<artwork> Secondary Primary | "7.5" format="counter" sectionFormat="of" target="section-7.5"/>. <xref derived | |||
Content="" format="title" sectionFormat="of" target="name-xot-transfers">XoT Tra | ||||
nsfers</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.6"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.6.1"><xref derivedContent= | ||||
"7.6" format="counter" sectionFormat="of" target="section-7.6"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-xot-connections">XoT C | ||||
onnections</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.7"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.7.1"><xref derivedContent= | ||||
"7.7" format="counter" sectionFormat="of" target="section-7.7"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-xot-vs-adot">XoT vs. A | ||||
DoT</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.8"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.8.1"><xref derivedContent= | ||||
"7.8" format="counter" sectionFormat="of" target="section-7.8"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-response-rcodes">Respo | ||||
nse RCODES</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.9"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.9.1"><xref derivedContent= | ||||
"7.9" format="counter" sectionFormat="of" target="section-7.9"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-axot-specifics">AXoT S | ||||
pecifics</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.7.2.9.2"> | ||||
<li pn="section-toc.1-1.7.2.9.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.9.2.1.1"><xref derived | ||||
Content="7.9.1" format="counter" sectionFormat="of" target="section-7.9.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-padding-ax | ||||
ot-responses">Padding AXoT Responses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.10"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.10.1"><xref derivedContent | ||||
="7.10" format="counter" sectionFormat="of" target="section-7.10"/>. <xref deriv | ||||
edContent="" format="title" sectionFormat="of" target="name-ixot-specifics">IXoT | ||||
Specifics</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.7.2.10.2"> | ||||
<li pn="section-toc.1-1.7.2.10.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.10.2.1.1"><xref derive | ||||
dContent="7.10.1" format="counter" sectionFormat="of" target="section-7.10.1"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-condens | ||||
ation-of-responses">Condensation of Responses</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.10.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.10.2.2.1"><xref derive | ||||
dContent="7.10.2" format="counter" sectionFormat="of" target="section-7.10.2"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-fallbac | ||||
k-to-axfr">Fallback to AXFR</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.10.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.10.2.3.1"><xref derive | ||||
dContent="7.10.3" format="counter" sectionFormat="of" target="section-7.10.3"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-padding | ||||
-of-ixot-responses">Padding of IXoT Responses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.11"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.11.1"><xref derivedContent | ||||
="7.11" format="counter" sectionFormat="of" target="section-7.11"/>. <xref deriv | ||||
edContent="" format="title" sectionFormat="of" target="name-name-compression-and | ||||
-maximu">Name Compression and Maximum Payload Sizes</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.8"> | ||||
<t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" form | ||||
at="counter" sectionFormat="of" target="section-8"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-multi-primary-configuration">Multi | ||||
-primary Configurations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9"> | ||||
<t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" form | ||||
at="counter" sectionFormat="of" target="section-9"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-authentication-mechanisms">Authent | ||||
ication Mechanisms</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.9.2"> | ||||
<li pn="section-toc.1-1.9.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent= | ||||
"9.1" format="counter" sectionFormat="of" target="section-9.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-tsig">TSIG</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent= | ||||
"9.2" format="counter" sectionFormat="of" target="section-9.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-sig0">SIG(0)</xref></t | ||||
> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.3.1"><xref derivedContent= | ||||
"9.3" format="counter" sectionFormat="of" target="section-9.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-tls">TLS</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.9.2.3.2"> | ||||
<li pn="section-toc.1-1.9.2.3.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.3.2.1.1"><xref derived | ||||
Content="9.3.1" format="counter" sectionFormat="of" target="section-9.3.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-opportunis | ||||
tic-tls">Opportunistic TLS</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.3.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.3.2.2.1"><xref derived | ||||
Content="9.3.2" format="counter" sectionFormat="of" target="section-9.3.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-strict-tls | ||||
">Strict TLS</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.3.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.3.2.3.1"><xref derived | ||||
Content="9.3.3" format="counter" sectionFormat="of" target="section-9.3.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-mutual-tls | ||||
">Mutual TLS</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.1"><xref derivedContent= | ||||
"9.4" format="counter" sectionFormat="of" target="section-9.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-ip-based-acl-on-the-pr | ||||
imary">IP-Based ACL on the Primary</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.5.1"><xref derivedContent= | ||||
"9.5" format="counter" sectionFormat="of" target="section-9.5"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-zonemd">ZONEMD</xref>< | ||||
/t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.10"> | ||||
<t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" fo | ||||
rmat="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-xot-authentication">XoT Authenti | ||||
cation</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11"> | ||||
<t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" fo | ||||
rmat="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-policies-for-both-axot-and-">Pol | ||||
icies for Both AXoT and IXoT</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.12"> | ||||
<t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="12" fo | ||||
rmat="counter" sectionFormat="of" target="section-12"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-implementation-consideratio">Imp | ||||
lementation Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.13"> | ||||
<t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="13" fo | ||||
rmat="counter" sectionFormat="of" target="section-13"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-operational-considerations">Oper | ||||
ational Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.14"> | ||||
<t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="14" fo | ||||
rmat="counter" sectionFormat="of" target="section-14"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-iana-considerations">IANA Consid | ||||
erations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.15"> | ||||
<t indent="0" pn="section-toc.1-1.15.1"><xref derivedContent="15" fo | ||||
rmat="counter" sectionFormat="of" target="section-15"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-security-considerations">Securit | ||||
y Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.16"> | ||||
<t indent="0" pn="section-toc.1-1.16.1"><xref derivedContent="16" fo | ||||
rmat="counter" sectionFormat="of" target="section-16"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-references"> References</xref></ | ||||
t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.16.2"> | ||||
<li pn="section-toc.1-1.16.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.16.2.1.1"><xref derivedContent | ||||
="16.1" format="counter" sectionFormat="of" target="section-16.1"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-normative-reference | ||||
s">Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.16.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.16.2.2.1"><xref derivedContent | ||||
="16.2" format="counter" sectionFormat="of" target="section-16.2"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-informative-referen | ||||
ces">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.17"> | ||||
<t indent="0" pn="section-toc.1-1.17.1"><xref derivedContent="Append | ||||
ix A" format="default" sectionFormat="of" target="section-appendix.a"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-xot-server-conn | ||||
ection-handl">XoT Server Connection Handling</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.17.2"> | ||||
<li pn="section-toc.1-1.17.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.17.2.1.1"><xref derivedContent | ||||
="A.1" format="counter" sectionFormat="of" target="section-appendix.a.1"/>. <xr | ||||
ef derivedContent="" format="title" sectionFormat="of" target="name-listening-on | ||||
ly-on-a-specifi">Listening Only on a Specific IP Address for TLS</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.17.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.17.2.2.1"><xref derivedContent | ||||
="A.2" format="counter" sectionFormat="of" target="section-appendix.a.2"/>. <xr | ||||
ef derivedContent="" format="title" sectionFormat="of" target="name-client-speci | ||||
fic-tls-accepta">Client-Specific TLS Acceptance</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.17.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.17.2.3.1"><xref derivedContent | ||||
="A.3" format="counter" sectionFormat="of" target="section-appendix.a.3"/>. <xr | ||||
ef derivedContent="" format="title" sectionFormat="of" target="name-sni-based-tl | ||||
s-acceptance">SNI-Based TLS Acceptance</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.17.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.17.2.4.1"><xref derivedContent | ||||
="A.4" format="counter" sectionFormat="of" target="section-appendix.a.4"/>. <xr | ||||
ef derivedContent="" format="title" sectionFormat="of" target="name-transport-sp | ||||
ecific-response">Transport-Specific Response Policies</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.17.2.4.2"> | ||||
<li pn="section-toc.1-1.17.2.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.17.2.4.2.1.1"><xref derive | ||||
dContent="A.4.1" format="counter" sectionFormat="of" target="section-appendix.a. | ||||
4.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name- | ||||
sni-based-response-policies">SNI-Based Response Policies</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.18"> | ||||
<t indent="0" pn="section-toc.1-1.18.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgeme | ||||
nts</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.19"> | ||||
<t indent="0" pn="section-toc.1-1.19.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-contributors">Contributors</xre | ||||
f></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.20"> | ||||
<t indent="0" pn="section-toc.1-1.20.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Add | ||||
resses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | ||||
<middle> | ||||
<section anchor="introduction" numbered="true" removeInRFC="false" toc="incl | ||||
ude" pn="section-1"> | ||||
<name slugifiedName="name-introduction">Introduction</name> | ||||
<t indent="0" pn="section-1-1">DNS has a number of privacy vulnerabilities | ||||
, as discussed in detail in | ||||
<xref target="RFC9076" format="default" sectionFormat="of" derivedContent="RFC | ||||
9076"/>. Query privacy between stub resolvers and recursive resolvers has receiv | ||||
ed | ||||
the most attention to date, with Standards Track documents for both DNS over T | ||||
LS | ||||
(DoT) <xref target="RFC7858" format="default" sectionFormat="of" derivedConten | ||||
t="RFC7858"/> and DNS over HTTPS (DoH) <xref target="RFC8484" format="default" s | ||||
ectionFormat="of" derivedContent="RFC8484"/> | ||||
and a proposal for | ||||
DNS over QUIC <xref target="I-D.ietf-dprive-dnsoquic" format="default" section | ||||
Format="of" derivedContent="DPRIVE-DNSOQUIC"/>. There is ongoing work on DNS | ||||
privacy | ||||
requirements for exchanges between recursive resolvers and authoritative | ||||
servers and some suggestions for | ||||
how signaling of DoT support by authoritative name servers might work. However | ||||
, there is | ||||
currently no RFC that specifically defines recursive-to-authoritative DNS over | ||||
TLS | ||||
(ADoT).</t> | ||||
<t indent="0" pn="section-1-2"><xref target="RFC9076" format="default" sec | ||||
tionFormat="of" derivedContent="RFC9076"/> establishes that a stub resolver's DN | ||||
S query | ||||
transactions are not public and that they need protection, but, on zone transf | ||||
er | ||||
<xref target="RFC1995" format="default" sectionFormat="of" derivedContent="RFC | ||||
1995"/> <xref target="RFC5936" format="default" sectionFormat="of" derivedConten | ||||
t="RFC5936"/>, it says only:</t> | ||||
<blockquote pn="section-1-3">Privacy risks for the holder of a zone (the r | ||||
isk that someone | ||||
gets the data) are discussed in <xref target="RFC5155" format="default" sectio | ||||
nFormat="of" derivedContent="RFC5155"/> and <xref target="RFC5936" format="defau | ||||
lt" sectionFormat="of" derivedContent="RFC5936"/>.</blockquote> | ||||
<t indent="0" pn="section-1-4">In what way is exposing the full contents o | ||||
f a zone a privacy risk? The | ||||
contents of the zone could include information such as names of persons used i | ||||
n | ||||
names of hosts. Best practice is not to use personal information for domain | ||||
names, but many such domain names exist. The contents of the zone could also | ||||
include references to locations that allow inference about location informatio | ||||
n | ||||
of the individuals associated with the zone's organization. It could also | ||||
include references to other organizations. Examples of this could be:</t> | ||||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1-5 | ||||
"> | ||||
<li pn="section-1-5.1">Person-laptop.example.org</li> | ||||
<li pn="section-1-5.2">MX-for-Location.example.org</li> | ||||
<li pn="section-1-5.3">Service-tenant-from-another-org.example.org</li> | ||||
</ul> | ||||
<t indent="0" pn="section-1-6">Additionally, the full zone contents expose | ||||
all the IP addresses of endpoints | ||||
held in the DNS records, which can make reconnaissance and attack targeting ea | ||||
sier, | ||||
particularly | ||||
for IPv6 addresses or private networks. There may also be regulatory, policy, | ||||
or other | ||||
reasons why the zone contents in full must be treated as private.</t> | ||||
<t indent="0" pn="section-1-7">Neither of the RFCs mentioned in <xref targ | ||||
et="RFC9076" format="default" sectionFormat="of" derivedContent="RFC9076"/> | ||||
contemplate the risk that someone gets the data through eavesdropping on | ||||
network connections, only via enumeration or unauthorized transfer, as describ | ||||
ed | ||||
in the following paragraphs.</t> | ||||
<t indent="0" pn="section-1-8">Zone enumeration is trivially possible for | ||||
DNSSEC zones that use NSEC, i.e., | ||||
queries for the authenticated denial-of-existence records allow a client to | ||||
walk through the entire zone contents. <xref target="RFC5155" format="default" | ||||
sectionFormat="of" derivedContent="RFC5155"/> specifies NSEC3, a | ||||
mechanism to provide measures against zone enumeration for DNSSEC-signed zones | ||||
(a goal | ||||
was to make it as hard to enumerate a DNSSEC-signed zone as an unsigned zone). | ||||
Whilst this is widely used, it has been demonstrated that zone walking is | ||||
possible for precomputed NSEC3 using attacks, such as those described in | ||||
<xref target="NSEC3-attacks" format="default" sectionFormat="of" derivedConten | ||||
t="NSEC3-attacks"/>. This prompted further work on an alternative | ||||
mechanism for DNSSEC-authenticated denial of existence (NSEC5 | ||||
<xref target="I-D.vcelak-nsec5" format="default" sectionFormat="of" derivedCon | ||||
tent="NSEC5"/>); however, questions remain over the practicality of | ||||
this mechanism.</t> | ||||
<t indent="0" pn="section-1-9"><xref target="RFC5155" format="default" sec | ||||
tionFormat="of" derivedContent="RFC5155"/> does not address data obtained outsid | ||||
e zone enumeration (nor | ||||
does <xref target="I-D.vcelak-nsec5" format="default" sectionFormat="of" deriv | ||||
edContent="NSEC5"/>). Preventing eavesdropping of zone transfers (as | ||||
described in this document) is orthogonal to preventing zone enumeration, thou | ||||
gh they aim to | ||||
protect the same information.</t> | ||||
<t indent="0" pn="section-1-10"><xref target="RFC5936" format="default" se | ||||
ctionFormat="of" derivedContent="RFC5936"/> specifies using TSIG <xref target="R | ||||
FC8945" format="default" sectionFormat="of" derivedContent="RFC8945"/> for | ||||
authorization of the clients | ||||
of a zone transfer and for data integrity but does not express any need for | ||||
confidentiality, and TSIG does not offer encryption.</t> | ||||
<t indent="0" pn="section-1-11">Section 8 of the NIST document "Secure Dom | ||||
ain Name System (DNS) Deployment Guide" | ||||
<xref target="NIST-GUIDE" format="default" sectionFormat="of" derivedContent=" | ||||
NIST-GUIDE"/> discusses restricting access for zone transfers using | ||||
Access Control Lists (ACLs) and | ||||
TSIG in more detail. It also discusses the possibility that specific deploymen | ||||
ts | ||||
might choose to use a lower-level network layer to protect zone transfers, e.g | ||||
., IPsec.</t> | ||||
<t indent="0" pn="section-1-12">It is noted that in all the common open-so | ||||
urce implementations | ||||
such ACLs are applied on a per-query basis (at the time of writing). Since req | ||||
uests | ||||
typically occur on TCP connections, authoritative servers must therefore accep | ||||
t any TCP connection | ||||
and then handle the authentication of each zone transfer (XFR) request individ | ||||
ually.</t> | ||||
<t indent="0" pn="section-1-13">Because both AXFR (authoritative transfer) | ||||
and IXFR (incremental zone transfer) are | ||||
typically carried out over TCP | ||||
from authoritative DNS protocol implementations, encrypting zone transfers | ||||
using TLS <xref target="RFC8499" format="default" sectionFormat="of" derivedCo | ||||
ntent="RFC8499"/> -- based closely on DoT <xref target="RFC7858" format="default | ||||
" sectionFormat="of" derivedContent="RFC7858"/> -- seems like a simple step forw | ||||
ard. | ||||
This document specifies how to use TLS (1.3 or later) as a transport to preven | ||||
t zone | ||||
collection from zone transfers.</t> | ||||
<t indent="0" pn="section-1-14">This document also updates the previous sp | ||||
ecifications for zone transfers to | ||||
clarify and extend them, mainly with respect to TCP usage:</t> | ||||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1-1 | ||||
5"> | ||||
<li pn="section-1-15.1"> | ||||
<xref target="RFC1995" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC1995"/> (IXFR) and <xref target="RFC5936" format="default" sectionFormat | ||||
="of" derivedContent="RFC5936"/> (AXFR) are both updated to add further | ||||
specification on efficient use of TCP connections.</li> | ||||
<li pn="section-1-15.2"> | ||||
<xref target="RFC7766" sectionFormat="of" section="6.2.2" format="defa | ||||
ult" derivedLink="https://rfc-editor.org/rfc/rfc7766#section-6.2.2" derivedConte | ||||
nt="RFC7766"/> ("DNS Transport over TCP - | ||||
Implementation Requirements") is updated with a new recommendation about | ||||
the number of connections between a client and server for each transport.</l | ||||
i> | ||||
</ul> | ||||
</section> | ||||
<section anchor="terminology" numbered="true" removeInRFC="false" toc="inclu | ||||
de" pn="section-2"> | ||||
<name slugifiedName="name-terminology">Terminology</name> | ||||
<t indent="0" pn="section-2-1"> | ||||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOUL | ||||
D</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>N | ||||
OT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="o | ||||
f" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFor | ||||
mat="of" derivedContent="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t indent="0" pn="section-2-2">Privacy terminology is as described in <xre | ||||
f target="RFC6973" sectionFormat="of" section="3" format="default" derivedLink=" | ||||
https://rfc-editor.org/rfc/rfc6973#section-3" derivedContent="RFC6973"/>.</t> | ||||
<t indent="0" pn="section-2-3">DNS terminology is as described in <xref ta | ||||
rget="RFC8499" format="default" sectionFormat="of" derivedContent="RFC8499"/>. N | ||||
ote that, as in | ||||
<xref target="RFC8499" format="default" sectionFormat="of" derivedContent | ||||
="RFC8499"/>, the | ||||
terms 'primary' and 'secondary' are used for two servers engaged in zone | ||||
transfers.</t> | ||||
<dl newline="false" spacing="normal" indent="7" pn="section-2-4"> | ||||
<dt pn="section-2-4.1">DoT:</dt> | ||||
<dd pn="section-2-4.2">DNS over TLS, as specified in <xref target="RFC78 | ||||
58" format="default" sectionFormat="of" derivedContent="RFC7858"/></dd> | ||||
<dt pn="section-2-4.3">XFR over TCP:</dt> | ||||
<dd pn="section-2-4.4">Used to mean both IXFR over TCP <xref target="RFC | ||||
1995" format="default" sectionFormat="of" derivedContent="RFC1995"/> | ||||
and AXFR over TCP <xref target="RFC5936" format="default" sectionFormat | ||||
="of" derivedContent="RFC5936"/></dd> | ||||
<dt pn="section-2-4.5">XoT:</dt> | ||||
<dd pn="section-2-4.6">XFR-over-TLS mechanisms, as specified in this doc | ||||
ument, which apply | ||||
to both AXFR over TLS and IXFR over TLS (XoT is pronounced 'zot' since | ||||
X here | ||||
stands for 'zone transfer')</dd> | ||||
<dt pn="section-2-4.7">AXoT:</dt> | ||||
<dd pn="section-2-4.8">AXFR over TLS</dd> | ||||
<dt pn="section-2-4.9">IXoT:</dt> | ||||
<dd pn="section-2-4.10">IXFR over TLS</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="threat-model" numbered="true" removeInRFC="false" toc="incl | ||||
ude" pn="section-3"> | ||||
<name slugifiedName="name-threat-model">Threat Model</name> | ||||
<t indent="0" pn="section-3-1">The threat model considered here is one whe | ||||
re the current contents and size of the zone are | ||||
considered sensitive and should be protected during transfer.</t> | ||||
<t indent="0" pn="section-3-2">The threat model does not, however, conside | ||||
r the existence of a zone, the act of | ||||
zone transfer between two entities, nor the identities of the name servers | ||||
hosting a zone (including both those acting as hidden primaries/secondaries | ||||
or directly serving the zone) as sensitive information. The proposed mechanism | ||||
does not attempt to obscure such information. The reasons for this include:</t | ||||
> | ||||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-3-3 | ||||
"> | ||||
<li pn="section-3-3.1">much of this information can be obtained by vario | ||||
us methods, | ||||
including active scanning of the DNS, and</li> | ||||
<li pn="section-3-3.2">an attacker who can monitor network traffic can r | ||||
ather | ||||
easily infer relations between name servers simply from traffic | ||||
patterns, even when some or all of the traffic is encrypted | ||||
(in terms of current deployments).</li> | ||||
</ul> | ||||
<t indent="0" pn="section-3-4">The model does not consider attacks on the | ||||
mechanisms that trigger a zone transfer, e.g., | ||||
NOTIFY messages.</t> | ||||
<t indent="0" pn="section-3-5">It is noted that simply using XoT will indi | ||||
cate a desire by the zone owner that the | ||||
contents of the zone remain confidential and so could be subject to blocking ( | ||||
e.g., via | ||||
blocking of port 853) if an attacker had | ||||
such capabilities. However, this threat is likely true of any such mechanism t | ||||
hat attempts to | ||||
encrypt data passed between name servers, e.g., IPsec.</t> | ||||
</section> | ||||
<section anchor="design-considerations-for-xot" numbered="true" removeInRFC= | ||||
"false" toc="include" pn="section-4"> | ||||
<name slugifiedName="name-design-considerations-for-x">Design Consideratio | ||||
ns for XoT</name> | ||||
<t indent="0" pn="section-4-1">The following principles were considered in | ||||
the design for XoT:</t> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-4-2"> | ||||
<dt pn="section-4-2.1">Confidentiality:</dt> | ||||
<dd pn="section-4-2.2">Clearly using an encrypted transport for zone tra | ||||
nsfers will | ||||
defeat zone content leakage that can occur via passive surveillance.</dd> | ||||
<dt pn="section-4-2.3">Authentication:</dt> | ||||
<dd pn="section-4-2.4">Use of single or mutual TLS (mTLS) authentication | ||||
(in combination | ||||
with ACLs) can complement and potentially be an | ||||
alternative to TSIG.</dd> | ||||
<dt pn="section-4-2.5">Performance:</dt> | ||||
<dd pn="section-4-2.6"> | ||||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section | ||||
-4-2.6.1"> | ||||
<li pn="section-4-2.6.1.1">Existing AXFR and IXFR mechanisms have th | ||||
e burden of backwards | ||||
compatibility with older implementations based on the original specificat | ||||
ions | ||||
in <xref target="RFC1034" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC1034"/> and <xref target="RFC1035" format="default" sectionFormat="of" d | ||||
erivedContent="RFC1035"/>. For example, | ||||
some older AXFR servers don't | ||||
support using a TCP connection for multiple AXFR sessions or XFRs of diff | ||||
erent | ||||
zones because they have not been updated to follow the guidance in <xref | ||||
target="RFC5936" format="default" sectionFormat="of" derivedContent="RFC5936"/>. | ||||
Any implementation of XoT would obviously be required to | ||||
implement optimized and interoperable transfers, as described in <xref ta | ||||
rget="RFC5936" format="default" sectionFormat="of" derivedContent="RFC5936"/>, | ||||
e.g., transfer of multiple zones over one connection.</li> | ||||
<li pn="section-4-2.6.1.2">Current usage of TCP for IXFR is suboptim | ||||
al in some cases, i.e., | ||||
connections are frequently closed after a single IXFR.</li> | ||||
</ul> | ||||
</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="connection-and-data-flows-in-existing-xfr-mechanisms" numbe | ||||
red="true" removeInRFC="false" toc="include" pn="section-5"> | ||||
<name slugifiedName="name-connection-and-data-flows-i">Connection and Data | ||||
Flows in Existing XFR Mechanisms</name> | ||||
<t indent="0" pn="section-5-1">The original specification for zone transfe | ||||
rs in <xref target="RFC1034" format="default" sectionFormat="of" derivedContent= | ||||
"RFC1034"/> and <xref target="RFC1035" format="default" sectionFormat="of" deriv | ||||
edContent="RFC1035"/> was | ||||
based on a polling mechanism: a secondary performed a periodic query for the S | ||||
OA (start of | ||||
zone authority) record (based | ||||
on the refresh timer) to determine if an AXFR was required.</t> | ||||
<t indent="0" pn="section-5-2"><xref target="RFC1995" format="default" sec | ||||
tionFormat="of" derivedContent="RFC1995"/> and <xref target="RFC1996" format="de | ||||
fault" sectionFormat="of" derivedContent="RFC1996"/> introduced the concepts | ||||
of IXFR and NOTIFY, | ||||
respectively, to provide for prompt propagation of zone updates. This has | ||||
largely replaced AXFR where possible, particularly for dynamically updated | ||||
zones.</t> | ||||
<t indent="0" pn="section-5-3"><xref target="RFC5936" format="default" sec | ||||
tionFormat="of" derivedContent="RFC5936"/> subsequently redefined the specificat | ||||
ion of AXFR to improve | ||||
performance and interoperability.</t> | ||||
<t indent="0" pn="section-5-4">In this document, the term 'XFR mechanism' | ||||
is used to describe the entire set of | ||||
message exchanges between a secondary and a primary that concludes with a | ||||
successful AXFR or IXFR request/response. This set may or may not include:</t> | ||||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-5-5 | ||||
"> | ||||
<li pn="section-5-5.1">NOTIFY messages</li> | ||||
<li pn="section-5-5.2">SOA queries</li> | ||||
<li pn="section-5-5.3">Fallback from IXFR to AXFR</li> | ||||
<li pn="section-5-5.4">Fallback from IXFR over UDP to IXFR over TCP</li> | ||||
</ul> | ||||
<t indent="0" pn="section-5-6">The term is used to encompass the range of | ||||
permutations that are possible and | ||||
is useful to distinguish the 'XFR mechanism' from a single XFR | ||||
request/response exchange.</t> | ||||
<section anchor="axfr-mechanism" numbered="true" removeInRFC="false" toc=" | ||||
include" pn="section-5.1"> | ||||
<name slugifiedName="name-axfr-mechanism">AXFR Mechanism</name> | ||||
<t indent="0" pn="section-5.1-1">The figure below provides an outline of | ||||
an AXFR mechanism including NOTIFYs.</t> | ||||
<figure anchor="fig1" align="left" suppress-title="false" pn="figure-1"> | ||||
<name slugifiedName="name-axfr-mechanism-2">AXFR Mechanism</name> | ||||
<artwork name="" type="" alt="" align="left" pn="section-5.1-2.1"> | ||||
Secondary Primary | ||||
| NOTIFY | | | NOTIFY | | |||
| <-------------------------------- | UDP | | <-------------------------------- | UDP | |||
| --------------------------------> | | | --------------------------------> | | |||
| NOTIFY Response | | | NOTIFY Response | | |||
| | | | | | |||
| | | | | | |||
| SOA Request | | | SOA Request | | |||
| --------------------------------> | UDP (or part of | | --------------------------------> | UDP (or part of | |||
| <-------------------------------- | a TCP session) | | <-------------------------------- | a TCP session) | |||
skipping to change at line 269 ¶ | skipping to change at line 577 ¶ | |||
| (Zone data) | | | | (Zone data) | | | |||
| | | | | | | | |||
| <-------------------------------- | | TCP | | <-------------------------------- | | TCP | |||
| AXFR Response 2 | | Session | | AXFR Response 2 | | Session | |||
| (Zone data) | | | | (Zone data) | | | |||
| | | | | | | | |||
| <-------------------------------- | | | | <-------------------------------- | | | |||
| AXFR Response 3 | | | | AXFR Response 3 | | | |||
| (Zone data) | --- | | (Zone data) | --- | |||
| | | | | | |||
Figure 1. AXFR Mechanism | ||||
</artwork> | </artwork> | |||
</figure> | ||||
<ol> | <ol indent="adaptive" spacing="normal" start="1" type="1" pn="section-5. | |||
<li><t>An AXFR is often (but not always) preceded by a NOTIFY (over UDP) from th | 1-3"> | |||
e | <li pn="section-5.1-3.1" derivedCounter="1.">An AXFR is often (but not always) | |||
primary to the secondary. A secondary may also initiate an AXFR based on a | preceded by a NOTIFY (over UDP) from the | |||
refresh timer or scheduled/triggered zone maintenance.</t> | primary to the secondary. A secondary may also initiate an AXFR based on a | |||
</li> | refresh timer or scheduled/triggered zone maintenance.</li> | |||
<li><t>The secondary will normally (but not always) make a SOA query to the prim | <li pn="section-5.1-3.2" derivedCounter="2.">The secondary will normal | |||
ary | ly (but not always) make an SOA query to the primary | |||
to obtain the serial number of the zone held by the primary.</t> | to obtain the serial number of the zone held by the primary.</li> | |||
</li> | <li pn="section-5.1-3.3" derivedCounter="3.">If the primary serial is | |||
<li><t>If the primary serial is higher than the secondary's serial (using Serial | higher than the secondary's serial (using Serial | |||
Number Arithmetic <xref target="RFC1982"></xref>), the secondary makes an AXFR r | Number Arithmetic <xref target="RFC1982" format="default" sectionFormat="of" d | |||
equest (over TCP) | erivedContent="RFC1982"/>), the secondary makes an AXFR request | |||
to the primary after which the AXFR data flows in one or more AXFR responses on | (over TCP) | |||
the TCP connection. <xref target="RFC5936"></xref> defines this specific step as | to the primary, after which the AXFR data flows in one or more AXFR responses | |||
an 'AXFR session' | on | |||
i.e. as an AXFR query message and the sequence of AXFR response messages | the TCP connection. <xref target="RFC5936" format="default" sectionFormat="of" | |||
returned for it.</t> | derivedContent="RFC5936"/> defines this specific step as an 'AXFR | |||
</li> | session', | |||
</ol> | i.e., as an AXFR query message and the sequence of AXFR response messages | |||
<t><xref target="RFC5936"></xref> re-specified AXFR providing additional guidanc | returned for it.</li> | |||
e beyond that provided | </ol> | |||
in <xref target="RFC1034"></xref> and <xref target="RFC1035"></xref> and importa | <t indent="0" pn="section-5.1-4"><xref target="RFC5936" format="default" | |||
ntly specified that AXFR must use TCP | sectionFormat="of" derivedContent="RFC5936"/> re-specified AXFR, providing addi | |||
as the transport protocol.</t> | tional guidance beyond that | |||
<t>Additionally, sections 4.1, 4.1.1 and 4.1.2 of <xref target="RFC5936"></xref> | provided in <xref target="RFC1034" format="default" sectionFormat="of" derivedCo | |||
provide improved | ntent="RFC1034"/> and <xref target="RFC1035" format="default" sectionFormat="of" | |||
guidance for AXFR clients and servers with regard to re-use of TCP connections | derivedContent="RFC1035"/> and importantly | |||
for multiple AXFRs and AXFRs of different zones. However <xref target="RFC5936"> | specified that AXFR must use TCP as the transport protocol.</t> | |||
</xref> was | <t indent="0" pn="section-5.1-5">Additionally, Sections <xref target="RF | |||
C5936" section="4.1" sectionFormat="bare" format="default" derivedLink="https:// | ||||
rfc-editor.org/rfc/rfc5936#section-4.1" derivedContent="RFC5936"/>, <xref target | ||||
="RFC5936" section="4.1.1" sectionFormat="bare" format="default" derivedLink="ht | ||||
tps://rfc-editor.org/rfc/rfc5936#section-4.1.1" derivedContent="RFC5936"/>, and | ||||
<xref target="RFC5936" section="4.1.2" sectionFormat="bare" format="default" der | ||||
ivedLink="https://rfc-editor.org/rfc/rfc5936#section-4.1.2" derivedContent="RFC5 | ||||
936"/> of <xref target="RFC5936" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC5936"/> provide improved | ||||
guidance for AXFR clients and servers with regard to reuse of TCP connections | ||||
for multiple AXFRs and AXFRs of different zones. However, <xref target="RFC5936" | ||||
format="default" sectionFormat="of" derivedContent="RFC5936"/> was | ||||
constrained by having to be backwards compatible with some very early basic | constrained by having to be backwards compatible with some very early basic | |||
implementations of AXFR. For example, it outlines that the SOA query can also | implementations of AXFR. For example, it outlines that the SOA query can also | |||
happen on this connection. However, this can cause interoperability problems | happen on this connection. However, this can cause interoperability problems | |||
with older implementations that support only the trivial case of one AXFR per | with older implementations that support only the trivial case of one AXFR per | |||
connection.</t> | connection.</t> | |||
</section> | </section> | |||
<section anchor="ixfr-mechanism" numbered="true" removeInRFC="false" toc=" | ||||
<section anchor="ixfr-mechanism"><name>IXFR Mechanism</name> | include" pn="section-5.2"> | |||
<t>The figure below provides an outline of the IXFR mechanism including NOTIFYs. | <name slugifiedName="name-ixfr-mechanism">IXFR Mechanism</name> | |||
</t> | <t indent="0" pn="section-5.2-1">The figure below provides an outline of | |||
the IXFR mechanism including NOTIFYs.</t> | ||||
<artwork> Secondary Primary | <figure anchor="fig2" align="left" suppress-title="false" pn="figure-2"> | |||
<name slugifiedName="name-ixfr-mechanism-2">IXFR Mechanism</name> | ||||
<artwork name="" type="" alt="" align="left" pn="section-5.2-2.1"> | ||||
Secondary Primary | ||||
| NOTIFY | | | NOTIFY | | |||
| <-------------------------------- | UDP | | <-------------------------------- | UDP | |||
| --------------------------------> | | | --------------------------------> | | |||
| NOTIFY Response | | | NOTIFY Response | | |||
| | | | | | |||
| | | | | | |||
| SOA Request | | | SOA Request | | |||
| --------------------------------> | UDP or TCP | | --------------------------------> | UDP or TCP | |||
| <-------------------------------- | | | <-------------------------------- | | |||
skipping to change at line 333 ¶ | skipping to change at line 639 ¶ | |||
| <-------------------------------- | | | <-------------------------------- | | |||
| IXFR Response | | | IXFR Response | | |||
| (Zone data) | | | (Zone data) | | |||
| | | | | | |||
| | --- | | | --- | |||
| IXFR Request | | | | IXFR Request | | | |||
| --------------------------------> | | Retry over | | --------------------------------> | | Retry over | |||
| <-------------------------------- | | TCP if | | <-------------------------------- | | TCP if | |||
| IXFR Response | | required | | IXFR Response | | required | |||
| (Zone data) | --- | | (Zone data) | --- | |||
Figure 2. IXFR Mechanism | ||||
</artwork> | </artwork> | |||
</figure> | ||||
<ol> | <ol indent="adaptive" spacing="normal" start="1" type="1" pn="section-5. | |||
<li><t>An IXFR is normally (but not always) preceded by a NOTIFY (over UDP) from | 2-3"> | |||
the | <li pn="section-5.2-3.1" derivedCounter="1.">An IXFR is normally (but not alwa | |||
primary to the secondary. A secondary may also initiate an IXFR based on a | ys) preceded by a NOTIFY (over UDP) from the | |||
refresh timer or scheduled/triggered zone maintenance.</t> | primary to the secondary. A secondary may also initiate an IXFR based on a | |||
</li> | refresh timer or scheduled/triggered zone maintenance.</li> | |||
<li><t>The secondary will normally (but not always) make a SOA query to the prim | <li pn="section-5.2-3.2" derivedCounter="2.">The secondary will normal | |||
ary | ly (but not always) make an SOA query to the primary | |||
to obtain the serial number of the zone held by the primary.</t> | to obtain the serial number of the zone held by the primary.</li> | |||
</li> | <li pn="section-5.2-3.3" derivedCounter="3.">If the primary serial is | |||
<li><t>If the primary serial is higher than the secondaries serial (using Serial | higher than the secondary's serial (using Serial | |||
Number Arithmetic <xref target="RFC1982"></xref>), the secondary makes an IXFR r | Number Arithmetic <xref target="RFC1982" format="default" sectionFormat="of" d | |||
equest to the | erivedContent="RFC1982"/>), the secondary makes an IXFR request to | |||
primary after which the primary sends an IXFR response.</t> | the primary, after which the primary sends an IXFR response.</li> | |||
</li> | </ol> | |||
</ol> | <t indent="0" pn="section-5.2-4"><xref target="RFC1995" format="default" | |||
<t><xref target="RFC1995"></xref> specifies that Incremental Transfer may use UD | sectionFormat="of" derivedContent="RFC1995"/> specifies that IXFR may use UDP i | |||
P if the entire IXFR | f the entire IXFR | |||
response can be contained in a single DNS packet, otherwise, TCP is used. In | response can be contained in a single DNS packet, otherwise, TCP is used. In | |||
fact it says:</t> | fact, it says:</t> | |||
<blockquote pn="section-5.2-5">Thus, a client should first make an IXFR | ||||
<artwork>"Thus, a client should first make an IXFR query using UDP." | query using UDP.</blockquote> | |||
</artwork> | <t indent="0" pn="section-5.2-6">So there may be a fourth step above whe | |||
<t>So there may be a fourth step above where the client falls back to IXFR-over- | re the client falls back to IXFR over TCP. | |||
TCP. | There may also be an additional step where the secondary must fall back to AXFR | |||
There may also be a additional step where the secondary must fall back to AXFR | ||||
because, e.g., the primary does not support IXFR.</t> | because, e.g., the primary does not support IXFR.</t> | |||
<t>However it is noted that most widely used open source authoritative nameserve | <t indent="0" pn="section-5.2-7">However, it is noted that most of the w | |||
r | idely used open-source implementations of authoritative name servers | |||
implementations (including both <xref target="BIND"></xref> and <xref target="NS | (including both <xref target="BIND" format="default" sectionFormat="of" derivedC | |||
D"></xref>) do IXFR using TCP by default | ontent="BIND"/> and <xref target="NSD" format="default" sectionFormat="of" deriv | |||
edContent="NSD"/>) do IXFR using TCP by default | ||||
in their latest releases. For BIND, TCP connections are sometimes used for SOA | in their latest releases. For BIND, TCP connections are sometimes used for SOA | |||
queries but in general they are not used persistently and close after an IXFR | queries, but, in general, they are not used persistently and are closed after an IXFR | |||
is completed.</t> | is completed.</t> | |||
</section> | </section> | |||
<section anchor="data-leakage-of-notify-and-soa-message-exchanges" numbere | ||||
<section anchor="data-leakage-of-notify-and-soa-message-exchanges"><name>Data Le | d="true" removeInRFC="false" toc="include" pn="section-5.3"> | |||
akage of NOTIFY and SOA Message Exchanges</name> | <name slugifiedName="name-data-leakage-of-notify-and-">Data Leakage of N | |||
<t>This section presents a rationale for considering encrypting the other | OTIFY and SOA Message Exchanges</name> | |||
messages in the XFR mechanism.</t> | <t indent="0" pn="section-5.3-1">This section presents a rationale for c | |||
<t>Since the SOA of the published zone can be trivially discovered by simply | onsidering the encryption of the other | |||
querying the publicly available authoritative servers, leakage of this resource | messages in the XFR mechanism.</t> | |||
record (RR) via such a | <t indent="0" pn="section-5.3-2">Since the SOA of the published zone can | |||
direct query is not discussed in the following sections.</t> | be trivially discovered by simply | |||
querying the publicly available authoritative servers, leakage of this resourc | ||||
<section anchor="notify"><name>NOTIFY</name> | e record (RR) | |||
<t>Unencrypted NOTIFY messages identify configured secondaries on the primary.</ | via such a | |||
t> | direct query is not discussed in the following sections.</t> | |||
<t><xref target="RFC1996"></xref> also states:</t> | <section anchor="notify" numbered="true" removeInRFC="false" toc="includ | |||
e" pn="section-5.3.1"> | ||||
<artwork>"If ANCOUNT>0, then the answer section represents an | <name slugifiedName="name-notify">NOTIFY</name> | |||
unsecure hint at the new RRset for this (QNAME,QCLASS,QTYPE). | <t indent="0" pn="section-5.3.1-1">Unencrypted NOTIFY messages identif | |||
</artwork> | y configured secondaries on the primary.</t> | |||
<t>But since the only QTYPE for NOTIFY defined at the time of this writing | <t indent="0" pn="section-5.3.1-2"><xref target="RFC1996" format="defa | |||
is SOA, this does not pose a | ult" sectionFormat="of" derivedContent="RFC1996"/> also states:</t> | |||
potential leak.</t> | <blockquote pn="section-5.3.1-3">If ANCOUNT>0, then the answer sect | |||
</section> | ion represents an | |||
unsecure hint at the new RRset for this <QNAME,QCLASS,QTYPE>.</blockquot | ||||
<section anchor="soa"><name>SOA</name> | e> | |||
<t>For hidden XFR servers (either primaries or secondaries), an SOA response | <t indent="0" pn="section-5.3.1-4">But since the only query type (QTYP | |||
directly from that server only additionally leaks the degree of SOA serial | E) for NOTIFY defined at the time of this writing | |||
number lag of any downstream secondary of that server.</t> | is SOA, this does not pose a | |||
</section> | potential leak.</t> | |||
</section> | </section> | |||
</section> | <section anchor="soa" numbered="true" removeInRFC="false" toc="include" | |||
pn="section-5.3.2"> | ||||
<section anchor="updates-to-existing-specifications"><name>Updates to existing s | <name slugifiedName="name-soa">SOA</name> | |||
pecifications</name> | <t indent="0" pn="section-5.3.2-1">For hidden XFR servers (either prim | |||
<t>For convenience, the term 'XFR-over-TCP' is used in this document to mean bot | aries or secondaries), an SOA response | |||
h | directly from that server only additionally leaks the degree of SOA serial | |||
IXFR-over-TCP and AXFR-over-TCP and therefore statements that use that term upda | number lag of any downstream secondary of that server.</t> | |||
te | </section> | |||
both <xref target="RFC1995"></xref> and <xref target="RFC5936"></xref>, and impl | </section> | |||
icitly also apply to XoT. | </section> | |||
Differences in behavior specific to XoT are discussed in | <section anchor="updates-to-existing-specifications" numbered="true" removeI | |||
<xref target="xot-specification"></xref>.</t> | nRFC="false" toc="include" pn="section-6"> | |||
<t>Both <xref target="RFC1995"></xref> and <xref target="RFC5936"></xref> were p | <name slugifiedName="name-updates-to-existing-specifi">Updates to Existing | |||
ublished sometime before TCP was | Specifications</name> | |||
considered a first class transport for DNS. <xref target="RFC1995"></xref>, in f | <t indent="0" pn="section-6-1">For convenience, the term 'XFR over TCP' is | |||
act, says nothing | used in this document to mean both | |||
with respect to optimizing IXFRs over TCP or re-using already open TCP | IXFR over TCP and AXFR over TCP; therefore, statements that use that term upda | |||
connections to perform IXFRs or other queries. Therefore, there arguably is an | te | |||
implicit assumption that a TCP connection is used for | both <xref target="RFC1995" format="default" sectionFormat="of" derivedContent | |||
one and only one IXFR request. Indeed, many major open source implementations | ="RFC1995"/> and <xref target="RFC5936" format="default" sectionFormat="of" deri | |||
take this approach (at the time of this writing). And whilst <xref target="RFC59 | vedContent="RFC5936"/> and implicitly also | |||
36"></xref> gives guidance on | apply to XoT. Differences in behavior specific to XoT are discussed in | |||
connection re-use for AXFR, it pre-dates more recent specifications describing | <xref target="xot-specification" format="default" sectionFormat="of" derivedCo | |||
persistent TCP connections (e.g., <xref target="RFC7766"></xref>, <xref target=" | ntent="Section 7"/>.</t> | |||
RFC7828"></xref>), and AXFR implementations again | <t indent="0" pn="section-6-2">Both <xref target="RFC1995" format="default | |||
often make less than optimal use of open connections.</t> | " sectionFormat="of" derivedContent="RFC1995"/> and <xref target="RFC5936" forma | |||
<t>Given this, new implementations of XoT will clearly benefit from specific gui | t="default" sectionFormat="of" derivedContent="RFC5936"/> were published | |||
dance on | sometime before TCP became a widely supported transport for DNS. <xref target= | |||
TCP/TLS connection usage for XFR, because this will:</t> | "RFC1995" format="default" sectionFormat="of" derivedContent="RFC1995"/>, in fac | |||
t, says nothing | ||||
<ul> | with respect to optimizing IXFRs over TCP or reusing already open TCP | |||
<li>result in more consistent XoT implementations with better interoperability</ | connections to perform IXFRs or other queries. Therefore, there arguably is an | |||
li> | implicit assumption that a TCP connection is used for | |||
<li>remove any need for XoT implementations to support legacy behavior for XoT c | one and only one IXFR request. Indeed, many major open-source implementations | |||
onnections that | take this approach (at the time of this writing). And whilst <xref target="RFC | |||
XFR-over-TCP implementations have historically often supported</li> | 5936" format="default" sectionFormat="of" derivedContent="RFC5936"/> | |||
</ul> | gives guidance on | |||
<t>Therefore this document updates both the previous specifications for | connection reuse for AXFR, it predates more recent specifications describing | |||
XFR-over-TCP ([RFC1995] and [RFC5936]) to clarify that</t> | persistent TCP connections (e.g., <xref target="RFC7766" format="default" sect | |||
ionFormat="of" derivedContent="RFC7766"/>, <xref target="RFC7828" format="defaul | ||||
<ul> | t" sectionFormat="of" derivedContent="RFC7828"/>), and AXFR implementations agai | |||
<li><t>Implementations MUST use <xref target="RFC7766"></xref> (DNS Transport ov | n | |||
er TCP - Implementation | often make less-than-optimal use of open connections.</t> | |||
Requirements) to optimize the use of TCP connections.</t> | <t indent="0" pn="section-6-3">Given this, new implementations of XoT will | |||
</li> | clearly benefit from specific guidance on | |||
<li><t>Whilst RFC7766 states that 'DNS clients SHOULD pipeline their queries’ on | TCP/TLS connection usage for XFR, because this will:</t> | |||
TCP | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6-4 | |||
connections, it did not distinguish between XFRs and other queries for this | "> | |||
behavior. It is now recognized that XFRs are not as latency sensitive as | <li pn="section-6-4.1">result in more consistent XoT implementations wit | |||
other queries, and can be significantly more complex for clients to handle, | h better interoperability and</li> | |||
both because of the large amount of state that must be kept and because there | <li pn="section-6-4.2">remove any need for XoT implementations to suppor | |||
may be multiple messages in the responses. For these reasons, it is clarified | t legacy behavior for XoT connections | |||
here that a valid reason for not pipelining queries is when they are all XFR | that XFR-over-TCP implementations have historically often supported.</li> | |||
queries i.e. clients sending multiple XFRs MAY choose not to pipeline those | </ul> | |||
queries. Clients that do not pipeline XFR queries, therefore, have no | <t indent="0" pn="section-6-5">Therefore, this document updates both the p | |||
additional requirements to handle out-of-order or intermingled responses (as | revious specifications for | |||
described later), since they will never receive them.</t> | XFR over TCP (<xref target="RFC1995" format="default" sectionFormat="of" derived | |||
</li> | Content="RFC1995"/> and <xref target="RFC5936" format="default" sectionFormat="o | |||
<li><t>Implementations SHOULD use <xref target="RFC7828"></xref> (The edns-tcp-k | f" derivedContent="RFC5936"/>) to clarify that:</t> | |||
eepalive EDNS0 Option) | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6-6 | |||
to manage persistent connections (which is more flexible than using just fixed t | "> | |||
imeouts).</t> | <li pn="section-6-6.1">Implementations <bcp14>MUST</bcp14> use <xref tar | |||
</li> | get="RFC7766" format="default" sectionFormat="of" derivedContent="RFC7766"/> ("D | |||
</ul> | NS Transport | |||
<t>The following sections include detailed clarifications on the updates to XFR | over TCP - Implementation Requirements") to optimize the use of TCP connection | |||
behavior implied in <xref target="RFC7766"></xref> and how the use of <xref targ | s.</li> | |||
et="RFC7828"></xref> applies | <li pn="section-6-6.2">Whilst <xref target="RFC7766" format="default" se | |||
ctionFormat="of" derivedContent="RFC7766"/> states that "DNS clients | ||||
<bcp14>SHOULD</bcp14> pipeline their queries" | ||||
on TCP connections, it did not distinguish between XFRs and other queries for | ||||
this | ||||
behavior. It is now recognized that XFRs are not as latency sensitive as | ||||
other queries and can be significantly more complex for clients to handle, | ||||
both because of the large amount of state that must be kept and because there | ||||
may be multiple messages in the responses. For these reasons, it is clarified | ||||
here that a valid reason for not pipelining queries is when they are all XFR | ||||
queries, i.e., clients sending multiple XFRs <bcp14>MAY</bcp14> choose not to | ||||
pipeline those | ||||
queries. Clients that do not pipeline XFR queries therefore have no | ||||
additional requirements to handle out-of-order or intermingled responses (as | ||||
described later), since they will never receive them.</li> | ||||
<li pn="section-6-6.3">Implementations <bcp14>SHOULD</bcp14> use the | ||||
edns-tcp-keepalive EDNS(0) option <xref target="RFC7828" format="default" sect | ||||
ionFormat="of" derivedContent="RFC7828"/> to manage | ||||
persistent connections. This is | ||||
more flexible than the alternative of simply using fixed timeouts.</li> | ||||
</ul> | ||||
<t indent="0" pn="section-6-7">The following sections include detailed cla | ||||
rifications on the updates to XFR | ||||
behavior implied in <xref target="RFC7766" format="default" sectionFormat="of" d | ||||
erivedContent="RFC7766"/> and how the use of <xref target="RFC7828" format="defa | ||||
ult" sectionFormat="of" derivedContent="RFC7828"/> applies | ||||
specifically to XFR exchanges. They also discuss how IXFR and AXFR can reuse | specifically to XFR exchanges. They also discuss how IXFR and AXFR can reuse | |||
the same TCP connection.</t> | the same TCP connection.</t> | |||
<t>For completeness, we also mention here the recent specification of extended D | <t indent="0" pn="section-6-8">For completeness, the recent specification | |||
NS | of extended | |||
error (EDE) codes <xref target="RFC8914"></xref>. For zone transfers, when retur | DNS error (EDE) codes <xref target="RFC8914" format="default" sectionFormat="of" | |||
ning REFUSED to a | derivedContent="RFC8914"/> is also mentioned here. For zone transfers, when ret | |||
urning REFUSED to a | ||||
zone transfer request from an 'unauthorized' client (e.g., where the client is n ot | zone transfer request from an 'unauthorized' client (e.g., where the client is n ot | |||
listed in an ACL for zone transfers or does not sign the request with a | listed in an ACL for zone transfers or does not sign the request with a | |||
valid TSIG key), the extended DNS error code 18 (Prohibited) can also be sent.</ | valid TSIG key), the extended DNS error code 18 - Prohibited can also be sent.</ | |||
t> | t> | |||
<section anchor="update-to-rfc1995-for-ixfr-over-tcp" numbered="true" remo | ||||
<section anchor="update-to-rfc1995-for-ixfr-over-tcp"><name>Update to RFC1995 fo | veInRFC="false" toc="include" pn="section-6.1"> | |||
r IXFR-over-TCP</name> | <name slugifiedName="name-update-to-rfc-1995-for-ixfr">Update to RFC 199 | |||
<t>For clarity - an IXFR-over-TCP server compliant with this specification MUST | 5 for IXFR over TCP</name> | |||
be | <t indent="0" pn="section-6.1-1">For clarity, an IXFR-over-TCP server co | |||
able to handle multiple concurrent IXoT requests on a single TCP connection | mpliant with this specification | |||
(for the same and different zones) and SHOULD send the responses as soon as | <bcp14>MUST</bcp14> be | |||
they are available, which might be out-of-order compared to the requests.</t> | able to handle multiple concurrent IXoT requests on a single TCP connection | |||
</section> | (for the same and different zones) and <bcp14>SHOULD</bcp14> send the response | |||
s as soon as | ||||
<section anchor="update-to-rfc5936-for-axfr-over-tcp"><name>Update to RFC5936 fo | they are available, which might be out of order compared to the requests.</t> | |||
r AXFR-over-TCP</name> | </section> | |||
<t>For clarity - an AXFR-over-TCP server compliant with this specification MUST | <section anchor="update-to-rfc5936-for-axfr-over-tcp" numbered="true" remo | |||
be | veInRFC="false" toc="include" pn="section-6.2"> | |||
able to handle multiple concurrent AXoT sessions on a single TCP connection | <name slugifiedName="name-update-to-rfc-5936-for-axfr">Update to RFC 593 | |||
(for the same and different zones). The response streams for concurrent AXFRs | 6 for AXFR over TCP</name> | |||
MAY be intermingled and AXFR-over-TCP clients compliant with this specification | <t indent="0" pn="section-6.2-1">For clarity, an AXFR-over-TCP server co | |||
which pipeline AXFR requests MUST be able to handle this.</t> | mpliant with this specification | |||
</section> | <bcp14>MUST</bcp14> be | |||
able to handle multiple concurrent AXoT sessions on a single TCP connection | ||||
<section anchor="updates-to-rfc1995-and-rfc5936-for-xfr-over-tcp"><name>Updates | (for the same and different zones). The response streams for concurrent AXFRs | |||
to RFC1995 and RFC5936 for XFR-over-TCP</name> | <bcp14>MAY</bcp14> be intermingled, and AXFR-over-TCP clients compliant with t | |||
his | ||||
<section anchor="connection-reuse"><name>Connection reuse</name> | specification, which pipeline AXFR requests, <bcp14>MUST</bcp14> be able to ha | |||
<t>As specified, XFR-over-TCP clients SHOULD re-use any existing open TCP connec | ndle this.</t> | |||
tion when | </section> | |||
starting any new XFR request to the same primary, and for issuing SOA queries, | <section anchor="updates-to-rfc1995-and-rfc5936-for-xfr-over-tcp" numbered | |||
instead of opening a new connection. The number of TCP connections between a | ="true" removeInRFC="false" toc="include" pn="section-6.3"> | |||
secondary and primary SHOULD be minimized (also see <xref target="update-to-rfc7 | <name slugifiedName="name-updates-to-rfcs-1995-and-59">Updates to RFCs 1 | |||
766"></xref>).</t> | 995 and 5936 for XFR over TCP</name> | |||
<t>Valid reasons for not re-using existing connections might include:</t> | <section anchor="connection-reuse" numbered="true" removeInRFC="false" t | |||
oc="include" pn="section-6.3.1"> | ||||
<ul> | <name slugifiedName="name-connection-reuse">Connection Reuse</name> | |||
<li>as already noted in <xref target="RFC7766"></xref>, separate connections for | <t indent="0" pn="section-6.3.1-1">As specified, XFR-over-TCP clients | |||
different zones might be preferred for operational reasons. In this case, the n | <bcp14>SHOULD</bcp14> reuse any existing open TCP | |||
umber of concurrent connections for zone transfers SHOULD be limited to the tota | connection when | |||
l number of zones transferred between the client and server.</li> | starting any new XFR request to the same primary, and for issuing SOA querie | |||
<li>reaching a configured limit for the number of outstanding queries or XFR req | s, | |||
uests allowed on a single TCP connection</li> | instead of opening a new connection. The number of TCP connections between a | |||
<li>the message ID pool has already been exhausted on an open connection</li> | secondary and primary <bcp14>SHOULD</bcp14> be minimized (also see <xref tar | |||
<li>a large number of timeouts or slow responses have occurred on an open | get="update-to-rfc7766" format="default" sectionFormat="of" derivedContent="Sect | |||
connection</li> | ion 6.4"/>).</t> | |||
<li>an edns-tcp-keepalive EDNS0 option with a timeout of 0 has been received fro | <t indent="0" pn="section-6.3.1-2">Valid reasons for not reusing exist | |||
m the | ing connections might include:</t> | |||
server and the client is in the process of closing the connection (see <xref tar | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section | |||
get="the-edns-tcp-keepalive-edns0-option"></xref>)</li> | -6.3.1-3"> | |||
</ul> | <li pn="section-6.3.1-3.1">As already noted in <xref target="RFC7766 | |||
<t>If no TCP connections are currently open, XFR clients MAY send SOA queries ov | " format="default" sectionFormat="of" derivedContent="RFC7766"/>, separate conne | |||
er | ctions for | |||
UDP or a new TCP connection.</t> | different zones might be preferred for operational reasons. In this case, | |||
</section> | the number of | |||
concurrent connections for zone transfers <bcp14>SHOULD</bcp14> be limited | ||||
<section anchor="axfrs-and-ixfrs-on-the-same-connection"><name>AXFRs and IXFRs o | to the total | |||
n the same connection</name> | number of zones transferred between the client and server.</li> | |||
<t>Neither <xref target="RFC1995"></xref> nor <xref target="RFC5936"></xref> exp | <li pn="section-6.3.1-3.2">A configured limit for the number of outs | |||
licitly discuss the use of a single TCP | tanding queries or XFR requests | |||
connection for both IXFR and AXFR requests. <xref target="RFC5936"></xref> does | allowed on a single TCP connection has been reached.</li> | |||
make the general statement:</t> | <li pn="section-6.3.1-3.3">The message ID pool has already been exha | |||
usted on an open connection.</li> | ||||
<artwork>"Non-AXFR session traffic can also use an open TCP connection.&quo | <li pn="section-6.3.1-3.4">A large number of timeouts or slow respon | |||
t; | ses have occurred on an open | |||
</artwork> | connection.</li> | |||
<t>We clarify here that implementations capable of both AXFR and IXFR and compli | <li pn="section-6.3.1-3.5">An edns-tcp-keepalive EDNS(0) option with | |||
ant with this specification SHOULD</t> | a timeout of 0 has been received from the | |||
server, and the client is in the process of closing the connection (see <x | ||||
<ul> | ref target="the-edns-tcp-keepalive-edns0-option" format="default" sectionFormat= | |||
<li>use the same TCP connection for both AXFR and IXFR requests to the same prim | "of" derivedContent="Section 6.3.4"/>).</li> | |||
ary</li> | </ul> | |||
<li>pipeline such requests (if they pipeline XFR requests in general) and MAY in | <t indent="0" pn="section-6.3.1-4">If no TCP connections are currently | |||
termingle them</li> | open, XFR clients <bcp14>MAY</bcp14> send SOA | |||
<li>send the response(s) for each request as soon as they are available i.e. res | queries over UDP or a new TCP connection.</t> | |||
ponses MAY be sent intermingled</li> | </section> | |||
</ul> | <section anchor="axfrs-and-ixfrs-on-the-same-connection" numbered="true" | |||
<t>For some current implementations adding all the above functionality would int | removeInRFC="false" toc="include" pn="section-6.3.2"> | |||
roduce significant | <name slugifiedName="name-axfrs-and-ixfrs-on-the-same">AXFRs and IXFRs | |||
code complexity. In such a case, there will need to be an assessment of the trad | on the Same Connection</name> | |||
e-off between that | <t indent="0" pn="section-6.3.2-1">Neither <xref target="RFC1995" form | |||
and the performance benefits of the above for XFR.</t> | at="default" sectionFormat="of" derivedContent="RFC1995"/> nor <xref target="RFC | |||
</section> | 5936" format="default" sectionFormat="of" derivedContent="RFC5936"/> explicitly | |||
discuss the use of a single TCP | ||||
<section anchor="xfr-limits"><name>XFR limits</name> | connection for both IXFR and AXFR requests. <xref target="RFC5936" format="d | |||
<t>The server MAY limit the number of concurrent IXFRs, AXFRs or total XFR | efault" sectionFormat="of" derivedContent="RFC5936"/> does make the | |||
transfers in progress, or from a given secondary, to protect server resources. | general statement:</t> | |||
Servers SHOULD return SERVFAIL if this limit is hit, since it is a | <blockquote pn="section-6.3.2-2">Non-AXFR session traffic can also use | |||
transient error and a retry at a later time might succeed (there is no previous | an open connection.</blockquote> | |||
specification for this behavior).</t> | <t indent="0" pn="section-6.3.2-3">In this document, the above is clar | |||
</section> | ified to indicate that implementations capable of both AXFR and IXFR and | |||
compliant with this specification <bcp14>SHOULD</bcp14>:</t> | ||||
<section anchor="the-edns-tcp-keepalive-edns0-option"><name>The edns-tcp-keepali | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section | |||
ve EDNS0 Option</name> | -6.3.2-4"> | |||
<t>XFR clients that send the edns-tcp-keepalive EDNS0 option on every XFR reques | <li pn="section-6.3.2-4.1">use the same TCP connection for both AXFR | |||
t provide the | and IXFR requests to the same | |||
server with maximum opportunity to update the edns-tcp-keepalive timeout. The XF | primary,</li> | |||
R server | <li pn="section-6.3.2-4.2">pipeline such requests (if they pipeline | |||
may use the frequency of recent XFRs to calculate an average update rate as | XFR requests in general) and | |||
input to the decision of what edns-tcp-keepalive timeout to use. If the server | <bcp14>MAY</bcp14> intermingle them, and</li> | |||
does not support edns-tcp-keepalive, the client MAY keep the connection open for | <li pn="section-6.3.2-4.3">send the response(s) for each request as | |||
a | soon as they are available, i.e., | |||
few seconds (<xref target="RFC7766"></xref> recommends that servers use timeouts | responses <bcp14>MAY</bcp14> be sent intermingled.</li> | |||
of at least a few | </ul> | |||
seconds).</t> | <t indent="0" pn="section-6.3.2-5">For some current implementations, a | |||
<t>Whilst the specification for EDNS0 <xref target="RFC6891"></xref> does not | dding all the above functionality would introduce | |||
specifically mention AXFRs, it does say</t> | significant code complexity. In such a case, there will need to be an assess | |||
ment of the | ||||
<artwork>"If an OPT record is present in a received request, compliant | trade-off between that and the performance benefits of the above for XFR.</t | |||
responders MUST include an OPT record in their respective | > | |||
responses." | </section> | |||
</artwork> | <section anchor="xfr-limits" numbered="true" removeInRFC="false" toc="in | |||
<t>We clarify here that if an OPT record is present in a received AXFR request, | clude" pn="section-6.3.3"> | |||
compliant responders MUST include an OPT record in each of the subsequent AXFR | <name slugifiedName="name-xfr-limits">XFR Limits</name> | |||
responses. Note that this requirement, combined with the use of | <t indent="0" pn="section-6.3.3-1">The server <bcp14>MAY</bcp14> limit | |||
edns-tcp-keepalive, enables AXFR servers to signal the desire to close a | the number of concurrent IXFRs, AXFRs, or total XFR | |||
connection (when existing transactions have competed) due to low resources by | transfers in progress (or from a given secondary) to protect server resource | |||
sending an edns-tcp-keepalive EDNS0 option with a timeout of 0 on any AXFR | s. | |||
response. This does not signal that the AXFR is aborted, just that the server | Servers <bcp14>SHOULD</bcp14> return SERVFAIL if this limit is hit, since it | |||
wishes to close the connection as soon as possible.</t> | is a | |||
</section> | transient error and a retry at a later time might succeed (there is no previ | |||
ous | ||||
<section anchor="backwards-compatibility"><name>Backwards compatibility</name> | specification for this behavior).</t> | |||
<t>Certain legacy behaviors were noted in <xref target="RFC5936"></xref>, with p | </section> | |||
rovisions that | <section anchor="the-edns-tcp-keepalive-edns0-option" numbered="true" re | |||
implementations may want to offer options to fallback to legacy behavior when | moveInRFC="false" toc="include" pn="section-6.3.4"> | |||
interoperating with servers known to not support <xref target="RFC5936"></xref>. | <name slugifiedName="name-the-edns-tcp-keepalive-edns">The edns-tcp-ke | |||
For purposes of | epalive EDNS(0) Option</name> | |||
interoperability, IXFR and AXFR implementations may want to continue offering | <t indent="0" pn="section-6.3.4-1">XFR clients that send the edns-tcp- | |||
such configuration options, as well as supporting some behaviors that were | keepalive EDNS(0) option on every XFR request provide | |||
underspecified prior to this work (e.g., performing IXFR and AXFRs on separate | the server with maximum opportunity to update the edns-tcp-keepalive timeout | |||
connections). However, XoT connections should have no need to do so.</t> | . The XFR | |||
</section> | server may use the frequency of recent XFRs to calculate an average update r | |||
</section> | ate as | |||
input to the decision of what edns-tcp-keepalive timeout to use. If the serv | ||||
<section anchor="update-to-rfc7766"><name>Update to RFC7766</name> | er | |||
<t><xref target="RFC7766"></xref> made general implementation | does not support edns-tcp-keepalive, the client <bcp14>MAY</bcp14> keep the | |||
recommendations with regard to TCP/TLS connection handling:</t> | connection | |||
open for a few seconds (<xref target="RFC7766" format="default" sectionForma | ||||
<artwork>"To mitigate the risk of unintentional server overload, DNS | t="of" derivedContent="RFC7766"/> recommends that servers use | |||
clients MUST take care to minimize the number of concurrent TCP | timeouts of at least a few seconds).</t> | |||
connections made to any individual server. It is RECOMMENDED | <t indent="0" pn="section-6.3.4-2">Whilst the specification for EDNS(0 | |||
that for any given client/server interaction there SHOULD be no | ) <xref target="RFC6891" format="default" sectionFormat="of" derivedContent="RF | |||
more than one connection for regular queries, one for zone | C6891"/> does not | |||
transfers, and one for each protocol that is being used on top | specifically mention AXFRs, it does say:</t> | |||
of TCP (for example, if the resolver was using TLS). However, | <blockquote pn="section-6.3.4-3">If an OPT record is present in a rece | |||
it is noted that certain primary/ secondary configurations with | ived request, compliant | |||
many busy zones might need to use more than one TCP connection | responders <bcp14>MUST</bcp14> include an OPT record in their respective | |||
for zone transfers for operational reasons (for example, to | responses.</blockquote> | |||
support concurrent transfers of multiple zones)." | <t indent="0" pn="section-6.3.4-4">In this document, the above is clar | |||
</artwork> | ified to indicate that if an OPT record is present in a received AXFR request, | |||
<t>Whilst this recommends a particular behavior for the clients using TCP, it | compliant responders <bcp14>MUST</bcp14> include an OPT record in each of th | |||
does not relax the requirement for servers to handle 'mixed' traffic (regular | e subsequent | |||
queries and zone transfers) on any open TCP/TLS connection. It also overlooks th | AXFR responses. Note that this requirement, combined with the use of | |||
e | edns-tcp-keepalive, enables AXFR servers to signal the desire to close a | |||
potential that other transports might want to take the same approach with regard | connection (when existing transactions have competed) due to low resources b | |||
to | y | |||
using separate connections for different purposes.</t> | sending an edns-tcp-keepalive EDNS(0) option with a timeout of 0 on any AXFR | |||
<t>This specification updates the above general guidance in <xref target="RFC776 | response. This does not signal that the AXFR is aborted, just that the serve | |||
6"></xref> to provide the | r | |||
same separation of connection purpose (regular queries and zone transfers) for | wishes to close the connection as soon as possible.</t> | |||
all transports being used on top of TCP.</t> | </section> | |||
<t>Therefore, it is RECOMMENDED that for | <section anchor="backwards-compatibility" numbered="true" removeInRFC="f | |||
each protocol used on top of TCP in any given client/server interaction, there | alse" toc="include" pn="section-6.3.5"> | |||
SHOULD be no more than one connection for regular queries and one for zone | <name slugifiedName="name-backwards-compatibility">Backwards Compatibi | |||
transfers.</t> | lity</name> | |||
<t>As an illustration, it could be imagined that in future such an | <t indent="0" pn="section-6.3.5-1">Certain legacy behaviors were noted | |||
interaction could hypothetically include one or all of the following:</t> | in <xref target="RFC5936" format="default" sectionFormat="of" derivedContent="R | |||
FC5936"/>, with provisions | ||||
<ul> | that implementations may want to offer options to fallback to legacy behavio | |||
<li>one TCP connection for regular queries</li> | r when | |||
<li>one TCP connection for zone transfers</li> | interoperating with servers known to not support <xref target="RFC5936" form | |||
<li>one TLS connection for regular queries</li> | at="default" sectionFormat="of" derivedContent="RFC5936"/>. For | |||
<li>one TLS connection for zone transfers</li> | purposes of interoperability, IXFR and AXFR implementations may want to cont | |||
<li>one DoH connection for regular queries</li> | inue offering | |||
<li>one DoH connection for zone transfers</li> | such configuration options, as well as supporting some behaviors that were | |||
</ul> | underspecified prior to this work (e.g., performing IXFR and AXFRs on separa | |||
<t><xref target="connection-reuse"></xref> has provided specific details of reas | te | |||
ons where more than | connections). However, XoT connections should have no need to do so.</t> | |||
one connection for a given transport might be required for zone transfers from | </section> | |||
a particular client.</t> | </section> | |||
</section> | <section anchor="update-to-rfc7766" numbered="true" removeInRFC="false" to | |||
</section> | c="include" pn="section-6.4"> | |||
<name slugifiedName="name-update-to-rfc-7766">Update to RFC 7766</name> | ||||
<section anchor="xot-specification"><name>XoT specification</name> | <t indent="0" pn="section-6.4-1"><xref target="RFC7766" format="default" | |||
sectionFormat="of" derivedContent="RFC7766"/> made general implementation | ||||
<section anchor="connection-establishment"><name>Connection establishment</name> | recommendations with regard to TCP/TLS connection handling:</t> | |||
<t>During connection establishment the Application-Layer Protocol Negotiation (A | <blockquote pn="section-6.4-2">To mitigate the risk of unintentional ser | |||
LPN) token “dot” <xref target="DoT-ALPN"></xref> MUST be selected in the TLS han | ver overload, DNS | |||
dshake.</t> | clients <bcp14>MUST</bcp14> take care to minimize the number of concurrent TCP | |||
</section> | connections made to any individual server. It is <bcp14>RECOMMENDED</bcp14> | |||
that for any given client/server interaction there <bcp14>SHOULD</bcp14> be no | ||||
<section anchor="tls-versions"><name>TLS versions</name> | more than one connection for regular queries, one for zone | |||
<t>All implementations of this specification MUST use only TLS 1.3 <xref target= | transfers, and one for each protocol that is being used on top | |||
"RFC8446"></xref> or later.</t> | of TCP (for example, if the resolver was using TLS). However, | |||
</section> | it is noted that certain primary/ secondary configurations with | |||
many busy zones might need to use more than one TCP connection | ||||
<section anchor="port-selection"><name>Port selection</name> | for zone transfers for operational reasons (for example, to | |||
<t>The connection for XoT SHOULD be established using port 853, as specified in | support concurrent transfers of multiple zones).</blockquote> | |||
<xref target="RFC7858"></xref>, unless there is mutual agreement between the sec | <t indent="0" pn="section-6.4-3">Whilst this recommends a particular beh | |||
ondary and primary | avior for the clients using TCP, it | |||
to use a port other than port 853 for XoT. There MAY be agreement to use | does not relax the requirement for servers to handle 'mixed' traffic (regular | |||
different ports for AXoT and IXoT, or for different zones.</t> | queries and zone transfers) on any open TCP/TLS connection. It also overlooks | |||
</section> | the | |||
potential that other transports might want to take the same approach with rega | ||||
<section anchor="high-level-xot-descriptions"><name>High level XoT descriptions< | rd to | |||
/name> | using separate connections for different purposes.</t> | |||
<t>It is useful to note that in XoT, it is the secondary that initiates | <t indent="0" pn="section-6.4-4">This specification updates the above ge | |||
the TLS connection to the primary for a XFR request, so that in terms of | neral guidance in <xref target="RFC7766" format="default" sectionFormat="of" der | |||
connectivity, the secondary is the TLS client and the primary the TLS server.</t | ivedContent="RFC7766"/> | |||
> | to provide the same separation of connection purpose (regular queries and zone | |||
<t>The figure below provides an outline of the AXoT mechanism including NOTIFYs. | transfers) for | |||
</t> | all transports being used on top of TCP.</t> | |||
<t indent="0" pn="section-6.4-5">Therefore, it is <bcp14>RECOMMENDED</bc | ||||
<artwork> Secondary Primary | p14> that for | |||
each protocol used on top of TCP in any given client/server interaction there | ||||
<bcp14>SHOULD</bcp14> be no more than one connection for regular queries and o | ||||
ne for zone | ||||
transfers.</t> | ||||
<t indent="0" pn="section-6.4-6">As an illustration, it could be imagine | ||||
d that in the future such an | ||||
interaction could hypothetically include one or all of the following:</t> | ||||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6 | ||||
.4-7"> | ||||
<li pn="section-6.4-7.1">one TCP connection for regular queries</li> | ||||
<li pn="section-6.4-7.2">one TCP connection for zone transfers</li> | ||||
<li pn="section-6.4-7.3">one TLS connection for regular queries</li> | ||||
<li pn="section-6.4-7.4">one TLS connection for zone transfers</li> | ||||
<li pn="section-6.4-7.5">one DoH connection for regular queries</li> | ||||
<li pn="section-6.4-7.6">one DoH connection for zone transfers</li> | ||||
</ul> | ||||
<t indent="0" pn="section-6.4-8"><xref target="connection-reuse" format= | ||||
"default" sectionFormat="of" derivedContent="Section 6.3.1"/> provides specific | ||||
details of the reasons why | ||||
more than one connection for a given transport might be required for zone tran | ||||
sfers from | ||||
a particular client.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="xot-specification" numbered="true" removeInRFC="false" toc= | ||||
"include" pn="section-7"> | ||||
<name slugifiedName="name-xot-specification">XoT Specification</name> | ||||
<section anchor="connection-establishment" numbered="true" removeInRFC="fa | ||||
lse" toc="include" pn="section-7.1"> | ||||
<name slugifiedName="name-connection-establishment">Connection Establish | ||||
ment</name> | ||||
<t indent="0" pn="section-7.1-1">During connection establishment, the Ap | ||||
plication-Layer Protocol Negotiation (ALPN) token | ||||
"dot" <xref target="DoT-ALPN" format="default" sectionFormat="of" derivedCon | ||||
tent="DoT-ALPN"/> <bcp14>MUST</bcp14> be selected in the TLS | ||||
handshake.</t> | ||||
</section> | ||||
<section anchor="tls-versions" numbered="true" removeInRFC="false" toc="in | ||||
clude" pn="section-7.2"> | ||||
<name slugifiedName="name-tls-versions">TLS Versions</name> | ||||
<t indent="0" pn="section-7.2-1">All implementations of this specificati | ||||
on <bcp14>MUST</bcp14> use only TLS 1.3 <xref target="RFC8446" format="default" | ||||
sectionFormat="of" derivedContent="RFC8446"/> or later.</t> | ||||
</section> | ||||
<section anchor="port-selection" numbered="true" removeInRFC="false" toc=" | ||||
include" pn="section-7.3"> | ||||
<name slugifiedName="name-port-selection">Port Selection</name> | ||||
<t indent="0" pn="section-7.3-1">The connection for XoT <bcp14>SHOULD</b | ||||
cp14> be established using port 853, as | ||||
specified in <xref target="RFC7858" format="default" sectionFormat="of" deri | ||||
vedContent="RFC7858"/>, unless there is mutual agreement between the | ||||
primary and secondary to use a port other than port 853 for XoT. There <bcp1 | ||||
4>MAY</bcp14> | ||||
be agreement to use different ports for AXoT and IXoT or for different zones | ||||
.</t> | ||||
</section> | ||||
<section anchor="high-level-xot-descriptions" numbered="true" removeInRFC= | ||||
"false" toc="include" pn="section-7.4"> | ||||
<name slugifiedName="name-high-level-xot-descriptions">High-Level XoT De | ||||
scriptions</name> | ||||
<t indent="0" pn="section-7.4-1">It is useful to note that in XoT it is | ||||
the secondary that initiates | ||||
the TLS connection to the primary for an XFR request so that, in terms of | ||||
connectivity, the secondary is the TLS client and the primary is the TLS ser | ||||
ver.</t> | ||||
<t indent="0" pn="section-7.4-2">The figure below provides an outline of | ||||
the AXoT mechanism including NOTIFYs.</t> | ||||
<figure anchor="fig3" align="left" suppress-title="false" pn="figure-3"> | ||||
<name slugifiedName="name-axot-mechanism">AXoT Mechanism</name> | ||||
<artwork name="" type="" alt="" align="left" pn="section-7.4-3.1"> | ||||
Secondary Primary | ||||
| NOTIFY | | | NOTIFY | | |||
| <-------------------------------- | UDP | | <-------------------------------- | UDP | |||
| --------------------------------> | | | --------------------------------> | | |||
| NOTIFY Response | | | NOTIFY Response | | |||
| | | | | | |||
| | | | | | |||
| SOA Request | | | SOA Request | | |||
| --------------------------------> | UDP (or part of | | --------------------------------> | UDP (or part of | |||
| <-------------------------------- | a TCP/TLS session) | | <-------------------------------- | a TCP/TLS session) | |||
skipping to change at line 645 ¶ | skipping to change at line 951 ¶ | |||
| (Zone data) | | | | (Zone data) | | | |||
| | | | | | | | |||
| <-------------------------------- | | TLS | | <-------------------------------- | | TLS | |||
| AXFR Response 2 | | Session | | AXFR Response 2 | | Session | |||
| (Zone data) | | | | (Zone data) | | | |||
| | | | | | | | |||
| <-------------------------------- | | | | <-------------------------------- | | | |||
| AXFR Response 3 | | | | AXFR Response 3 | | | |||
| (Zone data) | --- | | (Zone data) | --- | |||
| | | | | | |||
Figure 3. AXoT Mechanism | ||||
</artwork> | </artwork> | |||
<t>The figure below provides an outline of the IXoT mechanism including NOTIFYs. | </figure> | |||
</t> | <t indent="0" pn="section-7.4-4">The figure below provides an outline of | |||
the IXoT mechanism including NOTIFYs.</t> | ||||
<artwork> Secondary Primary | <figure anchor="fig4" align="left" suppress-title="false" pn="figure-4"> | |||
<name slugifiedName="name-ixot-mechanism">IXoT Mechanism</name> | ||||
<artwork name="" type="" alt="" align="left" pn="section-7.4-5.1"> | ||||
Secondary Primary | ||||
| NOTIFY | | | NOTIFY | | |||
| <-------------------------------- | UDP | | <-------------------------------- | UDP | |||
| --------------------------------> | | | --------------------------------> | | |||
| NOTIFY Response | | | NOTIFY Response | | |||
| | | | | | |||
| | | | | | |||
| SOA Request | | | SOA Request | | |||
| --------------------------------> | UDP (or part of | | --------------------------------> | UDP (or part of | |||
| <-------------------------------- | a TCP/TLS session) | | <-------------------------------- | a TCP/TLS session) | |||
skipping to change at line 678 ¶ | skipping to change at line 984 ¶ | |||
| <-------------------------------- | | | | <-------------------------------- | | | |||
| IXFR Response | | | | IXFR Response | | | |||
| (Zone data) | | | | (Zone data) | | | |||
| | | TLS | | | | TLS | |||
| | | session | | | | session | |||
| IXFR Request | | | | IXFR Request | | | |||
| --------------------------------> | | | | --------------------------------> | | | |||
| <-------------------------------- | | | | <-------------------------------- | | | |||
| IXFR Response | | | | IXFR Response | | | |||
| (Zone data) | --- | | (Zone data) | --- | |||
Figure 4. IXoT Mechanism | ||||
</artwork> | </artwork> | |||
</section> | </figure> | |||
</section> | ||||
<section anchor="xot-transfers"><name>XoT transfers</name> | <section anchor="xot-transfers" numbered="true" removeInRFC="false" toc="i | |||
<t>For a zone transfer between two end points to be considered protected with Xo | nclude" pn="section-7.5"> | |||
T | <name slugifiedName="name-xot-transfers">XoT Transfers</name> | |||
all XFR requests and response for that zone MUST be sent over TLS connections | <t indent="0" pn="section-7.5-1">For a zone transfer between two endpoin | |||
where at a minimum:</t> | ts to be considered protected with XoT, | |||
all XFR requests and responses for that zone <bcp14>MUST</bcp14> be sent over | ||||
<ul> | TLS connections, | |||
<li>the client MUST authenticate the server by use of an authentication domain | where at a minimum:</t> | |||
name using a Strict Privacy Profile, as described in <xref target="RFC8310"></xr | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-7 | |||
ef></li> | .5-2"> | |||
<li><t>the server MUST validate the client is authorized to request or proxy a z | <li pn="section-7.5-2.1">The client <bcp14>MUST</bcp14> authenticate t | |||
one transfer by | he server by use of an authentication | |||
using one or both of the following methods:</t> | domain name using a Strict Privacy profile, as described in <xref target="RF | |||
C8310" format="default" sectionFormat="of" derivedContent="RFC8310"/>.</li> | ||||
<ul> | <li pn="section-7.5-2.2"> | |||
<li>Mutual TLS (mTLS)</li> | <t indent="0" pn="section-7.5-2.2.1">The server <bcp14>MUST</bcp14> | |||
<li>an IP based ACL (which can be either per-message or per-connection) | validate the client is authorized to request or proxy | |||
combined with a valid TSIG/SIG(0) signature on the XFR request</li> | a zone transfer by using one or both of the following methods:</t> | |||
</ul></li> | <ul bare="false" empty="false" indent="3" spacing="normal" pn="secti | |||
</ul> | on-7.5-2.2.2"> | |||
<t>If only one method is selected then mTLS is preferred because it provides str | <li pn="section-7.5-2.2.2.1">mutual TLS (mTLS)</li> | |||
ong cryptographic | <li pn="section-7.5-2.2.2.2">an IP-based ACL (which can be either | |||
protection at both endpoints.</t> | per message or per connection) | |||
<t>Authentication mechanisms are discussed in full in <xref target="authenticati | combined with a valid TSIG/SIG(0) signature on the XFR request</li> | |||
on-mechanisms"></xref> | </ul> | |||
and the rationale for the above requirement in <xref target="xot-authentication" | </li> | |||
></xref>. Transfer | </ul> | |||
group policies are discussed in <xref target="policies-for-both-axot-and-ixot">< | <t indent="0" pn="section-7.5-3">If only one method is selected, then mT | |||
/xref>.</t> | LS is preferred because it provides strong | |||
</section> | cryptographic protection at both endpoints.</t> | |||
<t indent="0" pn="section-7.5-4">Authentication mechanisms are discussed | ||||
<section anchor="xot-connections"><name>XoT connections</name> | in full in <xref target="authentication-mechanisms" format="default" sectionFor | |||
<t>The details in <xref target="updates-to-existing-specifications"></xref> abou | mat="of" derivedContent="Section 9"/>, | |||
t, e.g., persistent | and the rationale for the above requirement is discussed in <xref target="xot- | |||
connections and XFR message handling are fully applicable to XoT connections as | authentication" format="default" sectionFormat="of" derivedContent="Section 10"/ | |||
well. However, any behavior specified here takes precedence for XoT.</t> | >. | |||
<t>If no TLS connections are currently open, XoT clients MAY send SOA queries ov | Transfer group policies are discussed in <xref target="policies-for-both-axot- | |||
er | and-ixot" format="default" sectionFormat="of" derivedContent="Section 11"/>.</t> | |||
UDP or TCP, or TLS.</t> | </section> | |||
</section> | <section anchor="xot-connections" numbered="true" removeInRFC="false" toc= | |||
"include" pn="section-7.6"> | ||||
<section anchor="xot-vs-adot"><name>XoT vs ADoT</name> | <name slugifiedName="name-xot-connections">XoT Connections</name> | |||
<t>As noted earlier, there is currently no specification for encryption of | <t indent="0" pn="section-7.6-1">The details in <xref target="updates-to | |||
connections from recursive resolvers to authoritative servers. Some | -existing-specifications" format="default" sectionFormat="of" derivedContent="Se | |||
authoritatives are experimenting with ADoT and opportunistic encryption has | ction 6"/> about, e.g., | |||
also been raised as a possibility; it is therefore highly likely that use of | persistent connections and XFR message handling, are fully applicable to XoT c | |||
encryption by authoritative servers will evolve in the coming years.</t> | onnections as | |||
<t>This raises questions in the short term with regard to TLS connection and | well. However, any behavior specified here takes precedence for XoT.</t> | |||
message handling for authoritative servers. In particular, there is likely to be | <t indent="0" pn="section-7.6-2">If no TLS connections are currently ope | |||
a class of authoritatives that wish to use XoT in the near future with a small | n, XoT clients <bcp14>MAY</bcp14> send SOA queries | |||
number of configured secondaries, but that do not wish to support DoT for regula | over UDP, TCP, or TLS.</t> | |||
r | </section> | |||
queries from recursives in that same time frame. These servers have to | <section anchor="xot-vs-adot" numbered="true" removeInRFC="false" toc="inc | |||
potentially cope with probing and direct queries from recursives and from test | lude" pn="section-7.7"> | |||
servers, and also potential attacks that might wish to make use of TLS to | <name slugifiedName="name-xot-vs-adot">XoT vs. ADoT</name> | |||
overload the server.</t> | <t indent="0" pn="section-7.7-1">As noted earlier, there is currently no | |||
<t><xref target="RFC5936"></xref> clearly states that non-AXFR session traffic c | specification for encryption of | |||
an use an open TCP | connections from recursive resolvers to authoritative servers. Some | |||
connection, however, this requirement needs to be re-evaluated when considering | authoritative servers are experimenting with ADoT, and opportunistic encryptio | |||
applying the same model to XoT. Proposing that a server should also start | n | |||
responding to all queries received over TLS just because it has enabled XoT | has also been raised as a possibility; therefore, it is highly likely that use | |||
would be equivalent to defining a form of authoritative DoT. This specification | of encryption by authoritative servers will evolve in the coming years.</t> | |||
does not propose that, but it also does not prohibit servers from answering | <t indent="0" pn="section-7.7-2">This raises questions in the short term | |||
queries unrelated to XFR exchanges over TLS. Rather, this specification | with regard to TLS connection and | |||
simply outlines in later sections:</t> | message handling for authoritative servers. In particular, there is likely to | |||
be | ||||
<ul> | a class of authoritative servers that wish to use XoT in the near future with | |||
<li>how XoT implementations should utilize EDE codes in response to queries on T | a | |||
LS | small number of configured secondaries but that do not wish to support DoT for | |||
connections they are not willing to answer (see <xref target="response-rcodes">< | regular queries from recursives in that same time frame. These servers have to | |||
/xref>)</li> | potentially cope with probing and direct queries from recursives and from test | |||
<li>the operational and policy options that a XoT server operator has | servers and also potential attacks that might wish to make use of TLS to | |||
with regard to managing TLS connections and messages (see <xref target="xot-serv | overload the server.</t> | |||
er-connection-handling"></xref>)</li> | <t indent="0" pn="section-7.7-3"><xref target="RFC5936" format="default" | |||
</ul> | sectionFormat="of" derivedContent="RFC5936"/> clearly states that non-AXFR sess | |||
</section> | ion traffic can use an | |||
open connection; however, this requirement needs to be reevaluated when consid | ||||
<section anchor="response-rcodes"><name>Response RCODES</name> | ering | |||
<t>XoT clients and servers MUST implement EDE codes. If a XoT server receives | the application of the same model to XoT. Proposing that a server should also | |||
non-XoT traffic it is not willing to answer on a TLS connection, it SHOULD | start | |||
respond with REFUSED and the extended DNS error code 21 - Not Supported | responding to all queries received over TLS just because it has enabled XoT | |||
<xref target="RFC8914"></xref>. XoT clients should not send any further | would be equivalent to defining a form of authoritative DoT. This specificatio | |||
queries of this type to the server for a reasonable period of time (for | n | |||
example, one hour) i.e., long enough that the server configuration or policy | does not propose that, but it also does not prohibit servers from answering | |||
might be updated.</t> | queries unrelated to XFR exchanges over TLS. Rather, this specification | |||
<t>Historically, servers have used the REFUSED RCODE for many situations, and so | simply outlines in later sections:</t> | |||
clients often had no detailed information on which to base an error or fallback | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-7 | |||
path when queries were refused. As a result, the client behavior could vary | .7-4"> | |||
significantly. XoT servers that refuse queries must cater for the fact that | <li pn="section-7.7-4.1">the utilization of EDE codes by XoT servers i | |||
client behavior might vary from continually retrying queries regardless of | n response to queries on TLS | |||
receiving REFUSED to every query, or at the other extreme clients may decide to | connections that they are not willing to answer (see <xref target="response- | |||
stop using the server over any transport. This might be because those clients ar | rcodes" format="default" sectionFormat="of" derivedContent="Section 7.8"/>)</li> | |||
e | <li pn="section-7.7-4.2">the operational and policy options that an op | |||
either non-XoT clients or do not implement EDE codes.</t> | erator of a XoT server has | |||
</section> | with regard to managing TLS connections and messages (see <xref target="xot- | |||
server-connection-handling" format="default" sectionFormat="of" derivedContent=" | ||||
<section anchor="axot-specifics"><name>AXoT specifics</name> | Appendix A"/>)</li> | |||
</ul> | ||||
<section anchor="padding-axot-responses"><name>Padding AXoT responses</name> | </section> | |||
<t>The goal of padding AXoT responses is two fold:</t> | <section anchor="response-rcodes" numbered="true" removeInRFC="false" toc= | |||
"include" pn="section-7.8"> | ||||
<ul> | <name slugifiedName="name-response-rcodes">Response RCODES</name> | |||
<li>to obfuscate the actual size of the transferred zone to minimize information | <t indent="0" pn="section-7.8-1">XoT clients and servers <bcp14>MUST</bc | |||
leakage about the entire contents of the zone.</li> | p14> implement EDE codes. If a XoT server receives | |||
<li>to obfuscate the incremental changes to the zone between SOA updates to | non-XoT traffic it is not willing to answer on a TLS connection, it <bcp14>SHO | |||
minimize information leakage about zone update activity and growth.</li> | ULD</bcp14> | |||
</ul> | respond with REFUSED and the extended DNS error code 21 - Not Supported | |||
<t>Note that the re-use of XoT connections for transfers of multiple different | <xref target="RFC8914" format="default" sectionFormat="of" derivedContent="RFC | |||
zones slightly complicates any attempt to analyze the traffic size and timing to | 8914"/>. XoT clients should not send any further | |||
extract information. Also, effective padding may require state to be kept | queries of this type to the server for a reasonable period of time (for | |||
as zones may grow and/or shrink over time.</t> | example, one hour), i.e., long enough that the server configuration or policy | |||
<t>It is noted here that, depending on the padding policies eventually developed | might be updated.</t> | |||
for XoT, | <t indent="0" pn="section-7.8-2">Historically, servers have used the REF | |||
the requirement to obfuscate the total zone size might | USED RCODE for many situations; therefore, | |||
require a server to create 'empty' AXoT responses. That is, AXoT responses that | clients often had no detailed information on which to base an error or fallbac | |||
contain no RR's apart from an OPT RR containing the EDNS(0) option for padding. | k | |||
For example, without this capability the maximum size that a tiny zone could be | path when queries were refused. As a result, the client behavior could vary | |||
padded to would | significantly. XoT servers that refuse queries must cater to the fact that | |||
theoretically be limited if there had to be a minimum of 1 RR per packet.</t> | client behavior might vary from continually retrying queries regardless of | |||
<t>However, as with existing AXFR, the last AXoT response message sent MUST | receiving REFUSED to every query or, at the other extreme, clients may decide | |||
contain the same SOA that was in the first message of the AXoT response series | to | |||
in order to signal the conclusion of the zone transfer.</t> | stop using the server over any transport. This might be because those clients | |||
<t><xref target="RFC5936"></xref> says:</t> | are | |||
either non-XoT clients or do not implement EDE codes.</t> | ||||
<artwork>"Each AXFR response message SHOULD contain a sufficient number | </section> | |||
of RRs to reasonably amortize the per-message overhead, up to | <section anchor="axot-specifics" numbered="true" removeInRFC="false" toc=" | |||
the largest number that will fit within a DNS message (taking | include" pn="section-7.9"> | |||
the required content of the other sections into account, as | <name slugifiedName="name-axot-specifics">AXoT Specifics</name> | |||
described below)." | <section anchor="padding-axot-responses" numbered="true" removeInRFC="fa | |||
</artwork> | lse" toc="include" pn="section-7.9.1"> | |||
<t>'Empty' AXoT responses generated in order to meet a padding requirement will | <name slugifiedName="name-padding-axot-responses">Padding AXoT Respons | |||
be | es</name> | |||
exceptions to the above statement. For flexibility, future proofing and in | <t indent="0" pn="section-7.9.1-1">The goal of padding AXoT responses | |||
order to guarantee support for future padding policies, we state here that | is two fold:</t> | |||
secondary implementations MUST be resilient to receiving padded AXoT responses, | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section | |||
including 'empty' AXoT responses that contain only an OPT RR containing the | -7.9.1-2"> | |||
EDNS(0) option for padding.</t> | <li pn="section-7.9.1-2.1">to obfuscate the actual size of the trans | |||
<t>Recommendation of specific policies for padding AXoT responses are out of sco | ferred zone to minimize information | |||
pe | leakage about the entire contents of the zone</li> | |||
for this specification. Detailed considerations of such policies and the | <li pn="section-7.9.1-2.2">to obfuscate the incremental changes to t | |||
trade-offs involved are expected to be the subject of future work.</t> | he zone between SOA updates to | |||
</section> | minimize information leakage about zone update activity and growth</li> | |||
</section> | </ul> | |||
<t indent="0" pn="section-7.9.1-3">Note that the reuse of XoT connecti | ||||
<section anchor="ixot-specifics"><name>IXoT specifics</name> | ons for transfers of multiple different | |||
zones slightly complicates any attempt to analyze the traffic size and timin | ||||
<section anchor="condensation-of-responses"><name>Condensation of responses</nam | g to | |||
e> | extract information. Also, effective padding may require the state to be ke | |||
<t><xref target="RFC1995"></xref> says condensation of responses is optional and | pt | |||
MAY be done. Whilst | because zones may grow and/or shrink over time.</t> | |||
it does add complexity to generating responses, it can significantly reduce the | <t indent="0" pn="section-7.9.1-4">It is noted here that, depending on | |||
size of responses. However any such reduction might be offset by increased | the padding policies eventually developed for XoT, | |||
message size due to padding. This specification does not update the optionality | the requirement to obfuscate the total zone size might | |||
of condensation for XoT responses.</t> | require a server to create 'empty' AXoT responses, that is, AXoT responses t | |||
</section> | hat | |||
contain no RRs apart from an OPT RR containing the EDNS(0) option for paddin | ||||
<section anchor="fallback-to-axfr"><name>Fallback to AXFR</name> | g. | |||
<t>Fallback to AXFR can happen, for example, if the server is not able to provid | For example, without this capability, the maximum size that a tiny zone coul | |||
e | d be padded to | |||
an IXFR for the requested SOA. Implementations differ in how long they store | would theoretically be limited if there had to be a minimum of 1 RR per pack | |||
zone deltas and how many may be stored at any one time.</t> | et.</t> | |||
<t>Just as with IXFR-over-TCP, after a failed IXFR a IXoT client SHOULD request | <t indent="0" pn="section-7.9.1-5">However, as with existing AXFR, the | |||
the AXFR on the already open XoT connection.</t> | last AXoT response message sent <bcp14>MUST</bcp14> | |||
</section> | contain the same SOA that was in the first message of the AXoT response seri | |||
es | ||||
<section anchor="padding-of-ixot-responses"><name>Padding of IXoT responses</nam | in order to signal the conclusion of the zone transfer.</t> | |||
e> | <t indent="0" pn="section-7.9.1-6"><xref target="RFC5936" format="defa | |||
<t>The goal of padding IXoT responses is to obfuscate the incremental | ult" sectionFormat="of" derivedContent="RFC5936"/> says:</t> | |||
changes to the zone between SOA updates to minimize information leakage about | <blockquote pn="section-7.9.1-7">Each AXFR response message <bcp14>SHO | |||
zone update activity and growth. Both the size and timing of the IXoT responses | ULD</bcp14> contain a sufficient number | |||
could | of RRs to reasonably amortize the per-message overhead, up to | |||
reveal information.</t> | the largest number that will fit within a DNS message (taking | |||
<t>IXFR responses can vary greatly in size from the order of 100 bytes for one o | the required content of the other sections into account, as | |||
r | described below).</blockquote> | |||
two record updates, to tens of thousands of bytes for large dynamic DNSSEC | <t indent="0" pn="section-7.9.1-8">'Empty' AXoT responses generated in | |||
signed zones. The frequency of IXFR responses can also depend greatly on if and | order to meet a padding requirement will be | |||
how the zone is DNSSEC signed.</t> | exceptions to the above statement. For flexibility, for future proofing, and | |||
<t>In order to guarantee support for future padding policies, we state here that | in | |||
secondary implementations MUST be resilient to receiving padded IXoT responses.< | order to guarantee support for future padding policies, it is stated here th | |||
/t> | at | |||
<t>Recommendation of specific policies for padding IXoT responses are out of sco | secondary implementations <bcp14>MUST</bcp14> be resilient to receiving padd | |||
pe | ed AXoT | |||
for this specification. Detailed considerations of such padding policies, the | responses, including 'empty' AXoT responses that contain only an OPT RR cont | |||
use of traffic obfuscation techniques (such as ‘dummy' traffic), and the | aining the | |||
trade-offs involved are expected to be the subject of future work.</t> | EDNS(0) option for padding.</t> | |||
</section> | <t indent="0" pn="section-7.9.1-9">Recommendations of specific policie | |||
</section> | s for padding AXoT responses are out of scope | |||
for this specification. Detailed considerations of such policies and the | ||||
<section anchor="name-compression-and-maximum-payload-sizes"><name>Name compress | trade-offs involved are expected to be the subject of future work.</t> | |||
ion and maximum payload sizes</name> | </section> | |||
<t>It is noted here that name compression <xref target="RFC1035"></xref> can be | </section> | |||
used in XFR responses | <section anchor="ixot-specifics" numbered="true" removeInRFC="false" toc=" | |||
to reduce the size of the payload, however, the maximum value of the offset that | include" pn="section-7.10"> | |||
can be used in the name compression pointer structure is 16384. For some DNS | <name slugifiedName="name-ixot-specifics">IXoT Specifics</name> | |||
implementations this limits the size of an individual XFR response used in | <section anchor="condensation-of-responses" numbered="true" removeInRFC= | |||
practice to something around the order of 16kB. In principle, larger | "false" toc="include" pn="section-7.10.1"> | |||
payload sizes can be supported for some responses with more sophisticated | <name slugifiedName="name-condensation-of-responses">Condensation of R | |||
approaches (e.g., by pre-calculating the maximum offset required).</t> | esponses</name> | |||
<t>Implementations may wish to offer options to disable name compression for XoT | <t indent="0" pn="section-7.10.1-1"><xref target="RFC1995" format="def | |||
responses to enable larger payloads. This might be particularly helpful when | ault" sectionFormat="of" derivedContent="RFC1995"/> says that condensation of re | |||
padding is used since minimizing the payload size is not necessarily a useful | sponses is optional and | |||
optimization in this case and disabling name compression will reduce the | <bcp14>MAY</bcp14> be done. Whilst | |||
resources required to construct the payload.</t> | it does add complexity to generating responses, it can significantly reduce | |||
</section> | the | |||
</section> | size of responses. However, any such reduction might be offset by increased | |||
message size due to padding. This specification does not update the optional | ||||
<section anchor="multi-primary-configurations"><name>Multi-primary Configuration | ity | |||
s</name> | of condensation for XoT responses.</t> | |||
<t>This model can provide flexibility | </section> | |||
and redundancy particularly for IXFR. A secondary will receive one or more | <section anchor="fallback-to-axfr" numbered="true" removeInRFC="false" t | |||
NOTIFY messages and can send an SOA to all of the configured primaries. It can | oc="include" pn="section-7.10.2"> | |||
then choose to send an XFR request to the primary with the highest SOA (or | <name slugifiedName="name-fallback-to-axfr">Fallback to AXFR</name> | |||
based on other criteria, e.g., RTT).</t> | <t indent="0" pn="section-7.10.2-1">Fallback to AXFR can happen, for e | |||
<t>When using persistent connections, the secondary may have a XoT connection | xample, if the server is not able to provide | |||
already open to one or more primaries. Should a secondary preferentially | an IXFR for the requested SOA. Implementations differ in how long they store | |||
request an XFR from a primary to which it already has an open XoT connection | zone deltas and how many may be stored at any one time.</t> | |||
or the one with the highest SOA (assuming it doesn't have a connection open to | <t indent="0" pn="section-7.10.2-2">Just as with IXFR over TCP, after | |||
it already)?</t> | a failed IXFR, an IXoT client <bcp14>SHOULD</bcp14> | |||
<t>Two extremes can be envisaged here. The first one can be considered a 'prefer | request the AXFR on the already open XoT connection.</t> | |||
red | </section> | |||
primary connection' model. In this case, the secondary continues to use one | <section anchor="padding-of-ixot-responses" numbered="true" removeInRFC= | |||
persistent connection to a single primary until it has reason not to. Reasons | "false" toc="include" pn="section-7.10.3"> | |||
not to might include the primary repeatedly closing the connection, long query/r | <name slugifiedName="name-padding-of-ixot-responses">Padding of IXoT R | |||
esponse RTTs on | esponses</name> | |||
transfers or the SOA of the primary being an unacceptable lag behind the SOA of | <t indent="0" pn="section-7.10.3-1">The goal of padding IXoT responses | |||
an alternative primary.</t> | is to obfuscate the incremental | |||
<t>The other extreme can be considered a 'parallel primary connection' model. He | changes to the zone between SOA updates to minimize information leakage abou | |||
re, | t | |||
a secondary could keep multiple persistent connections open to all available | zone update activity and growth. Both the size and timing of the IXoT respon | |||
primaries and only request XFRs from the primary with the highest serial number. | ses could | |||
Since normally the number of secondaries and primaries in direct contact in a | reveal information.</t> | |||
transfer group is reasonably low this might be feasible if latency is the most | <t indent="0" pn="section-7.10.3-2">IXFR responses can vary greatly in | |||
significant concern.</t> | size from the order of 100 bytes for one or | |||
<t>Recommendation of a particular scheme is out of scope of this document, but | two record updates to tens of thousands of bytes for large, dynamic DNSSEC-s | |||
igned zones. | ||||
The frequency of IXFR responses can also depend greatly on if and how the zo | ||||
ne is DNSSEC | ||||
signed.</t> | ||||
<t indent="0" pn="section-7.10.3-3">In order to guarantee support for | ||||
future padding policies, it is stated here | ||||
that | ||||
secondary implementations <bcp14>MUST</bcp14> be resilient to receiving padd | ||||
ed IXoT | ||||
responses.</t> | ||||
<t indent="0" pn="section-7.10.3-4">Recommendation of specific policie | ||||
s for padding IXoT responses are out of scope | ||||
for this specification. Detailed considerations of such padding policies, th | ||||
e | ||||
use of traffic obfuscation techniques (such as generating fake XFR traffic), | ||||
and | ||||
the trade-offs involved are expected to be the subject of future work.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="name-compression-and-maximum-payload-sizes" numbered="tru | ||||
e" removeInRFC="false" toc="include" pn="section-7.11"> | ||||
<name slugifiedName="name-name-compression-and-maximu">Name Compression | ||||
and Maximum Payload Sizes</name> | ||||
<t indent="0" pn="section-7.11-1">It is noted here that name compression | ||||
<xref target="RFC1035" format="default" sectionFormat="of" derivedContent="RFC1 | ||||
035"/> can be used in XFR | ||||
responses to reduce the size of the payload; however, the maximum value of the | ||||
offset that | ||||
can be used in the name compression pointer structure is 16384. For some DNS | ||||
implementations, this limits the size of an individual XFR response used in | ||||
practice to something around the order of 16 KB. In principle, larger | ||||
payload sizes can be supported for some responses with more sophisticated | ||||
approaches (e.g., by precalculating the maximum offset required).</t> | ||||
<t indent="0" pn="section-7.11-2">Implementations may wish to offer opti | ||||
ons to disable name compression for XoT | ||||
responses to enable larger payloads. This might be particularly helpful when | ||||
padding is used, since minimizing the payload size is not necessarily a useful | ||||
optimization in this case and disabling name compression will reduce the | ||||
resources required to construct the payload.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="multi-primary-configurations" numbered="true" removeInRFC=" | ||||
false" toc="include" pn="section-8"> | ||||
<name slugifiedName="name-multi-primary-configuration">Multi-primary Confi | ||||
gurations</name> | ||||
<t indent="0" pn="section-8-1">This model can provide flexibility | ||||
and redundancy, particularly for IXFR. A secondary will receive one or more | ||||
NOTIFY messages and can send an SOA to all of the configured primaries. It can | ||||
then choose to send an XFR request to the primary with the highest SOA (or | ||||
based on other criteria, e.g., RTT).</t> | ||||
<t indent="0" pn="section-8-2">When using persistent connections, the seco | ||||
ndary may have a XoT connection | ||||
already open to one or more primaries. Should a secondary preferentially | ||||
request an XFR from a primary to which it already has an open XoT connection | ||||
or the one with the highest SOA (assuming it doesn't have a connection open to | ||||
it already)?</t> | ||||
<t indent="0" pn="section-8-3">Two extremes can be envisaged here. The fir | ||||
st one can be considered a 'preferred | ||||
primary connection' model. In this case, the secondary continues to use one | ||||
persistent connection to a single primary until it has reason not to. Reasons | ||||
not to might include the primary repeatedly closing the connection, long query | ||||
/response RTTs | ||||
on transfers, or the SOA of the primary being an unacceptable lag behind the S | ||||
OA of | ||||
an alternative primary.</t> | ||||
<t indent="0" pn="section-8-4">The other extreme can be considered a 'para | ||||
llel primary connection' model. Here, | ||||
a secondary could keep multiple persistent connections open to all available | ||||
primaries and only request XFRs from the primary with the highest serial numbe | ||||
r. | ||||
Since normally the number of secondaries and primaries in direct contact in a | ||||
transfer group is reasonably low, this might be feasible if latency is the mos | ||||
t | ||||
significant concern.</t> | ||||
<t indent="0" pn="section-8-5">Recommendation of a particular scheme is ou | ||||
t of scope of this document, but | ||||
implementations are encouraged to provide configuration options that allow | implementations are encouraged to provide configuration options that allow | |||
operators to make choices about this behavior.</t> | operators to make choices about this behavior.</t> | |||
</section> | </section> | |||
<section anchor="authentication-mechanisms" numbered="true" removeInRFC="fal | ||||
<section anchor="authentication-mechanisms"><name>Authentication mechanisms</nam | se" toc="include" pn="section-9"> | |||
e> | <name slugifiedName="name-authentication-mechanisms">Authentication Mechan | |||
<t>To provide context to the requirements in <xref target="xot-transfers"></xref | isms</name> | |||
>, this | <t indent="0" pn="section-9-1">To provide context to the requirements in < | |||
section provides a brief summary of some of the existing authentication and | xref target="xot-transfers" format="default" sectionFormat="of" derivedContent=" | |||
validation mechanisms (both transport independent and TLS specific) that are | Section 7.5"/>, this | |||
available when performing zone transfers. | section provides a brief summary of some of the existing authentication and | |||
<xref target="xot-authentication"></xref> then discusses in more details specifi | validation mechanisms (both transport independent and TLS specific) that are | |||
cally how a | available when performing zone transfers. | |||
combination of TLS authentication, TSIG and IP based ACLs interact for XoT.</t> | <xref target="xot-authentication" format="default" sectionFormat="of" derivedC | |||
<t>We classify the mechanisms based on the following properties:</t> | ontent="Section 10"/> then discusses in more detail specifically how a | |||
combination of TLS authentication, TSIG, and IP-based ACLs interact for XoT.</ | ||||
<ul> | t> | |||
<li><t>'Data Origin Authentication' (DO): Authentication that the DNS message or | <t indent="0" pn="section-9-2">In this document, the mechanisms are classi | |||
iginated | fied based on the following properties:</t> | |||
from the party with whom credentials were shared, and of the data integrity | <dl newline="true" spacing="normal" indent="3" pn="section-9-3"> | |||
of the message contents (the originating party may or may not be party | <dt pn="section-9-3.1">Data Origin Authentication (DO):</dt> | |||
operating the far end of a TCP/TLS connection in a 'proxy' scenario).</t> | <dd pn="section-9-3.2">Authentication 1) of the fact that the DNS messag | |||
</li> | e originated | |||
<li><t>'Channel Confidentiality' (CC): Confidentiality of the communication chan | from the party with whom credentials were shared and 2) of the data integrit | |||
nel between the | y | |||
client and server (i.e. the two end points of a TCP/TLS connection) from passive | of the message contents (the originating party may or may not be the party | |||
surveillance.</t> | operating the far end of a TCP/TLS connection in a 'proxy' scenario).</dd> | |||
</li> | <dt pn="section-9-3.3">Channel Confidentiality (CC):</dt> | |||
<li><t>'Channel Authentication' (CA): Authentication of the identity of party to | <dd pn="section-9-3.4">Confidentiality of the communication channel betw | |||
whom a TCP/TLS | een the | |||
connection is made (this might not be a direct connection between the primary | client and server (i.e., the two endpoints of a TCP/TLS connection) from pas | |||
and secondary in a proxy scenario).</t> | sive | |||
</li> | surveillance.</dd> | |||
</ul> | <dt pn="section-9-3.5">Channel Authentication (CA):</dt> | |||
<dd pn="section-9-3.6">Authentication of the identity of the party to wh | ||||
<section anchor="tsig"><name>TSIG</name> | om a TCP/TLS | |||
<t>TSIG <xref target="RFC8945"></xref> provides a mechanism for two or more part | connection is made (this might not be a direct connection between the primar | |||
ies to use shared | y | |||
secret keys which can then be used to create a message digest to protect | and secondary in a proxy scenario).</dd> | |||
individual DNS messages. This allows each party to authenticate that a request | </dl> | |||
or response (and the data in it) came from the other party, even if it was | <section anchor="tsig" numbered="true" removeInRFC="false" toc="include" p | |||
transmitted over an unsecured channel or via a proxy.</t> | n="section-9.1"> | |||
<t>Properties: Data origin authentication</t> | <name slugifiedName="name-tsig">TSIG</name> | |||
</section> | <t indent="0" pn="section-9.1-1">TSIG <xref target="RFC8945" format="def | |||
ault" sectionFormat="of" derivedContent="RFC8945"/> provides a mechanism for two | ||||
<section anchor="sig-0"><name>SIG(0)</name> | or more parties to use | |||
<t>SIG(0) <xref target="RFC2931"></xref> similarly provides a mechanism to digit | shared secret keys that can then be used to create a message digest to protect | |||
ally sign a DNS | individual DNS messages. This allows each party to authenticate that a request | |||
message but uses public key authentication, where the public keys are stored in | or response (and the data in it) came from the other party, even if it was | |||
DNS as KEY RRs and a private key is stored at the signer.</t> | transmitted over an unsecured channel or via a proxy.</t> | |||
<t>Properties: Data origin authentication</t> | <dl newline="false" spacing="normal" indent="3" pn="section-9.1-2"> | |||
</section> | <dt pn="section-9.1-2.1">Properties:</dt> | |||
<dd pn="section-9.1-2.2">Data origin authentication.</dd> | ||||
<section anchor="tls"><name>TLS</name> | </dl> | |||
</section> | ||||
<section anchor="opportunistic-tls"><name>Opportunistic TLS</name> | <section anchor="sig-0" numbered="true" removeInRFC="false" toc="include" | |||
<t>Opportunistic TLS for DoT is defined in <xref target="RFC8310"></xref> and ca | pn="section-9.2"> | |||
n provide a defense against passive | <name slugifiedName="name-sig0">SIG(0)</name> | |||
surveillance, providing on-the-wire confidentiality. Essentially</t> | <t indent="0" pn="section-9.2-1">SIG(0) <xref target="RFC2931" format="d | |||
efault" sectionFormat="of" derivedContent="RFC2931"/> similarly provides a mecha | ||||
<ul> | nism to digitally sign a | |||
<li>clients that know authentication information for a server SHOULD try to auth | DNS message but uses public key authentication, where the public keys are stor | |||
enticate the server</li> | ed in | |||
<li>however they MAY fallback to using TLS without authentication and</li> | DNS as KEY RRs and a private key is stored at the signer.</t> | |||
<li>they MAY fallback to using cleartext if TLS is not available.</li> | <dl newline="false" spacing="normal" indent="3" pn="section-9.2-2"> | |||
</ul> | <dt pn="section-9.2-2.1">Properties:</dt> | |||
<t>As such, it does not offer a defense against active attacks (e.g., an on path | <dd pn="section-9.2-2.2">Data origin authentication.</dd> | |||
active attacker | </dl> | |||
on the connection from client to server), and is not considered as useful for Xo | </section> | |||
T.</t> | <section anchor="tls" numbered="true" removeInRFC="false" toc="include" pn | |||
<t>Properties: None guaranteed.</t> | ="section-9.3"> | |||
</section> | <name slugifiedName="name-tls">TLS</name> | |||
<section anchor="opportunistic-tls" numbered="true" removeInRFC="false" | ||||
<section anchor="strict-tls"><name>Strict TLS</name> | toc="include" pn="section-9.3.1"> | |||
<t>Strict TLS for DoT <xref target="RFC8310"></xref> requires that a client is c | <name slugifiedName="name-opportunistic-tls">Opportunistic TLS</name> | |||
onfigured with an | <t indent="0" pn="section-9.3.1-1">Opportunistic TLS for DoT is define | |||
authentication domain name (and/or SPKI pinset) that MUST be used to | d in <xref target="RFC8310" format="default" sectionFormat="of" derivedContent=" | |||
authenticate the TLS handshake with the server. If authentication of the server | RFC8310"/> and can provide a | |||
fails, the client will not proceed with the connection. This provides a defense | defense against passive | |||
for the client against active surveillance, providing client-to-server | surveillance, providing on-the-wire confidentiality. Essentially:</t> | |||
authentication and end-to-end channel confidentiality.</t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section | |||
<t>Properties: Channel confidentiality and channel authentication (of the server | -9.3.1-2"> | |||
).</t> | <li pn="section-9.3.1-2.1">if clients know authentication informatio | |||
</section> | n for a server, they | |||
<bcp14>SHOULD</bcp14> try to authenticate the server,</li> | ||||
<section anchor="mutual-tls"><name>Mutual TLS</name> | <li pn="section-9.3.1-2.2">if this fails or clients do not know the | |||
<t>This is an extension to Strict TLS <xref target="RFC8310"></xref> which requi | information, they <bcp14>MAY</bcp14> | |||
res that a client is | fallback to using TLS without authentication, or</li> | |||
configured with an authentication domain name (and/or SPKI pinset) and a client | <li pn="section-9.3.1-2.3">clients <bcp14>MAY</bcp14> fallback to us | |||
certificate. The client offers the certificate for authentication by the server | ing cleartext if TLS is not | |||
and the client can authenticate the server the same way as in Strict TLS. This | available.</li> | |||
provides a defense for both parties against active surveillance, providing | </ul> | |||
bi-directional authentication and end-to-end channel confidentiality.</t> | <t indent="0" pn="section-9.3.1-3">As such, it does not offer a defens | |||
<t>Properties: Channel confidentiality and mutual channel authentication.</t> | e against active attacks (e.g., an on-path active | |||
</section> | attacker on the connection from client to server) and is not considered as u | |||
</section> | seful for | |||
XoT.</t> | ||||
<section anchor="ip-based-acl-on-the-primary"><name>IP Based ACL on the Primary< | <dl newline="false" spacing="normal" indent="3" pn="section-9.3.1-4"> | |||
/name> | <dt pn="section-9.3.1-4.1">Properties:</dt> | |||
<t>Most DNS server implementations offer an option to configure an IP based Acce | <dd pn="section-9.3.1-4.2">None guaranteed.</dd> | |||
ss | </dl> | |||
Control List (ACL), which is often used in combination with TSIG based ACLs to | </section> | |||
restrict access to zone transfers on primary servers on a per query basis.</t> | <section anchor="strict-tls" numbered="true" removeInRFC="false" toc="in | |||
<t>This is also possible with XoT, but it must be noted that, as with TCP, the | clude" pn="section-9.3.2"> | |||
implementation of such an ACL cannot be enforced on the primary until an XFR | <name slugifiedName="name-strict-tls">Strict TLS</name> | |||
request is received on an established connection.</t> | <t indent="0" pn="section-9.3.2-1">Strict TLS for DoT <xref target="RF | |||
<t>As discussed in <xref target="xot-server-connection-handling"></xref>, an IP | C8310" format="default" sectionFormat="of" derivedContent="RFC8310"/> requires t | |||
based per connection ACL | hat a client is configured | |||
could also be implemented where only TLS connections from recognized | with an authentication domain name (and/or Subject Public Key Info (SPKI) pin | |||
secondaries are accepted.</t> | set) that | |||
<t>Properties: Channel authentication of the client.</t> | <bcp14>MUST</bcp14> be used to | |||
</section> | authenticate the TLS handshake with the server. If authentication of the serve | |||
r | ||||
<section anchor="zonemd"><name>ZONEMD</name> | fails, the client will not proceed with the connection. This provides a defens | |||
<t>For completeness, we also describe Message Digest for DNS Zones (ZONEMD) | e | |||
<xref target="RFC8976"></xref> here. The message digest | for the client against active surveillance, providing client-to-server | |||
is a mechanism that can be used to verify the content of a standalone zone. It | authentication and end-to-end channel confidentiality.</t> | |||
is designed to be independent of the transmission channel or mechanism, allowing | <dl newline="false" spacing="compact" indent="3" pn="section-9.3.2-2"> | |||
a general consumer of a zone to do origin authentication of the entire zone | <dt pn="section-9.3.2-2.1">Properties:</dt> | |||
contents. Note that the current version of <xref target="RFC8976"></xref> | <dd pn="section-9.3.2-2.2">Channel confidentiality and channel authe | |||
states:</t> | ntication (of the server).</dd> | |||
<t><tt>As specified herein, ZONEMD is impractical for large, dynamic zones due t | </dl> | |||
o the | </section> | |||
time and resources required for digest calculation. However, The ZONEMD record | <section anchor="mutual-tls" numbered="true" removeInRFC="false" toc="in | |||
is extensible so that new digest schemes may be added in the future to support | clude" pn="section-9.3.3"> | |||
large, dynamic zones.</tt></t> | <name slugifiedName="name-mutual-tls">Mutual TLS</name> | |||
<t>It is complementary but orthogonal the above mechanisms; and can be used in | <t indent="0" pn="section-9.3.3-1">This is an extension to Strict TLS | |||
conjunction with XoT, but is not considered further here.</t> | <xref target="RFC8310" format="default" sectionFormat="of" derivedContent="RFC83 | |||
</section> | 10"/> that requires that a | |||
</section> | client is configured with an authentication domain name (and/or SPKI pin set) | |||
and a client | ||||
<section anchor="xot-authentication"><name>XoT authentication</name> | certificate. The client offers the certificate for authentication by the serve | |||
<t>It is noted that zone transfer scenarios can vary from a simple single | r, | |||
primary/secondary relationship where both servers are under the control of a | and the client can authenticate the server the same way as in Strict TLS. This | |||
single operator to a complex hierarchical structure which includes proxies and | provides a defense for both parties against active surveillance, providing | |||
multiple operators. Each deployment scenario will require specific analysis to | bidirectional authentication and end-to-end channel confidentiality.</t> | |||
determine which combination of authentication methods are best suited to the | <dl newline="false" spacing="compact" indent="3" pn="section-9.3.3-2"> | |||
deployment model in question.</t> | <dt pn="section-9.3.3-2.1">Properties:</dt> | |||
<t>The XoT authentication requirement specified in <xref target="xot-transfers"> | <dd pn="section-9.3.3-2.2">Channel confidentiality and mutual channe | |||
</xref> addresses the | l authentication.</dd> | |||
issue of ensuring that the transfers are encrypted between the two endpoints | </dl> | |||
directly involved in the current transfers. The following table summarizes the | </section> | |||
properties of a selection of the mechanisms discussed in | </section> | |||
<xref target="authentication-mechanisms"></xref>. The two letter acronyms for th | <section anchor="ip-based-acl-on-the-primary" numbered="true" removeInRFC= | |||
e properties are | "false" toc="include" pn="section-9.4"> | |||
used below and (S) indicates the secondary and (P) indicates | <name slugifiedName="name-ip-based-acl-on-the-primary">IP-Based ACL on t | |||
the primary.</t> | he Primary</name> | |||
<table> | <t indent="0" pn="section-9.4-1">Most DNS server implementations offer a | |||
<thead> | n option to configure an IP-based | |||
<tr> | ACL, which is often used in combination with TSIG-based ACLs to | |||
<th align="left">Method</th> | restrict access to zone transfers on primary servers on a per-query basis.</t> | |||
<th align="center">DO(S)</th> | <t indent="0" pn="section-9.4-2">This is also possible with XoT, but it | |||
<th align="center">CC(S)</th> | must be noted that, as with TCP, the | |||
<th align="center">CA(S)</th> | implementation of such an ACL cannot be enforced on the primary until an XFR | |||
<th align="center">DO(P)</th> | request is received on an established connection.</t> | |||
<th align="center">CC(P)</th> | <t indent="0" pn="section-9.4-3">As discussed in <xref target="xot-serve | |||
<th align="center">CA(P)</th> | r-connection-handling" format="default" sectionFormat="of" derivedContent="Appen | |||
</tr> | dix A"/>, an | |||
</thead> | IP-based per-connection ACL could also be implemented where only TLS connectio | |||
ns from | ||||
<tbody> | recognized secondaries are accepted.</t> | |||
<tr> | <dl newline="false" spacing="normal" indent="3" pn="section-9.4-4"> | |||
<td align="left">Strict TLS</td> | <dt pn="section-9.4-4.1">Properties:</dt> | |||
<td align="center"></td> | <dd pn="section-9.4-4.2">Channel authentication of the client.</dd> | |||
<td align="center">Y</td> | </dl> | |||
<td align="center">Y</td> | </section> | |||
<td align="center"></td> | <section anchor="zonemd" numbered="true" removeInRFC="false" toc="include" | |||
<td align="center">Y</td> | pn="section-9.5"> | |||
<td align="center"></td> | <name slugifiedName="name-zonemd">ZONEMD</name> | |||
</tr> | <t indent="0" pn="section-9.5-1">For completeness, ZONEMD | |||
<xref target="RFC8976" format="default" sectionFormat="of" derivedContent="RFC | ||||
<tr> | 8976"/> ("Message Digest for DNS Zones") is described here. | |||
<td align="left">Mutual TLS</td> | The ZONEMD message digest | |||
<td align="center"></td> | is a mechanism that can be used to verify the content of a standalone zone. It | |||
<td align="center">Y</td> | is designed to be independent of the transmission channel or mechanism, allowi | |||
<td align="center">Y</td> | ng | |||
<td align="center"></td> | a general consumer of a zone to do origin authentication of the entire zone | |||
<td align="center">Y</td> | contents. Note that the current version of <xref target="RFC8976" format="defa | |||
<td align="center">Y</td> | ult" sectionFormat="of" derivedContent="RFC8976"/> | |||
</tr> | states:</t> | |||
<blockquote pn="section-9.5-2">As specified herein, ZONEMD is impractica | ||||
<tr> | l for large, dynamic zones due to the | |||
<td align="left">ACL on primary</td> | time and resources required for digest calculation. However, the ZONEMD record | |||
<td align="center"></td> | is extensible so that new digest schemes may be added in the future to support | |||
<td align="center"></td> | large, dynamic zones.</blockquote> | |||
<td align="center"></td> | <t indent="0" pn="section-9.5-3">It is complementary but orthogonal to t | |||
<td align="center"></td> | he above mechanisms and can be used in | |||
<td align="center"></td> | conjunction with XoT but is not considered further here.</t> | |||
<td align="center">Y</td> | </section> | |||
</tr> | </section> | |||
<section anchor="xot-authentication" numbered="true" removeInRFC="false" toc | ||||
<tr> | ="include" pn="section-10"> | |||
<td align="left">TSIG</td> | <name slugifiedName="name-xot-authentication">XoT Authentication</name> | |||
<td align="center">Y</td> | <t indent="0" pn="section-10-1">It is noted that zone transfer scenarios c | |||
<td align="center"></td> | an vary from a simple single | |||
<td align="center"></td> | primary/secondary relationship where both servers are under the control of a | |||
<td align="center">Y</td> | single operator to a complex hierarchical structure that includes proxies and | |||
<td align="center"></td> | multiple operators. Each deployment scenario will require specific analysis to | |||
<td align="center"></td> | determine which combination of authentication methods are best suited to the | |||
</tr> | deployment model in question.</t> | |||
</tbody> | <t indent="0" pn="section-10-2">The XoT authentication requirement specifi | |||
</table><t>Table 1: Properties of Authentication methods for XoT</t> | ed in <xref target="xot-transfers" format="default" sectionFormat="of" derivedCo | |||
<t>Based on this analysis it can be seen that:</t> | ntent="Section 7.5"/> | |||
addresses the | ||||
<ul> | issue of ensuring that the transfers are encrypted between the two endpoints | |||
<li><t>Using just mutual TLS can be considered a standalone solution since both | directly involved in the current transfers. The following table summarizes the | |||
end points are | properties of a selection of the mechanisms discussed in | |||
cryptographically authenticated</t> | <xref target="authentication-mechanisms" format="default" sectionFormat="of" d | |||
</li> | erivedContent="Section 9"/>. The two-letter abbreviations for the properties | |||
<li><t>Using secondary side Strict TLS with a primary side IP ACL and TSIG/SIG(0 | are used below: (S) indicates the secondary and (P) indicates | |||
) combination provides | the primary.</t> | |||
sufficient protection to be acceptable.</t> | <table anchor="table1" align="center" pn="table-1"> | |||
</li> | <name slugifiedName="name-properties-of-authenticatio">Properties of Aut | |||
</ul> | hentication Methods for XoT</name> | |||
<t>Using just an IP ACL could be susceptible to attacks that can spoof TCP IP | <thead> | |||
addresses, using TSIG/SIG(0) alone could be susceptible to attacks that were | <tr> | |||
able to capture such messages should they be accidentally sent in clear text by | <th align="left" colspan="1" rowspan="1">Method</th> | |||
any server with the key.</t> | <th align="center" colspan="1" rowspan="1">DO(S)</th> | |||
</section> | <th align="center" colspan="1" rowspan="1">CC(S)</th> | |||
<th align="center" colspan="1" rowspan="1">CA(S)</th> | ||||
<section anchor="policies-for-both-axot-and-ixot"><name>Policies for Both AXoT a | <th align="center" colspan="1" rowspan="1">DO(P)</th> | |||
nd IXoT</name> | <th align="center" colspan="1" rowspan="1">CC(P)</th> | |||
<t>Whilst the protection of the zone contents in a transfer between two end poin | <th align="center" colspan="1" rowspan="1">CA(P)</th> | |||
ts | </tr> | |||
can be provided by the XoT protocol, the protection of all the transfers of a | </thead> | |||
given zone requires operational administration and policy management.</t> | <tbody> | |||
<t>We call the entire group of servers involved in XFR for a particular set of | <tr> | |||
zones (all the primaries and all the secondaries) the 'transfer group'.</t> | <td align="left" colspan="1" rowspan="1">Strict TLS</td> | |||
<t>In order to assure the confidentiality of the zone information, the entire | <td align="center" colspan="1" rowspan="1"/> | |||
transfer group MUST have a consistent policy of using XoT. If any do not, this | <td align="center" colspan="1" rowspan="1">Y</td> | |||
is a weak link for attackers to exploit. For clarification, this means that | <td align="center" colspan="1" rowspan="1">Y</td> | |||
within any transfer group both AXFRs and IXFRs for a zone MUST all use XoT.</t> | <td align="center" colspan="1" rowspan="1"/> | |||
<t>An individual zone transfer is not considered protected by XoT unless | <td align="center" colspan="1" rowspan="1">Y</td> | |||
both the client and server are configured to use only XoT and the overall zone | <td align="center" colspan="1" rowspan="1"/> | |||
transfer is not considered protected until all members of the transfer group | </tr> | |||
are configured to use only XoT with all other transfers servers (see <xref targe | <tr> | |||
t="implementation-considerations"></xref>).</t> | <td align="left" colspan="1" rowspan="1">Mutual TLS</td> | |||
<t>A XoT policy MUST specify if</t> | <td align="center" colspan="1" rowspan="1"/> | |||
<td align="center" colspan="1" rowspan="1">Y</td> | ||||
<ul> | <td align="center" colspan="1" rowspan="1">Y</td> | |||
<li>mutual TLS is used and/or</li> | <td align="center" colspan="1" rowspan="1"/> | |||
<li>a IP ACL and TSIG/SIG(0) combination is used</li> | <td align="center" colspan="1" rowspan="1">Y</td> | |||
</ul> | <td align="center" colspan="1" rowspan="1">Y</td> | |||
<t>Since this may require configuration of a number of servers who may be under | </tr> | |||
the control of different operators the desired consistency could be hard to | <tr> | |||
enforce and audit in practice.</t> | <td align="left" colspan="1" rowspan="1">ACL on primary</td> | |||
<t>Certain aspects of the Policies can be relatively easily tested independently | <td align="center" colspan="1" rowspan="1"/> | |||
, | <td align="center" colspan="1" rowspan="1"/> | |||
e.g., by requesting zone transfers without TSIG, from unauthorized IP addresses | <td align="center" colspan="1" rowspan="1"/> | |||
or over cleartext DNS. Other aspects such as if a secondary will accept data | <td align="center" colspan="1" rowspan="1"/> | |||
without a TSIG digest or if secondaries are using Strict as opposed to | <td align="center" colspan="1" rowspan="1"/> | |||
Opportunistic TLS are more challenging.</t> | <td align="center" colspan="1" rowspan="1">Y</td> | |||
<t>The mechanics of co-ordinating or enforcing such policies are out of the scop | </tr> | |||
e | <tr> | |||
of this document but may be the subject of future operational guidance.</t> | <td align="left" colspan="1" rowspan="1">TSIG</td> | |||
</section> | <td align="center" colspan="1" rowspan="1">Y</td> | |||
<td align="center" colspan="1" rowspan="1"/> | ||||
<section anchor="implementation-considerations"><name>Implementation Considerati | <td align="center" colspan="1" rowspan="1"/> | |||
ons</name> | <td align="center" colspan="1" rowspan="1">Y</td> | |||
<t>Server implementations may want to also offer options that allow ACLs on a zo | <td align="center" colspan="1" rowspan="1"/> | |||
ne | <td align="center" colspan="1" rowspan="1"/> | |||
to specify that a specific client can use either XoT or TCP. This would allow | </tr> | |||
for flexibility while clients are migrating to XoT.</t> | </tbody> | |||
<t>Client implementations may similarly want to offer options to cater for the | </table> | |||
multi-primary case where the primaries are migrating to XoT.</t> | <t indent="0" pn="section-10-4">Based on this analysis, it can be seen tha | |||
</section> | t:</t> | |||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-10- | ||||
<section anchor="operational-considerations"><name>Operational Considerations</n | 5"> | |||
ame> | <li pn="section-10-5.1">Using just mutual TLS can be considered a standa | |||
<t>If the options described in <xref target="implementation-considerations"></xr | lone solution since both endpoints are | |||
ef> are available, | cryptographically authenticated.</li> | |||
such configuration options MUST only be used in a 'migration mode', and | <li pn="section-10-5.2">Using secondary-side Strict TLS with a primary-s | |||
therefore should be used with great care.</t> | ide IP-based ACL and TSIG/SIG(0) combination | |||
<t>It is noted that use of a TLS proxy in front of the primary server is a simpl | provides sufficient protection to be acceptable.</li> | |||
e | </ul> | |||
deployment solution that can enable server side XoT.</t> | <t indent="0" pn="section-10-6">Using just an IP-based ACL could be suscep | |||
</section> | tible to attacks that can spoof TCP IP | |||
addresses; using TSIG/SIG(0) alone could be susceptible to attacks that were | ||||
<section anchor="iana-considerations"><name>IANA Considerations</name> | able to capture such messages should they be accidentally sent in cleartext by | |||
<t>None.</t> | any server | |||
</section> | with the key.</t> | |||
</section> | ||||
<section anchor="implementation-status"><name>Implementation Status</name> | <section anchor="policies-for-both-axot-and-ixot" numbered="true" removeInRF | |||
<t>[THIS SECTION TO BE REMOVED BEFORE PUBLICATION] This section records the stat | C="false" toc="include" pn="section-11"> | |||
us | <name slugifiedName="name-policies-for-both-axot-and-">Policies for Both A | |||
of known implementations of the protocol defined by this specification at the | XoT and IXoT</name> | |||
time of posting of this Internet-Draft, and is based on a proposal described in | <t indent="0" pn="section-11-1">Whilst the protection of the zone contents | |||
<xref target="RFC7942"></xref>.</t> | in a transfer between two endpoints | |||
<t>A summary of current behavior and implementation status can be found here: <e | can be provided by the XoT protocol, the protection of all the transfers of a | |||
ref target="https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Implementation+St | given zone requires operational administration and policy management.</t> | |||
atus#DNSPrivacyImplementationStatus-XFR/XoTImplementationstatus">XoT implementat | <t indent="0" pn="section-11-2">The entire group of servers involved in XF | |||
ion status</eref></t> | R for a particular set of | |||
<t>Specific recent activity includes:</t> | zones (all the primaries and all the secondaries) is called the 'transfer grou | |||
p'.</t> | ||||
<ol> | <t indent="0" pn="section-11-3">In order to assure the confidentiality of | |||
<li><t>The 1.9.2 version of | the zone information, the entire | |||
<eref target="https://github.com/NLnetLabs/unbound/blob/release-1.9.2/doc/Change | transfer group <bcp14>MUST</bcp14> have a consistent policy of using XoT. If a | |||
log">Unbound</eref> | ny do not, this | |||
includes an option to perform AXoT (instead of AXFR-over-TCP).</t> | is a weak link for attackers to exploit. For clarification, this means that | |||
</li> | within any transfer group both AXFRs and IXFRs for a zone <bcp14>MUST</bcp14> | |||
<li><t>There are currently open pull requests against NSD to implement</t> | all use | |||
XoT.</t> | ||||
<ol> | <t indent="0" pn="section-11-4">An individual zone transfer is not conside | |||
<li>Connection re-use by default during <eref target="https://github.com/NLnetLa | red protected by XoT unless | |||
bs/nsd/pull/145">XFR-over-TCP</eref></li> | both the client and server are configured to use only XoT, and the overall zon | |||
<li>Client side <eref target="https://github.com/NLnetLabs/nsd/pull/149">XoT</er | e | |||
ef></li> | transfer is not considered protected until all members of the transfer group | |||
</ol></li> | are configured to use only XoT with all other transfers servers (see <xref tar | |||
<li><t>Version 9.17.7 of BIND contained an initial implementation of DoT, implem | get="implementation-considerations" format="default" sectionFormat="of" derivedC | |||
entation of XoT is planned for early <eref target="https://gitlab.isc.org/isc-pr | ontent="Section 12"/>).</t> | |||
ojects/bind9/-/issues/1784">2021</eref></t> | <t indent="0" pn="section-11-5">A XoT policy <bcp14>MUST</bcp14> specify i | |||
</li> | f:</t> | |||
</ol> | <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-11- | |||
<t>Both items 1. and 2.2. listed above require the client (secondary) to | 6"> | |||
authenticate the server (primary) using a configured authentication domain name | <li pn="section-11-6.1">mutual TLS is used and/or</li> | |||
if XoT is used.</t> | <li pn="section-11-6.2">an IP-based ACL and TSIG/SIG(0) combination is u | |||
</section> | sed.</li> | |||
</ul> | ||||
<section anchor="security-considerations"><name>Security Considerations</name> | <t indent="0" pn="section-11-7">Since this may require configuration of a | |||
<t>This document specifies a security measure against a DNS risk: the risk that | number of servers who may be under | |||
an | the control of different operators, the desired consistency could be hard to | |||
attacker collects entire DNS zones through eavesdropping on clear text DNS zone | enforce and audit in practice.</t> | |||
<t indent="0" pn="section-11-8">Certain aspects of the policies can be rel | ||||
atively easy to test independently, | ||||
e.g., by requesting zone transfers without TSIG, from unauthorized IP addresse | ||||
s | ||||
or over cleartext DNS. Other aspects, such as if a secondary will accept data | ||||
without a TSIG digest or if secondaries are using Strict as opposed to | ||||
Opportunistic TLS, are more challenging.</t> | ||||
<t indent="0" pn="section-11-9">The mechanics of coordinating or enforcing | ||||
such policies are out of the scope | ||||
of this document but may be the subject of future operational guidance.</t> | ||||
</section> | ||||
<section anchor="implementation-considerations" numbered="true" removeInRFC= | ||||
"false" toc="include" pn="section-12"> | ||||
<name slugifiedName="name-implementation-consideratio">Implementation Cons | ||||
iderations</name> | ||||
<t indent="0" pn="section-12-1">Server implementations may want to also of | ||||
fer options that allow ACLs on a zone | ||||
to specify that a specific client can use either XoT or TCP. This would allow | ||||
for flexibility while clients are migrating to XoT.</t> | ||||
<t indent="0" pn="section-12-2">Client implementations may similarly want | ||||
to offer options to cater to the | ||||
multi-primary case where the primaries are migrating to XoT.</t> | ||||
</section> | ||||
<section anchor="operational-considerations" numbered="true" removeInRFC="fa | ||||
lse" toc="include" pn="section-13"> | ||||
<name slugifiedName="name-operational-considerations">Operational Consider | ||||
ations</name> | ||||
<t indent="0" pn="section-13-1">If the options described in <xref target=" | ||||
implementation-considerations" format="default" sectionFormat="of" derivedConten | ||||
t="Section 12"/> are | ||||
available, | ||||
such configuration options <bcp14>MUST</bcp14> only be used in a 'migration mo | ||||
de' and | ||||
therefore should be used with great care.</t> | ||||
<t indent="0" pn="section-13-2">It is noted that use of a TLS proxy in fro | ||||
nt of the primary server is a simple | ||||
deployment solution that can enable server-side XoT.</t> | ||||
</section> | ||||
<section anchor="iana-considerations" numbered="true" removeInRFC="false" to | ||||
c="include" pn="section-14"> | ||||
<name slugifiedName="name-iana-considerations">IANA Considerations</name> | ||||
<t indent="0" pn="section-14-1">This document has no IANA actions.</t> | ||||
</section> | ||||
<section anchor="security-considerations" numbered="true" removeInRFC="false | ||||
" toc="include" pn="section-15"> | ||||
<name slugifiedName="name-security-considerations">Security Considerations | ||||
</name> | ||||
<t indent="0" pn="section-15-1">This document specifies a security measure | ||||
against a DNS risk: the risk that an | ||||
attacker collects entire DNS zones through eavesdropping on cleartext DNS zone | ||||
transfers.</t> | transfers.</t> | |||
<t>This does not mitigate:</t> | <t indent="0" pn="section-15-2">This does not mitigate:</t> | |||
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-15- | ||||
<ul> | 3"> | |||
<li>the risk that some level of zone activity might be inferred by observing zon | <li pn="section-15-3.1">the risk that some level of zone activity might | |||
e | be inferred by observing zone | |||
transfer sizes and timing on encrypted connections (even with padding | transfer sizes and timing on encrypted connections (even with padding | |||
applied), in combination with obtaining SOA records by directly querying | applied), in combination with obtaining SOA records by directly querying | |||
authoritative servers.</li> | authoritative servers,</li> | |||
<li>the risk that hidden primaries might be inferred or identified via | <li pn="section-15-3.2">the risk that hidden primaries might be inferred | |||
observation of encrypted connections.</li> | or identified via | |||
<li>the risk of zone contents being obtained via zone enumeration techniques.</l | observation of encrypted connections, or</li> | |||
i> | <li pn="section-15-3.3">the risk of zone contents being obtained via zon | |||
</ul> | e enumeration techniques.</li> | |||
<t>Security concerns of DoT are outlined in <xref target="RFC7858"></xref> and < | </ul> | |||
xref target="RFC8310"></xref>.</t> | <t indent="0" pn="section-15-4">Security concerns of DoT are outlined in < | |||
</section> | xref target="RFC7858" format="default" sectionFormat="of" derivedContent="RFC785 | |||
8"/> and <xref target="RFC8310" format="default" sectionFormat="of" derivedConte | ||||
<section anchor="acknowledgements"><name>Acknowledgements</name> | nt="RFC8310"/>.</t> | |||
<t>The authors thank Tony Finch, Benno Overeinder, Shumon Huque | </section> | |||
and Tim Wicinski and many other members of DPRIVE for review and discussions.</t | </middle> | |||
> | <back> | |||
<t>The authors particularly thank Peter van Dijk, Ondrej Sury, Brian Dickson and | <displayreference target="I-D.ietf-dprive-dnsoquic" to="DPRIVE-DNSOQUIC"/> | |||
several other open source DNS implementers for valuable discussion and | <displayreference target="I-D.ietf-tls-esni" to="TLS-ESNI"/> | |||
clarification on the issue associated with pipelining XFR queries and handling | <displayreference target="I-D.vcelak-nsec5" to="NSEC5"/> | |||
out-of-order/intermingled responses.</t> | <references pn="section-16"> | |||
</section> | <name slugifiedName="name-references"> References</name> | |||
<references pn="section-16.1"> | ||||
<section anchor="contributors"><name>Contributors</name> | <name slugifiedName="name-normative-references">Normative References</na | |||
<t>Significant contributions to the document were made by:</t> | me> | |||
<t>Han Zhang <br /> | <reference anchor="DoT-ALPN" target="https://www.iana.org/assignments/tl | |||
Salesforce<br /> | s-extensiontype-values/" quoteTitle="true" derivedAnchor="DoT-ALPN"> | |||
San Francisco, CA<br /> | <front> | |||
United States</t> | <title>TLS Application-Layer Protocol Negotiation (ALPN) Protocol ID | |||
<t>Email: hzhang@salesforce.com</t> | s</title> | |||
</section> | <author> | |||
<organization showOnFrontPage="true">IANA</organization> | ||||
<section anchor="changelog"><name>Changelog</name> | </author> | |||
<t>[THIS SECTION TO BE REMOVED BEFORE PUBLICATION]</t> | </front> | |||
<t>draft-ietf-dprive-xfr-over-tls-12</t> | </reference> | |||
<reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1 | ||||
<ul> | 034" quoteTitle="true" derivedAnchor="RFC1034"> | |||
<li>Changes from IESG review</li> | <front> | |||
<li>Add section 8.1 on the requirement to use the DoT ALPN</li> | <title>Domain names - concepts and facilities</title> | |||
<li><t>Modify the one of the options for validation of a client from just an IP | <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | |||
ACL to a combination of | tris"> | |||
IP ACL and TSIG/SIG(0)</t> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
<ul> | <date year="1987" month="November"/> | |||
<li>Update Abstract and Introduction with clear descriptions of how earlier spec | <abstract> | |||
ifications are updated</li> | <t indent="0">This RFC is the revised basic definition of The Doma | |||
<li>Add reference on NSEC3 attacks</li> | in Name System. It obsoletes RFC-882. This memo describes the domain style nam | |||
<li>Justify use of SHOULD in sections 7.3.2 and 7.3.3.</li> | es and their used for host address look up and electronic mail forwarding. It d | |||
<li>Clarify the Appendix is non-normative</li> | iscusses the clients and servers in the domain name system and the protocol used | |||
<li>Numerous typos and editorial improvements.</li> | between them.</t> | |||
<li>Use xml2rfc v3 (some format changes occur as a result)</li> | </abstract> | |||
</ul></li> | </front> | |||
</ul> | <seriesInfo name="STD" value="13"/> | |||
<t>draft-ietf-dprive-xfr-over-tls-11</t> | <seriesInfo name="RFC" value="1034"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC1034"/> | ||||
<ul> | </reference> | |||
<li>Fix definition update missed in -10</li> | <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1 | |||
</ul> | 035" quoteTitle="true" derivedAnchor="RFC1035"> | |||
<t>draft-ietf-dprive-xfr-over-tls-10</t> | <front> | |||
<title>Domain names - implementation and specification</title> | ||||
<ul> | <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | |||
<li>Address issued raised from IETF Last Call</li> | tris"> | |||
</ul> | <organization showOnFrontPage="true"/> | |||
<t>draft-ietf-dprive-xfr-over-tls-09</t> | </author> | |||
<date year="1987" month="November"/> | ||||
<ul> | <abstract> | |||
<li>Address issued raised in the AD review</li> | <t indent="0">This RFC is the revised specification of the protoco | |||
</ul> | l and format used in the implementation of the Domain Name System. It obsoletes | |||
<t>draft-ietf-dprive-xfr-over-tls-08</t> | RFC-883. This memo documents the details of the domain name client - server com | |||
munication.</t> | ||||
<ul> | </abstract> | |||
<li>RFC2845 -> (obsoleted by) RFC8945</li> | </front> | |||
<li>I-D.ietf-dnsop-dns-zone-digest -> RFC8976</li> | <seriesInfo name="STD" value="13"/> | |||
<li>Minor editorial changes + email update</li> | <seriesInfo name="RFC" value="1035"/> | |||
</ul> | <seriesInfo name="DOI" value="10.17487/RFC1035"/> | |||
<t>draft-ietf-dprive-xfr-over-tls-07</t> | </reference> | |||
<reference anchor="RFC1995" target="https://www.rfc-editor.org/info/rfc1 | ||||
<ul> | 995" quoteTitle="true" derivedAnchor="RFC1995"> | |||
<li>Reference RFC7942 in the implementation status section</li> | <front> | |||
<li>Convert the URIs that will remain on publication to references</li> | <title>Incremental Zone Transfer in DNS</title> | |||
<li>Correct typos in acknowledgments</li> | <author initials="M." surname="Ohta" fullname="M. Ohta"> | |||
</ul> | <organization showOnFrontPage="true"/> | |||
<t>draft-ietf-dprive-xfr-over-tls-06</t> | </author> | |||
<date year="1996" month="August"/> | ||||
<ul> | <abstract> | |||
<li>Update text relating to pipelining and connection reuse after WGLC comments. | <t indent="0">This document proposes extensions to the DNS protoco | |||
</li> | ls to provide an incremental zone transfer (IXFR) mechanism. [STANDARDS-TRACK]< | |||
<li>Add link to implementation status matrix</li> | /t> | |||
<li>Various typos</li> | </abstract> | |||
</ul> | </front> | |||
<t>draft-ietf-dprive-xfr-over-tls-05</t> | <seriesInfo name="RFC" value="1995"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC1995"/> | ||||
<ul> | </reference> | |||
<li>Remove the open questions that received no comments.</li> | <reference anchor="RFC1996" target="https://www.rfc-editor.org/info/rfc1 | |||
<li>Add more detail to the implementation section</li> | 996" quoteTitle="true" derivedAnchor="RFC1996"> | |||
</ul> | <front> | |||
<t>draft-ietf-dprive-xfr-over-tls-04</t> | <title>A Mechanism for Prompt Notification of Zone Changes (DNS NOTI | |||
FY)</title> | ||||
<ul> | <author initials="P." surname="Vixie" fullname="P. Vixie"> | |||
<li>Add Github repository</li> | <organization showOnFrontPage="true"/> | |||
<li>Fix typos and references and improve layout.</li> | </author> | |||
</ul> | <date year="1996" month="August"/> | |||
<t>draft-ietf-dprive-xfr-over-tls-03</t> | <abstract> | |||
<t indent="0">This memo describes the NOTIFY opcode for DNS, by wh | ||||
<ul> | ich a master server advises a set of slave servers that the master's data has be | |||
<li>Remove propose to use ALPN</li> | en changed and that a query should be initiated to discover the new data. [STAND | |||
<li>Clarify updates to both RFC1995 and RFC5936 by adding specific sections on t | ARDS-TRACK]</t> | |||
his</li> | </abstract> | |||
<li>Add a section on the threat model</li> | </front> | |||
<li>Convert all SVG diagrams to ASCII art</li> | <seriesInfo name="RFC" value="1996"/> | |||
<li>Add discussions on concurrency limits</li> | <seriesInfo name="DOI" value="10.17487/RFC1996"/> | |||
<li>Add discussions on Extended DNS error codes</li> | </reference> | |||
<li>Re-work authentication requirements and discussion</li> | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
<li>Add appendix discussion TLS connection management</li> | 119" quoteTitle="true" derivedAnchor="RFC2119"> | |||
</ul> | <front> | |||
<t>draft-ietf-dprive-xfr-over-tls-02</t> | <title>Key words for use in RFCs to Indicate Requirement Levels</tit | |||
le> | ||||
<ul> | <author initials="S." surname="Bradner" fullname="S. Bradner"> | |||
<li>Significantly update descriptions for both AXoT and IXoT for message and | <organization showOnFrontPage="true"/> | |||
connection handling taking into account previous specifications in more detail</ | </author> | |||
li> | <date year="1997" month="March"/> | |||
<li>Add use of APLN and limitations on traffic on XoT connections.</li> | <abstract> | |||
<li>Add new discussions of padding for both AXoT and IXoT</li> | <t indent="0">In many standards track documents several words are | |||
<li>Add text on SIG(0)</li> | used to signify the requirements in the specification. These words are often ca | |||
<li>Update security considerations</li> | pitalized. This document defines these words as they should be interpreted in IE | |||
<li>Move multi-primary considerations to earlier as they are related to connecti | TF documents. This document specifies an Internet Best Current Practices for th | |||
on | e Internet Community, and requests discussion and suggestions for improvements.< | |||
handling</li> | /t> | |||
</ul> | </abstract> | |||
<t>draft-ietf-dprive-xfr-over-tls-01</t> | </front> | |||
<seriesInfo name="BCP" value="14"/> | ||||
<ul> | <seriesInfo name="RFC" value="2119"/> | |||
<li>Minor editorial updates</li> | <seriesInfo name="DOI" value="10.17487/RFC2119"/> | |||
<li>Add requirement for TLS 1.3. or later</li> | </reference> | |||
</ul> | <reference anchor="RFC2931" target="https://www.rfc-editor.org/info/rfc2 | |||
<t>draft-ietf-dprive-xfr-over-tls-00</t> | 931" quoteTitle="true" derivedAnchor="RFC2931"> | |||
<front> | ||||
<ul> | <title>DNS Request and Transaction Signatures ( SIG(0)s )</title> | |||
<li>Rename after adoption and reference update.</li> | <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3 | |||
<li>Add placeholder for SIG(0) discussion</li> | rd"> | |||
<li>Update section on ZONEMD</li> | <organization showOnFrontPage="true"/> | |||
</ul> | </author> | |||
<t>draft-hzpa-dprive-xfr-over-tls-02</t> | <date year="2000" month="September"/> | |||
<abstract> | ||||
<ul> | <t indent="0">This document describes the minor but non-interopera | |||
<li>Substantial re-work of the document.</li> | ble changes in Request and Transaction signature resource records ( SIG(0)s ) th | |||
</ul> | at implementation experience has deemed necessary. [STANDARDS-TRACK]</t> | |||
<t>draft-hzpa-dprive-xfr-over-tls-01</t> | </abstract> | |||
</front> | ||||
<ul> | <seriesInfo name="RFC" value="2931"/> | |||
<li>Editorial changes, updates to references.</li> | <seriesInfo name="DOI" value="10.17487/RFC2931"/> | |||
</ul> | </reference> | |||
<t>draft-hzpa-dprive-xfr-over-tls-00</t> | <reference anchor="RFC5936" target="https://www.rfc-editor.org/info/rfc5 | |||
936" quoteTitle="true" derivedAnchor="RFC5936"> | ||||
<ul> | <front> | |||
<li>Initial commit</li> | <title>DNS Zone Transfer Protocol (AXFR)</title> | |||
</ul> | <author initials="E." surname="Lewis" fullname="E. Lewis"> | |||
<t>[-@?I-D.ietf-tls-esni]</t> | <organization showOnFrontPage="true"/> | |||
</section> | </author> | |||
<author initials="A." surname="Hoenes" fullname="A. Hoenes" role="ed | ||||
</middle> | itor"> | |||
<organization showOnFrontPage="true"/> | ||||
<back> | </author> | |||
<references><name>Normative References</name> | <date year="2010" month="June"/> | |||
<reference anchor="DoT-ALPN" target="https://www.iana.org/assignments/tls-extens | <abstract> | |||
iontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids"> | <t indent="0">The standard means within the Domain Name System pro | |||
<front> | tocol for maintaining coherence among a zone's authoritative name servers consis | |||
<title>TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs</title | ts of three mechanisms. Authoritative Transfer (AXFR) is one of the mechanisms | |||
> | and is defined in RFC 1034 and RFC 1035.</t> | |||
<author> | <t indent="0">The definition of AXFR has proven insufficient in de | |||
<organization>IANA</organization> | tail, thereby forcing implementations intended to be compliant to make assumptio | |||
</author> | ns, impeding interoperability. Yet today we have a satisfactory set of implemen | |||
<date year="2021"></date> | tations that do interoperate. This document is a new definition of AXFR -- new | |||
</front> | in the sense that it records an accurate definition of an interoperable AXFR mec | |||
</reference> | hanism. [STANDARDS-TRACK]</t> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1034. | </abstract> | |||
xml"/> | </front> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1035. | <seriesInfo name="RFC" value="5936"/> | |||
xml"/> | <seriesInfo name="DOI" value="10.17487/RFC5936"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1995. | </reference> | |||
xml"/> | <reference anchor="RFC6973" target="https://www.rfc-editor.org/info/rfc6 | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1996. | 973" quoteTitle="true" derivedAnchor="RFC6973"> | |||
xml"/> | <front> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | <title>Privacy Considerations for Internet Protocols</title> | |||
xml"/> | <author initials="A." surname="Cooper" fullname="A. Cooper"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2931. | <organization showOnFrontPage="true"/> | |||
xml"/> | </author> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5936. | <author initials="H." surname="Tschofenig" fullname="H. Tschofenig"> | |||
xml"/> | <organization showOnFrontPage="true"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6973. | </author> | |||
xml"/> | <author initials="B." surname="Aboba" fullname="B. Aboba"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7766. | <organization showOnFrontPage="true"/> | |||
xml"/> | </author> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7828. | <author initials="J." surname="Peterson" fullname="J. Peterson"> | |||
xml"/> | <organization showOnFrontPage="true"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7858. | </author> | |||
xml"/> | <author initials="J." surname="Morris" fullname="J. Morris"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | <organization showOnFrontPage="true"/> | |||
xml"/> | </author> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8310. | <author initials="M." surname="Hansen" fullname="M. Hansen"> | |||
xml"/> | <organization showOnFrontPage="true"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446. | </author> | |||
xml"/> | <author initials="R." surname="Smith" fullname="R. Smith"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8499. | <organization showOnFrontPage="true"/> | |||
xml"/> | </author> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8914. | <date year="2013" month="July"/> | |||
xml"/> | <abstract> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8945. | <t indent="0">This document offers guidance for developing privacy | |||
xml"/> | considerations for inclusion in protocol specifications. It aims to make desig | |||
</references> | ners, implementers, and users of Internet protocols aware of privacy-related des | |||
<references><name>Informative References</name> | ign choices. It suggests that whether any individual RFC warrants a specific pr | |||
<reference anchor="BIND" target="https://www.isc.org/bind/"> | ivacy considerations section will depend on the document's content.</t> | |||
<front> | </abstract> | |||
<title>BIND 9.16.16</title> | </front> | |||
<author> | <seriesInfo name="RFC" value="6973"/> | |||
<organization>ISC</organization> | <seriesInfo name="DOI" value="10.17487/RFC6973"/> | |||
</author> | </reference> | |||
<date year="2021"></date> | <reference anchor="RFC7766" target="https://www.rfc-editor.org/info/rfc7 | |||
</front> | 766" quoteTitle="true" derivedAnchor="RFC7766"> | |||
</reference> | <front> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.i | <title>DNS Transport over TCP - Implementation Requirements</title> | |||
etf-dprive-dnsoquic.xml"/> | <author initials="J." surname="Dickinson" fullname="J. Dickinson"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.i | <organization showOnFrontPage="true"/> | |||
etf-dprive-phase2-requirements.xml"/> | </author> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.i | <author initials="S." surname="Dickinson" fullname="S. Dickinson"> | |||
etf-dprive-rfc7626-bis.xml"/> | <organization showOnFrontPage="true"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.i | </author> | |||
etf-tls-esni.xml"/> | <author initials="R." surname="Bellis" fullname="R. Bellis"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.v | <organization showOnFrontPage="true"/> | |||
celak-nsec5.xml"/> | </author> | |||
<reference anchor="NSD" target="https://www.nlnetlabs.nl/projects/nsd/about/"> | <author initials="A." surname="Mankin" fullname="A. Mankin"> | |||
<front> | <organization showOnFrontPage="true"/> | |||
<title>NSD 4.3.6</title> | </author> | |||
<author> | <author initials="D." surname="Wessels" fullname="D. Wessels"> | |||
<organization>NLnet Labs</organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<date year="2021"></date> | <date year="2016" month="March"/> | |||
</front> | <abstract> | |||
</reference> | <t indent="0">This document specifies the requirement for support | |||
<reference anchor="NSEC3-attacks" target="https://www.cs.bu.edu/~goldbe/papers/n | of TCP as a transport protocol for DNS implementations and provides guidelines t | |||
sec3attacks.pdf"> | owards DNS-over-TCP performance on par with that of DNS-over-UDP. This document | |||
<front> | obsoletes RFC 5966 and therefore updates RFC 1035 and RFC 1123.</t> | |||
<title>Stretching NSEC3 to the Limit:
Efficient Zone Enumeration Attacks | </abstract> | |||
on NSEC3 Variants</title> | </front> | |||
<author fullname="Sharon Goldberg" initials="S." surname="Goldberg"> | <seriesInfo name="RFC" value="7766"/> | |||
<organization> Boston University, Department of Computer Science</organiza | <seriesInfo name="DOI" value="10.17487/RFC7766"/> | |||
tion> | </reference> | |||
</author> | <reference anchor="RFC7828" target="https://www.rfc-editor.org/info/rfc7 | |||
<author fullname="Moni Naor" initials="N." surname="Naor"> | 828" quoteTitle="true" derivedAnchor="RFC7828"> | |||
<organization>Weizmann Institute of Science, Department of Computer Scienc | <front> | |||
e and Applied Mathematics</organization> | <title>The edns-tcp-keepalive EDNS0 Option</title> | |||
</author> | <author initials="P." surname="Wouters" fullname="P. Wouters"> | |||
<author fullname="Dimitrios Papadopoulos" initials="D." surname="Papadopoulo | <organization showOnFrontPage="true"/> | |||
s"> | </author> | |||
<organization> Boston University, Department of Computer Science</organiza | <author initials="J." surname="Abley" fullname="J. Abley"> | |||
tion> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<author fullname="Leonid Reyzin" initials="L." surname="Reyzin"> | <author initials="S." surname="Dickinson" fullname="S. Dickinson"> | |||
<organization> Boston University, Department of Computer Science</organiza | <organization showOnFrontPage="true"/> | |||
tion> | </author> | |||
</author> | <author initials="R." surname="Bellis" fullname="R. Bellis"> | |||
<author fullname="Sachin Vasant" initials="S." surname="Vasant"> | <organization showOnFrontPage="true"/> | |||
<organization> Boston University, Department of Computer Science</organiza | </author> | |||
tion> | <date year="2016" month="April"/> | |||
</author> | <abstract> | |||
<author fullname="Asaf Ziv" initials="A." surname="Ziv"> | <t indent="0">DNS messages between clients and servers may be rece | |||
<organization>Weizmann Institute of Science, Department of Computer Scienc | ived over either UDP or TCP. UDP transport involves keeping less state on a bus | |||
e and Applied Mathematics</organization> | y server, but can cause truncation and retries over TCP. Additionally, UDP can | |||
</author> | be exploited for reflection attacks. Using TCP would reduce retransmits and amp | |||
<date year="2015"></date> | lification. However, clients commonly use TCP only for retries and servers typi | |||
</front> | cally use idle timeouts on the order of seconds.</t> | |||
</reference> | <t indent="0">This document defines an EDNS0 option ("edns-tcp-kee | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1982. | palive") that allows DNS servers to signal a variable idle timeout. This signal | |||
xml"/> | ling encourages the use of long-lived TCP connections by allowing the state asso | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5155. | ciated with TCP transport to be managed effectively with minimal impact on the D | |||
xml"/> | NS transaction time.</t> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6891. | </abstract> | |||
xml"/> | </front> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7942. | <seriesInfo name="RFC" value="7828"/> | |||
xml"/> | <seriesInfo name="DOI" value="10.17487/RFC7828"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8484. | </reference> | |||
xml"/> | <reference anchor="RFC7858" target="https://www.rfc-editor.org/info/rfc7 | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8976. | 858" quoteTitle="true" derivedAnchor="RFC7858"> | |||
xml"/> | <front> | |||
<reference anchor="nist-guide" target="https://nvlpubs.nist.gov/nistpubs/Special | <title>Specification for DNS over Transport Layer Security (TLS)</ti | |||
Publications/NIST.SP.800-81-2.pdf"> | tle> | |||
<front> | <author initials="Z." surname="Hu" fullname="Z. Hu"> | |||
<title>Secure Domain Name System (DNS) Deployment Guide</title> | <organization showOnFrontPage="true"/> | |||
<author fullname="Ramaswamy Chandramouli" initials="R." surname="Chandramoul | </author> | |||
i"> | <author initials="L." surname="Zhu" fullname="L. Zhu"> | |||
<organization>NIST</organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<author fullname="Scott Rose" initials="S." surname="Rose"> | <author initials="J." surname="Heidemann" fullname="J. Heidemann"> | |||
<organization>NIST</organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<date year="2013"></date> | <author initials="A." surname="Mankin" fullname="A. Mankin"> | |||
</front> | <organization showOnFrontPage="true"/> | |||
</reference> | </author> | |||
</references> | <author initials="D." surname="Wessels" fullname="D. Wessels"> | |||
<organization showOnFrontPage="true"/> | ||||
<section anchor="xot-server-connection-handling"><name>XoT server connection han | </author> | |||
dling</name> | <author initials="P." surname="Hoffman" fullname="P. Hoffman"> | |||
<t>This appendix provides a non-normative outline of the pros and cons of XoT se | <organization showOnFrontPage="true"/> | |||
rver connection | </author> | |||
handling options.</t> | <date year="2016" month="May"/> | |||
<t>For completeness, it is noted that an earlier version of the specification | <abstract> | |||
suggested using a XoT specific ALPN to negotiate TLS connections that supported | <t indent="0">This document describes the use of Transport Layer S | |||
only a limited set of queries (SOA, XRFs), however, this did not gain support. | ecurity (TLS) to provide privacy for DNS. Encryption provided by TLS eliminates | |||
Reasons given included additional code complexity and the fact that XoT and ADoT | opportunities for eavesdropping and on-path tampering with DNS queries in the n | |||
are both | etwork, such as discussed in RFC 7626. In addition, this document specifies two | |||
DNS wire format and so should share the <tt>dot</tt> ALPN.</t> | usage profiles for DNS over TLS and provides advice on performance consideratio | |||
ns to minimize overhead from using TCP and TLS with DNS.</t> | ||||
<section anchor="only-listen-on-tls-on-a-specific-ip-address"><name>Only listen | <t indent="0">This document focuses on securing stub-to-recursive | |||
on TLS on a specific IP address</name> | traffic, as per the charter of the DPRIVE Working Group. It does not prevent fu | |||
<t>Obviously a nameserver which hosts a zone and services queries for the zone o | ture applications of the protocol to recursive-to-authoritative traffic.</t> | |||
n | </abstract> | |||
an IP address published in an NS record may wish to use a separate IP address | </front> | |||
for listening on TLS for XoT, only publishing that address to its secondaries.</ | <seriesInfo name="RFC" value="7858"/> | |||
t> | <seriesInfo name="DOI" value="10.17487/RFC7858"/> | |||
<t>Pros: Probing of the public IP address will show no support for TLS. ACLs wil | </reference> | |||
l | <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | |||
prevent zone transfer on all transports on a per query basis.</t> | 174" quoteTitle="true" derivedAnchor="RFC8174"> | |||
<t>Cons: Attackers passively observing traffic will still be able to observe TLS | <front> | |||
connections to the separate address.</t> | <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | |||
</section> | tle> | |||
<author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
<section anchor="client-specific-tls-acceptance"><name>Client specific TLS accep | <organization showOnFrontPage="true"/> | |||
tance</name> | </author> | |||
<t>Primaries that include IP based ACLs and/or mutual TLS in their authenticatio | <date year="2017" month="May"/> | |||
n models | <abstract> | |||
have the option of only accepting TLS connections from authorized clients. This | <t indent="0">RFC 2119 specifies common key words that may be used | |||
could be implemented using a proxy or directly in DNS implementation.</t> | in protocol specifications. This document aims to reduce the ambiguity by cla | |||
<t>Pros: Connection management happens at setup time. The maximum number of TLS | rifying that only UPPERCASE usage of the key words have the defined special mea | |||
connections a server will have to support can be easily assessed. Once the | nings.</t> | |||
connection is accepted the server might well be willing to answer any query on | </abstract> | |||
that connection since it is coming from a configured secondary and a specific | </front> | |||
response policy on the connection may not be needed (see below).</t> | <seriesInfo name="BCP" value="14"/> | |||
<t>Cons: Currently, none of the major open source DNS authoritative | <seriesInfo name="RFC" value="8174"/> | |||
implementations support such an option.</t> | <seriesInfo name="DOI" value="10.17487/RFC8174"/> | |||
</section> | </reference> | |||
<reference anchor="RFC8310" target="https://www.rfc-editor.org/info/rfc8 | ||||
<section anchor="sni-based-tls-acceptance"><name>SNI based TLS acceptance</name> | 310" quoteTitle="true" derivedAnchor="RFC8310"> | |||
<t>Primaries could also choose to only accept TLS connections based on an SNI th | <front> | |||
at | <title>Usage Profiles for DNS over TLS and DNS over DTLS</title> | |||
was published only to their secondaries.</t> | <author initials="S." surname="Dickinson" fullname="S. Dickinson"> | |||
<t>Pros: Reduces the number of accepted connections.</t> | <organization showOnFrontPage="true"/> | |||
<t>Cons: As above. Also, this is not a recommended use of SNI. For SNIs sent in | </author> | |||
the | <author initials="D." surname="Gillmor" fullname="D. Gillmor"> | |||
clear, this would still allow attackers passively observing traffic to | <organization showOnFrontPage="true"/> | |||
potentially abuse this mechanism. The use of Encrypted Client Hello | </author> | |||
<xref target="I-D.ietf-tls-esni"></xref> may be of use here.</t> | <author initials="T." surname="Reddy" fullname="T. Reddy"> | |||
</section> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
<date year="2018" month="March"/> | ||||
<abstract> | ||||
<t indent="0">This document discusses usage profiles, based on one | ||||
or more authentication mechanisms, which can be used for DNS over Transport Lay | ||||
er Security (TLS) or Datagram TLS (DTLS). These profiles can increase the priva | ||||
cy of DNS transactions compared to using only cleartext DNS. This document also | ||||
specifies new authentication mechanisms -- it describes several ways that a DNS | ||||
client can use an authentication domain name to authenticate a (D)TLS connectio | ||||
n to a DNS server. Additionally, it defines (D)TLS protocol profiles for DNS cl | ||||
ients and servers implementing DNS over (D)TLS. This document updates RFC 7858. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8310"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8310"/> | ||||
</reference> | ||||
<reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8 | ||||
446" quoteTitle="true" derivedAnchor="RFC8446"> | ||||
<front> | ||||
<title>The Transport Layer Security (TLS) Protocol Version 1.3</titl | ||||
e> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="August"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies version 1.3 of the Transport | ||||
Layer Security (TLS) protocol. TLS allows client/server applications to commun | ||||
icate over the Internet in a way that is designed to prevent eavesdropping, tamp | ||||
ering, and message forgery.</t> | ||||
<t indent="0">This document updates RFCs 5705 and 6066, and obsole | ||||
tes RFCs 5077, 5246, and 6961. This document also specifies new requirements fo | ||||
r TLS 1.2 implementations.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8446"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8446"/> | ||||
</reference> | ||||
<reference anchor="RFC8499" target="https://www.rfc-editor.org/info/rfc8 | ||||
499" quoteTitle="true" derivedAnchor="RFC8499"> | ||||
<front> | ||||
<title>DNS Terminology</title> | ||||
<author initials="P." surname="Hoffman" fullname="P. Hoffman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Sullivan" fullname="A. Sullivan"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="K." surname="Fujiwara" fullname="K. Fujiwara"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2019" month="January"/> | ||||
<abstract> | ||||
<t indent="0">The Domain Name System (DNS) is defined in literally | ||||
dozens of different RFCs. The terminology used by implementers and developers | ||||
of DNS protocols, and by operators of DNS systems, has sometimes changed in the | ||||
decades since the DNS was first defined. This document gives current definition | ||||
s for many of the terms used in the DNS in a single document.</t> | ||||
<t indent="0">This document obsoletes RFC 7719 and updates RFC 230 | ||||
8.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="219"/> | ||||
<seriesInfo name="RFC" value="8499"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8499"/> | ||||
</reference> | ||||
<reference anchor="RFC8914" target="https://www.rfc-editor.org/info/rfc8 | ||||
914" quoteTitle="true" derivedAnchor="RFC8914"> | ||||
<front> | ||||
<title>Extended DNS Errors</title> | ||||
<author initials="W." surname="Kumari" fullname="W. Kumari"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Hunt" fullname="E. Hunt"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Arends" fullname="R. Arends"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="W." surname="Hardaker" fullname="W. Hardaker"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Lawrence" fullname="D. Lawrence"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2020" month="October"/> | ||||
<abstract> | ||||
<t indent="0">This document defines an extensible method to return | ||||
additional information about the cause of DNS errors. Though created primarily | ||||
to extend SERVFAIL to provide additional information about the cause of DNS and | ||||
DNSSEC failures, the Extended DNS Errors option defined in this document allows | ||||
all response types to contain extended error information. Extended DNS Error inf | ||||
ormation does not change the processing of RCODEs.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8914"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8914"/> | ||||
</reference> | ||||
<reference anchor="RFC8945" target="https://www.rfc-editor.org/info/rfc8 | ||||
945" quoteTitle="true" derivedAnchor="RFC8945"> | ||||
<front> | ||||
<title>Secret Key Transaction Authentication for DNS (TSIG)</title> | ||||
<author initials="F." surname="Dupont" fullname="F. Dupont"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Morris" fullname="S. Morris"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P." surname="Vixie" fullname="P. Vixie"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3 | ||||
rd"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="O." surname="Gudmundsson" fullname="O. Gudmundsson | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Wellington" fullname="B. Wellington"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2020" month="November"/> | ||||
<abstract> | ||||
<t indent="0">This document describes a protocol for transaction-l | ||||
evel authentication using shared secrets and one-way hashing. It can be used to | ||||
authenticate dynamic updates to a DNS zone as coming from an approved client or | ||||
to authenticate responses as coming from an approved name server.</t> | ||||
<t indent="0">No recommendation is made here for distributing the | ||||
shared secrets; it is expected that a network administrator will statically conf | ||||
igure name servers and clients using some out-of-band mechanism.</t> | ||||
<t indent="0">This document obsoletes RFCs 2845 and 4635.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="93"/> | ||||
<seriesInfo name="RFC" value="8945"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8945"/> | ||||
</reference> | ||||
</references> | ||||
<references pn="section-16.2"> | ||||
<name slugifiedName="name-informative-references">Informative References | ||||
</name> | ||||
<reference anchor="BIND" target="https://www.isc.org/bind/" quoteTitle=" | ||||
true" derivedAnchor="BIND"> | ||||
<front> | ||||
<title>BIND 9.16.16</title> | ||||
<author> | ||||
<organization showOnFrontPage="true">ISC</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-dprive-dnsoquic" quoteTitle="true" target="h | ||||
ttps://datatracker.ietf.org/doc/html/draft-ietf-dprive-dnsoquic-03" derivedAncho | ||||
r="DPRIVE-DNSOQUIC"> | ||||
<front> | ||||
<title>Specification of DNS over Dedicated QUIC Connections</title> | ||||
<author initials="C." surname="Huitema" fullname="Christian Huitema" | ||||
> | ||||
<organization showOnFrontPage="true">Private Octopus Inc.</organiz | ||||
ation> | ||||
</author> | ||||
<author initials="S." surname="Dickinson" fullname="Sara Dickinson"> | ||||
<organization showOnFrontPage="true">Sinodun IT</organization> | ||||
</author> | ||||
<author initials="A." surname="Mankin" fullname="Allison Mankin"> | ||||
<organization showOnFrontPage="true">Salesforce</organization> | ||||
</author> | ||||
<date month="July" day="12" year="2021"/> | ||||
<abstract> | ||||
<t indent="0"> This document describes the use of QUIC to provid | ||||
e transport privacy | ||||
for DNS. The encryption provided by QUIC has similar properties to | ||||
that provided by TLS, while QUIC transport eliminates the head-of- | ||||
line blocking issues inherent with TCP and provides more efficient | ||||
error corrections than UDP. DNS over QUIC (DoQ) has privacy | ||||
properties similar to DNS over TLS (DoT) specified in RFC7858, and | ||||
latency characteristics similar to classic DNS over UDP. | ||||
<section anchor="transport-specific-response-policies"><name>Transport specific | </t> | |||
response policies</name> | </abstract> | |||
<t>Some primaries might rely on TSIG/SIG(0) combined with per-query IP based | </front> | |||
ACLs to authenticate secondaries. In this case the primary must accept all | <seriesInfo name="Internet-Draft" value="draft-ietf-dprive-dnsoquic-03 | |||
incoming TLS/TCP connections and then apply a transport-specific response policy | "/> | |||
on a per | <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf- | |||
query basis.</t> | dprive-dnsoquic-03.txt"/> | |||
<t>As an aside, whilst <xref target="RFC7766"></xref> makes a general purpose di | <refcontent>Work in Progress</refcontent> | |||
stinction in the advice to clients | </reference> | |||
about their usage of connections (between regular queries and zone transfers) th | <reference anchor="NIST-GUIDE" target="https://nvlpubs.nist.gov/nistpubs | |||
is is | /SpecialPublications/NIST.SP.800-81-2.pdf" quoteTitle="true" derivedAnchor="NIST | |||
not strict and nothing in the DNS protocol prevents using the same connection | -GUIDE"> | |||
for both types of traffic. Hence a server cannot know the intention of any | <front> | |||
client that connects to it, it can only inspect the messages it receives on | <title>Secure Domain Name System (DNS) Deployment Guide</title> | |||
such a connection and make per-query decisions about whether or not to answer | <author fullname="Ramaswamy Chandramouli" initials="R." surname="Cha | |||
those queries.</t> | ndramouli"> | |||
<t>Example policies a XoT server might implement are:</t> | <organization showOnFrontPage="true">NIST</organization> | |||
</author> | ||||
<author fullname="Scott Rose" initials="S." surname="Rose"> | ||||
<organization showOnFrontPage="true">NIST</organization> | ||||
</author> | ||||
<date month="September" year="2013"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="NSD" target="https://www.nlnetlabs.nl/projects/nsd/ab | ||||
out/" quoteTitle="true" derivedAnchor="NSD"> | ||||
<front> | ||||
<title>NSD 4.3.6</title> | ||||
<author> | ||||
<organization showOnFrontPage="true">NLnet Labs</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="NSEC3-attacks" target="https://www.cs.bu.edu/~goldbe/ | ||||
papers/nsec3attacks.pdf" quoteTitle="true" derivedAnchor="NSEC3-attacks"> | ||||
<front> | ||||
<title>Stretching NSEC3 to the Limit: Efficient Zone Enumeration Att | ||||
acks on NSEC3 Variants</title> | ||||
<author fullname="Sharon Goldberg" initials="S." surname="Goldberg"> | ||||
<organization showOnFrontPage="true">Boston University, Department | ||||
of Computer Science</organization> | ||||
</author> | ||||
<author fullname="Moni Naor" initials="N." surname="Naor"> | ||||
<organization showOnFrontPage="true">Weizmann Institute of Science | ||||
, Department of Computer Science and Applied Mathematics</organization> | ||||
</author> | ||||
<author fullname="Dimitrios Papadopoulos" initials="D." surname="Pap | ||||
adopoulos"> | ||||
<organization showOnFrontPage="true">Boston University, Department | ||||
of Computer Science</organization> | ||||
</author> | ||||
<author fullname="Leonid Reyzin" initials="L." surname="Reyzin"> | ||||
<organization showOnFrontPage="true">Boston University, Department | ||||
of Computer Science</organization> | ||||
</author> | ||||
<author fullname="Sachin Vasant" initials="S." surname="Vasant"> | ||||
<organization showOnFrontPage="true">Boston University, Department | ||||
of Computer Science</organization> | ||||
</author> | ||||
<author fullname="Asaf Ziv" initials="A." surname="Ziv"> | ||||
<organization showOnFrontPage="true">Weizmann Institute of Science | ||||
, Department of Computer Science and Applied Mathematics</organization> | ||||
</author> | ||||
<date month="February" year="2015"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="I-D.vcelak-nsec5" quoteTitle="true" target="https://d | ||||
atatracker.ietf.org/doc/html/draft-vcelak-nsec5-08" derivedAnchor="NSEC5"> | ||||
<front> | ||||
<title>NSEC5, DNSSEC Authenticated Denial of Existence</title> | ||||
<author initials="J." surname="Vcelak" fullname="Jan Vcelak"> | ||||
<organization showOnFrontPage="true">CZ.NIC</organization> | ||||
</author> | ||||
<author initials="S." surname="Goldberg" fullname="Sharon Goldberg"> | ||||
<organization showOnFrontPage="true">Boston University</organizati | ||||
on> | ||||
</author> | ||||
<author initials="D." surname="Papadopoulos" fullname="Dimitrios Pap | ||||
adopoulos"> | ||||
<organization showOnFrontPage="true">HKUST</organization> | ||||
</author> | ||||
<author initials="S." surname="Huque" fullname="Shumon Huque"> | ||||
<organization showOnFrontPage="true">Salesforce</organization> | ||||
</author> | ||||
<author initials="D." surname="Lawrence" fullname="David C Lawrence" | ||||
> | ||||
<organization showOnFrontPage="true">Dyn</organization> | ||||
</author> | ||||
<date month="December" day="29" year="2018"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-vcelak-nsec5-08"/> | ||||
<refcontent>Work in Progress</refcontent> | ||||
</reference> | ||||
<reference anchor="RFC1982" target="https://www.rfc-editor.org/info/rfc1 | ||||
982" quoteTitle="true" derivedAnchor="RFC1982"> | ||||
<front> | ||||
<title>Serial Number Arithmetic</title> | ||||
<author initials="R." surname="Elz" fullname="R. Elz"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Bush" fullname="R. Bush"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="1996" month="August"/> | ||||
<abstract> | ||||
<t indent="0">The DNS has long relied upon serial number arithmeti | ||||
c, a concept which has never really been defined, certainly not in an IETF docum | ||||
ent, though which has been widely understood. This memo supplies the missing de | ||||
finition. It is intended to update RFC1034 and RFC1035. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="1982"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC1982"/> | ||||
</reference> | ||||
<reference anchor="RFC5155" target="https://www.rfc-editor.org/info/rfc5 | ||||
155" quoteTitle="true" derivedAnchor="RFC5155"> | ||||
<front> | ||||
<title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existenc | ||||
e</title> | ||||
<author initials="B." surname="Laurie" fullname="B. Laurie"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Sisson" fullname="G. Sisson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Arends" fullname="R. Arends"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Blacka" fullname="D. Blacka"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2008" month="March"/> | ||||
<abstract> | ||||
<t indent="0">The Domain Name System Security (DNSSEC) Extensions | ||||
introduced the NSEC resource record (RR) for authenticated denial of existence. | ||||
This document introduces an alternative resource record, NSEC3, which similarly | ||||
provides authenticated denial of existence. However, it also provides measures | ||||
against zone enumeration and permits gradual expansion of delegation-centric zon | ||||
es. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5155"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5155"/> | ||||
</reference> | ||||
<reference anchor="RFC6891" target="https://www.rfc-editor.org/info/rfc6 | ||||
891" quoteTitle="true" derivedAnchor="RFC6891"> | ||||
<front> | ||||
<title>Extension Mechanisms for DNS (EDNS(0))</title> | ||||
<author initials="J." surname="Damas" fullname="J. Damas"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Graff" fullname="M. Graff"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P." surname="Vixie" fullname="P. Vixie"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2013" month="April"/> | ||||
<abstract> | ||||
<t indent="0">The Domain Name System's wire protocol includes a nu | ||||
mber of fixed fields whose range has been or soon will be exhausted and does not | ||||
allow requestors to advertise their capabilities to responders. This document | ||||
describes backward-compatible mechanisms for allowing the protocol to grow.</t> | ||||
<t indent="0">This document updates the Extension Mechanisms for D | ||||
NS (EDNS(0)) specification (and obsoletes RFC 2671) based on feedback from deplo | ||||
yment experience in several implementations. It also obsoletes RFC 2673 ("Binar | ||||
y Labels in the Domain Name System") and adds considerations on the use of exten | ||||
ded labels in the DNS.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="75"/> | ||||
<seriesInfo name="RFC" value="6891"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6891"/> | ||||
</reference> | ||||
<reference anchor="RFC8484" target="https://www.rfc-editor.org/info/rfc8 | ||||
484" quoteTitle="true" derivedAnchor="RFC8484"> | ||||
<front> | ||||
<title>DNS Queries over HTTPS (DoH)</title> | ||||
<author initials="P." surname="Hoffman" fullname="P. Hoffman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P." surname="McManus" fullname="P. McManus"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="October"/> | ||||
<abstract> | ||||
<t indent="0">This document defines a protocol for sending DNS que | ||||
ries and getting DNS responses over HTTPS. Each DNS query-response pair is mapp | ||||
ed into an HTTP exchange.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8484"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8484"/> | ||||
</reference> | ||||
<reference anchor="RFC8976" target="https://www.rfc-editor.org/info/rfc8 | ||||
976" quoteTitle="true" derivedAnchor="RFC8976"> | ||||
<front> | ||||
<title>Message Digest for DNS Zones</title> | ||||
<author initials="D." surname="Wessels" fullname="D. Wessels"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P." surname="Barber" fullname="P. Barber"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Weinberg" fullname="M. Weinberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="W." surname="Kumari" fullname="W. Kumari"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="W." surname="Hardaker" fullname="W. Hardaker"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2021" month="February"/> | ||||
<abstract> | ||||
<t indent="0">This document describes a protocol and new DNS Resou | ||||
rce Record that provides a cryptographic message digest over DNS zone data at re | ||||
st. The ZONEMD Resource Record conveys the digest data in the zone itself. When | ||||
used in combination with DNSSEC, ZONEMD allows recipients to verify the zone con | ||||
tents for data integrity and origin authenticity. This provides assurance that r | ||||
eceived zone data matches published data, regardless of how the zone data has be | ||||
en transmitted and received. When used without DNSSEC, ZONEMD functions as a ch | ||||
ecksum, guarding only against unintentional changes. </t> | ||||
<t indent="0">ZONEMD does not replace DNSSEC: DNSSEC protects indi | ||||
vidual RRsets (DNS data with fine granularity), whereas ZONEMD protects a zone's | ||||
data as a whole, whether consumed by authoritative name servers, recursive name | ||||
servers, or any other applications. </t> | ||||
<t indent="0">As specified herein, ZONEMD is impractical for large | ||||
, dynamic zones due to the time and resources required for digest calculation. H | ||||
owever, the ZONEMD record is extensible so that new digest schemes may be added | ||||
in the future to support large, dynamic zones.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8976"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8976"/> | ||||
</reference> | ||||
<reference anchor="RFC9076" target="https://www.rfc-editor.org/info/rfc9 | ||||
076" quoteTitle="true" derivedAnchor="RFC9076"> | ||||
<front> | ||||
<title>DNS Privacy Considerations</title> | ||||
<author initials="T." surname="Wicinski" fullname="T. Wicinski" role | ||||
="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2021" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This document describes the privacy issues associate | ||||
d with the use of the DNS by Internet users. It provides general observations ab | ||||
out typical current privacy practices. It is intended to be an analysis of the p | ||||
resent situation and does not prescribe solutions. This document obsoletes RFC 7 | ||||
626.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9076"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9076"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tls-esni" quoteTitle="true" target="https:// | ||||
datatracker.ietf.org/doc/html/draft-ietf-tls-esni-13" derivedAnchor="TLS-ESNI"> | ||||
<front> | ||||
<title>TLS Encrypted Client Hello</title> | ||||
<author initials="E." surname="Rescorla" fullname="Eric Rescorla"> | ||||
<organization showOnFrontPage="true">RTFM, Inc.</organization> | ||||
</author> | ||||
<author initials="K." surname="Oku" fullname="Kazuho Oku"> | ||||
<organization showOnFrontPage="true">Fastly</organization> | ||||
</author> | ||||
<author initials="N." surname="Sullivan" fullname="Nick Sullivan"> | ||||
<organization showOnFrontPage="true">Cloudflare</organization> | ||||
</author> | ||||
<author initials="C. A." surname="Wood" fullname="Christopher A. Woo | ||||
d"> | ||||
<organization showOnFrontPage="true">Cloudflare</organization> | ||||
</author> | ||||
<date month="August" day="12" year="2021"/> | ||||
<abstract> | ||||
<t indent="0"> This document describes a mechanism in Transport | ||||
Layer Security (TLS) | ||||
for encrypting a ClientHello message under a server public key. | ||||
<ul> | Discussion Venues | |||
<li>strict: REFUSE all queries on TLS connections except SOA and authorized XFR | ||||
requests</li> | ||||
<li>moderate: REFUSE all queries on TLS connections until one is received that i | ||||
s | ||||
signed by a recognized TSIG/SIG(0) key, then answer all queries on the | ||||
connection after that</li> | ||||
<li>complex: apply a heuristic to determine which queries on a TLS connections t | ||||
o REFUSE</li> | ||||
<li>relaxed: answer all non-XoT queries on all TLS connections with the same pol | ||||
icy applied to TCP queries</li> | ||||
</ul> | ||||
<t>Pros: Allows for flexible behavior by the server that could be changed over t | ||||
ime.</t> | ||||
<t>Cons: The server must handle the burden of accepting all TLS connections just | ||||
to perform XFRs with a small number of secondaries. Client behavior to REFUSED | ||||
response is not clearly defined (see <xref target="response-rcodes"></xref>). Cu | ||||
rrently, none of the major open | ||||
source DNS authoritative implementations offer an option for different response | ||||
policies in different transports (but such functionality could potentially be im | ||||
plemented using a proxy).</t> | ||||
<section anchor="sni-based-response-policies"><name>SNI based response policies< | This note is to be removed before publishing as an RFC. | |||
/name> | ||||
<t>In a similar fashion, XoT servers might use the presence of an SNI in the | ||||
client hello to determine which response policy to initially apply to the TLS | ||||
connections.</t> | ||||
<t>Pros: This has to potential to allow a clean distinction between a XoT servic | ||||
e | ||||
and any future DoT based service for answering recursive queries.</t> | ||||
<t>Cons: As above.</t> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
</back> | Source for this draft and an issue tracker can be found at | |||
https://github.com/tlswg/draft-ietf-tls-esni | ||||
(https://github.com/tlswg/draft-ietf-tls-esni). | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-13"/> | ||||
<format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf- | ||||
tls-esni-13.txt"/> | ||||
<refcontent>Work in Progress</refcontent> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section anchor="xot-server-connection-handling" numbered="true" removeInRFC | ||||
="false" toc="include" pn="section-appendix.a"> | ||||
<name slugifiedName="name-xot-server-connection-handl">XoT Server Connecti | ||||
on Handling</name> | ||||
<t indent="0" pn="section-appendix.a-1">This appendix provides a non-norma | ||||
tive outline of the pros and cons of XoT server | ||||
connection-handling options.</t> | ||||
<t indent="0" pn="section-appendix.a-2">For completeness, it is noted that | ||||
an earlier draft version of this document | ||||
suggested using a XoT-specific ALPN to negotiate TLS connections that supporte | ||||
d | ||||
only a limited set of queries (SOA, XFRs); however, this did not gain support. | ||||
Reasons given included additional code complexity and the fact that XoT and AD | ||||
oT are both | ||||
DNS wire format and so should share the <tt>dot</tt> ALPN.</t> | ||||
<section anchor="only-listen-on-tls-on-a-specific-ip-address" numbered="tr | ||||
ue" removeInRFC="false" toc="include" pn="section-appendix.a.1"> | ||||
<name slugifiedName="name-listening-only-on-a-specifi">Listening Only on | ||||
a Specific IP Address for TLS</name> | ||||
<t indent="0" pn="section-appendix.a.1-1">Obviously, a name server that | ||||
hosts a zone and services queries for the zone on | ||||
an IP address published in an NS record may wish to use a separate IP address | ||||
for XoT to listen for TLS, only publishing that address to its secondaries.</t | ||||
> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a.1 | ||||
-2"> | ||||
<dt pn="section-appendix.a.1-2.1">Pros:</dt> | ||||
<dd pn="section-appendix.a.1-2.2">Probing of the public IP address wil | ||||
l show no support for TLS. ACLs will | ||||
prevent zone transfer on all transports on a per-query basis.</dd> | ||||
<dt pn="section-appendix.a.1-2.3">Cons:</dt> | ||||
<dd pn="section-appendix.a.1-2.4">Attackers passively observing traffi | ||||
c will still be able to observe TLS | ||||
connections to the separate address.</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="client-specific-tls-acceptance" numbered="true" removeInR | ||||
FC="false" toc="include" pn="section-appendix.a.2"> | ||||
<name slugifiedName="name-client-specific-tls-accepta">Client-Specific T | ||||
LS Acceptance</name> | ||||
<t indent="0" pn="section-appendix.a.2-1">Primaries that include IP-base | ||||
d ACLs and/or mutual TLS in their authentication models | ||||
have the option of only accepting TLS connections from authorized clients. Thi | ||||
s | ||||
could be implemented either using a proxy or directly in the DNS implementatio | ||||
n.</t> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a.2 | ||||
-2"> | ||||
<dt pn="section-appendix.a.2-2.1">Pros:</dt> | ||||
<dd pn="section-appendix.a.2-2.2">Connection management happens at set | ||||
up time. The maximum number of TLS | ||||
connections a server will have to support can be easily assessed. Once the | ||||
connection is accepted, the server might well be willing to answer any query | ||||
on | ||||
that connection since it is coming from a configured secondary, and a specif | ||||
ic | ||||
response policy on the connection may not be needed (see below).</dd> | ||||
<dt pn="section-appendix.a.2-2.3">Cons:</dt> | ||||
<dd pn="section-appendix.a.2-2.4">Currently, none of the major open-so | ||||
urce | ||||
implementations of a DNS authoritative server support such an option.</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="sni-based-tls-acceptance" numbered="true" removeInRFC="fa | ||||
lse" toc="include" pn="section-appendix.a.3"> | ||||
<name slugifiedName="name-sni-based-tls-acceptance">SNI-Based TLS Accept | ||||
ance</name> | ||||
<t indent="0" pn="section-appendix.a.3-1">Primaries could also choose to | ||||
only accept TLS connections based on a Server Name | ||||
Indication (SNI) that was published only to their secondaries.</t> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a.3 | ||||
-2"> | ||||
<dt pn="section-appendix.a.3-2.1">Pros:</dt> | ||||
<dd pn="section-appendix.a.3-2.2">Reduces the number of accepted conne | ||||
ctions.</dd> | ||||
<dt pn="section-appendix.a.3-2.3">Cons:</dt> | ||||
<dd pn="section-appendix.a.3-2.4">As above. Also, this is not a recomm | ||||
ended use of SNI. For SNIs sent in the | ||||
clear, this would still allow attackers passively observing traffic to | ||||
potentially abuse this mechanism. The use of Encrypted Client Hello | ||||
<xref target="I-D.ietf-tls-esni" format="default" sectionFormat="of" derived | ||||
Content="TLS-ESNI"/> may be of use here.</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="transport-specific-response-policies" numbered="true" rem | ||||
oveInRFC="false" toc="include" pn="section-appendix.a.4"> | ||||
<name slugifiedName="name-transport-specific-response">Transport-Specifi | ||||
c Response Policies</name> | ||||
<t indent="0" pn="section-appendix.a.4-1">Some primaries might rely on T | ||||
SIG/SIG(0) combined with per-query, IP-based | ||||
ACLs to authenticate secondaries. In this case, the primary must accept all | ||||
incoming TLS/TCP connections and then apply a transport-specific response poli | ||||
cy on a | ||||
per-query basis.</t> | ||||
<t indent="0" pn="section-appendix.a.4-2">As an aside, whilst <xref targ | ||||
et="RFC7766" format="default" sectionFormat="of" derivedContent="RFC7766"/> make | ||||
s a general purpose distinction in | ||||
the advice to clients | ||||
about their usage of connections (between regular queries and zone transfers), | ||||
this is | ||||
not strict, and nothing in the DNS protocol prevents using the same connection | ||||
for both types of traffic. Hence, a server cannot know the intention of any | ||||
client that connects to it; it can only inspect the messages it receives on | ||||
such a connection and make per-query decisions about whether or not to answer | ||||
those queries.</t> | ||||
<t indent="0" pn="section-appendix.a.4-3">Example policies a XoT server | ||||
might implement are:</t> | ||||
<dl newline="false" spacing="normal" indent="12" pn="section-appendix.a. | ||||
4-4"> | ||||
<dt pn="section-appendix.a.4-4.1">strict:</dt> | ||||
<dd pn="section-appendix.a.4-4.2">REFUSE all queries on TLS connection | ||||
s, except SOA and authorized XFR requests</dd> | ||||
<dt pn="section-appendix.a.4-4.3">moderate:</dt> | ||||
<dd pn="section-appendix.a.4-4.4">REFUSE all queries on TLS connection | ||||
s until one is received that is | ||||
signed by a recognized TSIG/SIG(0) key, then answer all queries on the | ||||
connection after that</dd> | ||||
<dt pn="section-appendix.a.4-4.5">complex:</dt> | ||||
<dd pn="section-appendix.a.4-4.6">apply a heuristic to determine which | ||||
queries on a TLS connections to REFUSE</dd> | ||||
<dt pn="section-appendix.a.4-4.7">relaxed:</dt> | ||||
<dd pn="section-appendix.a.4-4.8">answer all non-XoT queries on all TL | ||||
S connections with the same policy applied to TCP | ||||
queries</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a.4 | ||||
-5"> | ||||
<dt pn="section-appendix.a.4-5.1">Pros:</dt> | ||||
<dd pn="section-appendix.a.4-5.2">Allows for flexible behavior by the | ||||
server that could be changed over time.</dd> | ||||
<dt pn="section-appendix.a.4-5.3">Cons:</dt> | ||||
<dd pn="section-appendix.a.4-5.4">The server must handle the burden of | ||||
accepting all TLS connections just | ||||
to perform XFRs with a small number of secondaries. Client behavior to a REF | ||||
USED | ||||
response is not clearly defined (see <xref target="response-rcodes" format=" | ||||
default" sectionFormat="of" derivedContent="Section 7.8"/>). Currently, | ||||
none of the major open-source implementations of a DNS authoritative server | ||||
offer an option for different response | ||||
policies in different transports (but such functionality could potentially b | ||||
e implemented | ||||
using a proxy).</dd> | ||||
</dl> | ||||
<section anchor="sni-based-response-policies" numbered="true" removeInRF | ||||
C="false" toc="include" pn="section-appendix.a.4.1"> | ||||
<name slugifiedName="name-sni-based-response-policies">SNI-Based Respo | ||||
nse Policies</name> | ||||
<t indent="0" pn="section-appendix.a.4.1-1">In a similar fashion, XoT | ||||
servers might use the presence of an SNI in the | ||||
Client Hello to determine which response policy to initially apply to the TLS | ||||
connections.</t> | ||||
<dl newline="false" spacing="normal" indent="3" pn="section-appendix.a | ||||
.4.1-2"> | ||||
<dt pn="section-appendix.a.4.1-2.1">Pros:</dt> | ||||
<dd pn="section-appendix.a.4.1-2.2">This has the potential to allow | ||||
a clean distinction between a XoT service | ||||
and any future DoT-based service for answering recursive queries.</dd> | ||||
<dt pn="section-appendix.a.4.1-2.3">Cons:</dt> | ||||
<dd pn="section-appendix.a.4.1-2.4">As above.</dd> | ||||
</dl> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="acknowledgements" numbered="false" removeInRFC="false" toc= | ||||
"include" pn="section-appendix.b"> | ||||
<name slugifiedName="name-acknowledgements">Acknowledgements</name> | ||||
<t indent="0" pn="section-appendix.b-1">The authors thank <contact fullnam | ||||
e="Tony Finch"/>, <contact fullname="Benno Overeinder"/>, <contact fullname="S | ||||
humon Huque"/>, | ||||
<contact fullname="Tim Wicinski"/>, and many other members of DPRIVE for revie | ||||
w and | ||||
discussions.</t> | ||||
<t indent="0" pn="section-appendix.b-2">The authors particularly thank <co | ||||
ntact fullname="Peter van Dijk"/>, | ||||
<contact fullname="Ondrej Sury"/>, <contact fullname="Brian Dickson"/>, and | ||||
several other open-source DNS implementers for valuable discussion and | ||||
clarification on the issue associated with pipelining XFR queries and handling | ||||
out-of-order/intermingled responses.</t> | ||||
</section> | ||||
<section anchor="contributors" numbered="false" removeInRFC="false" toc="inc | ||||
lude" pn="section-appendix.c"> | ||||
<name slugifiedName="name-contributors">Contributors</name> | ||||
<t indent="0" pn="section-appendix.c-1">Significant contributions to the d | ||||
ocument were made by:</t> | ||||
<contact fullname="Han Zhang"> | ||||
<organization showOnFrontPage="true">Salesforce</organization> | ||||
<address> | ||||
<postal> | ||||
<street/> | ||||
<city>San Francisco</city> | ||||
<region>CA</region> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>hzhang@salesforce.com</email> | ||||
</address> | ||||
</contact> | ||||
</section> | ||||
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
="include" pn="section-appendix.d"> | ||||
<name slugifiedName="name-authors-addresses">Authors' Addresses</name> | ||||
<author initials="W." surname="Toorop" fullname="Willem Toorop"> | ||||
<organization showOnFrontPage="true">NLnet Labs</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Science Park 400</street> | ||||
<city>Amsterdam</city> | ||||
<code>1098 XH</code> | ||||
<country>Netherlands</country> | ||||
</postal> | ||||
<email>willem@nlnetlabs.nl</email> | ||||
</address> | ||||
</author> | ||||
<author initials="S." surname="Dickinson" fullname="Sara Dickinson"> | ||||
<organization showOnFrontPage="true">Sinodun IT</organization> | ||||
<address> | ||||
<postal> | ||||
<extaddr>Magdalen Centre</extaddr> | ||||
<street>Oxford Science Park</street> | ||||
<city>Oxford</city> | ||||
<code>OX4 4GA</code> | ||||
<country>United Kingdom</country> | ||||
</postal> | ||||
<email>sara@sinodun.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="S." surname="Sahib" fullname="Shivan Sahib"> | ||||
<organization showOnFrontPage="true">Brave Software</organization> | ||||
<address> | ||||
<postal> | ||||
<city>Vancouver</city> | ||||
<region>BC</region> | ||||
<country>Canada</country> | ||||
</postal> | ||||
<email>shivankaulsahib@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="P." surname="Aras" fullname="Pallavi Aras"> | ||||
<organization showOnFrontPage="true">Salesforce</organization> | ||||
<address> | ||||
<postal> | ||||
<city>Herndon</city> | ||||
<region>VA</region> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>paras@salesforce.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="A." surname="Mankin" fullname="Allison Mankin"> | ||||
<organization showOnFrontPage="true">Salesforce</organization> | ||||
<address> | ||||
<postal> | ||||
<city>Herndon</city> | ||||
<region>VA</region> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>allison.mankin@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 23 change blocks. | ||||
1671 lines changed or deleted | 3152 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |