rfc9665.original.xml | rfc9665.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
<rfc category="std" submissionType="IETF" docName="draft-ietf-dnssd-srp-25" ipr= | <!DOCTYPE rfc [ | |||
"trust200902" | <!ENTITY nbsp " "> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" version="3" | <!ENTITY zwsp "​"> | |||
scripts="Common,Latin" sortRefs="false" consensus="true" | <!ENTITY nbhy "‑"> | |||
symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en"> | <!ENTITY wj "⁠"> | |||
]> | ||||
<rfc category="std" submissionType="IETF" docName="draft-ietf-dnssd-srp-latest" | ||||
number="9665" ipr="trust200902" xmlns:xi="http://www.w3.org/2001/XInclude" obsol | ||||
etes="" updates="" version="3" sortRefs="true" consensus="true" symRefs="true" t | ||||
ocDepth="4" tocInclude="true" xml:lang="en"> | ||||
<front> | <front> | |||
<title abbrev='Service Registration Protocol'>Service Registration Protocol | <title abbrev="Service Registration Protocol">Service Registration Protocol | |||
for DNS-Based Service Discovery</title> | for DNS-Based Service Discovery</title> | |||
<author initials="T" surname="Lemon" fullname="Ted Lemon"> | <seriesInfo name="RFC" value="9665"/> | |||
<author initials="T." surname="Lemon" fullname="Ted Lemon"> | ||||
<organization>Apple Inc.</organization> | <organization>Apple Inc.</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>One Apple Park Way</street> | <street>One Apple Park Way</street> | |||
<city>Cupertino</city> | <city>Cupertino</city> | |||
<region>California</region> | <region>CA</region> | |||
<code>95014</code> | <code>95014</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>mellon@fugue.com</email> | <email>mellon@fugue.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials='S' surname='Cheshire' fullname='Stuart Cheshire'> | <author initials="S." surname="Cheshire" fullname="Stuart Cheshire"> | |||
<organization>Apple Inc.</organization> | <organization>Apple Inc.</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>One Apple Park Way</street> | <street>One Apple Park Way</street> | |||
<city>Cupertino</city> | <city>Cupertino</city> | |||
<region>California</region> | <region>CA</region> | |||
<code>95014</code> | <code>95014</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<phone>+1 408 974 3207</phone> | <phone>+1 408 974 3207</phone> | |||
<email>cheshire@apple.com</email> | <email>cheshire@apple.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date>March 4, 2024</date> | <date month="October" year="2024"/> | |||
<area>Internet</area> | <area>INT</area> | |||
<workgroup>Internet Engineering Task Force</workgroup> | <workgroup>dnssd</workgroup> | |||
<keyword>Multicast DNS</keyword> | <keyword>Multicast DNS</keyword> | |||
<keyword>DNS-Based Service Discovery</keyword> | <keyword>DNS-Based Service Discovery</keyword> | |||
<keyword>DNS Update</keyword> | <keyword>DNS Update</keyword> | |||
<keyword>SIG(0)</keyword> | <keyword>SIG(0)</keyword> | |||
<abstract> | ||||
<t> | ||||
The Service Registration Protocol for DNS-Based Service Discovery uses t | ||||
he standard DNS Update mechanism to enable DNS-Based | ||||
Service Discovery using only unicast packets. This makes it possible to | ||||
deploy DNS Service Discovery without multicast, | ||||
which greatly improves scalability and improves performance on networks | ||||
where multicast service is not an optimal choice, | ||||
particularly IEEE 802.11 (Wi&nbhy;Fi) and IEEE 802.15.4 networks. DNS&n | ||||
bhy;SD Service registration | ||||
uses public keys and SIG(0) to allow services to defend their registrati | ||||
ons. | ||||
<abstract> | ||||
<t>The Service Registration Protocol (SRP) for DNS-based Service | ||||
Discovery (DNS&nbhy;SD) uses the standard DNS Update mechanism to | ||||
enable DNS&nbhy;SD using only unicast packets. This makes it possible | ||||
to deploy DNS&nbhy;SD without multicast, which greatly improves | ||||
scalability and improves performance on networks where multicast | ||||
service is not an optimal choice, particularly IEEE 802.11 | ||||
(Wi-Fi) and IEEE 802.15.4 networks. DNS&nbhy;SD Service | ||||
registration uses public keys and SIG(0) to allow services to defend | ||||
their registrations. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
<note removeInRFC="true"> | ||||
<name>About This Document</name> | ||||
<t> | ||||
The latest revision of this draft can be found at <eref target="https:// | ||||
dnssd-wg.github.io/draft-ietf-dnssd-srp/draft-ietf-dnssd-srp.html"/>. | ||||
Status information for this document may be found at <eref target="https | ||||
://datatracker.ietf.org/doc/draft-ietf-dnssd-srp/"/>. | ||||
</t> | ||||
<t> | ||||
Discussion of this document takes place on the | ||||
DNS-SD Working Group mailing list (<eref target="mailto:dnssd@ietf.org"/ | ||||
>), | ||||
which is archived at <eref target="https://mailarchive.ietf.org/arch/bro | ||||
wse/dnssd/"/>. | ||||
Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dnssd/" | ||||
/>. | ||||
</t> | ||||
<t>Source for this draft and an issue tracker can be found at | ||||
<eref target="https://github.com/dnssd-wg/draft-ietf-dnssd-srp"/>.</t> | ||||
</note> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section> | <section> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t> | <t> | |||
DNS&nbhy;SD <xref target="RFC6763"/> | ||||
<xref target="RFC6763">DNS-Based Service Discovery</xref> is a component | is a component of Zero Configuration Networking | |||
of Zero Configuration Networking | <xref target="RFC6760"/> | |||
<xref target="RFC6760"/> <xref target="ZC"/> <xref target="I-D.cheshire- | <xref target="ZC"/> | |||
dnssd-roadmap"/>.</t> | <xref target="I-D.cheshire-dnssd-roadmap"/>.</t> | |||
<t> | ||||
This document describes an enhancement to <xref target="RFC6763">DNS-Bas | ||||
ed Service Discovery</xref> (DNS&nbhy;SD) that | ||||
allows servers to register the services they offer using the DNS protocol | ||||
rather than using <xref target="RFC6762">Multicast | ||||
DNS</xref> (mDNS). There is already a large installed base of DNS&nbhy;S | ||||
D clients that can discover services using the DNS | ||||
protocol (e.g. Android, Windows, Linux, Apple).</t> | ||||
<t> | <t> | |||
This document is intended for three audiences: implementors of software | This document describes an enhancement to DNS&nbhy;SD that | |||
that provides services that should be advertised | allows servers to register the services they offer using the DNS protocol | |||
using DNS&nbhy;SD, implementors of DNS servers that will be used in cont | over unicast rather than using Multicast DNS (mDNS) <xref target="RFC6762 | |||
exts where DNS&nbhy;SD registration is needed, and | "/>. | |||
administrators of networks where DNS&nbhy;SD service is required. The d | There is already a large installed base of DNS&nbhy;SD | |||
ocument is expected to provide sufficient | clients that can discover services using the DNS | |||
information to allow interoperable implementation of the registration pr | protocol (e.g., Android, Windows, Linux, Apple operating systems).</t> | |||
otocol.</t> | ||||
<t> | <t> | |||
DNS-Based Service Discovery (DNS&nbhy;SD) allows services to advertise t | This document is intended for three audiences: Implementers of software | |||
he fact that they provide service, and to provide | that provides services that should be advertised | |||
the information required to access that service. DNS&nbhy;SD clients ca | using DNS&nbhy;SD, implementers of authoritative DNS servers that will | |||
n then discover the set of services of a particular | be used in contexts where DNS&nbhy;SD registration is needed, and | |||
administrators of networks where DNS&nbhy;SD service is required. | ||||
The document is expected to provide sufficient | ||||
information to allow interoperable implementation | ||||
of the Service Registration Protocol.</t> | ||||
<t> | ||||
<!--[rfced] Should "services" be "servers" here to match previous, | ||||
similar text? And perhaps avoiding the two "provide" uses so | ||||
close together would be helpful for the reader? | ||||
Original: | ||||
DNS-Based Service Discovery (DNS-SD) allows services to advertise | ||||
the fact that they provide service, and to provide the | ||||
information required to access that service. | ||||
Perhaps: | ||||
DNS-SD allows servers to advertise the fact that they provide | ||||
service and to share the information required to access that | ||||
service. | ||||
[Ted] | ||||
The term "server" would be confusing here. We really do mean services. That's wh | ||||
at is discovered | ||||
using service discovery. I've reworded the sentence to make this (I hope!) clear | ||||
er. | ||||
A server is the thing that provides the service. So servers register services, o | ||||
r more correctly the SRP requester registers a service on behalf of a server. | ||||
Another point of confusion is "server" versus "DNS server" so I've clarified tha | ||||
t | ||||
throughout by replacing "server" with "authoritative DNS server" when it's a DNS | ||||
server and | ||||
not a server publishing a service. | ||||
--> | ||||
DNS&nbhy;SD allows servers to publish | ||||
the information required to access the services they provide. | ||||
DNS&nbhy;SD clients can then discover the set of services of a particula | ||||
r | ||||
type that are available. They can then select a service from among thos e that are available and obtain the information | type that are available. They can then select a service from among thos e that are available and obtain the information | |||
required to use it. Although DNS Service Discovery (DNS-SD) using the D | required to use it. Although DNS&nbhy;SD using the DNS protocol | |||
NS protocol (as opposed to mDNS) can be more efficient and versatile, it is | can be more efficient and versatile than using mDNS, it is | |||
not common in practice, because of the difficulties associated with upda | not common in practice because of the difficulties associated with updat | |||
ting authoritative DNS services with service | ing authoritative DNS services with service | |||
information.</t> | information.</t> | |||
<t> | <t> | |||
Existing practice for updating DNS zones is to either manually enter new | The existing practice for updating DNS zones is either to enter new data | |||
data, or else use DNS Update | manually or to use DNS Update | |||
<xref target="RFC2136"/>. Unfortunately DNS Update requires either that t | <xref target="RFC2136"/>. Unfortunately, DNS Update requires either:</t> | |||
he authoritative DNS server automatically trust | <ul> | |||
updates, or else that the DNS Update requestor have some kind of shared s | <li>that the authoritative DNS server automatically trust | |||
ecret or public key that is known to the DNS server | updates or</li> | |||
and can be used to authenticate the update. Furthermore, DNS Update can | <li>that the DNS Update requester have some kind of shared secret | |||
be a fairly chatty process, requiring multiple | or public key that is known to the authoritative DNS server | |||
round trips with different conditional predicates to complete the update | and can be used to authenticate the update.</li></ul> | |||
process.</t> | <t>Furthermore, DNS Update can be a fairly chatty process, requiring mult | |||
iple | ||||
roundtrips with different conditional predicates to complete the update p | ||||
rocess.</t> | ||||
<!-- [Ted] conditional predicates are a thing in DNS Update. It's not that there | ||||
are | ||||
predicates that are conditional on the use of DNS update. So putting a '-' | ||||
here | ||||
changes the meaning in a particularly confusing way. I think saying DNS Upd | ||||
ate | ||||
here is actually redundant anyway, and the sentence is clearer without it. | ||||
--> | ||||
<t> | <t> | |||
The Service Registration Protocol (SRP) adds a set of default heuristics | The Service Registration Protocol (SRP) adds a set of default | |||
for processing DNS updates that eliminates the need for DNS update | heuristics for processing DNS updates that eliminates the need for | |||
conditional predicates: instead, the SRP registrar (a DNS server that sup | conditional predicates. | |||
ports SRP updates) has a set of default predicates | Instead, the SRP registrar (an authoritative DNS server | |||
that are applied to the update, and the update either succeeds entirely, | that supports SRP Updates) has a set of default predicates | |||
or fails in a way that allows the requestor to know | that are applied to the update; and the update either succeeds entirely o | |||
r fails in a way that allows the requester to know | ||||
what went wrong and construct a new update.</t> | what went wrong and construct a new update.</t> | |||
<t> | <t> | |||
SRP also adds a feature called First-Come, First-Served (FCFS) Naming, wh | SRP also adds a feature called "First Come, First Served Naming" (or "FCF | |||
ich allows the requestor to claim a name that is | S Naming"), which allows the requester to:</t> | |||
not yet in use, and, using SIG(0) <xref target="RFC2931"/>, to authentica | <ul><li>claim a name that is | |||
te both the initial claim and subsequent | not yet in use, and</li> | |||
updates. This prevents name conflicts, since a second SRP requestor attem | <li>authenticate, using SIG(0) <xref target="RFC2931"/>, | |||
pting to claim the same name will not possess the | both the initial claim | |||
SIG(0) key used by the first requestor to claim it, and so its claim will | (to ensure it has not been modified in transit) | |||
be rejected and the second requestor will have to | and subsequent updates | |||
(to ensure they come from the same entity that performed the initial clai | ||||
m).</li></ul> | ||||
<t>This prevents a new service instance from "stealing" a name that is al | ||||
ready in use: | ||||
A second SRP requester attempting to claim an existing name will not poss | ||||
ess the | ||||
SIG(0) key used by the first requester to claim it. Because of this, its | ||||
claim will be rejected. This will force it to | ||||
choose a new name.</t> | choose a new name.</t> | |||
<t> | <t> | |||
It is important to understand that "authenticate" here just means that we can tell that an update came from the same source | It is important to understand that "authenticate" here just means that we can tell that an update came from the same source | |||
as the original registration. We have not established trust. This has imp ortant implications for what we can and can't do | as the original registration. We have not established trust. This has imp ortant implications for what we can and can't do | |||
with data the client sends us. You will notice as you read this document | with data the SRP requester sends us. | |||
that we only support adding a very restricted set | You will notice as you read this document that | |||
we only support adding a very restricted set | ||||
of records, and the content of those records is further constrained.</t> | of records, and the content of those records is further constrained.</t> | |||
<t> | <t> | |||
The reason for this is precisely that we have not established trust. So w | The reason for this is precisely that we have not established trust. So, | |||
e can only publish information that we feel safe in | we can only publish information that we feel safe in | |||
publishing even though we do not have any basis for trusting the requesto | publishing even though we do not have any basis for trusting the requeste | |||
r. We reason that mDNS <xref target="RFC6762"/> | r. | |||
allows arbitrary hosts on a single IP link to advertise services <xref ta | We reason that mDNS <xref target="RFC6762"/> allows | |||
rget="RFC6763"/>, relying on whatever service is | arbitrary hosts on a single IP link to advertise services | |||
<xref target="RFC6763"/>, relying on whatever service is | ||||
advertised to provide authentication as a part of its protocol rather tha n in the service advertisement.</t> | advertised to provide authentication as a part of its protocol rather tha n in the service advertisement.</t> | |||
<t> | <t> | |||
This is considered reasonably safe because it requires physical presence on the network in order to advertise. An off-network | This is considered reasonably safe because it requires physical presence on the network in order to advertise. An off-network | |||
mDNS attack is simply not possible. Our goal with this specification is t o impose similar constraints. Because of this you will | mDNS attack is simply not possible. Our goal with this specification is t o impose similar constraints. Therefore, you will | |||
see in <xref target="add_validation"/> that a very restricted set of reco rds with a very restricted set of relationships are | see in <xref target="add_validation"/> that a very restricted set of reco rds with a very restricted set of relationships are | |||
allowed. You will also see in <xref target="source_validation"/> that we give advice on how to prevent off-network attacks.</t> | allowed. You will also see in <xref target="source_validation"/> that we give advice on how to prevent off-network attacks.</t> | |||
<t> | <t> | |||
This leads us to the disappointing observation that this protocol is not a mechanism for adding arbitrary information to | This leads us to the disappointing observation that this protocol is not a mechanism for adding arbitrary information to | |||
DNS zones. We have not evaluated the security properties of adding, for e xample, an SOA record, an MX record, or a CNAME | DNS zones. We have not evaluated the security properties of adding, for e xample, an SOA record, an MX record, or a CNAME | |||
record, and so these are forbidden. A future protocol specification might | record; therefore, these are forbidden. | |||
include analyses for other records, and extend | Future updates to this specification might include analyses for other rec | |||
the set of records that can be registered here. Or it might require estab | ords | |||
lishment of trust, and add an authorization model | and extend the set of records and/or record content that can be registere | |||
to the authentication model we now have. But this is work for a future do | d here. | |||
cument.</t> | Or it might require establishment of trust, and add an authorization mode | |||
l | ||||
to the authentication model we now have. | ||||
But that is work for a future document.</t> | ||||
<t> | <t> | |||
Finally, SRP adds the concept of a 'lease,' similar to leases in Dynamic | Finally, SRP adds the concept of a "lease" <xref target="RFC9664"/>, | |||
Host Configuration Protocol | analogous to leases in DHCP | |||
<xref target="RFC8415"/>. The SRP registration itself has a lease which | <xref target="RFC2131"/> <xref target="RFC8415"/>. | |||
may be on the order of an hour; if the requestor | The SRP registration itself has a lease that | |||
may be on the order of two hours; if the requester | ||||
does not renew the lease before it has elapsed, the registration is remov ed. The claim on the name can have a longer | does not renew the lease before it has elapsed, the registration is remov ed. The claim on the name can have a longer | |||
lease, so that another requestor cannot claim the name, even though the r | lease so that another requester cannot claim the name, even though the re | |||
egistration has expired.</t> | gistration has expired.</t> | |||
<!-- [Ted] This edit makes the sentence not make sense. What is "The SRP for DNS | ||||
-SD?" I don't know. This is not a good time to use | ||||
an acronym. We could say "SRP provides a..." but for whatever reason we wan | ||||
ted to spell out the protocol that is described | ||||
in this document, so I think we need to fully spell it out. --> | ||||
<t> | <t> | |||
The Service Registration Protocol for DNS&nbhy;SD (SRP), specified in th | The Service Registration Protocol for DNS&nbhy;SD | |||
is document, provides a reasonably secure mechanism | specified in this document provides a reasonably secure | |||
for publishing this information. Once published, these services can be | mechanism for publishing this information. | |||
readily discovered by DNS&nbhy;SD clients using | Once published, these services can be readily | |||
discovered by DNS&nbhy;SD clients using | ||||
standard DNS lookups.</t> | standard DNS lookups.</t> | |||
<t> | <t> | |||
The DNS&nbhy;SD specification (<xref target="RFC6763" section="10" secti | Section <xref target="RFC6763" section="10" sectionFormat="bare"/> | |||
onFormat="comma"/>, “Populating the DNS with | of the DNS&nbhy;SD specification <xref target="RFC6763"/> | |||
Information”), briefly discusses ways that servers can publish their inf | briefly discusses ways that servers can advertise the services | |||
ormation in the DNS namespace. In the case of | they provide in the DNS namespace. In the case of | |||
mDNS, it allows servers to publish their information on the local link, | mDNS, it allows servers to advertise their services on the local link, | |||
using names in the ".local" namespace, which makes | using names in the "local." namespace, which makes | |||
their services directly discoverable by peers attached to that same loca l link.</t> | their services directly discoverable by peers attached to that same loca l link.</t> | |||
<t> | <t> | |||
RFC6763 also allows clients to discover services using <xref target="RFC | DNS&nbhy;SD <xref target="RFC6763"/> also allows clients to discover ser | |||
1035">the DNS protocol</xref>. This can be done by | vices | |||
having a system administrator manually configure service information in | by using the DNS protocol over traditional unicast <xref target="RFC1035 | |||
the DNS, but manually populating DNS authoritative | "/>. | |||
server databases is costly and potentially error-prone, and requires a k | This can be done by | |||
nowledgeable network administrator. Consequently, | having a system administrator manually configure service information in | |||
although all DNS&nbhy;SD client implementations of which we are aware su | the DNS; however, manually populating DNS authoritative | |||
pport DNS&nbhy;SD using DNS queries, in practice it | server databases is costly and potentially error-prone and requires a kn | |||
owledgeable network administrator. Consequently, | ||||
although all DNS&nbhy;SD client implementations of which we are | ||||
aware support DNS&nbhy;SD using DNS queries, in practice it | ||||
is used much less frequently than mDNS.</t> | is used much less frequently than mDNS.</t> | |||
<t> | <t> | |||
The <xref target="RFC8766">Discovery Proxy</xref> provides one way to au | The Discovery Proxy <xref target="RFC8766"/> provides one way to automat | |||
tomatically populate the DNS | ically populate the DNS | |||
namespace, but is only appropriate on networks where services are easily | namespace but is only appropriate on networks where services are easily | |||
advertised using mDNS. This document describes a | advertised using mDNS. The present document describes a | |||
solution more suitable for networks where multicast is inefficient, or w | solution more suitable for networks where multicast is inefficient, | |||
here sleepy devices are common, by supporting both | or where sleepy devices are common, by supporting the use of unicast | |||
offering of services, and discovery of services, using unicast.</t> | for both the offering of and the discovery of services.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Conventions and Terminology Used in This Document</name> | <name>Conventions and Terminology Used in This Document</name> | |||
<t> | <t> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOU | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
LD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as described | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
in BCP 14 <xref target="RFC2119"/> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
<xref target="RFC8174"/> when, and only when, they appear in all capital | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
s, as shown here. | be interpreted as | |||
</t> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t> | ||||
Strictly speaking, fully qualified domain names end with a period. | ||||
In DNS zone files and other similar contexts, if the final period | ||||
is omitted, then a name may be treated incorrectly as relative | ||||
to some other parent domain. This document follows the formal | ||||
DNS convention, ending fully qualified domain names with a period ("."). | ||||
When this document mentions domain names such as "local." and | ||||
"default.service.arpa.", the final period is part of the domain name and | ||||
does not indicate the end of a sentence as it would in normal prose. | ||||
</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>Service Registration Protocol</name> | <name>Service Registration Protocol</name> | |||
<t> | <t> | |||
Services that implement SRP use DNS Update <xref target="RFC2136"/> <xre | Services that implement SRP use DNS Update <xref target="RFC2136"/> with | |||
f target="RFC3007"/> to publish service information | SIG(0) <xref target="RFC3007"/> to publish service information | |||
in the DNS. Two variants exist, one for full-featured hosts, and one fo | in the DNS. Two variants exist: One for full-featured hosts and one for | |||
r devices designed for "Constrained-Node Networks" | devices designed for Constrained-Node Networks (CNNs) | |||
<xref target="RFC7228"/>. An SRP registrar is most likely an authoritati | <xref target="RFC7228"/>. | |||
ve DNS server, or else is updating an authoritative | An SRP registrar is most likely an authoritative DNS server | |||
DNS server. There is no requirement that the server that is receiving SRP | or is a source of data for one or more authoritative DNS servers. | |||
updates be the same server that is answering | There is no requirement that the authoritative DNS server that is | |||
queries that return records that have been registered.</t> | receiving SRP Updates be the same authoritative DNS server that is | |||
answering queries that return records that have been registered. | ||||
For example, an SRP registrar could be the "hidden primary" that is | ||||
the source of data for a fleet of secondary authoritative DNS servers.</ | ||||
t> | ||||
<section> | <section> | |||
<name>Protocol Variants</name> | <name>Protocol Variants</name> | |||
<section> | <section> | |||
<name>Full-featured Hosts</name> | <name>Full-Featured Hosts</name> | |||
<t> | <t> | |||
Full-featured hosts either are configured manually with a registrati | Full-featured hosts either are configured manually with a registrati | |||
on domain, or discover the default registration | on domain or discover the default registration | |||
domain as described in <xref target="RFC6763" section="11" sectionFor | domain automatically using the Domain Enumeration process described i | |||
mat="of"/>. If this process does not produce a | n | |||
default registration domain, the Service Registration protocol is not | Section <xref target="RFC6763" section="11" sectionFormat="bare"/> | |||
discoverable on the local network using this | of the DNS&nbhy;SD specification <xref target="RFC6763"/>. | |||
mechanism. Other discovery mechanisms are possible, but are out of sc | If this process does not produce a | |||
ope for this document.</t> | default registration domain, the SRP registrar | |||
is not discoverable on the local network using this | ||||
mechanism. Other discovery mechanisms are possible, but they are out | ||||
of scope for this document.</t> | ||||
<t> | <t> | |||
Manual configuration of the registration domain can be done either b | Configuration of the registration domain can be done either:</t> | |||
y querying the list of available registration | <ul><li>by querying the list of available registration | |||
domains ("r._dns&nbhy;sd._udp") and allowing the user to select one | domains ("r._dns&nbhy;sd._udp") and allowing the user to select one | |||
from the UI, or by any other means appropriate to | from the UI, or</li> | |||
the particular use case being addressed. Full-featured devices cons | <li>by any other means appropriate to | |||
truct the names of the SRV, TXT, and PTR records | the particular use case being addressed.</li></ul> | |||
describing their service(s) as subdomains of the chosen service regi | <t>Full-featured devices construct the names of the SRV, TXT, and PTR | |||
stration domain. For these names they then discover | records | |||
the zone apex of the closest enclosing DNS zone using SOA queries <x | describing their service or services as subdomains of the chosen ser | |||
ref target="RFC8765" section="6.1"/>. Having | vice registration domain. For these names, they then discover | |||
the zone apex of the closest enclosing DNS zone using SOA queries | ||||
as described in | ||||
Section <xref target="RFC8765" section="6.1" sectionFormat="bare"/> | ||||
of the DNS Push Notification specification <xref target="RFC8765"/>. | ||||
Having | ||||
discovered the enclosing DNS zone, they query for the "_dnssd&nbhy;s rp._tcp.<zone>" SRV record to discover the | discovered the enclosing DNS zone, they query for the "_dnssd&nbhy;s rp._tcp.<zone>" SRV record to discover the | |||
server to which they can send SRP updates. Hosts that support SRP U pdates using TLS use the | SRP registrar to which they can send SRP Updates. Hosts that suppor t SRP Updates using TLS use the | |||
"_dnssd&nbhy;srp&nbhy;tls._tcp.<zone>" SRV record instead.</t> | "_dnssd&nbhy;srp&nbhy;tls._tcp.<zone>" SRV record instead.</t> | |||
<t> | <t> | |||
Examples of full-featured hosts include devices such as home computer s, laptops, powered peripherals with network | Examples of full-featured hosts include devices such as home computer s, laptops, powered peripherals with network | |||
connections such as printers, home routers, and even battery-operated devices such as mobile phones that have | connections (such as printers and home routers), and even battery-ope rated devices such as mobile phones that have | |||
long battery lives. | long battery lives. | |||
</t> | </t> | |||
</section> | </section> | |||
<section> | <section anchor="constrained_hosts"> | |||
<name>Constrained Hosts</name> | <name>Constrained Hosts</name> | |||
<t> | <t> | |||
For devices designed for Constrained-Node Networks <xref target="RFC | For devices designed for CNNs <xref target="RFC7228"/>, | |||
7228"/> some simplifications are available. Instead of | some simplifications are available. Instead of | |||
being configured with (or discovering) the service registration doma | being configured with (or discovering) the service registration doma | |||
in, the special-use domain name (see | in, | |||
<xref target="RFC6761"/>) "default.service.arpa" is used. The detai | the special-use domain name <xref target="RFC6761"/> "default.servic | |||
ls of how SRP registrar(s) are discovered will be specific | e.arpa." is used. | |||
to the constrained network, and therefore we do not suggest a specif | The details of how SRP registrars are discovered will be specific | |||
ic mechanism here.</t> | to the constrained network; therefore, we do not suggest a specific | |||
mechanism here.</t> | ||||
<t> | <t> | |||
SRP requestors on constrained networks are expected to receive from | SRP requesters on CNNs are expected to receive, from the network, a | |||
the network a list of SRP registrars with which to register. | list of SRP registrars with which to register. | |||
It is the responsibility of a Constrained-Node Network supporting SR | It is the responsibility of a CNN supporting SRP to provide one or m | |||
P to provide one or more registrar addresses. It is | ore registrar addresses. It is | |||
the responsibility of the registrar supporting a Constrained-Node Ne | the responsibility of the registrar supporting a CNN to handle the u | |||
twork to handle the updates appropriately. In some | pdates appropriately. In some | |||
network environments, updates may be accepted directly into a local | network environments, updates may be accepted directly into | |||
"default.service.arpa" zone, which has only local | a local "default.service.arpa." zone, which has only local | |||
visibility. In other network environments, updates for names ending | visibility. In other network environments, updates for names | |||
in "default.service.arpa" may be rewritten by the registrar | ending in "default.service.arpa." may be rewritten by the registrar | |||
to names with broader visibility.</t> | to names with broader visibility. | |||
Domain name rewriting should be performed as appropriate | ||||
for the network environment in question. | ||||
Some suggested techniques for how domain names can be | ||||
translated from a locally scoped name to a domain name | ||||
with larger scope can be found in the discussion of | ||||
data translation for names in Multicast DNS answers in | ||||
Section <xref target="RFC8766" section="5.5" sectionFormat="bare"/> | ||||
of the Discovery Proxy specification <xref target="RFC8766"/>.</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>Why two variants?</name> | <name>Why two variants?</name> | |||
<t> | <t> | |||
The reason for these different variants is that low-power devices th | The reason for these different variants is that low-power devices th | |||
at typically use Constrained-Node Networks may have | at typically use CNNs may have | |||
very limited battery storage. The series of DNS lookups required to | very limited battery capacity. The series of DNS lookups required t | |||
discover an SRP registrar and then communicate with | o discover an SRP registrar and then communicate with | |||
it will increase the energy required to advertise a service; for low -power devices, the additional flexibility this | it will increase the energy required to advertise a service; for low -power devices, the additional flexibility this | |||
provides does not justify the additional use of energy. It is also fairly typical of such networks that some network | provides does not justify the additional use of energy. It is also fairly typical of such networks that some network | |||
service information is obtained as part of the process of joining th e network, and so this can be relied upon to provide | service information is obtained as part of the process of joining th e network; thus, this can be relied upon to provide | |||
nodes with the information they need.</t> | nodes with the information they need.</t> | |||
<t> | <t> | |||
Networks that are not constrained networks can have more complicated | Networks that are not CNNs can have more complicated topologies at t | |||
topologies at the IP layer. Nodes connected | he IP layer. Nodes connected | |||
to such networks can be assumed to be able to do DNS-SD service regi | to such networks can be assumed to be able to do DNS&nbhy;SD | |||
stration domain discovery. Such networks are | service registration domain discovery. Such networks are | |||
generally able to provide registration domain discovery and routing. This creates the possibility of off-network | generally able to provide registration domain discovery and routing. This creates the possibility of off-network | |||
spoofing, where a device from a foreign network registers a service o n the local network in order to attack devices | spoofing, where a device from a foreign network registers a service o n the local network in order to attack devices | |||
on the local network. To prevent such spoofing, TCP is required for s uch networks. | on the local network. To prevent such spoofing, TCP is required for s uch networks. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Protocol Details</name> | <name>Protocol Details</name> | |||
<t> | <t> | |||
We will discuss several parts to this process: how to know what to pub | We will discuss several parts to this process:</t> | |||
lish, how to know where to publish it (under what | ||||
name), how to publish it, and how to secure its publication. In <xref | ||||
target="maintenance"/>, we specify how to maintain | ||||
the information once published.</t> | ||||
<section> | <ul spacing="compact"> | |||
<name>What to publish</name> | <li>how to know what to publish (<xref target="what"/>),</li> | |||
<li>how to know where to publish it (under what name) (<xref target="where"/>) | ||||
,</li> | ||||
<li>how to publish it (<xref target="how"/>),</li> | ||||
<li>how to secure its publication (<xref target="how-to-secure"/>), and</li> | ||||
<li>how to maintain | ||||
the information once published (<xref target="maintenance"/>).</li></u | ||||
l> | ||||
<section anchor="what"> | ||||
<name>What to Publish</name> | ||||
<t> | <t> | |||
SRP Updates are sent by SRP requestors to SRP registrars. Three typ es of instructions appear in an SRP update: Service | SRP Updates are sent by SRP requesters to SRP registrars. Three typ es of instructions appear in an SRP Update: Service | |||
Discovery instructions, Service Description instructions, and Host De scription instructions. These instructions are made | Discovery instructions, Service Description instructions, and Host De scription instructions. These instructions are made | |||
up of DNS Update RRs that are either adds or deletes. The types of re cords that are added, updated and removed in each | up of DNS Update Resource Records (RRs) that are either adds or delet es. The types of records that are added, updated, and removed in each | |||
of these instructions, as well as the constraints that apply to them, are described in <xref target="server_behavior"/>. | of these instructions, as well as the constraints that apply to them, are described in <xref target="server_behavior"/>. | |||
An SRP Update is a DNS Update message that is constructed so as to me | An SRP Update is a DNS Update message <xref target="RFC2136"/> that i | |||
et the constraints described in that section. The | s | |||
constructed so as to meet the constraints described in that section. | ||||
The | ||||
following is a brief overview of what is included in a typical SRP Up date: | following is a brief overview of what is included in a typical SRP Up date: | |||
</t> | </t> | |||
<ul spacing="compact"> | <ul spacing="normal"> | |||
<li> | <li> | |||
PTR Resource Record (RR) for services, which map from a generic se | Service Discovery PTR RR(s) for service(s), which map from a | |||
rvice type (or subtype) name to a specific | generic service type (or subtype(s)) to a specific | |||
Service Instance Name.</li> | service instance name <xref target="RFC6763"/>.</li> | |||
<li> | <li> | |||
For any Service Instance Name (<xref target="RFC6763" section="4.1" | For each service instance name, an SRV RR, one or more | |||
sectionFormat="comma"/>), an SRV RR, one or more | TXT RRs, and a KEY RR. Although, in principle, DNS&nbhy;SD | |||
TXT RRs, and a KEY RR. Although in principle DNS-SD Service Descrip | Service Description records can include other record types with | |||
tion records can include other record types with | the same service instance name, in practice, they rarely do. | |||
the same Service Instance Name, in practice they rarely do. SRP doe | Currently, SRP does not permit other record types. The KEY RR is us | |||
s not permit other record types. The KEY RR is used | ed | |||
to support FCFS naming, and has no specific meaning for DNS-SD look | to support FCFS Naming and has no specific meaning for DNS&nbhy;SD | |||
ups. SRV records for all services described in an | lookups. SRV records for all services described in an | |||
SRP update point to the same hostname.</li> | SRP Update point to the same hostname.</li> | |||
<li> | <li> | |||
There is never more than one hostname in a single SRP update. The h | There is always exactly one hostname in a single SRP Update. | |||
ostname has one or more address RRs (AAAA or A) and | A DNS Update containing more than one hostname is not an SRP Updat | |||
a KEY RR (used for FCFS naming). Depending on the use case, an SRP | e. | |||
requestor may be required to suppress some | The hostname has one or more address RRs (AAAA or A) and | |||
a KEY RR (used for FCFS Naming). Depending on the use case, an SRP | ||||
requester may be required to suppress some | ||||
addresses that would not be usable by hosts discovering the servic e through the SRP registrar. The exact address | addresses that would not be usable by hosts discovering the servic e through the SRP registrar. The exact address | |||
record suppression behavior required may vary for different types | record suppression behavior required may vary for different types | |||
of SRP requestors. An example of such advice can be | of SRP requesters. | |||
found in <xref target="RFC8766" section="5.5.2" sectionFormat="of" | Some suggested policies for suppressing unusable records can be fo | |||
/>. | und in | |||
Section <xref target="RFC8766" section="5.5.2" sectionFormat="bare | ||||
"/> | ||||
of the Discovery Proxy specification <xref target="RFC8766"/>. | ||||
</li> | </li> | |||
</ul> | </ul> | |||
<!-- [Ted] An RRtype is a type of RR, not a type of RRs, so the plural there doe | ||||
sn't make sense. I've tweaked the sentence so that | ||||
the confusion is eliminated (I hope). --> | ||||
<t> | <t> | |||
<xref target="RFC6763"/> describes the details of what each of these | The DNS-Based Service Discovery specification | |||
types of RR mean, with the exception of | <xref target="RFC6763"/> describes the details of | |||
the KEY RR, which is defined in <xref target="RFC2539"/>. These RFCs | what each of these RR types mean, with the exception of | |||
should be considered the definitive source for | the KEY RR, which was defined in the | |||
specification for how to store Diffie-Hellman | ||||
Keys in the DNS <xref target="RFC2539"/>. | ||||
These specifications should be considered | ||||
the definitive sources for | ||||
information about what to publish; the reason for summarizing this h ere is to provide the reader with enough information | information about what to publish; the reason for summarizing this h ere is to provide the reader with enough information | |||
about what will be published that the service registration process c an be understood at a high level without first | about what will be published that the service registration process c an be understood at a high level without first | |||
learning the full details of DNS&nbhy;SD. Also, the "Service Instan | learning the full details of DNS&nbhy;SD. | |||
ce Name" is an important aspect of FCFS | Also, the "service instance name" is an important aspect of FCFS | |||
naming, which we describe later on in this document.</t> | Naming, which we describe later on in this document.</t> | |||
</section> | </section> | |||
<section> | <section anchor="where"> | |||
<name>Where to publish it</name> | <name>Where to Publish It</name> | |||
<!-- [Ted] Sentence was vague, edit didn't help, I've reworded it. --> | ||||
<t> | <t> | |||
Multicast DNS uses a single namespace, ".local", which is valid on t | Multicast DNS (mDNS) uses a single namespace, "local.". | |||
he local link. This convenience is not available for | Subdomains of "local." are specific to the local link on which they | |||
DNS&nbhy;SD using the DNS protocol: services must exist in some spec | are advertised. | |||
ific DNS namespace that is chosen either by the | This convenience is not available for | |||
network operator, or automatically.</t> | DNS&nbhy;SD using the DNS protocol: Services must exist in | |||
some specific DNS namespace that is chosen either by the | ||||
network operator or automatically.</t> | ||||
<t> | <t> | |||
As described above, full-featured devices are responsible for knowin g the domain in which to register their services. | As described above, full-featured devices are responsible for knowin g the domain in which to register their services. | |||
Such devices MAY optionally support configuration of a registration d | Such devices <bcp14>MAY</bcp14> optionally support configuration of a | |||
omain by the operator of the device. However, | registration domain by the operator of the device. However, | |||
such devices MUST support registration domain discovery as described | such devices <bcp14>MUST</bcp14> support registration domain discover | |||
in <xref target="RFC6763" section="11" sectionFormat="of"/>, | y as described in | |||
"Discovery of Browsing and Registration Domains". | Section <xref target="RFC6763" section="11" sectionFormat="bare"/> | |||
of the DNS&nbhy;SD specification <xref target="RFC6763"/>. | ||||
</t> | </t> | |||
<t> | <t> | |||
Devices made for Constrained-Node Networks register in the special u | Devices made for CNNs register in the | |||
se domain name <xref target="RFC6761"/> | special-use domain name <xref target="RFC6761"/> | |||
"default.service.arpa", and let the SRP registrar handle rewriting t | "default.service.arpa." and let the SRP registrar handle | |||
hat to a different domain if necessary.</t> | rewriting that to a different domain if necessary, | |||
as described in <xref target="constrained_hosts"/>.</t> | ||||
</section> | </section> | |||
<section> | <section anchor="how"> | |||
<name>How to publish it</name> | <name>How to Publish It</name> | |||
<t> | <t> | |||
It is possible to issue a DNS Update that does several things at onc | It is possible to send a DNS Update message that does several things | |||
e; this means that it's possible to do all the work of | at once: | |||
adding a PTR resource record to the PTR RRset on the Service Name, a | For example, it's possible in a single transaction | |||
nd creating or updating the Service Instance Name and | to add or update a single Host Description | |||
Host Description, in a single transaction.</t> | while also adding or updating the RRs comprising the Service Descrip | |||
tion(s) | ||||
for one or more service instance(s) available on that host | ||||
and adding or updating the RRs comprising the Service Discovery inst | ||||
ruction(s) | ||||
for those service instance(s).</t> | ||||
<t> | <t> | |||
An SRP Update takes advantage of this: it is implemented as a single DNS Update message that contains a service's Service | An SRP Update takes advantage of this: It is implemented as a single DNS Update message that contains a service's Service | |||
Discovery records, Service Description records, and Host Description records.</t> | Discovery records, Service Description records, and Host Description records.</t> | |||
<t> | <t> | |||
Updates done according to this specification are somewhat different | Updates done according to this specification | |||
than regular DNS Updates as defined in | are somewhat different from normal DNS Updates | |||
<xref target="RFC2136"/>. The <xref target="RFC2136"/> update proces | <xref target="RFC2136"/> where the update process could involve many | |||
s can involve many update attempts: you might first | update attempts. You might first | |||
attempt to add a name if it doesn't exist; if that fails, then in a s econd message you might update the name if it does | attempt to add a name if it doesn't exist; if that fails, then in a s econd message you might update the name if it does | |||
exist but matches certain preconditions. Because the registration pr | exist but matches certain preconditions. | |||
otocol uses a single transaction, some of this | Because the Service Registration Protocol described in | |||
this document uses a single transaction, some of this | ||||
adaptability is lost.</t> | adaptability is lost.</t> | |||
<t> | <t> | |||
In order to allow updates to happen in a single transaction, SRP Upd ates do not include update prerequisites. The | In order to allow updates to happen in a single transaction, SRP Upd ates do not include update prerequisites. The | |||
requirements specified in <xref target="server_behavior"/> are impli | requirements specified in <xref target="server_behavior"/> are impli | |||
cit in the processing of SRP Updates, and so there is | cit in the processing of SRP Updates; thus, there is | |||
no need for the SRP requestor to put in any explicit prerequisites.< | no need for the SRP requester to put in any explicit prerequisites.< | |||
/t> | /t> | |||
<section> | <section> | |||
<name>How the DNS&nbhy;SD Service Registration process differs from D NS Update as specified in RFC2136</name> | <name>How the DNS&nbhy;SD Service Registration Process Differs from D NS Update</name> | |||
<t> | <t> | |||
DNS&nbhy;SD Service Registration is based on standard RFC2136 DNS | DNS&nbhy;SD Service Registration uses the DNS Update specification | |||
Update, with some differences:</t> | <xref target="RFC2136"/> | |||
<ul spacing="compact"> | with some additions:</t> | |||
<ul spacing="normal"> | ||||
<li> | <li> | |||
It implements first-come first-served name allocation, protected using SIG(0) <xref target="RFC2931"/>.</li> | It implements FCFS Naming, protected using SIG(0) <xref target="R FC2931"/>.</li> | |||
<li> | <li> | |||
It enforces policy about what updates are allowed.</li> | It enforces policy about what updates are allowed.</li> | |||
<li> | <li> | |||
It optionally performs rewriting of "default.service.arpa" to som e other domain.</li> | It optionally performs rewriting of "default.service.arpa." to so me other domain.</li> | |||
<li> | <li> | |||
It optionally performs automatic population of the address-to-nam e reverse mapping domains.</li> | It optionally performs automatic population of the address-to-nam e reverse mapping domains.</li> | |||
<li> | <li> | |||
An SRP registrar is not required to implement general DNS Update prerequisite processing.</li> | An SRP registrar is not required to implement general DNS Update prerequisite processing.</li> | |||
<li> | <li> | |||
Constrained-Node SRP requestors are allowed to send updates to th e generic domain "default.service.arpa."</li> | CNN SRP requesters are allowed to send updates to the generic dom ain "default.service.arpa.".</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Retransmission Strategy</name> | <name>Retransmission Strategy</name> | |||
<t>The DNS protocol, including DNS updates, can operate over UDP or T CP. When using UDP, reliable | <t>The DNS protocol, including DNS updates, can operate over UDP or T CP. When using UDP, reliable | |||
transmission must be guaranteed by retransmitting if a DNS UDP mess age is not acknowledged in a | transmission must be guaranteed by retransmitting if a DNS UDP mess age is not acknowledged in a | |||
reasonable interval. <xref target="RFC1035" section="4.2.1" section | reasonable interval. | |||
Format="of"/> provides some | Section <xref target="RFC1035" section="4.2.1" sectionFormat="bare" | |||
guidance on this topic, as does <xref target="RFC1536" section="1" | /> | |||
sectionFormat="of"/>. | of the DNS specification <xref target="RFC1035"/> provides some | |||
<xref target="RFC8085" section="3.1.3" sectionFormat="of"/> also pr | guidance on this topic, as does | |||
ovides useful guidance that | Section <xref target="RFC1536" section="1" sectionFormat="bare"/> | |||
is particularly relevant to DNS.</t> | of the IETF document describing common DNS implementation errors <x | |||
ref target="RFC1536"/>. | ||||
Section <xref target="RFC8085" section="3.1.3" sectionFormat="bare" | ||||
/> | ||||
of the UDP Usage Guidelines document <xref target="RFC8085"/> | ||||
also provides useful guidance that is particularly relevant to DNS. | ||||
</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>Successive Updates</name> | <name>Successive Updates</name> | |||
<t>Service Registration Protocol does not require that every update c | <t>SRP does not require that every update contain the same informatio | |||
ontain the same information. | n. | |||
When an SRP requestor needs to send more than one SRP update to the | When an SRP requester needs to send more than one | |||
SRP registrar, it MUST send | SRP Update to the SRP registrar, it <bcp14>SHOULD</bcp14> combine | |||
these sequentially: until an earlier update has been successfully a | these into a single SRP Update, | |||
cknowledged, the requestor | when possible, subject to DNS message size limits and link-specific | |||
MUST NOT begin sending a subsequent update.</t> | size limits (e.g., an IEEE 802.15.4 network will perform poorly when a | |||
sked | ||||
to deliver a packet larger than about 500 bytes). | ||||
If the updates do not fit into a single SRP Update, | ||||
then the SRP requester <bcp14>MUST</bcp14> | ||||
send subsequent SRP Updates sequentially: | ||||
Until an earlier SRP Update has been acknowledged, | ||||
the requester <bcp14>MUST NOT</bcp14> | ||||
send any subsequent SRP Updates. | ||||
If a configuration change occurs while an outstanding | ||||
SRP Update is in flight, the SRP registrar | ||||
<bcp14>MUST</bcp14> defer sending a new SRP Update for | ||||
that change until the previous SRP Update has completed.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="how-to-secure"> | <section anchor="how-to-secure"> | |||
<name>How to secure it</name> | <name>How to Secure It</name> | |||
<t> | <t> | |||
DNS update as described in <xref target="RFC2136"/> is secured using | DNS Update messages can be secured using secret key transaction sign | |||
Secret Key Transaction Signatures, | atures (TSIG) | |||
<xref target="RFC8945"/>, which uses a secret key shared between the | <xref target="RFC8945"/>. | |||
DNS Update requestor (which issues the update) and | This approach uses a secret key shared between | |||
the server (which authenticates it). This model does not work for a | the DNS Update requester (which issues the update) and | |||
utomatic service registration.</t> | the authoritative DNS server (which authenticates it). | |||
This model does not work for automatic service registration.</t> | ||||
<t> | <t> | |||
The goal of securing the DNS&nbhy;SD Registration Protocol is to pro | The goal of securing the DNS&nbhy;SD Registration Protocol | |||
vide the best possible security given the constraint | is to provide the best possible security given the constraint | |||
that service registration has to be automatic. It is possible to la yer more operational security on top of what we | that service registration has to be automatic. It is possible to la yer more operational security on top of what we | |||
describe here, but FCFS naming is already an improvement over the se curity of mDNS.</t> | describe here, but FCFS Naming is already an improvement over the se curity of mDNS.</t> | |||
<section anchor="fcfs"> | <section anchor="fcfs"> | |||
<name>First-Come First-Served Naming</name> | <name>FCFS Naming</name> | |||
<t> | <t> | |||
First-Come First-Serve naming provides a limited degree of securit | ||||
y: a server that registers its service using | <!--[rfced] To what does "that" refer in this sentence? | |||
DNS&nbhy;SD Registration protocol is given ownership of a name for | ||||
an extended period of time based on a lease | Original: | |||
specific to the key used to authenticate the DNS Update, which may | As long as the registration service remembers the name and the key | |||
be longer than the lease associated with the | used to register that name, no other server can add or update the | |||
registered records. As long as the registration service remembers | information associated with that. | |||
the name and | ||||
the key used to register that name, no other server can add or upd | Perhaps: | |||
ate the information associated with that. If the | As long as the registration service remembers the name and the key | |||
server fails to renew its service registration before the KEY leas | used to register that name, no other server can add or update the | |||
e (<xref target="I-D.ietf-dnssd-update-lease" | information associated with them. | |||
section="4"/>) expires, its name is no longer protected. FCFS nam | ||||
ing is used to protect both the Service Description | Perhaps: | |||
As long as the registration service remembers the name and the key | ||||
used to register that name, no other server can add or update the | ||||
information associated with that pair. | ||||
[Ted] Updated a bit. | ||||
--> | ||||
FCFS Naming provides a limited degree of security. A server that r | ||||
egisters its service using SRP | ||||
is given ownership of a name for an extended period of time based | ||||
on a lease | ||||
specific to the key used to authenticate the SRP Update, which may | ||||
be longer than the lease associated with the | ||||
registered RRs. As long as the registrar remembers the name | ||||
and the public key corresponding to the private key used to regist | ||||
er RRs on that name, | ||||
no other SRP requester can add or update the | ||||
information associated with that name. | ||||
If the SRP requester fails to renew its | ||||
service registration before the KEY lease expires | ||||
(Section <xref target="RFC9664" section="4" sectionFormat="bare"/> | ||||
of the DNS Update Lease specification <xref target="RFC9664"/>) | ||||
its name is no longer protected. | ||||
FCFS Naming is used to protect both the Service Description | ||||
and the Host Description.</t> | and the Host Description.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>SRP Requestor Behavior</name> | <name>SRP Requester Behavior</name> | |||
<section> | <section> | |||
<name>Public/Private key pair generation and storage</name> | <name>Public/Private Key Pair Generation and Storage</name> | |||
<t> | <t> | |||
The requestor generates a public/private key pair (See <xref target | The requester generates a public/private key pair (<xref target="rs | |||
="rsa"/>). This key pair MUST be stored in stable | a"/>). | |||
storage; if there is no writable stable storage on the SRP requesto | This key pair <bcp14>MUST</bcp14> be stored in stable | |||
r, the SRP requestor MUST be pre-configured with a | storage; if there is no writable stable storage on the SRP requeste | |||
public/private key pair in read-only storage that can be used. Thi | r, the SRP requester <bcp14>MUST</bcp14> be preconfigured with a | |||
s key pair MUST be unique to the device. A device | public/private key pair in read-only storage. | |||
with rewritable storage SHOULD retain this key indefinitely. When | This key pair <bcp14>MUST</bcp14> be unique to the device. | |||
the device changes ownership, it may be appropriate | A device | |||
with rewritable storage <bcp14>SHOULD</bcp14> retain this key indef | ||||
initely. When the device changes ownership, it may be appropriate | ||||
for the former owner to erase the old key pair, which would then re quire the new owner to install a new | for the former owner to erase the old key pair, which would then re quire the new owner to install a new | |||
one. Therefore, the SRP requestor on the device SHOULD provide a me | one. Therefore, the SRP requester on the device <bcp14>SHOULD</bcp | |||
chanism to erase the key, for example as the | 14> provide a mechanism to erase the key (for example, as the | |||
result of a "factory reset," and to generate a new key.</t> | result of a "factory reset") and to generate a new key.</t> | |||
<t> | ||||
Note that when a new key is generated, this will prevent the | ||||
device from registering with the name associated with the old | ||||
key in the same domain where it had previously registered. So, | ||||
implicit in the generation of a new key is the generation of a | ||||
new name; this can be done either proactively when regenerating | ||||
a key or when the SRP update produces a name conflict. | ||||
</t> | ||||
<t> | <t> | |||
The policy described here for managing keys assumes that the keys a re only used for SRP. If a key that is used for SRP | The policy described here for managing keys assumes that the keys a re only used for SRP. If a key that is used for SRP | |||
is also used for other purposes, the policy described here is likel | is also used for other purposes, the policy described here is likel | |||
y to be insufficient. The policy stated here is NOT | y to be insufficient. The policy stated here is <bcp14>NOT | |||
RECOMMENDED in such a situation: a policy appropriate to the full s | RECOMMENDED</bcp14> in such a situation: a policy appropriate to th | |||
et of uses for the key must be chosen. Specifying | e full set of uses for the key must be chosen. Specifying | |||
such a policy is out of scope for this document.</t> | such a policy is out of scope for this document.</t> | |||
<t> | <t> | |||
When sending DNS updates, the requestor includes a KEY record conta | When sending DNS updates, the requester includes a KEY record conta | |||
ining the public portion of the key in each Host | ining the public portion of the key in each Host | |||
Description Instruction and each Service Description Instruction. | Description Instruction and each Service Description Instruction. | |||
Each KEY record MUST contain the same public key. | Each KEY record <bcp14>MUST</bcp14> contain the same public key. | |||
The update is signed using SIG(0), using the private key that corre sponds to the public key in the KEY record. The | The update is signed using SIG(0), using the private key that corre sponds to the public key in the KEY record. The | |||
lifetimes of the records in the update is set using the EDNS(0) Upd | lifetimes of the records in the update are | |||
ate Lease option | set using the EDNS(0) Update Lease option | |||
<xref target="I-D.ietf-dnssd-update-lease"/>.</t> | <xref target="RFC9664"/>.</t> | |||
<t> | <t> | |||
The format of the KEY resource record in the SRP Update is defined | The format of the KEY resource record in the SRP Update is | |||
in <xref target="RFC3445"/>. Because the KEY RR | defined in the IETF specification for DNSSEC Resource Records | |||
used in TSIG is not a zone-signing key, the flags field in the KEY | <xref target="RFC4034"/>. Because the KEY RR | |||
RR MUST be all zeroes.</t> | used in SIG(0) is not a zone-signing key, the flags field in the KE | |||
Y RR <bcp14>MUST</bcp14> be all zeroes.</t> | ||||
<t> | <t> | |||
The KEY record in Service Description updates MAY be omitted for br evity; if it is omitted, the SRP registrar MUST behave | The KEY record in Service Description updates <bcp14>MAY</bcp14> be omitted for brevity; if it is omitted, the SRP registrar <bcp14>MUST</bcp14> be have | |||
as if the same KEY record that is given for the Host Description is also given for each Service Description for which | as if the same KEY record that is given for the Host Description is also given for each Service Description for which | |||
no KEY record is provided. Omitted KEY records are not used when c omputing the SIG(0) signature.</t> | no KEY record is provided. Omitted KEY records are not used when c omputing the SIG(0) signature.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Name Conflict Handling</name> | <name>Name Conflict Handling</name> | |||
<t> | <t> | |||
Both Host Description RR adds and Service Description RR adds can h | "Add" operations for both Host Description RRs and | |||
ave names that result in name conflicts. | Service Description RRs can have names that result in name conflict | |||
Service Discovery record adds cannot have name conflicts. If any Ho | s. | |||
st Description or Service Description record | Service Discovery record "Add" operations | |||
cannot have name conflicts. | ||||
If any Host Description or Service Description record | ||||
is found by the SRP registrar to have a conflict with an existing n ame, the registrar will respond to the SRP Update | is found by the SRP registrar to have a conflict with an existing n ame, the registrar will respond to the SRP Update | |||
with a YXDomain RCODE (<xref target="RFC2136" section="2.2" section | with a YXDomain RCODE <xref target="RFC2136"/>, indicating that the | |||
Format="of"/>). In this case, the | desired name is already owned by a different SIG(0) key. In this ca | |||
requestor MUST choose a new name or give up.</t> | se, the | |||
SRP requester <bcp14>MUST</bcp14> choose a new name or give up.</t> | ||||
<t> | <t> | |||
There is no specific requirement for how this is done; typically, h | There is no specific requirement for how the SRP | |||
owever, the requestor will append a number to the | requester should choose a new name. Typically, | |||
preferred name. This number could be sequentially increasing, or co | however, the requester will append a number to the | |||
uld be chosen randomly. One existing implementation | preferred name. This number could be sequentially increasing or cou | |||
attempts several sequential numbers before choosing randomly. So fo | ld be chosen randomly. One existing implementation | |||
r instance, it might try host.default.service.arpa, | attempts several sequential numbers before choosing randomly. | |||
then host-1.default.service.arpa, then host-2.default.service.arpa, | For instance, it might try host.default.service.arpa., | |||
then host-31773.default.service.arpa.</t> | then host&nbhy;1.default.service.arpa., | |||
then host&nbhy;2.default.service.arpa., | ||||
then host&nbhy;31773.default.service.arpa.</t> | ||||
</section> | </section> | |||
<section> | <section anchor="lifetimes"> | |||
<name>Record Lifetimes</name> | <name>Record Lifetimes</name> | |||
<t> | <t> | |||
The lifetime of the <xref target="RFC6763">DNS&nbhy;SD PTR, SRV, A, | The lifetime of the DNS&nbhy;SD PTR, SRV, A, AAAA, and TXT | |||
AAAA and TXT records</xref> uses the LEASE field | records <xref target="RFC6763"/> uses the LEASE field | |||
of the Update Lease option, and is typically set to two hours. Thi | of the Update Lease option and is typically set to two hours. Thus | |||
s means that if a device is disconnected from the | , if a device is disconnected from the | |||
network, it does not appear in the user interfaces of devices looki | network, it does not continue to appear for too long in the | |||
ng for services of that type for too long.</t> | user interfaces of devices looking for instances of that service ty | |||
pe.</t> | ||||
<t> | <t> | |||
The lifetime of the KEY records is set using the KEY-LEASE field of | The lifetime of the KEY records is set using the KEY-LEASE field of | |||
the Update Lease Option, and SHOULD be set to a | the Update Lease Option and <bcp14>SHOULD</bcp14> be set to a | |||
much longer time, typically 14 days. The result of this is that ev | much longer time, typically 14 days. The result being that even th | |||
en though a device may be temporarily unplugged, | ough a device may be temporarily unplugged -- | |||
disappearing from the network for a few days, it makes a claim on i | disappearing from the network for a few days -- it makes a claim on | |||
ts name that lasts much longer.</t> | its name that lasts much longer.</t> | |||
<t> | <t> | |||
This means that even if a device is unplugged from the network for a few days, and its services are not available for | Therefore, even if a device is unplugged from the network for a few days, and its services are not available for | |||
that time, no other device can come along and claim its name the mo ment it disappears from the network. In the event | that time, no other device can come along and claim its name the mo ment it disappears from the network. In the event | |||
that a device is unplugged from the network and permanently discard ed, then its name is eventually cleaned up and made | that a device is unplugged from the network and permanently discard ed, then its name is eventually cleaned up and made | |||
available for re-use.</t> | available for reuse.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Compression in SRV records</name> | <name>Compression in SRV Records</name> | |||
<t> | ||||
Although <xref target="RFC2782"/> requires that the target name in | ||||
the SRV record not be compressed, an SRP requestor | ||||
MAY compress the target in the SRV record. The motivation for <em>n | ||||
ot</em> compressing in <xref target="RFC2782"/> | ||||
is not stated, but is assumed to be because a caching resolver that | ||||
does not understand the format of the SRV record | ||||
might store it as binary data and thus return an invalid pointer in | ||||
response to a query. This does not apply in the | ||||
case of SRP: an SRP registrar needs to understand SRV records in or | ||||
der to validate the SRP Update. Compression of the | ||||
target can save space in the SRP Update, so we want clients to be a | ||||
ble to assume that the registrar will handle | ||||
this. Therefore, SRP registrars MUST support compression of SRV RR | ||||
targets.</t> | ||||
<t> | <t> | |||
Note that this does not update <xref target="RFC2782"/>: DNS server | Although the original SRV specification <xref target="RFC2782"/> | |||
s still MUST NOT compress SRV record targets. The | requires that the target hostname in the rdata of an SRV record | |||
requirement to accept compressed SRV records in updates only applie | not be compressed in DNS queries and responses, an SRP requester | |||
s to SRP registrars, and SRP registrars that are | <bcp14>MAY</bcp14> compress the target in the SRV record, | |||
also DNS servers still MUST NOT compress SRV record targets in DNS | since an SRP Update is neither a DNS query nor a DNS response. | |||
responses. We note also that | The motivation for <em>not</em> compressing | |||
<xref target="RFC6762"/> recomments that SRV records be compressed | is not stated in the SRV specification | |||
in mDNS messages, so <xref target="RFC2782"/> does | but is assumed to be because a recursive resolver | |||
not apply to mDNS messages.</t> | (caching server) that does not understand the format of the | |||
SRV record might store it as binary data without decoding a | ||||
compression pointer embedded with the target hostname field | ||||
and thus return nonsensical rdata in response to a query. | ||||
This concern does not apply in the | ||||
case of SRP. An SRP registrar needs to understand SRV records in or | ||||
der to validate the SRP Update. Compression of the | ||||
target can save space in the SRP Update, | ||||
so we want SRP requesters to be able to | ||||
assume that the registrar will handle | ||||
this. Therefore, SRP registrars <bcp14>MUST</bcp14> support compres | ||||
sion of SRV RR targets.</t> | ||||
<t> | ||||
<!--[rfced] How might we clarify "this" for the ease of the reader | ||||
(especially as this sentence is the first of the paragraph)? | ||||
Original: | ||||
Note that this does not update [RFC2782]: DNS servers still <bcp14>MUST | ||||
NOT</bcp14> compress SRV record targets. | ||||
[Ted] "this" refers to this document, RFC9665. | ||||
--> | ||||
Note that this document does not update | ||||
the SRV specification <xref target="RFC2782"/>: | ||||
Authoritative DNS servers still <bcp14>MUST NOT</bcp14> compress SR | ||||
V record targets. | ||||
The requirement to accept compressed SRV records in updates only ap | ||||
plies to SRP | ||||
registrars, and SRP registrars that are also authoritative DNS serv | ||||
ers still | ||||
<bcp14>MUST NOT</bcp14> compress SRV record targets in DNS response | ||||
s. | ||||
We note also that Multicast DNS <xref target="RFC6762"/> | ||||
similarly compresses SRV records in mDNS messages.</t> | ||||
<t> | <t> | |||
In addition, we note that an implementor of an SRP requestor might update existing code that creates SRV records | In addition, we note that an implementer of an SRP requester might update existing code that creates SRV records | |||
or compresses DNS messages so that it compresses the target of an S RV record. Care must be taken if such code is | or compresses DNS messages so that it compresses the target of an S RV record. Care must be taken if such code is | |||
used both in requestors and in DNS servers that the code only compr | used both in requesters and in authoritative DNS servers that the c | |||
esses in the case where a requestor is generating | ode only | |||
an SRP update.</t> | compresses in the case where a requester is generating an SRP Updat | |||
e.</t> | ||||
</section> | </section> | |||
<section anchor="remove"> | <section anchor="remove"> | |||
<name>Removing published services</name> | <name>Removing Published Services</name> | |||
<section anchor="zero-lease"> | <section anchor="zero-lease"> | |||
<name>Removing all published services</name> | <name>Removing All Published Services</name> | |||
<t> | <t> | |||
To remove all the services registered to a particular host, the S | To remove all the services registered to a particular hostname, | |||
RP requestor transmits an SRP update for that host | the SRP requester transmits an SRP Update for that hostname | |||
with an Update Lease option that has a LEASE value of zero. If th | with an Update Lease option that has a LEASE value of zero. | |||
e registration is to be permanently removed, | The SRP Update <bcp14>MUST</bcp14> contain | |||
KEY-LEASE SHOULD also be zero. Otherwise, it SHOULD be set to the | exactly one Host Description Instruction | |||
same value it had previously; this holds the name | that contains exactly one "Delete All RRsets From A Name" instruc | |||
in reserve for when the SRP requestor is once again able to provi | tion for the hostname | |||
de the service.</t> | and no "Add to an RRSet" instructions for that hostname. | |||
If the registration is to be permanently removed, | ||||
KEY-LEASE <bcp14>SHOULD</bcp14> also be zero. Otherwise, it <bcp1 | ||||
4>SHOULD</bcp14> be set to the same value it had previously; this holds the name | ||||
in reserve for when the SRP requester is once again able to provi | ||||
de the service.</t> | ||||
<t> | <t> | |||
SRP requestors are normally expected to remove all service instan | This method of removing services is intended for the case | |||
ces when removing a host. However, in some cases an SRP | where the requester is going offline and does not want | |||
requestor may not have retained sufficient state to know that som | any of its services to continue being advertised. | |||
e service instance is pointing to a host that it is | ||||
removing. This method of removing services is intended for the c | ||||
ase where the requestor is going offline and does | ||||
not want its services advertised. Therefore, it is sufficient for | ||||
the requestor to send the | ||||
<xref target="hdi">Host Description Instruction</xref>. | ||||
</t> | </t> | |||
<t> | <t> | |||
To support this, when removing services based on the lease time b | To support this, when removing a hostname, | |||
eing zero, an SRP registrar MUST remove all service | an SRP registrar <bcp14>MUST</bcp14> remove all service | |||
instances pointing to a host when a host is removed, even if the | instances pointing to that hostname | |||
SRP requestor doesn't list them explicitly. If the | and all Service Discovery PTR records pointing to those service i | |||
KEY lease time is nonzero, the SRP registrar MUST NOT delete the | nstances, | |||
KEY records for these SRP requestors. | even if the SRP requester doesn't list them explicitly. If the | |||
KEY lease time is nonzero, the SRP registrar <bcp14>MUST NOT</bcp | ||||
14> delete the KEY records for these SRP requesters. | ||||
</t> | </t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Removing some published services</name> | <name>Removing Some Published Services</name> | |||
<t> | ||||
In some use cases a requestor may need to remove some specific se | ||||
rvice, without removing its other services. This can | ||||
be accomplished in one of two ways. To simply remove a specific s | ||||
ervice, the requestor sends a valid SRP Update where | ||||
the <xref target="servdis">Service Discovery Instruction</xref> c | ||||
ontains a single Delete an RR from an RRset | ||||
(<xref target="RFC2136" section="2.5.4" sectionFormat="comma"/>) | ||||
update that deletes the PTR record whose target is | ||||
the service instance name. The <xref target="servdesc">Service De | ||||
scription Instruction</xref> in this case contains | ||||
a single Delete all RRsets from a Name (<xref target="RFC2136" se | ||||
ction="2.5.3" sectionFormat="comma"/>) update to | ||||
the service instance name. | ||||
</t> | ||||
<t> | <t> | |||
The second alternative is used when some service is being replace | In some use cases, a requester may need to remove a | |||
d by a different service with a different service | specific service without removing its other services. | |||
instance name. In this case, the old service is deleted as in the | For example, a device may | |||
first alternative. The new service is added, just | shut down its remote screen access (_rfb._tcp) service | |||
as it would be in an update that wasn't deleting the old service. | while retaining its command-line login (_ssh._tcp) service. | |||
Because both the removal of the old service and | This can be accomplished in one of two ways:</t> | |||
the add of the new service consist of a valid Service Discovery I | ||||
nstruction and a valid Service Description | <ol type="1" spacing="normal"> | |||
Instruction, the update as a whole is a valid SRP Update, and wil | <li>To simply remove a specific service, the requester sends | |||
l result in the old service being removed and the | a valid SRP Update with a Service Description Instruction | |||
new one added, or, to put it differently, in the old service bein | (<xref target="servdesc"/>) containing a single "Delete All | |||
g replaced by the new service. | RRsets From A Name" update to the service instance name. | |||
</t> | The SRP Update <bcp14>SHOULD</bcp14> include Service | |||
Discovery Instructions (<xref target="servdis"/>) consisting | ||||
of "Delete An RR From An RRset" updates <xref | ||||
target="RFC2136"/> that delete any Service Discovery PTR | ||||
records whose target is the service instance name. However, | ||||
even in the absence of such Service Discovery Instructions, | ||||
the SRP registrar <bcp14>MUST</bcp14> delete any Service | ||||
Discovery PTR records that point to the deleted service | ||||
instance name. | ||||
</li> | ||||
<li>When deleting one service instance while simultaneously | ||||
creating a new service instance with a different service | ||||
instance name, an alternative is to perform both operations | ||||
using a single SRP Update. In this case, the old service is | ||||
deleted as in the first alternative. The new service is | ||||
added, just as it would be in an update that wasn't deleting | ||||
the old service. Because both the removal of the old service | ||||
and the add of the new service consists of a valid Service | ||||
Discovery Instruction and a valid Service Description | ||||
Instruction, the update as a whole is a valid SRP Update and | ||||
will result in the old service being removed and the new one | ||||
added; or, to put it differently, the SRP Update will result | ||||
in the old service being replaced by the new service. | ||||
</li> | ||||
</ol> | ||||
<t> | <t> | |||
It is perhaps worth noting that if a service is being updated wit | It is perhaps worth noting that if a service is being updated wit | |||
hout the service instance name changing, that will | hout | |||
look very much like the second alternative above. The difference | the service instance name changing (for example, when only the ta | |||
is that because the target for the PTR record in | rget | |||
the Service Discovery Instruction is the same for both the Delete | port in the SRV record is being updated), then that SRP Update wi | |||
An RR From An RRset update and the Add To An RRSet | ll | |||
update, there is no way to tell whether they were intended to be | look very much like the second alternative above. | |||
one or two Instructions. The same would be true of | The PTR record in the Service Discovery Instruction will be the s | |||
the Service Description Instruction. | ame for | |||
both the "Delete An RR From An RRset" update and the "Add To An R | ||||
Rset" update | ||||
<xref target="RFC2136"/>. | ||||
Since the removal of the old service and the addition | ||||
of the new service are both valid SRP Update operations, | ||||
the combined operation is a valid SRP Update operation. | ||||
The SRP registrar does not need to include code to | ||||
recognize this special case and does not need to | ||||
take any special actions to handle it correctly. | ||||
</t> | </t> | |||
<t> | <t> | |||
Whichever of these two alternatives is used, the host lease will | Whichever of these two alternatives is used, the hostname lease | |||
be updated with the lease time provided in the SRP | will be updated with the lease time provided in the SRP update. | |||
update. In neither of these cases is it permissible to delete the | In neither of these cases is it permissible to delete the hostnam | |||
host. All services must point to a host. If a host | e. | |||
is to be deleted, this must be done using the method described in | All services must point to a hostname. If a hostname | |||
<xref target="zero-lease"/>, which deletes the | is to be deleted, this must be done using the method | |||
host and all services that have that host as their target. | described in <xref target="zero-lease"/>, which deletes the | |||
hostname and all services that have that hostname as their target | ||||
. | ||||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section></section> | </section></section> | |||
<section anchor="server_behavior"> | <section anchor="server_behavior"> | |||
<name>Validation and Processing of SRP Updates</name> | <name>Validation and Processing of SRP Updates</name> | |||
<section anchor="add_validation"> | <section anchor="add_validation"> | |||
<name>Validation of DNS Update Add and Delete RRs</name> | <name>Validation of DNS Update Add and Delete RRs</name> | |||
<t> | <t> | |||
The SRP registrar first validates that the DNS Update is a syntactica | The SRP registrar first validates that the DNS Update message is a sy | |||
lly and semantically valid DNS Update according to | ntactically and semantically valid DNS Update message according to | |||
the rules specified in <xref target="RFC2136"/>.</t> | the usual DNS Update rules <xref target="RFC2136"/>.</t> | |||
<t> | <t> | |||
SRP Updates consist of a set of <em>instructions</em> that together a | SRP Updates consist of a set of <em>instructions</em> | |||
dd or remove one or more services. Each instruction | that together add or remove one or more services. | |||
consists of some combination of delete updates and add updates. When | Each <em>instruction</em> consists of | |||
an instruction contains a delete and an add, the | one or more delete update(s), or one or more add update(s), | |||
delete MUST precede the add.</t> | or some combination of both delete updates and add updates.</t> | |||
<t> | <t> | |||
The SRP registrar checks each instruction in the SRP Update to see th at it is either a Service Discovery Instruction, a | The SRP registrar checks each instruction in the SRP Update to see th at it is either a Service Discovery Instruction, a | |||
Service Description Instruction, or a Host Description Instruction. Order matters in DNS updates. Specifically, | Service Description Instruction, or a Host Description Instruction. Order matters in DNS updates. Specifically, | |||
deletes must precede adds for records that the deletes would affect; | deletes must precede adds for records that the deletes would affect; | |||
otherwise the add will have no effect. This is the | otherwise, the add will have no effect. This is the | |||
only ordering constraint; aside from this constraint, updates may app | only ordering constraint: Aside from this constraint, updates may app | |||
ear in whatever order is convenient when | ear in whatever order is convenient when | |||
constructing the update.</t> | constructing the update.</t> | |||
<t> | <t> | |||
Because the SRP Update is a DNS update, it MUST contain a single ques | Because the SRP Update is a DNS update, it <bcp14>MUST</bcp14> contai | |||
tion that indicates the zone to be updated. | n | |||
Every delete and update in an SRP Update MUST be within the zone that | a single entry in the Zone Section (what would be the Question Sectio | |||
is specified for the SRP Update.</t> | n | |||
in a traditional DNS message) that indicates the zone to be updated. | ||||
Every delete and update in an SRP Update <bcp14>MUST</bcp14> be withi | ||||
n the zone that is specified for the SRP Update.</t> | ||||
<section anchor="servdis"> | <section anchor="servdis"> | |||
<name>Service Discovery Instruction</name> | <name>Service Discovery Instruction</name> | |||
<t>An instruction is a Service Discovery Instruction if it contains< | <t>An instruction is a Service Discovery Instruction if it:</t> | |||
/t> | ||||
<!-- [rfced] FYI - we updated the list as follows for clarity. Please let us | ||||
know if there are any objections. | ||||
Original: | ||||
An instruction is a Service Discovery Instruction if it contains | ||||
* exactly one "Add to an RRSet" ([RFC2136], Section 2.5.1) or | ||||
exactly one "Delete an RR from an RRSet" ([RFC2136], | ||||
Section 2.5.4) RR update, | ||||
* which updates a PTR RR, | ||||
* the target of which is a Service Instance Name | ||||
* for which name a Service Description Instruction is present in the | ||||
SRP Update, and: | ||||
- if the RR Update is an "Add to an RRSet" instruction, that | ||||
Service Description Instruction contains an "Add to an RRset" | ||||
RR update for the SRV RR describing that service and no other | ||||
"Delete from an RRset" instructions for that Service Instance | ||||
Name; or | ||||
- if the RR Update is a "Delete an RR from an RRSet" instruction, | ||||
that Service Description Instruction contains a "Delete from an | ||||
RRset" RR update and no other "Add to an RRset" instructions | ||||
for that Service Instance Name. | ||||
* and contains no other add or delete RR updates for the same name | ||||
as the PTR RR Update. | ||||
Current: | ||||
An instruction is a Service Discovery Instruction if it: | ||||
* Contains exactly one "Add to an RRSet" (Section 2.5.1 of | ||||
[RFC2136]) or exactly one "Delete an RR from an RRSet" | ||||
(Section 2.5.4 of [RFC2136]) RR update, which updates a PTR RR; | ||||
the target of which is a Service Instance Name for which name a | ||||
Service Description Instruction is present in the SRP Update. | ||||
Additionally: | ||||
- If the RR Update is an "Add to an RRSet" instruction, that | ||||
Service Description Instruction contains an "Add to an RRset" | ||||
RR update for the SRV RR describing that service and no other | ||||
"Delete from an RRset" instructions for that Service Instance | ||||
Name. | ||||
- If the RR Update is a "Delete an RR from an RRSet" instruction, | ||||
that Service Description Instruction contains a "Delete from an | ||||
RRset" RR update and no other "Add to an RRset" instructions | ||||
for that Service Instance Name. | ||||
* Contains no other add or delete RR updates for the same name as | ||||
the PTR RR Update. | ||||
[Ted] The working group worked very hard on the text and the organization and st | ||||
ructure of the | ||||
bullets here, and this change completely goes against that consensus, so I | ||||
am reverting it. I | ||||
don't mean to suggest that there was no point to this change, but it was r | ||||
eally hard to get | ||||
agreement on this precise way of formatting the text, and I do not want to | ||||
repeat that process. | ||||
I actually tried to replicate some of your changes, and wasn't sure if I w | ||||
as changing the | ||||
meaning of the text, so I've only retained your capitalization changes. Pl | ||||
ease think of this | ||||
text as more like computer code than human language, if that helps. | ||||
--> | ||||
<ul spacing="compact"> | <ul spacing="compact"> | |||
<li>exactly one "Add to an RRSet" (<xref target="RFC2136" section=" | <li>consists of | |||
2.5.1" sectionFormat="comma"/>) or exactly one | exactly one "Add To An RRSet" or | |||
"Delete an RR from an RRSet" (<xref target="RFC2136" section="2.5 | exactly one "Delete An RR From An RRSet" | |||
.4" sectionFormat="comma"/>) RR update,</li> | RR update | |||
(Section <xref target="RFC2136" section="2.5" sectionFormat="bare"/ | ||||
> | ||||
of the DNS Update specification <xref target="RFC2136"/>),</li> | ||||
<li>which updates a PTR RR,</li> | <li>which updates a PTR RR,</li> | |||
<li>the target of which is a Service Instance Name</li> | <li>the target of which is a service instance name</li> | |||
<li><t>for which name a Service Description Instruction is present in the SRP Update, and:</t> | <li><t>for which name a Service Description Instruction is present in the SRP Update, and:</t> | |||
<ul spacing="compact"> | <ul spacing="compact"> | |||
<li>if the RR Update is an "Add to an RRSet" instruction, that | <li>if the Service Discovery Instruction is an "Add To An RRSet | |||
Service Description Instruction contains an "Add to | " instruction, | |||
an RRset" RR update for the SRV RR describing that service an | that Service Description Instruction contains | |||
d no other "Delete from an RRset" instructions for | a "Delete All RRsets From A Name" instruction for that service | |||
that Service Instance Name; or</li> | instance name | |||
<li>if the RR Update is a "Delete an RR from an RRSet" instruct | followed by "Add To An RRset" instructions | |||
ion, that Service Description Instruction contains | for the SRV and TXT records describing that service; or</li> | |||
a "Delete from an RRset" RR update and no other "Add to an RR | <li>if the Service Discovery Instruction is a "Delete An RR Fro | |||
set" instructions for that Service Instance | m An RRSet" instruction, | |||
Name.</li></ul></li> | that Service Description Instruction contains | |||
<li>and contains no other add or delete RR updates for the same nam | a "Delete All RRsets From A Name" instruction for that service | |||
e as the PTR RR Update.</li> | instance name | |||
with no following "Add To An RRset" instructions | ||||
for the SRV and TXT records describing that service.</li></ul>< | ||||
/li> | ||||
</ul> | </ul> | |||
<t> | <t> | |||
Note that there can be more than one Service Discovery Instruction | Note that there can be more than one Service Discovery | |||
for the same name if the SRP requestor is | Instruction for the same service name | |||
advertising more than one service of the same type, or is changing | (the owner name of the Service Discovery PTR record) | |||
the target of a PTR RR. This is also true for SRP | if the SRP requester is advertising more than one instance | |||
subtypes (<xref target="RFC6763" section="7.1"/>). For each such PT | of the same service type or is changing the target of a PTR RR. | |||
R RR add or delete, the above constraints must be | When subtypes are being used | |||
met.</t> | (Section <xref target="RFC6763" section="7.1" sectionFormat="bare"/ | |||
> | ||||
of the DNS&nbhy;SD specification <xref target="RFC6763"/>), | ||||
each subtype is a separate Service Discovery Instruction. | ||||
For each such PTR RR add or delete, the above constraints must be m | ||||
et.</t> | ||||
</section> | </section> | |||
<section anchor="servdesc"> | <section anchor="servdesc"> | |||
<name>Service Description Instruction</name> | <name>Service Description Instruction</name> | |||
<t>An instruction is a Service Description Instruction if, for the a | <t>An instruction is a Service Description Instruction if, for the | |||
ppropriate Service Instance Name, the following are true:</t> | given service instance name, all of the following are true:</t> | |||
<ul spacing="compact"> | <ul spacing="compact"> | |||
<li> | <li> | |||
It contains exactly one "Delete all RRsets from a name" update fo | It contains exactly one "Delete All RRsets From A Name" update fo | |||
r the service instance name | r the service instance name | |||
(<xref target="RFC2136" section="2.5.3" sectionFormat="comma"/>), | (Section <xref target="RFC2136" section="2.5.3" sectionFormat="ba | |||
</li> | re"/> | |||
<li> | of the DNS Update specification <xref target="RFC2136"/>).</li> | |||
It contains zero or one "Add to an RRset" SRV RR,</li> | ||||
<li> | ||||
It contains zero or one "Add to an RRset" KEY RR that, if present | ||||
, contains the public key corresponding to the private key | ||||
that was used to sign the message (if present, the KEY MUST match | ||||
the KEY RR given in the Host Description),</li> | ||||
<li> | <li> | |||
It contains zero or more "Add to an RRset" TXT RRs,</li> | It contains zero or one "Add To An RRset" KEY RRs that, if presen | |||
t, contains the public key corresponding to the private key | ||||
that was used to sign the message (if present, the KEY RR <bcp14> | ||||
MUST</bcp14> match the KEY RR given in the Host Description).</li> | ||||
<li> | <li> | |||
If there is one "Add to an RRset" SRV update, there MUST be at le ast one "Add to an RRset" TXT update.</li> | It contains zero or one "Add To An RRset" SRV RR.</li> | |||
<li> | <li> | |||
The target of the SRV RR Add, if present points to a hostname for | If an "Add To An RRSet" update for an SRV RR is present, | |||
which there is a Host Description Instruction in | there <bcp14>MUST</bcp14> be at least one "Add To An RRset" | |||
update for the corresponding TXT RR, and | ||||
the target of the SRV RR <bcp14>MUST</bcp14> be the hostname give | ||||
n in the Host Description Instruction in | ||||
the SRP Update, or</li> | the SRP Update, or</li> | |||
<li> | <li> | |||
If there is no "Add to an RRset" SRV RR, then either:</li> | If there is no "Add To An RRset" update for an SRV RR, then | |||
<li><ul> | there <bcp14>MUST</bcp14> be no "Add To An RRset" updates for the | |||
<li>the name to which the "Delete all RRsets from a name" applies | corresponding TXT RR, | |||
does not exist, or</li> | and either:</li> | |||
<li>there is an existing KEY RR on that name, which matches the k | <li><ul spacing="compact"> | |||
ey with which the SRP Update was | <li>the name to which the "Delete All RRsets From A Name" applies | |||
does not exist, or</li> | ||||
<li>there is an existing KEY RR on that name that matches the key | ||||
with which the SRP Update was | ||||
signed.</li></ul></li> | signed.</li></ul></li> | |||
<li> | ||||
No other resource records on the Service Instance Name are modifi | ||||
ed.</li> | ||||
</ul> | </ul> | |||
<t>An SRP registrar MUST correctly handle compressed names in the SRV | <t>Service Description Instructions do not modify any other resource | |||
target.</t> | records.</t> | |||
<t>An SRP registrar <bcp14>MUST</bcp14> correctly handle compressed n | ||||
ames in the SRV target.</t> | ||||
</section> | </section> | |||
<section anchor="hdi"> | <section anchor="hdi"> | |||
<name>Host Description Instruction</name> | <name>Host Description Instruction</name> | |||
<t>An instruction is a Host Description Instruction if, for the appr | <t>Every SRP Update alway contains exactly one Host Description Inst | |||
opriate hostname, it contains</t> | ruction.</t> | |||
<ul spacing="compact"> | ||||
<li> | <t>An instruction is a Host Description Instruction if, for the appr | |||
exactly one "Delete all RRsets from a name" RR,</li> | opriate hostname, it contains the following:</t> | |||
<ul spacing="normal"> | ||||
<li> | <li> | |||
one or more "Add to an RRset" RRs of type A and/or AAAA,</li> | exactly one "Delete All RRsets From A Name" RR</li> | |||
<li> | <li> | |||
exactly one "Add to an RRset" RR that adds a KEY RR that contains | exactly one "Add To An RRset" RR that adds a KEY RR that | |||
the public key corresponding to the private key | contains the public key corresponding to the private key that | |||
that was used to sign the message,</li> | was used to sign the message</li> | |||
<li> | <li> | |||
Host Description Instructions do not modify any other resource re | zero "Add To An RRset" operations (in the case of deleting a regi | |||
cords.</li> | stration) | |||
</ul> | or one or more "Add To An RRset" RRs of type A and/or AAAA | |||
(in the case of creating or updating a registration)</li> | ||||
</ul> | ||||
<t> | <t> | |||
A and/or AAAA records that are not of sufficient scope to be validl | Host Description Instructions do not modify any other resource reco | |||
y published in a DNS zone MAY be ignored by the | rds.</t> | |||
SRP registrar, which could result in a host description effectively | <t> | |||
containing zero reachable addresses even when it | A and/or AAAA records that are not of sufficient scope to be | |||
validly published in a DNS zone <bcp14>MAY</bcp14> be ignored by | ||||
the SRP registrar, which could result in a Host Description | ||||
effectively containing zero reachable addresses even when it | ||||
contains one or more addresses.</t> | contains one or more addresses.</t> | |||
<t> | <t> | |||
For example, if a link-scope address or IPv4 autoconfiguration addr | For example, if an IPv4 link-local address <xref target="RFC3927"/> | |||
ess is provided by the SRP requestor, the SRP | or an IPv6 link-local address <xref target="RFC4862"/> | |||
registrar could not publish this in a DNS zone. However, in some si | is provided by the SRP requester, the SRP | |||
tuations, the registrar might make the records | registrar could elect not to publish this in a DNS zone. | |||
available through a mechanism such as an advertising proxy only on | However, in some situations, the registrar might make the records | |||
the specific link from which the SRP update | available through a mechanism such as an advertising proxy only on | |||
originated; in such a situation, locally-scoped records are still v | the specific link from which the SRP Update | |||
alid.</t> | originated. In such a situation, locally scoped records are still v | |||
alid.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section anchor="validation"> | |||
<name>Valid SRP Update Requirements</name> | <name>Valid SRP Update Requirements</name> | |||
<t> | <t> | |||
An SRP Update MUST contain exactly one Host Description Instruction. | An SRP Update <bcp14>MUST</bcp14> contain exactly one Host Descriptio | |||
In addition, there MUST NOT be any Service | n Instruction. | |||
Description Instruction to which no Service Discovery Instruction poi | Multiple Service Discovery updates and Service Description update | |||
nts. A DNS Update that contains any additional | s | |||
adds or deletes that cannot be identified as Service Discovery, Servi | may be combined into a single single SRP Update | |||
ce Description or Host Description Instructions is | along with a single Host Description update, | |||
as described in <xref target="how"/>. | ||||
A DNS Update message that contains any additional | ||||
adds or deletes that cannot be identified as Service Discovery, Servi | ||||
ce Description, or Host Description Instructions is | ||||
not an SRP Update. A DNS update that contains any prerequisites is no t an SRP Update.</t> | not an SRP Update. A DNS update that contains any prerequisites is no t an SRP Update.</t> | |||
<t>An SRP Update MUST include an EDNS(0) Update Lease option | <t>An SRP Update <bcp14>MUST</bcp14> include an EDNS(0) Update Lease op | |||
<xref target="I-D.ietf-dnssd-update-lease"/>. The LEASE time specifie | tion | |||
d in the Update Lease option MUST be less than | <xref target="RFC9664"/>. | |||
The LEASE time specified in the Update Lease | ||||
option <bcp14>MUST</bcp14> be less than | ||||
or equal to the KEY-LEASE time. A DNS update that does not include th e Update Lease option, or that includes a | or equal to the KEY-LEASE time. A DNS update that does not include th e Update Lease option, or that includes a | |||
KEY-LEASE value that is less than the LEASE value, is not an SRP upda | KEY-LEASE value that is less than the LEASE value, is not an SRP Upda | |||
te.</t> | te.</t> | |||
<t>When an SRP registrar receives a DNS Update that is not an SRP updat | <t>When an SRP registrar receives a DNS Update message that is not an S | |||
e, it MAY | RP | |||
process the update as regular RFC2136 updates, including access contr | update, it <bcp14>MAY</bcp14> process the update as normal DNS Update | |||
ol checks and constraint | <xref target="RFC2136"/>, including | |||
checks, if supported. Otherwise the SRP registrar MUST reject the DNS | access control checks and constraint checks, if supported. Otherwise, | |||
Update with the Refused RCODE.</t> | the SRP registrar <bcp14>MUST</bcp14> reject the DNS Update with the | |||
Refused RCODE.</t> | ||||
<t> | <t> | |||
If the definitions of each of these instructions are followed careful | If the definitions of each of these instructions are followed | |||
ly and the update requirements are validated | carefully and the update requirements are validated correctly, | |||
correctly, many DNS Updates that look very much like SRP Updates neve | many DNS Update messages that look very much like SRP Updates | |||
rtheless will fail to validate. For example, a DNS | nevertheless will fail to validate. For example, a DNS update | |||
update that contains an Add to an RRset instruction for a Service Nam | that contains an "Add To An RRset" instruction for a Service Name | |||
e and an Add to an RRset instruction for a Service | and an "Add to an RRset" instruction for a service instance name | |||
Instance Name, where the PTR record added to the Service Name does no | where the PTR record added to the Service Name does not reference | |||
t reference the Service Instance Name, is not a | the service instance name is not a valid SRP Update but may be a | |||
valid SRP Update message, but may be a valid RFC2136 update.</t> | valid DNS Update.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>FCFS Name And Signature Validation</name> | <name>FCFS Name and Signature Validation</name> | |||
<!--[rfced] For the ease of the reader, might we clarify what "these | ||||
conditions" are? | ||||
Original: | ||||
Assuming that a DNS Update message has been validated with these | ||||
conditions and is a valid SRP Update, the SRP registrar checks that | ||||
the name in the Host Description Instruction exists. | ||||
Perhaps: | ||||
Assuming that a DNS Update message has been validated with an FCFS name | ||||
and signature and is a valid SRP Update, the SRP registrar checks that | ||||
the name in the Host Description Instruction exists. | ||||
[Ted] No, that's not what "these conditions" means. How about: | ||||
--> | ||||
<t> | <t> | |||
Assuming that a DNS Update message has been validated with these cond | Assuming that the SRP registrar has confirmed that a DNS Update messa | |||
itions and is a valid SRP Update, the SRP registrar | ge | |||
checks that the name in the Host Description Instruction exists. If | is a valid SRP Update (<xref target="validation"/>), it | |||
so, then the registrar checks to see if the KEY | then checks that the name in the Host Description Instruction exists | |||
in the zone being updated. If so, then the registrar checks to see if the KEY | ||||
record on that name is the same as the KEY record in the Host Descrip tion Instruction. The registrar performs the same | record on that name is the same as the KEY record in the Host Descrip tion Instruction. The registrar performs the same | |||
check for the KEY records in any Service Description Instructions. F or KEY records that were omitted from Service | check for the KEY records in any Service Description Instructions. F or KEY records that were omitted from Service | |||
Description Instructions, the KEY from the Host Description Instructi on is used. If any existing KEY record | Description Instructions, the KEY from the Host Description Instructi on is used. If any existing KEY record | |||
corresponding to a KEY record in the SRP Update does not match the KE Y record in the SRP Update (whether provided | corresponding to a KEY record in the SRP Update does not match the KE Y record in the SRP Update (whether provided | |||
or taken from the Host Description Instruction), then the SRP registr | or taken from the Host Description Instruction), then the SRP registr | |||
ar MUST reject the SRP Update with the YXDomain | ar | |||
RCODE.</t> | <bcp14>MUST</bcp14> reject the SRP Update with an YXDomain | |||
RCODE indicating that the desired name is already owned by a differen | ||||
t SIG(0) key. | ||||
This informs the SRP requester that it should select a different name | ||||
and try again.</t> | ||||
<!--[rfced] Please review this transition sentence. Because it is | ||||
placed at the beginning of a new paragraph, the "Otherwise" might | ||||
be a bit jarring to the reader. (Our suggestion is likely weak, | ||||
but for demonstrative purposes...) | ||||
Original: | ||||
Otherwise, the SRP registrar validates the SRP Update using SIG(0) | ||||
against the public key in the KEY record of the Host Description | ||||
Instruction. | ||||
Perhaps: | ||||
If the above steps are not taken, the SRP registrar validates the | ||||
SRP Update using SIG(0) against the public key in the KEY record of | ||||
the Host Description Instruction. | ||||
[Ted] Hm, not easy. See edit below. | ||||
--> | ||||
<t> | <t> | |||
Otherwise, the SRP registrar validates the SRP Update using SIG(0) ag | If the SRP Update is not in conflict with existing data in the zone b | |||
ainst the public key in the KEY record of the Host | eing updated, the SRP registrar validates the SRP Update using SIG(0) against th | |||
Description Instruction. If the validation fails, the registrar MUST | e public key in the KEY record of the Host | |||
reject the SRP Update with the Refused RCODE. | Description Instruction. If the validation fails, | |||
Otherwise, the SRP Update is considered valid and authentic, and is p | the SRP Update is malformed, and the registrar | |||
rocessed according to the method described in | <bcp14>MUST</bcp14> reject the SRP Update with the Refused RCODE. | |||
RFC2136.</t> | Otherwise, the SRP Update is considered valid and authentic and | |||
is processed as for a normal DNS Update <xref target="RFC2136"/>.</t> | ||||
<!-- [Ted] The comma after KEY RR was changed to a colon, and I can't see why. H | ||||
ow about: --> | ||||
<t> | <t> | |||
KEY record updates omitted from Service Description Instruction are p | KEY record updates omitted from Service Description Instruction(s) ar | |||
rocessed as if they had been explicitly present: | e processed as if they had been explicitly present. | |||
every Service Description that is updated MUST, after the SRP Update | After the SRP Update has been applied, every Service Description that | |||
has been applied, have a KEY RR, and it must be the | is updated <bcp14>MUST</bcp14> have a KEY RR, which <bcp14>MUST</bcp14> have th | |||
same KEY RR that is present in the Host Description to which the Serv | e | |||
ice Description refers.</t> | same valua as the KEY RR that is present in the Host Description to w | |||
hich the Service Description refers.</t> | ||||
<t> | <t> | |||
<xref target="RFC3445"/> states that the flags field in the KEY RR MU | The IETF specification for | |||
ST be zero except for bit 7, which can | DNSSEC Resource Records <xref target="RFC4034"/> | |||
be one in the case of a zone key. However, the SRP registrar MUST NOT | states that the flags field in the KEY RR | |||
validate the flags field.</t> | <bcp14>MUST</bcp14> be zero except for bit 7, which can | |||
be one in the case of a zone key. | ||||
SRP requesters implementing this version of the SRP specification | ||||
<bcp14>MUST</bcp14> set the flags field in the KEY RR to all zeroes. | ||||
SRP registrars implementing this version of the SRP specification | ||||
<bcp14>MUST</bcp14> accept and store the flags field in the KEY RR | ||||
as received, without checking or modifying its value.</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>Handling of Service Subtypes</name> | <name>Handling of Service Subtypes</name> | |||
<t> | <t> | |||
SRP registrars MUST treat the update instructions for a service type and all its subtypes as atomic. That is, when a | SRP registrars <bcp14>MUST</bcp14> treat the update instructions for a service type and all its subtypes as atomic. That is, when a | |||
service and its subtypes are being updated, whatever information appe ars in the SRP Update is the entirety of | service and its subtypes are being updated, whatever information appe ars in the SRP Update is the entirety of | |||
information about that service and its subtypes. If any subtype appea red in a previous update but does not appear in | information about that service and its subtypes. If any subtype appea red in a previous update but does not appear in | |||
the current update, then the SRP registrar MUST remove that subtype. | the current update, then the SRP registrar <bcp14>MUST</bcp14> remove that subtype. | |||
</t> | </t> | |||
<t> | <t> | |||
Similarly, there is no mechanism for deleting subtypes. A delete of a | There is intentionally no mechanism for deleting a single subtype | |||
service deletes all of its subtypes. To delete an | individually. A delete of a service deletes all of its subtypes. | |||
individual subtype, an SRP Update must be constructed that contains t | To delete a single subtype individually, an SRP Update must | |||
he service type and all subtypes for that service | be constructed that contains the service type and all subtypes | |||
except for the one to be deleted. | for that service except for the subtype(s) to be deleted. | |||
</t> | </t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>SRP Update response</name> | <name>SRP Update Response</name> | |||
<t> | <t> | |||
The status that is returned depends on the result of processing the u | The status that is returned depends on the result of processing the u | |||
pdate, and can be either NoError, ServFail, Refused | pdate and can be either NoError, ServFail, Refused, | |||
or YXDomain: all other possible outcomes will already have been accou | or YXDomain. All other possible outcomes will already have been accou | |||
nted for when applying the constraints that | nted for when applying the constraints that | |||
qualify the update as an SRP Update. The meanings of these responses | qualify the update as an SRP Update. The meanings of these responses | |||
are explained in <xref target="RFC2136" | are explained in | |||
section="2.2"/>.</t> | Section <xref target="RFC2136" section="2.2" sectionFormat="bare"/> | |||
of the DNS Update specification <xref target="RFC2136"/>.</t> | ||||
<t> | <t> | |||
In the case of a response other than NoError, <xref target="RFC2136" | In the case of a response other than NoError, | |||
section="3.8"/> specifies that the server is permitted | Section <xref target="RFC2136" section="3.8" sectionFormat="bare"/> | |||
to respond either with no RRs or to copy the RRs sent by the client | of the DNS Update specification <xref target="RFC2136"/> | |||
into the response. The SRP Requestor MUST NOT attempt | states that | |||
the authoritative DNS server is permitted | ||||
to respond either with no RRs or to copy the RRs | ||||
sent by the DNS Update client into the response. | ||||
The SRP requester <bcp14>MUST NOT</bcp14> attempt | ||||
to validate any RRs that are included in the response. It is possible that a future SRP extension may include per-RR | to validate any RRs that are included in the response. It is possible that a future SRP extension may include per-RR | |||
indications as to why the update failed, but at present this is not s | indications as to why the update failed, but | |||
pecified, so if a client were to attempt to validate | at the time of writing this is not specified. | |||
the RRs in the response, it might reject such a response, since it w | So, if an SRP requester were to attempt to validate | |||
ould contain RRs, but probably not a set of RRs | the RRs in the response, it might reject such a response, since it w | |||
ould contain RRs but probably not a set of RRs | ||||
identical to what was sent in the SRP Update.</t> | identical to what was sent in the SRP Update.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Optional Behavior</name> | <name>Optional Behavior</name> | |||
<!-- [Ted] I don't think e.g. should have a comma after it. I changed it to "for | ||||
example" to | ||||
illustrate why I think this, but my Latin is rusty, so maybe it does make s | ||||
ense when the | ||||
abbreviation is used? Ah, I see why I'm confused. In most of the cases wher | ||||
e e.g. or for example | ||||
is being used, it's being used like this: If we use foo, for example, then | ||||
BAR. But here debugging | ||||
isn't the example, so the extra comma changes the meaning. --> | ||||
<t> | <t> | |||
The SRP registrar MAY add a Reverse Mapping (<xref target="RFC1035" s | The SRP registrar <bcp14>MAY</bcp14> add a Reverse Mapping PTR record | |||
ection="3.5"/>, <xref target="RFC3596" section="2.5"/>) | (described for IPv4 in | |||
that corresponds to the Host Description. This is not required becau | <xref target="RFC1035" section="3.5" sectionFormat="of"/> | |||
se the Reverse Mapping serves no protocol function, | of the DNS specification <xref target="RFC1035"/> | |||
but it may be useful for debugging, e.g. in annotating network packet | and for IPv6 in | |||
traces or logs. In order for the registrar to do | <xref target="RFC3596" section="2.5" sectionFormat="of"/> | |||
a reverse mapping update, it must be authoritative for the zone that | of the later document updating DNS for IPv6 <xref | |||
would need to be updated, or have credentials to do | target="RFC3596"/>) that corresponds to the Host Description. | |||
the update. The SRP requestor MAY also do a reverse mapping update i | This is optional: The reverse mapping PTR record serves no | |||
f it has credentials to do so.</t> | essential protocol function. One reason to provide reverse | |||
<t> | mappings is that they can be used to annotate logs and network | |||
The SRP registrar MAY apply additional criteria when accepting update | packet traces. In order for the registrar to do a reverse mapping | |||
s. In some networks, it may be possible to do | update, it must be authoritative for the zone that would need to | |||
out-of-band registration of keys, and only accept updates from pre-re | be updated or have credentials to do the update. The SRP | |||
gistered keys. In this case, an update for a key | requester <bcp14>MAY</bcp14> also do a reverse mapping update if | |||
that has not been registered SHOULD be rejected with the Refused RCOD | it has credentials to do so.</t> | |||
E.</t> | ||||
<t> | <t> | |||
There are at least two benefits to doing this rather than simply usin | The SRP registrar <bcp14>MAY</bcp14> apply additional criteria when a | |||
g normal SIG(0) DNS updates. First, the same | ccepting updates. In some networks, it may be possible to do | |||
registration protocol can be used in both cases, so both use cases ca | out-of-band registration of keys and only accept updates from preregi | |||
n be addressed by the same SRP requestor | stered keys. In this case, an update for a key | |||
implementation. Second, the registration protocol includes maintenan | that has not been registered <bcp14>SHOULD</bcp14> be rejected with t | |||
ce functionality not present with normal DNS | he Refused RCODE. | |||
updates.</t> | When use of managed keys is desired, | |||
there are at least two benefits to doing this in conjunction with SRP | ||||
rather than simply performing traditional DNS Updates using SIG(0) ke | ||||
ys:</t> | ||||
<ol><li>The same | ||||
over-the-air registration protocol is used in both cases, | ||||
so both use cases can be addressed by the same SRP requester | ||||
implementation.</li> | ||||
<li>The Service Registration Protocol includes | ||||
maintenance functionality not present with normal DNS | ||||
updates.</li></ol> | ||||
<t> | <t> | |||
Note that the semantics of using SRP in this way are different than f | Note that the semantics of using SRP in this way | |||
or typical RFC2136 implementations: the KEY used | are different from the semantics of typical | |||
to sign the SRP Update only allows the SRP requestor to update record | implementations of DNS Update. The KEY used | |||
s that refer to its Host Description. RFC2136 | to sign the SRP Update only allows the SRP requester to update record | |||
implementations do not normally provide a way to enforce a constraint | s that refer to its Host Description. | |||
of this type.</t> | Implementations of a traditional DNS Update | |||
<xref target="RFC2136"/> do not normally provide | ||||
a way to enforce a constraint of this type.</t> | ||||
<t> | <t> | |||
The SRP registrar could also have a dictionary of names or name patte rns that are not permitted. If such a list is used, | The SRP registrar could also have a dictionary of names or name patte rns that are not permitted. If such a list is used, | |||
updates for Service Instance Names that match entries in the dictiona ry are rejected with a Refused RCODE.</t> | updates for service instance names that match entries in the dictiona ry are rejected with a Refused RCODE.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>TTL Consistency</name> | <name>TTL Consistency</name> | |||
<t> | <t> | |||
All RRs within an RRset are required to have the same TTL | All RRs within an RRset are required to have the same TTL | |||
(<xref target="RFC2181" section="5.2" sectionFormat="comma"> Clarificatio | (required by | |||
ns to the DNS Specification</xref>). | Section <xref target="RFC2181" section="5.2" sectionFormat="bare"/> | |||
In order to avoid inconsistencies, SRP places restrictions on TTLs sent b | of the DNS Clarifications document <xref target="RFC2181"/>). | |||
y requestors and requires that SRP registrars enforce | In order to avoid inconsistencies, SRP places restrictions on TTLs sent b | |||
y requesters and requires that SRP registrars enforce | ||||
consistency.</t> | consistency.</t> | |||
<t> | <t> | |||
Requestors sending SRP Updates MUST use consistent TTLs in all RRs within | Requesters sending SRP Updates <bcp14>MUST</bcp14> use consistent | |||
the SRP Update.</t> | TTLs in all RRs within each RRset contained within an SRP Update.</t> | |||
<t> | <t> | |||
SRP registrars MUST check that the TTLs for all RRs within the SRP Update | SRP registrars <bcp14>MUST</bcp14> check that the TTLs for all RRs | |||
are the same. If they are not, the SRP | within each RRset contained within an SRP Update are the same. | |||
update MUST be rejected with a Refused RCODE.</t> | If they are not, the SRP | |||
update <bcp14>MUST</bcp14> be rejected with a Refused RCODE.</t> | ||||
<t> | <t> | |||
Additionally, when adding RRs to an RRset, for example when processing Se rvice Discovery records, the SRP registrar MUST use the | Additionally, when adding RRs to an RRset (for example, when processing S ervice Discovery records), the SRP registrar <bcp14>MUST</bcp14> use the | |||
same TTL on all RRs in the RRset. How this consistency is enforced is up to the implementation.</t> | same TTL on all RRs in the RRset. How this consistency is enforced is up to the implementation.</t> | |||
<t> | <t> | |||
TTLs sent in SRP Updates are advisory: they indicate the SRP requestor's | TTLs sent in SRP Updates are advisory: they indicate the SRP requester's | |||
guess as to what a good TTL would be. SRP registrars may | guess as to what a good TTL would be. SRP registrars may | |||
override these TTLs. SRP registrars SHOULD ensure that TTLs are reasonab | override these TTLs. SRP registrars <bcp14>SHOULD</bcp14> ensure that TT | |||
le: neither too long nor too short. The TTL SHOULD NOT | Ls are reasonable: neither too long nor too short. The TTL <bcp14>SHOULD NOT</b | |||
cp14> | ||||
ever be longer than the lease time (<xref target="stale"/>). Shorter TTL s will result in more frequent data refreshes; | ever be longer than the lease time (<xref target="stale"/>). Shorter TTL s will result in more frequent data refreshes; | |||
this increases latency on the DNS-SD client side, increases load on any c | this increases latency on the DNS&nbhy;SD client side, increases | |||
aching resolvers and on the authoritative server, | load on any caching resolvers and on the authoritative DNS server, | |||
and also increases network load, which may be an issue for constrained ne | and also increases network load, which may be an issue for CNNs. Longer | |||
tworks. Longer TTLs will increase the likelihood | TTLs will increase the likelihood | |||
that data in caches will be stale. TTL minimums and maximums SHOULD be c | that data in caches will be stale. TTL minimums and maximums <bcp14>SHOU | |||
onfigurable by the operator of the SRP registrar. | LD</bcp14> be configurable by the operator of the SRP registrar. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="maintenance"> | <section anchor="maintenance"> | |||
<name>Maintenance</name> | <name>Maintenance</name> | |||
<section anchor="stale"> | <section anchor="stale"> | |||
<name>Cleaning up stale data</name> | <name>Cleaning Up Stale Data</name> | |||
<t>Because the DNS&nbhy;SD registration protocol is automatic, and not ma | <t>Because the DNS&nbhy;SD Service Registration Protocol | |||
naged by humans, | is automatic and not managed by humans, | |||
some additional bookkeeping is required. When an update is constructe | some additional bookkeeping is required. When an update is constructe | |||
d by the SRP requestor, | d by the SRP requester, | |||
it MUST include an EDNS(0) Update Lease Option <xref target="I-D.ietf- | it <bcp14>MUST</bcp14> include an EDNS(0) Update Lease Option <xref ta | |||
dnssd-update-lease"/>. | rget="RFC9664"/>. | |||
The Update Lease Option contains two lease times: the Lease Time and t he KEY | The Update Lease Option contains two lease times: the Lease Time and t he KEY | |||
Lease Time.</t> | Lease Time.</t> | |||
<t>These leases are promises, similar to <xref target="RFC2131">DHCP leas | <t>Similar to DHCP leases <xref target="RFC2131"/>, | |||
es</xref>, | these leases are promises from the SRP requester that it will | |||
from the SRP requestor that it will send a new update for the service | send a new update for the service registration before the | |||
registration before the | lease time expires. | |||
lease time expires. The Lease time is chosen to represent the time af | The Lease time is chosen to represent the duration after the update | |||
ter the | during which the registered records other than the KEY record | |||
update during which the registered records other than the KEY record c | can be assumed to be valid. | |||
an be assumed | The KEY lease time represents the duration after the update | |||
to be valid. The KEY lease time represents the time after the update | during which the KEY record can be assumed to be valid. | |||
during | The reasoning behind the different lease times is discussed in | |||
which the KEY record can be assumed to be valid.</t> | Sections <xref target="fcfs" format="counter"/> and | |||
<xref target="lifetimes" format="counter"/>.</t> | ||||
<t>The reasoning behind the different lease times is discussed in the sec | <t>SRP registrars may be configured with limits for these values. | |||
tion on FCFS naming | At the time of writing, a default limit of two hours for | |||
(<xref target="fcfs"/>). SRP registrars may be configured with limits | the Lease and 14 days for the SIG(0) KEY are thought to be good choice | |||
for these values. A default limit of two hours for | s. Devices with limited | |||
the Lease and 14 days for the SIG(0) KEY are currently thought to be g | ||||
ood choices. Constrained devices with limited | ||||
battery that wake infrequently are likely to request longer leases; re gistrars that support such devices may need to set | battery that wake infrequently are likely to request longer leases; re gistrars that support such devices may need to set | |||
higher limits. SRP requestors that are going to continue to use names | higher limits. SRP requesters that are going to | |||
on which they hold leases SHOULD update well before | continue to use names on which they hold leases | |||
the lease ends, in case the registrar is unavailable or under heavy lo | <bcp14>SHOULD</bcp14> refresh them well before | |||
ad.</t> | the lease ends in case the registrar is | |||
temporarily unavailable or under heavy load.</t> | ||||
<t> | <t> | |||
The lease time applies specifically to the host. All service instances, | The lease time applies specifically to the hostname. | |||
and all service entries for such service | All service instances, and all service entries for such service | |||
instances, depend on the host. When the lease on a host expires, the ho | instances, depend on the hostname. When the lease on a | |||
st and all services that reference it MUST be | hostname expires, the hostname and all services that | |||
removed at the same time—it is never valid for a service instance | reference it <bcp14>MUST</bcp14> be removed at the same | |||
to remain when the host it references has been | time: It is never valid for a service instance to remain | |||
removed. If the KEY record for the host is to remain, the KEY record fo | when the hostname it references has been removed. | |||
r any services that reference it MUST also | If the KEY record for the hostname is to remain, the KEY record | |||
remain. However, the service PTR record MUST be removed, since it has n | for any services that reference it <bcp14>MUST</bcp14> also | |||
o key associated with it, and since it is never | remain. However, the Service Discovery PTR record <bcp14>MUST</bcp14> | |||
valid to have a service PTR record for which there is no service instan | be removed since it has no key associated with it and since it | |||
ce on the target of the PTR record. | is never valid to have a Service Discovery PTR record for which | |||
there is no service instance on the target of the PTR record. | ||||
</t> | </t> | |||
<t> | <t> | |||
SRP registrars MUST also track a lease time per service instance. The r | SRP registrars <bcp14>MUST</bcp14> also track a lease time per service | |||
eason for doing this is that a requestor may | instance. The reason being that a requester may | |||
re-register a host with a different set of services, and not remember t | re-register a hostname with a different set of services and | |||
hat some different service instance had previously | not remember that some different service instance had previously | |||
been registered. In this case, when that service instance lease expires | been registered. In this case, when that service instance lease expires | |||
, the SRP registrar MUST remove the service | , the SRP registrar <bcp14>MUST</bcp14> remove the service | |||
instance (although the KEY record for the service instance SHOULD be re | instance, | |||
tained until the KEY lease on that service | and any associated Service Discovery PTR records pointing to that servi | |||
expires). This is beneficial because otherwise if the SRP requestor con | ce instance, | |||
tinues to renew the host, but never mentions the | (although the KEY record for the service instance | |||
stale service again, the stale service will continue to be advertised. | <bcp14>SHOULD</bcp14> be retained until the | |||
KEY lease on that service | ||||
expires). | ||||
This is beneficial because it avoids stale services continuing | ||||
to be advertised after the SRP requester has forgotten about them. | ||||
</t> | </t> | |||
<t>The SRP registrar MUST include an EDNS(0) Update Lease option in the | <t>The SRP registrar <bcp14>MUST</bcp14> include an EDNS(0) Update Lease | |||
response if the lease time proposed by the requestor has been shortene | option in the | |||
d or lengthened by the registrar. The requestor | response. The requester | |||
MUST check for the EDNS(0) Update Lease option in the response and MUS | <bcp14>MUST</bcp14> check for the EDNS(0) Update Lease option | |||
T use the lease | in the response, and when deciding when to renew its | |||
times from that option in place of the options that it sent to the reg | registration the requester <bcp14>MUST</bcp14> use the | |||
istrar when | lease times from that received option in place of the | |||
deciding when to renew its registration. The times may be shorter or | lease times that it originally requested from the registrar. | |||
longer than | The times may be shorter or longer than | |||
those specified in the SRP Update; the SRP requestor must honor them i | those specified in the SRP Update. The SRP requester must honor them i | |||
n either case.</t> | n either case.</t> | |||
<t>SRP requestors SHOULD assume that each lease ends N seconds after the | <!-- [rfced] In Section 5.1, we see both "N" and "'n'". Please review | |||
update was first | and let us know if/how we may update for uniformity. | |||
transmitted, where N is the lease duration. SRP Registrars SHOULD ass | ||||
ume that each lease | ||||
ends N seconds after the update that was successfully processed was re | ||||
ceived. Because | ||||
the registrar will always receive the update after the SRP requestor s | ||||
ent it, this avoids the | ||||
possibility of misunderstandings.</t> | ||||
<t>SRP registrars MUST reject updates that do not include an | Original "N": | |||
EDNS(0) Update Lease option. DNS authoritative servers that allow bot | SRP requesters <bcp14>SHOULD</bcp14> assume that each lease ends N seconds af | |||
h SRP and non-SRP DNS updates MAY accept updates that don't include | ter the | |||
leases, but SHOULD differentiate between SRP Updates and | update was first transmitted, where N is the lease duration. | |||
other updates, and MUST reject updates that would otherwise be SRP Upd | ||||
ates | ||||
if they do not include leases.</t> | ||||
<t>Lease times have a completely different function than TTLs. On an aut | Original "'n'": | |||
horitative | The lease time is never sent as a TTL; its | |||
DNS server, the TTL on a resource record is a constant: whenever that | sole purpose is to determine when the authoritative DNS server will | |||
RR is served in | delete stale records. It is not an error to send a DNS response with | |||
a DNS response, the TTL value sent in the answer is the same. The lea | a TTL of 'n' when the remaining time on the lease is less than 'n'. | |||
se time is never | ||||
sent as a TTL; its sole purpose is to determine when the authoritative | [Ted] These are actually two different quantities, but I agree with the correcti | |||
DNS server will | on generally, so have used M for the last paragraph. | |||
delete stale records. It is not an error to send a DNS response with | --> | |||
a TTL of 'n' when | ||||
the remaining time on the lease is less than 'n'.</t> | <t>SRP requesters <bcp14>SHOULD</bcp14> assume that each lease ends N | |||
seconds after the update was first transmitted (where N is the granted le | ||||
ase | ||||
duration). SRP registrars <bcp14>SHOULD</bcp14> assume that each lease | ||||
ends N seconds after the update that was successfully processed was | ||||
received. Because the registrar will always receive the update after | ||||
the SRP requester sent it, this avoids the possibility of | ||||
a race condition where the SRP registrar prematurely removes | ||||
a service when the SRP requester thinks the lease has not yet expired. | ||||
In addition, the SRP requester <bcp14>MUST</bcp14> begin attempting to re | ||||
new | ||||
its lease in advance of the expected expiration time, as required | ||||
by the DNS Update Lease specification <xref target="RFC9664"/>, | ||||
to accomodate the situation where the clocks on the SRP requester | ||||
and the SRP registrar do not run at precisely the same rate.</t> | ||||
<t>SRP registrars <bcp14>MUST</bcp14> reject updates that do not | ||||
include an EDNS(0) Update Lease option. DNS authoritative servers | ||||
that allow both SRP and non-SRP DNS updates <bcp14>MAY</bcp14> accept | ||||
updates that don't include leases, but they <bcp14>SHOULD</bcp14> | ||||
differentiate between SRP Updates and other updates and | ||||
<bcp14>MUST</bcp14> reject updates that would otherwise be SRP Updates | ||||
if they do not include leases.</t> | ||||
<t>The function of Lease times and the | ||||
function of TTLs are completely different. On an | ||||
authoritative DNS server, the TTL on a resource record is a | ||||
constant. Whenever that RR is served in a DNS response, the TTL value | ||||
sent in the answer is the same. The lease time is never sent as a | ||||
TTL; its sole purpose is to determine when the authoritative DNS | ||||
server will delete stale records. It is not an error to send a DNS | ||||
response with a TTL of M when the remaining time on the lease is | ||||
less than M.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<section anchor="source_validation"> | <section anchor="source_validation"> | |||
<name>Source Validation</name> | <name>Source Validation</name> | |||
<t>SRP Updates have no authorization semantics other than | <t>SRP Updates have no authorization semantics other than | |||
FCFS. This means that if an attacker from outside of the administrati | "First Come, First Served" (FCFS). | |||
ve | Thus, if an attacker from outside the administrative | |||
domain of the SRP registrar knows the registrar's IP address, it can in | domain of the SRP registrar knows the registrar's IP address, it can, i | |||
principle send updates to the registrar | n principle, send updates to the registrar | |||
that will be processed successfully. SRP Registrars SHOULD therefore | that will be processed successfully. Therefore, SRP registrars <bcp14 | |||
be configured to reject updates | >SHOULD</bcp14> be configured to reject updates | |||
from source addresses outside of the administrative domain of the regis trar.</t> | from source addresses outside of the administrative domain of the regis trar.</t> | |||
<t>For TCP updates, the initial SYN-SYN+ACK handshake prevents updates be | <t>For TCP updates, the initial SYN-SYN+ACK handshake prevents | |||
ing forged by an off-network attacker. In order to | updates being forged by an off-path attacker. In order to | |||
ensure that this handshake happens, SRP registrars relying on three-way | ensure that this handshake happens, SRP registrars relying on three-way | |||
-handshake validation MUST NOT accept TCP Fast Open | -handshake validation <bcp14>MUST NOT</bcp14> accept TCP Fast Open payloads | |||
<xref target="RFC7413"/> payloads. If the network infrastructure allow | <xref target="RFC7413"/>. | |||
s it, an SRP registrar MAY accept TCP Fast Open payloads if all such packets | If the network infrastructure allows it, an SRP registrar | |||
<bcp14>MAY</bcp14> accept TCP Fast Open payloads if all such packets | ||||
are validated along the path, and the network is able to reject this ty pe of spoofing at all ingress points.</t> | are validated along the path, and the network is able to reject this ty pe of spoofing at all ingress points.</t> | |||
<t>For UDP updates from constrained devices, spoofing would have to be pr | <t>For UDP updates from CNN devices, spoofing would have to be prevented | |||
evented with appropriate source address filtration | with appropriate source address filtering | |||
on routers <xref target="RFC2827"/>. This would ordinarily be accomplis | on routers <xref target="RFC2827"/>. | |||
hed by measures such as are described in | This would ordinarily be accomplished by measures such as those describ | |||
<xref target="RFC7084" section="4.5" sectionFormat="of"/>. For example, | ed in | |||
a stub router <xref target="I-D.ietf-snac-simple"/> | Section <xref target="RFC7084" section="4.5" sectionFormat="bare"/> | |||
for a constrained network might only accept UDP updates from source add | of the IPv6 CE Router Requirements document <xref target="RFC7084"/>. | |||
resses known to be on-link on that stub network, and might | For example, a stub router <xref target="I-D.ietf-snac-simple"/> | |||
for a CNN might only accept UDP updates from source addresses known to | ||||
be on-link on that stub network and might | ||||
further validate that the UDP update was actually received on the stub network interface and not the interface connected to | further validate that the UDP update was actually received on the stub network interface and not the interface connected to | |||
the adjacent infrastructure link.</t> | the adjacent infrastructure link.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Other DNS updates</name> | <name>Other DNS Updates</name> | |||
<t>Note that these rules only apply to the validation of SRP Updates. | <t>Note that these rules only apply to the validation of SRP Updates. | |||
A server that accepts updates from SRP | An authoritative DNS server that accepts updates from SRP | |||
requestors may also accept other DNS updates, and those DNS updates may | requesters may also accept other DNS Update messages, and those DNS Upd | |||
be validated | ate messages may be validated | |||
using different rules. However, in the case of a DNS server that acce | using different rules. | |||
pts SRP | However, in the case of an authoritative DNS server that accepts SRP | |||
updates, the intersection of the SRP Update rules and | updates, the intersection of the SRP Update rules and | |||
whatever other update rules are present must be considered very careful ly.</t> | whatever other update rules are present must be considered very careful ly.</t> | |||
<t>For example, a normal, authenticated DNS update to any RR that was add | <t>For example, a normal authenticated DNS update to any | |||
ed using SRP, but that is authenticated using a | RR that was added using SRP, but is authenticated using a | |||
different key, could be used to override a promise made by the SRP regi | different key, could be used to override a promise made by the SRP regi | |||
strar to an SRP requestor, by replacing all or part of | strar to an SRP requester by replacing all or part of | |||
the service registration information with information provided by an au | the service registration information with information provided by an au | |||
thenticated DNS update requestor. An implementation | thenticated DNS update requester. An implementation | |||
that allows both kinds of updates SHOULD NOT allow DNS Update requestor | that allows both kinds of updates <bcp14>SHOULD NOT</bcp14> allow DNS U | |||
s that are using different authentication and | pdate requesters that are using different authentication and | |||
authorization credentials to update records added by SRP requestors.</t | authorization credentials to update records added by SRP requesters.</t | |||
> | > | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Risks of allowing arbitrary names to be registered in SRP updates</ | <name>Risks of Allowing Arbitrary Names to be Registered in SRP Updates</ | |||
name> | name> | |||
<t>It is possible to set up SRP updates for a zone that is used for non-D | <t>It is possible to set up SRP Updates for a zone | |||
NSSD services. For example, imagine that you set | that is also used for non-DNS&nbhy;SD records. | |||
up SRP service for example.com. SRP hosts can now register names like " | For example, imagine that you set | |||
www" or "mail" or "smtp" in this domain. In addition, | up SRP service for example.com. | |||
SRP updates using FCFS naming can insert names that are obscene or offe | SRP requesters can now register names like "www" | |||
nsive into the zone. There is no simple solution to | or "mail" or "smtp" in this domain. In addition, | |||
these problems. We have two recommendations to address this problem, ho | SRP Updates using FCFS Naming can insert names that are obscene or offe | |||
wever:</t> | nsive into the zone. There is no simple solution to | |||
<ul spacing="compact"> | these problems. However, we have two recommendations to address this pr | |||
<li>Do not provide SRP service in organization-level zones. Use subdoma | oblem:</t> | |||
ins of the organizational domain for DNS service | <ul spacing="normal"> | |||
discovery. This does not prevent registering names as mentioned abov | <li>Do not provide SRP service in organization-level zones. | |||
e, but does ensure that genuinely important names | Use subdomains of the organizational domain for DNS&nbhy;SD. | |||
are not accidentally reserved for SRP clients. So for example, the zo | This does not prevent registering names as mentioned above | |||
ne "dnssd.example.com" could be used instead of | but does ensure that genuinely important names | |||
"example.com" for SRP updates. Because of the way that DNS browsing d | are not accidentally claimed by SRP requesters. | |||
omains are discovered, there is no need for the | So, for example, the zone "dnssd.example.com." could be used | |||
DNSSD discovery zone that is updated by SRP to have a user-friendly o | instead of "example.com." for SRP Updates. Because of the way that | |||
r important-sounding name.</li> | DNS-browsing domains are discovered, there is no need for the | |||
DNS&nbhy;SD discovery zone that is updated by SRP to | ||||
have a user-friendly or important-sounding name.</li> | ||||
<li>Configure a dictionary of names that are prohibited. Dictionaries o f common obscene and offensive names are no doubt | <li>Configure a dictionary of names that are prohibited. Dictionaries o f common obscene and offensive names are no doubt | |||
available, and can be augmented with a list of typical "special" name | available and can be augmented with a list of typical "special" names | |||
s like "www", "mail", "smtp" and so on. Lists of | like "www", "mail", "smtp", and so on. Lists of | |||
names are generally available, or can be constructed manually.</li> | names are generally available or can be constructed manually. | |||
Names rejected due to this should return a Refused | ||||
RCODE, indicating to the SRP requester that it | ||||
should not append or increment a number at the | ||||
end of the name and then try again, since this | ||||
would likely result in an infinite loop. | ||||
If a name is considered unacceptable because it is | ||||
obscene or offensive, adding a number on the end is | ||||
unlikely to make the name acceptable.</li> | ||||
</ul> | </ul> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Security of local service discovery</name> | <name>Security of Local Service Discovery</name> | |||
<t>Local links can be protected by managed services such as RA Guard <xre | <t>Local links can be protected by managed services such as RA Guard | |||
f target="RFC6105"/>, but multicast services like | <xref target="RFC6105"/>, but multicast services like DHCP <xref | |||
DHCP <xref target="RFC2131"/>, DHCPv6 <xref target="RFC8415"/> and IPv6 | target="RFC2131"/>, DHCPv6 <xref target="RFC8415"/>, and IPv6 Neighbor | |||
Neighbor Discovery <xref target="RFC4861"/> are | Discovery <xref target="RFC4861"/> are, in most cases, not | |||
in most cases not authenticated and can't be controlled on unmanaged ne | authenticated and can't be controlled on unmanaged networks, such as | |||
tworks, such as home networks and small-office | home networks and small office networks where no network management | |||
networks where no network management staff are present. In such situati | staff are present. In such situations, the SRP service has | |||
ons, the SRP service has comparatively fewer | comparatively fewer potential security exposures and, hence, is not | |||
potential security exposures and hence is not the weak link. This is di | the weak link. This is discussed in more detail in <xref | |||
scussed in more detail in | target="how-to-secure"/>.</t> | |||
<xref target="how-to-secure"/>.</t> | <t>The fundamental protection for networks of this type is the user's | |||
<t>The fundamental protection for networks of this type is the user's cho | choice of what devices to add to the network. Work is being done in | |||
ice of what devices to add to the network. Work is | other working groups and standards bodies to improve the state of the | |||
being done in other working groups and standards bodies to improve the | art for network on-boarding and device isolation (e.g., Manufacturer | |||
state of the art for network on-boarding and device | Usage Descriptions <xref target="RFC8520"/> provide a means for | |||
isolation (e.g., <xref target="RFC8520"/> provides a means for constrai | constraining what behaviors are allowed for a device in an automatic | |||
ning what behaviors are allowed for a device in an | way), but such work is out of scope for this document.</t> | |||
automatic way), but such work is out of scope for this document.</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>SRP Registrar Authentication</name> | <name>SRP Registrar Authentication</name> | |||
<t>This specification does not provide a mechanism for validating respons | <t>This specification does not provide a mechanism for validating respons | |||
es from SRP Registrars to | es from SRP registrars to | |||
SRP requestors. In principle, a KEY RR could be used by | SRP requesters. In principle, a KEY RR could be used by | |||
a non-constrained SRP requestor to validate responses from the registra | a non-CNN SRP requester to validate responses from the registrar, but t | |||
r, but this is not required, | his is not required, | |||
nor do we specify a mechanism for determining which key to use.</t> | nor do we specify a mechanism for determining which key to use.</t> | |||
<t>In addition, for DNS-over-TLS connections, out-of-band key pinning as described in | <t>In addition, for DNS-over-TLS connections, out-of-band key pinning as described in | |||
<xref target="RFC7858" section="4.2" sectionFormat="comma"/> could be u | Section <xref target="RFC7858" section="4.2" sectionFormat="bare"/> | |||
sed for authentication of the SRP registrar, | of the DNS-over-TLS specification <xref target="RFC7858"/> | |||
e.g. to prevent man-in-the-middle attacks. However the use of such keys | could be used for authentication of the SRP registrar, | |||
is impractical for an unmanaged service | e.g., to prevent man-in-the-middle attacks. However, the use of such ke | |||
registration protocol, and hence is out of scope for this document.</t> | ys is impractical for an unmanaged service | |||
registration protocol; hence, it is out of scope for this document.</t> | ||||
</section> | </section> | |||
<section anchor="rsa"> | <section anchor="rsa"> | |||
<name>Required Signature Algorithm</name> | <name>Required Signature Algorithm</name> | |||
<t> | <t> | |||
For validation, SRP registrars MUST implement the ECDSAP256SHA256 signa | For validation, SRP registrars <bcp14>MUST</bcp14> implement the ECDSAP | |||
ture algorithm. SRP registrars SHOULD implement the | 256SHA256 signature algorithm. SRP registrars <bcp14>SHOULD</bcp14> implement t | |||
algorithms specified in <xref target="RFC8624" section="3.1" sectionFor | he | |||
mat="comma"/>, in the validation column of the | algorithms that are listed in | |||
table, that are numbered 13 or higher and have a "MUST", "RECOMMENDED", | Section <xref target="RFC8624" section="3.1" sectionFormat="bare"/> | |||
or "MAY" designation in the validation column of | of the DNSSEC Cryptographic Algorithms specification <xref target="RFC8 | |||
624"/>, | ||||
in the validation column of the | ||||
table, that are numbered 13 or higher and that have a "<bcp14>MUST</bcp | ||||
14>", "<bcp14>RECOMMENDED</bcp14>", or "<bcp14>MAY</bcp14>" designation in the v | ||||
alidation column of | ||||
the table. | the table. | |||
SRP requestors MUST NOT assume that any algorithm numbered lower than 1 3 is | SRP requesters <bcp14>MUST NOT</bcp14> assume that any algorithm number ed lower than 13 is | |||
available for use in validating SIG(0) signatures.</t> | available for use in validating SIG(0) signatures.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Privacy Considerations</name> | <name>Privacy Considerations</name> | |||
<t> | <t> | |||
Because DNS-SD SRP Updates can be sent off-link, the privacy implications | Because DNS&nbhy;SD SRP Updates can be sent off-link, | |||
of SRP are different than for multicast DNS | the privacy implications of SRP are | |||
responses. Host implementations that are using TCP SHOULD also use TLS i | different from those for mDNS responses. | |||
f available. SRP Registrar implementations MUST offer | SRP Requester implementations that are using TCP <bcp14>SHOULD</bcp14> | |||
TLS support. The use of TLS with DNS is described in <xref target="RFC78 | also use DNS-over-TLS <xref target="RFC7858"/> if available. | |||
58"/>. Because there is no mechanism for sharing | SRP registrar implementations <bcp14>MUST</bcp14> offer TLS support. | |||
keys, validation of DNS-over-TLS keys is not possible; DNS-over-TLS is us | Because there is no mechanism for sharing keys, | |||
ed only as described in | validation of DNS-over-TLS keys is not possible; | |||
<xref target="RFC7858" section="4.1" sectionFormat="comma"/> | DNS-over-TLS is used only for Opportunistic Privacy, as documented in | |||
Section <xref target="RFC7858" section="4.1" sectionFormat="bare"/> | ||||
of the DNS-over-TLS specification <xref target="RFC7858"/>. | ||||
</t> | </t> | |||
<t> | <t> | |||
Hosts that implement TLS support SHOULD NOT fall back to TCP; since SRP r | SRP requesters that are able to use TLS <bcp14>SHOULD NOT</bcp14> | |||
egistrars are required to support | fall back to TCP. Since all SRP registrars are required to support TLS, | |||
TLS, it is entirely up to the host implementation whether to use it. | whether to use TLS is entirely the decision of the SRP requester. | |||
</t> | </t> | |||
<t> | <t> | |||
Public keys can be used as identifiers to track hosts. SRP registrars MAY elect not to return KEY records for queries for | Public keys can be used as identifiers to track hosts. SRP registrars <bc p14>MAY</bcp14> elect not to return KEY records for queries for | |||
SRP registrations. To avoid DNSSEC validation failures, an SRP registrar that signs the zone for DNSSEC but refuses to return | SRP registrations. To avoid DNSSEC validation failures, an SRP registrar that signs the zone for DNSSEC but refuses to return | |||
a KEY record MUST NOT store the KEY record in the zone itself. Because th | a KEY record <bcp14>MUST NOT</bcp14> store the KEY record in the zone its | |||
e KEY record isn't in the zone, the nonexistance of | elf. Because the KEY record isn't in the zone, the nonexistence of | |||
the KEY record can be validated. If the zone is not signed, the server MA | the KEY record can be validated. | |||
Y instead return a negative non-error response | If the zone is not signed, the authoritative DNS server <bcp14>MAY</bcp14 | |||
(either NXDOMAIN or no data). | > | |||
instead return a negative non-error response (either NXDOMAIN or no data) | ||||
. | ||||
</t> | </t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Domain Name Reservation Considerations</name> | <name>Domain Name Reservation Considerations</name> | |||
<t>This section specifies considerations for systems involved in domain na me resolution when resolving queries for names | <t>This section specifies considerations for systems involved in domain na me resolution when resolving queries for names | |||
ending with '.service.arpa.'. Each item in this section addresses some a | ending with ".service.arpa.". Each item in this section addresses some a | |||
spect of the DNS or the process of resolving domain | spect of the DNS or the process of resolving domain | |||
names that would be affected by this special-use allocation. Detailed ex | names that would be affected by this special-use allocation. | |||
planations of these items can be found in Section 5 | Detailed explanations of these items can be found in | |||
of <xref target="RFC6761"/>.</t> | Section <xref target="RFC6761" section="5" sectionFormat="bare"/> | |||
of the Special-Use Domain Names specification <xref target="RFC6761"/>. | ||||
</t> | ||||
<section> | <section> | |||
<name>Users</name> | <name>Users</name> | |||
<t>The current proposed use for 'service.arpa' does not require special k | <t>The current proposed use for "service.arpa." does not | |||
nowledge on the part of the user. While the | require special knowledge on the part of the user. While the | |||
'default.service.arpa.' subdomain is used as a generic name for registr | "default.service.arpa." subdomain is used as a generic name for registr | |||
ation, users are not expected to see this name in | ation, users are not expected to see this name in | |||
user interfaces. In the event that it does show up in a user interface, | user interfaces. In the event that it does show up in a user interface, | |||
it is just a domain name, and requires no special | it is just a domain name and requires no special | |||
treatment by the user. Users are not expected to see this name in user | treatment by the user.</t> | |||
interfaces, although it's certainly possible that | ||||
they might. If they do, they are not expected to treat it specially.</t | ||||
> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>Application Software</name> | <name>Application Software</name> | |||
<t> | <t> | |||
Application software does not need to handle subdomains of 'service.arp | Application software does not need to handle | |||
a' specially. 'service.arpa' SHOULD NOT be treated | subdomains of "service.arpa." specially. | |||
as more trustworthy than any other insecure DNS domain, simply because | "service.arpa." <bcp14>SHOULD NOT</bcp14> be treated | |||
it is locally-served (or for any other reason). It | as more trustworthy than any other insecure DNS domain, simply because | |||
is not possible to register a PKI certificate for a subdomain of 'servi | it is locally served (or for any other reason). It | |||
ce.arpa.' because it is a locally-served domain | is not possible to register a PKI certificate for a subdomain of "servi | |||
name. So no such subdomain can be considered as uniquely identifying a | ce.arpa." because it is a locally served domain | |||
particular host, as would be required for such a | name. So, no such subdomain can be considered to be uniquely identifyin | |||
PKI cert to be issued. If a subdomain of 'service.arpa.' is returned by | g a particular host, as would be required for such a | |||
an API or entered in an input field of an | PKI certificate to be issued. If a subdomain of "service.arpa." is retu | |||
rned by an API or entered in an input field of an | ||||
application, PKI authentication of the endpoint being identified by the name will not be possible. Alternative methods | application, PKI authentication of the endpoint being identified by the name will not be possible. Alternative methods | |||
and practices for authenticating such endpoints are out of scope for th is document.</t> | and practices for authenticating such endpoints are out of scope for th is document.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Name Resolution APIs and Libraries</name> | <name>Name Resolution APIs and Libraries</name> | |||
<t>Name resolution APIs and libraries MUST NOT recognize names that end i | <t>Name resolution APIs and libraries <bcp14>MUST NOT</bcp14> recognize n | |||
n '.service.arpa.' as special and MUST NOT treat | ames that end in "service.arpa." as special and <bcp14>MUST NOT</bcp14> treat | |||
them as having special significance, except that it may be necessary th | them as having special significance, except that it may be | |||
at such APIs not bypass the locally configured | necessary that such APIs not bypass the locally discovered | |||
recursive resolvers.</t> | recursive resolvers.</t> | |||
<t>One or more IP addresses for recursive DNS servers will usually be sup | <t>One or more IP addresses for recursive resolvers will usually | |||
plied to the client through router advertisements | be supplied to the SRP requester through router advertisements | |||
or DHCP. For an administrative domain that uses subdomains of 'service | or DHCP. For an administrative domain that uses subdomains of "service | |||
.arpa.', the recursive resolvers provided by that | .arpa.", the recursive resolvers provided by that | |||
domain will be able to answer queries for subdomains of 'service.arpa.' | domain will be able to answer queries for subdomains of "service.arpa." | |||
; other (non-local) resolvers will not, or they | . Other (non-local) resolvers will not, or they | |||
will provide answers that are not correct within that administrative do main.</t> | will provide answers that are not correct within that administrative do main.</t> | |||
<t>A host that is configured to use a resolver other than one that has be | <t>A host that is configured to use a resolver other than one that has be | |||
en provided by the local network may be unable to | en provided by the local network may not be able to | |||
resolve, or may receive incorrect results for, subdomains of 'service.a | resolve or may receive incorrect results for subdomains of | |||
rpa.'. In order to avoid this, it is permissible | "service.arpa.". In order to avoid this, hosts <bcp14>SHOULD</bcp14> u | |||
that hosts use the resolvers that are locally provided for resolving 's | se the | |||
ervice.arpa.', even when they are configured to | resolvers that are locally provided for resolving "service.arpa." names | |||
use other resolvers.</t> | , | |||
even when they are configured to use other resolvers for other names.</ | ||||
t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>Caching DNS Servers</name> | <name>Recursive Resolvers</name> | |||
<t>There are three considerations for caching DNS servers that | ||||
follow this specification:</t> | <!-- [rfced] In the following text, before the two numbered points, | |||
<ol> | the text reads "There are three considerations". Should we update | |||
<li>For correctness, recursive resolvers at sites using 'service.arpa.' | "three" to "two", or is there another point that the text is | |||
must in practice transparently support DNSSEC | missing? | |||
queries: queries for DNSSEC records and queries with the DNSSEC OK ( | ||||
DO) bit set (<xref target="RFC4035" section="3.2.1" | Current: | |||
sectionFormat="of"/>). DNSSEC validation is a Best Current Practice | There are three considerations for caching DNS servers that follow | |||
<xref target="RFC9364"/>: although validation is | this specification: | |||
not required, a caching recursive resolver that does not validate an | ||||
swers that can be validated may cache invalid data. | 1. For correctness, recursive resolvers at sites using | |||
This, in turn, would prevent validating stub resolvers from successf | 'service.arpa.' must, in practice, transparently support DNSSEC | |||
ully validating answers. Hence, as a practical | queries: queries for DNSSEC records and queries with the DNSSEC | |||
matter, recursive resolvers at sites using 'service.arpa' should do | OK (DO) bit set (Section 3.2.1 of [RFC4035]). DNSSEC validation | |||
DNSSEC validation.</li> | is a Best Current Practice ([RFC9364]): although validation is not | |||
required, a caching recursive resolver that does not validate | ||||
answers that can be validated may cache invalid data. In turn, | ||||
this would prevent validating stub resolvers from successfully | ||||
validating answers. Hence, as a practical matter, recursive | ||||
resolvers at sites using 'service.arpa' should do DNSSEC | ||||
validation. | ||||
2. Unless configured otherwise, recursive resolvers and DNS proxies | ||||
<bcp14>MUST</bcp14> behave as described in Locally Served Zones (Section | ||||
3 of | ||||
[RFC6303]). That is, queries for 'service.arpa.' and subdomains | ||||
of 'service.arpa.' <bcp14>MUST NOT</bcp14> be forwarded, with one import | ||||
ant | ||||
exception: a query for a DS record with the DO bit set <bcp14>MUST</bcp14 | ||||
> | ||||
return the correct answer for that question, including correct | ||||
information in the authority section that proves that the record | ||||
is nonexistent. | ||||
So, for example, a query for the NS record for 'service.arpa.' | ||||
<bcp14>MUST NOT</bcp14> result in that query being forwarded to an upstre | ||||
am | ||||
cache nor to the authoritative DNS server for '.arpa.'. However, | ||||
as necessary to provide accurate authority information, a query | ||||
for the DS record <bcp14>MUST</bcp14> result in forwarding whatever queri | ||||
es are | ||||
necessary. Typically, this will just be a query for the DS | ||||
record since the necessary authority information will be included | ||||
in the authority section of the response if the DO bit is set. | ||||
[Ted] NOOBODY expects the Spanish Inquisition [https://en.wikipedia.org/wiki/The | ||||
_Spanish_Inquisition_(Monty_Python)] | ||||
I think it should be two. Dunno what happened here. | ||||
--> | ||||
<t>There are two considerations for recursive resolvers | ||||
(also known as "caching DNS servers" or "recursive DNS servers") that | ||||
follow this specification:</t> | ||||
<!--[rfced In the following, is the intention to talk about the | ||||
document status of RFC 9365 or to talk about the concept of | ||||
DNSSEC validation as being a best current practice in the general | ||||
sense? | ||||
Original: | ||||
DNSSEC validation is a Best Current Practice [RFC9364]: | ||||
Perhaps A: | ||||
"DNS Security Extensions (DNSSEC)" is a Best Current Practice | ||||
([RFC9364]) that describes DNSSEC validation: | ||||
Perhaps B: | ||||
DNSSEC (see [RFC9364]) validation is a best current practice: | ||||
[Ted] I think B is better. | ||||
--> | ||||
<ol spacing="normal"> | ||||
<li>For correctness, recursive resolvers at sites using | ||||
'service.arpa.' must, in practice, transparently support DNSSEC | ||||
queries: queries for DNSSEC records and queries with the DNSSEC OK | ||||
(DO) bit set | ||||
(Section <xref target="RFC4035" section="3.2.1" sectionFormat="bare"/> | ||||
of the DNSSEC specification <xref target="RFC4035"/>). | ||||
DNSSEC validation <xref target="RFC9364"/> | ||||
is a best current practice: Although validation is not required, a | ||||
caching recursive resolver that does not validate answers that can | ||||
be validated may cache invalid data. In turn, this would prevent | ||||
validating stub resolvers from successfully validating | ||||
answers. Hence, as a practical matter, recursive resolvers at sites | ||||
using "service.arpa." should do DNSSEC validation.</li> | ||||
<li> | <li> | |||
<t>Unless configured otherwise, recursive resolvers and DNS proxies M | <t>Unless configured otherwise, recursive resolvers and DNS | |||
UST behave as described in Locally Served Zones, | proxies <bcp14>MUST</bcp14> behave following | |||
<xref target="RFC6303" section="3" sectionFormat="of"/>. That is, | the rules prescribed for Iterative Resolvers in | |||
queries for 'service.arpa.' and subdomains of | Section <xref target="RFC6303" section="3" sectionFormat="bare"/> | |||
'service.arpa.' MUST NOT be forwarded, with one important exceptio | of the IETF Locally Served DNS Zones document <xref target="RFC6303"/ | |||
n: a query for a DS record with the DO bit set MUST | >. | |||
return the correct answer for that question, including correct info | That is, queries for "service.arpa." and subdomains of | |||
rmation in the authority section that proves that | "service.arpa." <bcp14>MUST NOT</bcp14> be forwarded, with one | |||
the record is nonexistent.</t> | important exception: a query for a DS record with the DO bit set | |||
<t>So, for example, a query for the NS record for 'service.arpa.' M | <bcp14>MUST</bcp14> return the correct answer for that question, | |||
UST NOT result in that query being forwarded to an | including correct information in the authority section that proves | |||
upstream cache nor to the authoritative DNS server for '.arpa.'. H | that the record is nonexistent.</t> | |||
owever, as necessary to provide accurate | ||||
authority information, a query for the DS record MUST result in for | <!--[rfced] Is this text redundant (with two uses of necessary)? Does our | |||
warding whatever queries are necessary; | suggestion change your intended meaning? | |||
typically, this will just be a query for the DS record, since the n | ||||
ecessary authority information will be included | Original: | |||
in the authority section of the response if the DO bit is set.</t> | However, as necessary to provide accurate authority information, a | |||
query for the DS record <bcp14>MUST</bcp14> result in forwarding whatever querie | ||||
s are | ||||
necessary; typically, ... | ||||
Perhaps: | ||||
However, to provide accurate authority information, a | ||||
query for the DS record <bcp14>MUST</bcp14> result in forwarding whatever querie | ||||
s are | ||||
necessary. | ||||
[Ted] Yup. | ||||
--> | ||||
<t>So, for example, a query for the NS record for "service.arpa." | ||||
<bcp14>MUST NOT</bcp14> result in that query being forwarded to an | ||||
upstream cache nor to the authoritative DNS server for ".arpa.". | ||||
However, to provide accurate authority information, a | ||||
query for the DS record <bcp14>MUST</bcp14> result in forwarding | ||||
whatever queries are necessary. Typically, this will just be a | ||||
query for the DS record since the necessary authority information | ||||
will be included in the authority section of the response if the | ||||
DO bit is set.</t> | ||||
</li> | </li> | |||
</ol> | </ol> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Authoritative DNS Servers</name> | <name>Authoritative DNS Servers</name> | |||
<t>No special processing of 'service.arpa.' is required for authoritative | <t>No special processing of "service.arpa." is required for authoritative | |||
DNS server implementations. It is possible that an | DNS server implementations. It is possible that an | |||
authoritative DNS server might attempt to check the authoritative serve | authoritative DNS server might attempt to check the authoritative DNS s | |||
rs for 'service.arpa.' for a delegation beneath that | ervers for "service.arpa." for a delegation beneath that | |||
name before answering authoritatively for such a delegated name. In su ch a case, because the name always has only local | name before answering authoritatively for such a delegated name. In su ch a case, because the name always has only local | |||
significance, there will be no such delegation in the 'service.arpa.' z | significance, there will be no such delegation in the "service.arpa." z | |||
one, and so the server would refuse to answer | one; | |||
authoritatively for such a zone. A server that implements this sort of | therefore, the authoritative DNS server would refuse to answer | |||
check MUST be configurable so that either it does | authoritatively for such a zone. An authoritative DNS server that impl | |||
not do this check for the 'service.arpa.' domain or it ignores the resu | ements | |||
lts of the check.</t> | this sort of check <bcp14>MUST</bcp14> be configurable so that either i | |||
t does | ||||
not do this check for the "service.arpa." domain or it ignores the resu | ||||
lts of the check.</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<!--[rfced] We are having trouble parsing this sentence. Is there text | ||||
missing? | ||||
Original: | ||||
The operator for the DNS servers authoritative for 'service.arpa.' in | ||||
the global DNS will configure any such servers as described in Section | ||||
9. | ||||
Perhaps: | ||||
The operator for the DNS servers that are authoritative for "service.arpa." in | ||||
the global DNS will configure any such servers as described in Section | ||||
9. | ||||
[Ted] Yup. | ||||
--> | ||||
<name>DNS Server Operators</name> | <name>DNS Server Operators</name> | |||
<t>DNS server operators MAY configure an authoritative server for 'servic | <t>DNS server operators <bcp14>MAY</bcp14> configure an authoritative DNS | |||
e.arpa.' for use with SRP. The operator for the | server for "service.arpa." for use with SRP. The operator for the | |||
DNS servers authoritative for 'service.arpa.' in the global DNS will co | DNS servers that are authoritative for "service.arpa." in the global DN | |||
nfigure any such servers as described in | S will configure any such DNS servers as described in | |||
<xref target="delegation"/>.</t> | <xref target="delegation"/>.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>DNS Registries/Registrars</name> | <name>DNS Registries/Registrars</name> | |||
<t>'service.arpa.' is a subdomain of the 'arpa' top-level domain, which i | <t>"service.arpa." is a subdomain of the "arpa." top-level domain, | |||
s operated by IANA under the authority of the | which is operated by IANA under the authority of the | |||
Internet Architecture Board according to the rules established in [RFC3 | Internet Architecture Board (IAB) <xref target="RFC3172"/>. | |||
172]. There are no other DNS registrars for | There are no other DNS registrars for "arpa.".</t> | |||
'.arpa'.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="delegation"> | <section anchor="delegation"> | |||
<name>Delegation of 'service.arpa.'</name> | <name>Delegation of "service.arpa."</name> | |||
<t>In order to be fully functional, the owner of the 'arpa.' zone must add | <t> | |||
a delegation of 'service.arpa.' in the '.arpa.' | The owner of the "arpa." zone, at the time of writing the IAB <xref targe | |||
zone <xref target="RFC3172"/>. This delegation is to be set up as was don | t="IAB-ARPA"/>, | |||
e for 'home.arpa', as a result of the | has added a delegation of "service.arpa." | |||
specification in <xref target="RFC8375" section="7" sectionFormat="of"/>. | in the "arpa." zone <xref target="RFC3172"/>, | |||
This is currently the responsibility of the IAB | following the guidance provided in | |||
<xref target="IAB-ARPA"/></t> | Section <xref target="RFC8375" section="7" sectionFormat="bare"/> | |||
of the "home.arpa." specification <xref target="RFC8375"/>. | ||||
</t> | ||||
</section> | </section> | |||
<section> | <section> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<section> | <section> | |||
<name>Registration and Delegation of 'service.arpa' as a Special-Use Doma | ||||
in Name</name> | <!--[rfced] We have some questions about Section 10.1 in the IANA | |||
<t>IANA is requested to record the domain name 'service.arpa.' in the Spe | Considerations: | |||
cial-Use Domain Names registry | ||||
<xref target="SUDN"/>. IANA is requested, with the approval of IAB, to | a) We see the title of the section is related to the first paragraph | |||
implement the delegation requested in | only. May we move the second paragraph to its own subsection? If so, | |||
please let us know how you would like the text to appear using | ||||
Old/New. | ||||
Original: | ||||
10.1. Registration and Delegation of 'service.arpa' as a Special-Use | ||||
Domain Name | ||||
IANA is requested to record the domain name 'service.arpa.' in the | ||||
Special-Use Domain Names registry [SUDN]. IANA is requested, with | ||||
the approval of IAB, to implement the delegation requested in | ||||
Section 9. | ||||
IANA is further requested to add a new entry to the "Transport- | ||||
Independent Locally-Served Zones" subregistry of the "Locally-Served | ||||
DNS Zones" registry [LSDZ]. The entry will be for the domain | ||||
'service.arpa.' with the description "DNS-SD Service Registration | ||||
Protocol Special-Use Domain", and listing this document as the | ||||
reference. | ||||
[Ted] I've proposed a fix below. | ||||
b) The first paragraph of Section 10.1 mentions Section 9, which | ||||
states: | ||||
Original: | ||||
9. Delegation of 'service.arpa.' | ||||
In order to be fully functional, the owner of the 'arpa.' zone must | ||||
add a delegation of 'service.arpa.' in the '.arpa.' zone [RFC3172]. | ||||
This delegation is to be set up as was done for 'home.arpa', as a | ||||
result of the specification in Section 7 of [RFC8375]. This is | ||||
currently the responsibility of the IAB [IAB-ARPA] | ||||
Should Section 9 be updated as follows since this action has been | ||||
taken? Also, please review whether this information actually belongs | ||||
in the IANA section. If so, please let us know (using old/new) how to | ||||
update. | ||||
9. Delegation of "service.arpa." | ||||
The owner of the 'arpa.' zone, at the time of writing the IAB [IAB-ARPA], | ||||
has added a delegation of 'service.arpa.' in the '.arpa.' zone | ||||
[RFC3172], following the guidance provided in Section 7 of [RFC8375]. | ||||
[Ted] This looks fine. | ||||
--> | ||||
<name>Registration and Delegation of "service.arpa." as a Special-Use Dom | ||||
ain Name</name> | ||||
<t>IANA has recorded the domain name "service.arpa." in the "Special-Use | ||||
Domain Names" registry | ||||
<xref target="SUDN"/>. IANA has implemented the delegation requested in | ||||
<xref target="delegation"/>.</t> | <xref target="delegation"/>.</t> | |||
<t>IANA is further requested to add a new entry to the "Transport-Indepen | </section> | |||
dent Locally-Served Zones" subregistry of | <section> | |||
the "Locally-Served DNS Zones" registry <xref target="LSDZ"/>. The ent | <name>Addition of "service.arpa." to the Locally-Served Zones Registry</n | |||
ry will be for the domain 'service.arpa.' with the | ame> | |||
description "DNS&nbhy;SD Service Registration Protocol Special-Use Doma | <t>IANA has also added a new entry to the "Transport-Independent Locally- | |||
in", listing this document as the reference.</t> | Served Zones Registry" registry of | |||
the "Locally-Served DNS Zones" group <xref target="LSDZ"/>. | ||||
The entry is for the domain "SERVICE.ARPA." with the | ||||
description "DNS&nbhy;SD Service Registration Protocol | ||||
Special-Use Domain" and lists this document as the reference.</t> | ||||
</section> | </section> | |||
<section anchor="subdomains"> | <section anchor="subdomains"> | |||
<name>Subdomains of 'service.arpa.'</name> | <name>Subdomains of "service.arpa."</name> | |||
<t>This document only makes use of the 'default.service.arpa' subdomain o | ||||
f 'service.arpa.' Other subdomains are reserved for | <t>This document only makes use of the "default.service.arpa." | |||
future use by DNS-SD or related work. The IANA is requested to create a | subdomain of "service.arpa." Other subdomains are reserved for future | |||
registry, the "service.arpa Subdomain" registry. | use by DNS&nbhy;SD or related work. IANA has created the | |||
The IETF shall have change control for this registry. New entries may b | "service.arpa. Subdomain" registry <xref target="SUB"/>. The IETF has | |||
e added either as a result of Standards Action | change control for this registry. New entries may be added either as | |||
<xref target="RFC8126" section="4.9"/> or with IESG approval <xref targ | a result of Standards Action (<xref target="RFC8126" | |||
et="RFC8126" section="4.10"/>, provided that a | sectionFormat="of" section="4.9"/>) or with IESG Approval (<xref | |||
specification exists <xref target="RFC8126" section="4.6"/>. | target="RFC8126" sectionFormat="of" section="4.10"/>), provided that | |||
</t> | the values and their meanings are documented in a permanent and | |||
readily available public specification, in sufficient detail so that | ||||
interoperability between independent implementations is possible. </t> | ||||
<t> | <t> | |||
The IANA shall group the "service.arpa Subdomain" registry with the "Lo | IANA has grouped the "service.arpa. Subdomain" registry | |||
cally-Served DNS Zones" registry. | with the "Locally-Served DNS Zones" group. | |||
The registry shall be a table with three columns: the subdomain name ( | The registry is a table with three columns: the subdomain name (expres | |||
expressed as a fully-qualified domain | sed as a fully qualified domain | |||
name), a brief description of how it is used, and a reference to the do cument that describes its use in detail. | name), a brief description of how it is used, and a reference to the do cument that describes its use in detail. | |||
</t> | </t> | |||
<t> | <t> | |||
This registry shall begin as the following table: | This initial contents of this registry are as follows: | |||
</t> | </t> | |||
<table> | <table> | |||
<thead> | <thead> | |||
<tr> | <tr> | |||
<th>Subdomain Name</th> | <th>Subdomain Name</th> | |||
<th>Description</th> | <th>Description</th> | |||
<th>reference</th> | <th>Reference</th> | |||
</tr> | </tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr> | <tr> | |||
<td>default.service.arpa.</td> | <td>default.service.arpa.</td> | |||
<td>Default domain for SRP updates</td> | <td>Default domain for SRP Updates</td> | |||
<td>[THIS DOCUMENT]</td> | <td>RFC 9665</td> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Service Name registrations</name> | <name>Service Name Registrations</name> | |||
<t>IANA is requested to add two new entries to the Service Names and Port | <t>IANA has added two new entries to the | |||
Numbers registry. The following sections | "Service Name and Transport Protocol Port Number Registry" | |||
contain tables with the fields required by <xref target="RFC6335" secti | <xref target="PORT"/>. The following subsections | |||
on="8.1.1" sectionFormat="of"/>.</t> | contain tables with the fields required by | |||
</section> | Section <xref target="RFC6335" section="8.1.1" sectionFormat="bare"/> | |||
of IANA's Procedures for Service Name allocation <xref target="RFC6335" | ||||
/>.</t> | ||||
<section> | <section> | |||
<name>'dnssd-srp' Service Name</name> | <name>"dnssd-srp" Service Name</name> | |||
<table> | <table> | |||
<thead><tr><td>Field Name</td><td>Value</td></tr></thead> | <thead><tr><th>Field Name</th><th>Value</th></tr></thead> | |||
<tbody> | <tbody> | |||
<tr><td> Service Name </td><td> dnssd-srp </td></tr> | <tr><td> Service Name </td><td> dnssd-srp </td></tr> | |||
<tr><td> Transport Protocol </td><td> TCP </td></tr> | <tr><td> Transport Protocol </td><td> tcp </td></tr> | |||
<tr><td> Assignee </td><td> IESG <iesg@ietf.org> </td></tr> | <tr><td> Assignee </td><td> IESG <iesg@ietf.org> </td></tr> | |||
<tr><td> Contact </td><td> IETF Chair <chair@ietf.org > </td></tr> | <tr><td> Contact </td><td> IETF Chair <chair@ietf.org > </td></tr> | |||
<tr><td> Description </td><td> DNS-SD Service Registration | <tr><td> Description </td><td> DNS&nbhy;SD Service Discovery | |||
</td></tr> | </td></tr> | |||
<tr><td> Reference </td><td> this document | <tr><td> Reference </td><td> RFC 9665 | |||
</td></tr> | </td></tr> | |||
<tr><td> Port Number </td><td> None </td></tr> | <tr><td> Port Number </td><td> None </td></tr> | |||
<tr><td> Service Code </td><td> None </td></tr> | <tr><td> Service Code </td><td> None </td></tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>'dnssd-srp-tls' Service Name</name> | <name>"dnssd-srp-tls" Service Name</name> | |||
<table> | <table> | |||
<thead><tr><td>Field Name</td><td>Value</td></tr></thead> | <thead><tr><th>Field Name</th><th>Value</th></tr></thead> | |||
<tbody> | <tbody> | |||
<tr><td> Service Name </td><td> dnssd-srp-tls </td></tr> | <tr><td> Service Name </td><td> dnssd-srp-tls </td></tr> | |||
<tr><td> Transport Protocol </td><td> TCP | <tr><td> Transport Protocol </td><td> tcp | |||
</td></tr> | </td></tr> | |||
<tr><td> Assignee </td><td> IESG | <tr><td> Assignee </td><td> IESG <iesg@ietf.org> | |||
</td></tr> | </td></tr> | |||
<tr><td> Contact </td><td> IETF Chair | <tr><td> Contact </td><td> IETF Chair <chair@ietf.org | |||
</td></tr> | > </td></tr> | |||
<tr><td> Description </td><td> DNS-SD Service Registration ( | <tr><td> Description </td><td> DNS&nbhy;SD Service Discovery | |||
TLS) </td></tr> | (TLS) </td></tr> | |||
<tr><td> Reference </td><td> this document | <tr><td> Reference </td><td> RFC 9665 | |||
</td></tr> | </td></tr> | |||
<tr><td> Port Number </td><td> None </td></tr> | <tr><td> Port Number </td><td> None </td></tr> | |||
<tr><td> Service Code </td><td> None </td></tr> | <tr><td> Service Code </td><td> None </td></tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
</section> | ||||
<section> | <section> | |||
<name>Anycast Address</name> | <name>Anycast Address</name> | |||
<t>IANA is requested to allocate an IPv6 Anycast address from the IPv6 Sp | <t>IANA has allocated an IPv6 anycast address from the | |||
ecial-Purpose Address Registry, similar to the Port | "IANA IPv6 Special-Purpose Address Registry" <xref target="IPv6"/>, | |||
Control Protocol anycast address, 2001:1::1. The value TBD is to be rep | similar to the Port | |||
laced with the actual allocation in the table that | Control Protocol <xref target="RFC6887"/> | |||
follows. The purpose of this allocation is to provide a fixed anycast a | anycast address <xref target="RFC7723"/>. | |||
ddress that can be commonly used as a destination for | The purpose of this allocation is to provide a fixed anycast | |||
SRP updates when no SRP registrar is explicitly configured. The values | address that can be commonly used as a destination for | |||
for the registry are:</t> | SRP Updates when no SRP registrar is explicitly configured. The initial | |||
values for the registry are as follows:</t> | ||||
<table> | <table> | |||
<thead> | <thead> | |||
<tr><td>Attribute</td> <td>value</td></tr> | <tr><th>Attribute</th> <th>Value</th></tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr><td>Address Block</td> <td>2001:1::TBD/128</td></t | <tr><td>Address Block</td> <td>2001:1::3/128</td></tr> | |||
r> | <tr><td>Name</td> <td>DNS&nbhy;SD Service Reg | |||
<tr><td>Name</td> <td>DNS-SD Service Registra | istration Protocol Anycast Address</td></tr> | |||
tion Protocol Anycast Address</td></tr> | <tr><td>RFC</td> <td>RFC 9665</td></tr> | |||
<tr><td>RFC</td> <td>[this document]</td></t | <tr><td>Allocation Date</td> <td>2024-04</td></tr> | |||
r> | ||||
<tr><td>Allocation Date</td> <td>[date of allocation]</t | ||||
d></tr> | ||||
<tr><td>Termination Date</td> <td>N/A</td></tr> | <tr><td>Termination Date</td> <td>N/A</td></tr> | |||
<tr><td>Source</td> <td>True</td></tr> | <tr><td>Source</td> <td>True</td></tr> | |||
<tr><td>Destination</td> <td>True</td></tr> | <tr><td>Destination</td> <td>True</td></tr> | |||
<tr><td>Forwardable</td> <td>True</td></tr> | <tr><td>Forwardable</td> <td>True</td></tr> | |||
<tr><td>Global</td> <td>True</td></tr> | <tr><td>Globally Reachable</td> <td>True</td></ | |||
<tr><td>Reserved-by-protocol</td> <td>False</td></tr> | tr> | |||
<tr><td>Reserved-by-Protocol</td> <td>False</td></tr> | ||||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | ||||
<name>Implementation Status</name> | ||||
<t>[Note to the RFC Editor: please remove this section prior to publicatio | ||||
n.]</t> | ||||
<t> | ||||
This section records the status of known implementations of the protocol | ||||
defined by this specification at the time of | ||||
posting of this Internet-Draft, and is based on a proposal described in R | ||||
FC 7942. The description of implementations in | ||||
this section is intended to assist the IETF in its decision processes in | ||||
progressing drafts to RFCs. Please note that the | ||||
listing of any individual implementation here does not imply endorsement | ||||
by the IETF. Furthermore, no effort has been spent | ||||
to verify the information presented here that was supplied by IETF contri | ||||
butors. This is not intended as, and must not be | ||||
construed to be, a catalog of available implementations or their features | ||||
. Readers are advised to note that other | ||||
implementations may exist. | ||||
</t> | ||||
<t> | ||||
According to RFC 7942, "this will allow reviewers and working groups to a | ||||
ssign due consideration to documents that have the | ||||
benefit of running code, which may serve as evidence of valuable experime | ||||
ntation and feedback that have made the implemented | ||||
protocols more mature. It is up to the individual working groups to use | ||||
this information as they see fit". | ||||
</t> | ||||
<t> | ||||
There are two known independent implementations of SRP requestors: | ||||
</t> | ||||
<ul> | ||||
<li>SRP Client for OpenThread: https://github.com/openthread/openthread/p | ||||
ull/6038</li> | ||||
<li>mDNSResponder open source project: https://github.com/Abhayakara/mdns | ||||
responder</li> | ||||
</ul> | ||||
<t> | ||||
There are two related implementations of an SRP registrar. One acts as a | ||||
DNS Update proxy, taking an SRP Update and applying it | ||||
to the specified DNS zone using DNS update. The other acts as an Advertis | ||||
ing Proxy | ||||
<xref target="I-D.ietf-dnssd-advertising-proxy"/>. Both are included in t | ||||
he mDNSResponder open source project mentioned above. | ||||
</t> | ||||
</section> | ||||
<section> | ||||
<name>Acknowledgments</name> | ||||
<t>Thanks to <contact fullname="Toke Høiland-Jørgensen"/>, Jonathan Hui, E | ||||
sko Dijk, Kangping Dong and Abtin Keshavarzian for | ||||
their thorough technical reviews. Thanks to Kangping and Abtin as well fo | ||||
r testing the document by doing an independent | ||||
implementation. Thanks to Tamara Kemper for doing a nice developmental ed | ||||
it, Tim Wattenberg for doing an SRP requestor | ||||
proof-of-concept implementation at the Montreal Hackathon at IETF 102, an | ||||
d Tom Pusateri for reviewing during the hackathon | ||||
and afterwards. Thanks to Esko for a really thorough second last call rev | ||||
iew. Thanks also to Nathan Dyck, Gabriel | ||||
Montenegro, Kangping Dong, Martin Turon, and Michael Cowan for their deta | ||||
iled second last call reviews. Thanks to Patrik | ||||
Fältström, Dhruv Dhody, David Dong, Joey Salazar, Jean-Michel Combes, and | ||||
Joerg Ott for their respective directorate | ||||
reviews. Thanks to Paul Wouters for a <em>really</em> detailed IESG revie | ||||
w! Thanks also to the other IESG members who | ||||
provided comments or simply took the time to review the document.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="I-D.cheshire-dnssd-roadmap" to="ROADMAP"/> | <displayreference target="I-D.cheshire-dnssd-roadmap" to="ROADMAP"/> | |||
<displayreference target="I-D.ietf-dnssd-advertising-proxy" to="AP"/> | <displayreference target="I-D.ietf-snac-simple" to="SNAC-SIMPLE"/> | |||
<!-- <displayreference target="I-D.ietf-dnssd-hybrid" to="I-D.ietf-dnssd-hyb rid"/> appears to not work in xml2rfc 2.6.2 --> | ||||
<references> | <references> | |||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | ||||
D.ietf-dnssd-update-lease.xml"/> | <!-- [I-D.ietf-dnssd-update-lease] companion document RFC 9664--> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <reference anchor="RFC9664" target="https://www.rfc-editor.org/info/rfc966 | |||
.1035.xml" /> | 4"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <front> | |||
.1536.xml" /> | <title>An EDNS(0) Option to Negotiate Leases on DNS Updates</title> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <author fullname="Stuart Cheshire" initials="S." surname="Cheshire"> | |||
.2119.xml" /> | <organization>Apple Inc.</organization> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | </author> | |||
.2136.xml" /> | <author fullname="Ted Lemon" initials="T." surname="Lemon"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <organization>Apple Inc</organization> | |||
.2181.xml" /> | </author> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <date month="October" year="2024"/> | |||
.2539.xml" /> | </front> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <seriesInfo name="RFC" value="9664"/> | |||
.2782.xml" /> | <seriesInfo name="DOI" value="10.17487/RFC9664"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | </reference> | |||
.2931.xml" /> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.103 | |||
.3172.xml"/> | 5.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.153 | |||
.3445.xml"/> | 6.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.211 | |||
.3596.xml"/> | 9.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.213 | |||
.4035.xml"/> | 6.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.218 | |||
.6303.xml"/> | 1.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.253 | |||
.6763.xml"/> | 9.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.278 | |||
.7858.xml" /> | 2.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.293 | |||
.8085.xml" /> | 1.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.317 | |||
.8126.xml"/> | 2.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.359 | |||
.8174.xml"/> | 6.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.403 | |||
.8375.xml"/> | 4.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.403 | |||
.8624.xml"/> | 5.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.630 | |||
.8765.xml" /> | 3.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.676 | |||
.9364.xml" /> | 3.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.785 | ||||
8.xml" /> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.808 | ||||
5.xml" /> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.812 | ||||
6.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.817 | ||||
4.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.837 | ||||
5.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.862 | ||||
4.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.876 | ||||
5.xml" /> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.936 | ||||
4.xml" /> | ||||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.213 | |||
.2131.xml" /> | 1.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.282 | |||
.2827.xml" /> | 7.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.300 | |||
.3007.xml" /> | 7.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.392 | |||
.4861.xml" /> | 7.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.486 | |||
.6105.xml" /> | 1.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.486 | |||
.6335.xml" /> | 2.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.610 | |||
.6760.xml" /> | 5.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.633 | |||
.6761.xml" /> | 5.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.676 | |||
.6762.xml" /> | 0.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.676 | |||
.7084.xml" /> | 1.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.676 | |||
.7228.xml" /> | 2.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.688 | |||
.7413.xml" /> | 7.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.708 | |||
.8415.xml" /> | 4.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.772 | |||
.8520.xml" /> | 3.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.722 | |||
.8766.xml" /> | 8.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.741 | |||
.8945.xml" /> | 3.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.841 | |||
D.cheshire-dnssd-roadmap.xml"/> | 5.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.852 | |||
D.ietf-dnssd-advertising-proxy.xml"/> | 0.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.876 | |||
D.ietf-snac-simple.xml"/> | 6.xml" /> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.894 | ||||
5.xml" /> | ||||
<reference anchor="SUDN" target="https://www.iana.org/assignments/special- | <!-- [I-D.cheshire-dnssd-roadmap] IESG state: Expired as of 07/15/24 | |||
use-domain-names/special-use-domain-names.xhtml"> | ||||
[Ted] I don't know if Stuart is going to update this. References to drafts are a | ||||
lways problematic in this way. | ||||
I think we need to either leave it as is, or take it out. I think it's oka | ||||
y to leave it as is, but will | ||||
defer to the experts. --> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.c | ||||
heshire-dnssd-roadmap.xml"/> | ||||
<!-- [I-D.ietf-snac-simple] IESG state: I-D Exists as of 07/15/24 | ||||
[Ted] I would not want to see this added to the cluster. It's informative, after | ||||
all. snac-simple should head to the IESG in the next couple of | ||||
months, but I think we should just leave the reference to the draft unless | ||||
there's a strong argument not to. This is just an informative | ||||
reference anyway. --> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.i | ||||
etf-snac-simple.xml"/> | ||||
<reference anchor="SUDN" target="https://www.iana.org/assignments/special- | ||||
use-domain-names"> | ||||
<front> | <front> | |||
<title>Special-Use Domain Names Registry</title> | <title>Special-Use Domain Names</title> | |||
<author/> | <author> | |||
<date month="July" year="2012"/> | <organization>IANA</organization> | |||
</author> | ||||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="LSDZ" target="https://www.iana.org/assignments/locally- served-dns-zones/locally-served-dns-zones.xhtml"> | <reference anchor="LSDZ" target="https://www.iana.org/assignments/locally- served-dns-zones"> | |||
<front> | <front> | |||
<title>Locally-Served DNS Zones Registry</title> | <title>Locally-Served DNS Zones</title> | |||
<author/> | <author> | |||
<date month="July" year="2011"/> | <organization>IANA</organization> | |||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="SUB" target="https://www.iana.org/assignments/locally-s | ||||
erved-dns-zones/locally-served-dns-zones"> | ||||
<front> | ||||
<title>service.arpa Subdomain</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="PORT" target="https://www.iana.org/assignments/service-names- | ||||
port-numbers"> | ||||
<front> | ||||
<title>Service Name and Transport Protocol Port Number Registry</title | ||||
> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IPv6" target="https://www.iana.org/assignments/iana-ipv | ||||
6-special-registry"> | ||||
<front> | ||||
<title>IANA IPv6 Special-Purpose Address Registry</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="IAB-ARPA" target="https://www.iab.org/documents/corresp ondence-reports-documents/2017-2/iab-statement-on-the-registration-of-special-us e-names-in-the-arpa-domain/"> | <reference anchor="IAB-ARPA" target="https://www.iab.org/documents/corresp ondence-reports-documents/2017-2/iab-statement-on-the-registration-of-special-us e-names-in-the-arpa-domain/"> | |||
<front> | <front> | |||
<title>Internet Architecture Board statement on the registration of sp ecial use names in the ARPA domain</title> | <title>Internet Architecture Board statement on the registration of sp ecial use names in the ARPA domain</title> | |||
<author/> | <author/> | |||
<date month="March" year="2017"/> | <date month="March" year="2017"/> | |||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="ZC"> | <reference anchor="ZC"> | |||
<front> | <front> | |||
<title>Zero Configuration Networking: The Definitive Guide</title> | <title>Zero Configuration Networking: The Definitive Guide</title> | |||
<author initials="S." surname="Cheshire" fullname="Stuart Cheshire"/> | ||||
<author initials="D.H." surname="Steinberg" fullname="Daniel H. Steinb erg"/> | <author initials="D.H." surname="Steinberg" fullname="Daniel H. Steinb erg"/> | |||
<author initials="S." surname="Cheshire" fullname="Stuart Cheshire"/> | ||||
<date year="2005" month="December"/> | <date year="2005" month="December"/> | |||
</front> | </front> | |||
<seriesInfo name="O'Reilly Media, Inc." value=""/> | <refcontent>O'Reilly Media, Inc.</refcontent> | |||
<seriesInfo name="ISBN" value="0-596-10100-7"/> | <seriesInfo name="ISBN" value="9780596101008"/> | |||
</reference> | </reference> | |||
</references> | </references> | |||
</references> | ||||
<!--[rfced] Might this be an agreeable update to the title of | ||||
Appendix A (to avoid double -ing words in the beginning?)? | ||||
Original: | ||||
Appendix A. Testing Using Standard DNS Servers Compliant with RFC | ||||
2136 | ||||
Perhaps: | ||||
Appendix A. Testing the Use of Standard DNS Servers Compliant with RFC | ||||
2136 | ||||
Perhaps: | ||||
Appendix A. Testing Standard DNS Servers Compliant with RFC 2136 | ||||
[Ted] Nope. See below. :) | ||||
--> | ||||
<section> | <section> | |||
<name>Testing using standard RFC2136-compliant DNS servers</name> | <name>Using Standard Authoritative DNS Servers Compliant with RFC 2136 to Test SRP Requesters</name> | |||
<t> | <t> | |||
It may be useful to set up an authoritative DNS server for testing that | For testing, it may be useful to set up an | |||
does not implement SRP. This can be done by configuring the | authoritative DNS server that does not implement SRP. | |||
server to listen on the anycast address, or advertising it in the _dnssd | This can be done by configuring the | |||
&nbhy;srp._tcp.<zone> SRV and | authoritative DNS server to listen on the anycast address or by | |||
_dnssd&nbhy;srp&nbhy;tls._tcp.<zone> record. It must be configure | advertising it in the "_dnssd&nbhy;srp._tcp.<zone>" and | |||
d to be authoritative for | "_dnssd&nbhy;srp&nbhy;tls._tcp.<zone>" SRV records. | |||
"default.service.arpa", and to accept updates from hosts on local networ | It must be configured to be authoritative for | |||
ks for names under "default.service.arpa" | "default.service.arpa." and to accept updates from hosts | |||
without authentication, since such servers will not have support for FCF | on local networks for names under "default.service.arpa." | |||
S authentication (<xref target="fcfs"/>).</t> | without authentication since such authoritative DNS servers will not | |||
have support for FCFS authentication (<xref target="fcfs"/>).</t> | ||||
<t> | <t> | |||
An authoritative DNS server configured in this way will be able to succe | An authoritative DNS server configured in this way will be able to succe | |||
ssfully accept and process SRP Updates from requestors that send SRP | ssfully accept and process SRP Updates from requesters that send SRP | |||
updates. However, no prerequisites will be applied, and this means that | updates. However, no prerequisites will be applied; this means | |||
the test server will accept internally | that the test authoritative DNS server will accept internally | |||
inconsistent SRP Updates, and will not stop two SRP Updates, sent by dif | inconsistent SRP Updates and will not stop two SRP Updates sent by diffe | |||
ferent services, that claim the same name(s), | rent services that claim the same name or names | |||
from overwriting each other.</t> | from overwriting each other.</t> | |||
<t> | <t> | |||
Since SRP Updates are signed with keys, validation of the SIG(0) algorit | Since SRP Updates are signed with keys, validation of the SIG(0) algorit | |||
hm used by the requestor can be done by manually | hm used by the requester can be done by manually | |||
installing the requestor's public key on the DNS server that will be rec | installing the requester's public key on the authoritative DNS server | |||
eiving the updates. The key can then be used to | that will be receiving the updates. The key can then be used to | |||
authenticate the SRP update, and can be used as a requirement for the up | authenticate the SRP Update and can be used as a requirement for the upd | |||
date. An example configuration for testing SRP | ate. An example configuration for testing SRP | |||
using BIND 9 is given in <xref target="bind-example"/>.</t> | using BIND 9 is given in <xref target="bind-example"/>.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>How to allow SRP requestors to update standard RFC2136-compliant ser vers</name> | <name>How to Allow SRP Requesters to Update Standard Servers Compliant wit h RFC 2136</name> | |||
<t> | <t> | |||
Ordinarily SRP Updates will fail when sent to an RFC 2136-compliant serv | Ordinarily, CNN SRP Updates sent to an authoritative DNS server | |||
er that does not implement SRP because the zone | that implements standard DNS Update <xref target="RFC2136"/> but not SRP | |||
being updated is "default.service.arpa", and no DNS server that is not a | will fail | |||
n SRP registrar would normally be configured to be | because the zone being updated is "default.service.arpa." and because | |||
authoritative for "default.service.arpa". Therefore, a requestor that s | no authoritative DNS server that is not an SRP registrar would normally | |||
ends an SRP Update can tell that the receiving server | be configured to be authoritative for "default.service.arpa.". | |||
does not support SRP, but does support RFC2136, because the RCODE will e | Therefore, a requester that sends an SRP Update can | |||
ither be NotZone, NotAuth or Refused, or because | tell that the receiving authoritative DNS server | |||
there is no response to the update request (when using the anycast addre | does not support SRP but does support | |||
ss)</t> | standard DNS Update <xref target="RFC2136"/> | |||
because the RCODE will either be NotZone, NotAuth, or Refused or because | ||||
there is no response to the update request (when using the anycast addre | ||||
ss).</t> | ||||
<t> | <t> | |||
In this case a requestor MAY attempt to register itself using regular RF | In this case, a requester <bcp14>MAY</bcp14> | |||
C2136 DNS updates. To do so, it must discover the | attempt to register itself using | |||
default registration zone and the DNS server designated to receive updat | normal DNS updates <xref target="RFC2136"/>. | |||
es for that zone, as described earlier, using the | To do so, it must discover the | |||
_dns&nbhy;update._udp SRV record. It can then send the update to the po | default registration zone and the authoritative DNS server designated | |||
rt and host pointed to by the SRV record, and is | to receive updates for that zone, as described earlier, using the | |||
_dns&nbhy;update._udp SRV record. It can then send the update to the po | ||||
rt and host pointed to by the SRV record, and it is | ||||
expected to use appropriate prerequisites to avoid overwriting competing records. Such updates are out of scope for SRP, | expected to use appropriate prerequisites to avoid overwriting competing records. Such updates are out of scope for SRP, | |||
and a requestor that implements SRP MUST first attempt to use SRP to reg | and a requester that implements SRP <bcp14>MUST</bcp14> | |||
ister itself, and only attempt to use RFC2136 | first attempt to use SRP to register itself and | |||
backwards compatibility if that fails. Although the owner name for the | only attempt to use backwards capability with | |||
SRV record specifies the UDP protocol for updates, | normal DNS Update <xref target="RFC2136"/> | |||
it is also possible to use TCP, and TCP SHOULD be required to prevent sp | if that fails. | |||
oofing.</t> | Although the owner name of the SRV record for | |||
DNS Update (_dns-update._udp) specifies UDP, | ||||
it is also possible to use TCP, and TCP <bcp14>SHOULD</bcp14> be require | ||||
d to prevent spoofing.</t> | ||||
</section> | </section> | |||
<section anchor="bind-example"> | <section anchor="bind-example"> | |||
<name>Sample BIND9 configuration for default.service.arpa.</name> | <name>Sample BIND 9 Configuration for "default.service.arpa."</name> | |||
<figure title="Zone Configuration in named.conf"><artwork><![CDATA[ | ||||
<figure title="Zone Configuration in named.conf"> | ||||
<artwork align="center"><![CDATA[ | ||||
zone "default.service.arpa." { | zone "default.service.arpa." { | |||
type primary; | type primary; | |||
file "/etc/bind/primary/service.db"; | file "/etc/bind/primary/service.db"; | |||
allow-update { key demo.default.service.arpa.; }; | allow-update { key demo.default.service.arpa.; }; | |||
}; | };]]></artwork> | |||
]]></artwork></figure> | </figure> | |||
<figure title="Example Zone file"><artwork><![CDATA[ | ||||
$ORIGIN . | <figure title="Example Zone File"> | |||
<artwork align="center"><![CDATA[ | ||||
$TTL 57600 ; 16 hours | $TTL 57600 ; 16 hours | |||
default.service.arpa IN SOA ns3.default.service.arpa. | @ IN SOA ns postmaster ( | |||
postmaster.default.service.arpa. ( | 2951053287 ; serial | |||
2951053287 ; serial | 3600 ; refresh (1 hour) | |||
3600 ; refresh (1 hour) | 1800 ; retry (30 minutes) | |||
1800 ; retry (30 minutes) | 604800 ; expire (1 week) | |||
604800 ; expire (1 week) | 3600 ; minimum (1 hour) | |||
3600 ; minimum (1 hour) | ) | |||
) | NS ns | |||
NS ns3.default.service.arpa. | ns AAAA 2001:db8:0:2::1 | |||
SRV 0 0 53 ns3.default.service.arpa. | ||||
$ORIGIN default.service.arpa. | ||||
$TTL 3600 ; 1 hour | ||||
_ipps._tcp PTR demo._ipps._tcp | ||||
$ORIGIN _ipps._tcp.default.service.arpa. | ||||
demo TXT "0" | ||||
SRV 0 0 9992 demo.default.service.arpa. | ||||
$ORIGIN _udp.default.service.arpa. | ||||
$TTL 3600 ; 1 hour | ||||
_dns-update PTR ns3.default.service.arpa. | ||||
$ORIGIN _tcp.default.service.arpa. | ||||
_dnssd-srp PTR ns3.default.service.arpa. | ||||
$ORIGIN default.service.arpa. | ||||
$TTL 300 ; 5 minutes | ||||
ns3 AAAA 2001:db8:0:1::1 | ||||
$TTL 3600 ; 1 hour | $TTL 3600 ; 1 hour | |||
demo AAAA 2001:db8:0:2::1 | ||||
KEY 0 3 13 ( | ; Autoconguration bootstrap records | |||
qweEmaaq0FAWok5//ftuQtZgiZoiFSUsm0srWREdywQU | _dnssd-srp._tcp SRV 0 0 53 ns | |||
9dpvtOhrdKWUuPT3uEFF5TZU6B4q1z1I662GdaUwqg== | _dnssd-srp-tls._tcp SRV 0 0 853 ns | |||
); alg = ECDSAP256SHA256 ; key id = 15008 | ||||
AAAA ::1 | ; Service Discovery Instruction | |||
]]></artwork></figure> | _ipps._tcp PTR demo._ipps._tcp | |||
; Service Description Instruction | ||||
demo._ipps._tcp SRV 0 0 631 demohost | ||||
TXT "" | ||||
; Host Description Instruction | ||||
demohost AAAA 2001:db8:0:2::2 | ||||
KEY 0 3 13 ( | ||||
qweEmaaq0FAWok5//ftuQtZgiZoiFSUsm0srWREdywQU | ||||
9dpvtOhrdKWUuPT3uEFF5TZU6B4q1z1I662GdaUwqg== | ||||
); alg = ECDSAP256SHA256 ; key id = 14495 | ||||
]]></artwork> | ||||
</figure> | ||||
</section> | ||||
<section numbered="false"> | ||||
<name>Acknowledgments</name> | ||||
<t>Thanks to <contact fullname="Toke Høiland-Jørgensen"/>, <contact | ||||
fullname="Jonathan Hui"/>, <contact fullname="Esko Dijk"/>, <contact | ||||
fullname="Kangping Dong"/>, and <contact fullname="Abtin Keshavarzian"/> | ||||
for their thorough technical reviews. Thanks to <contact | ||||
fullname="Kangping"/> and <contact fullname="Abtin"/> as well for | ||||
testing the document by doing an independent implementation. Thanks to | ||||
<contact fullname="Tamara Kemper"/> for doing a nice developmental edit, | ||||
<contact fullname="Tim Wattenberg"/> for doing an SRP requester | ||||
proof-of-concept implementation at the Montreal Hackathon at IETF 102, | ||||
and <contact fullname="Tom Pusateri"/> for reviewing during the | ||||
hackathon and afterwards. Thanks to <contact fullname="Esko"/> for a | ||||
really thorough second Last Call review. Thanks also to <contact | ||||
fullname="Nathan Dyck"/>, <contact fullname="Gabriel Montenegro"/>, | ||||
<contact fullname="Kangping Dong"/>, <contact fullname="Martin Turon"/>, | ||||
and <contact fullname="Michael Cowan"/> for their detailed second last | ||||
call reviews. Thanks to <contact fullname="Patrik Fältström"/>, <contact | ||||
fullname="Dhruv Dhody"/>, <contact fullname="David Dong"/>, <contact | ||||
fullname="Joey Salazar"/>, <contact fullname="Jean-Michel Combes"/>, and | ||||
<contact fullname="Joerg Ott"/> for their respective directorate | ||||
reviews. Thanks to <contact fullname="Paul Wouters"/> for a | ||||
<em>really</em> detailed IESG review! Thanks also to the other IESG | ||||
members who provided comments or simply took the time to review the | ||||
document.</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | ||||
<!-- Keep this comment at the end of the file | <!-- [rfced] We had some questions about abbreviations: | |||
Local variables: | ||||
mode: sgml | a) Should "DNSSD" (in "non-DNSSD services" and "DNSSD discovery zone") | |||
fill-column:132 | be updated to "DNS-SD" (hyphen) or "dnssd" (lowercase) to match prior | |||
sgml-omittag:t | usage in the document? | |||
sgml-shorttag:t | ||||
sgml-namecase-general:t | [Ted] Yes. | |||
sgml-general-insert-case:lower | ||||
sgml-minimize-attributes:nil | b) Is the "Service" (or "Service Description") redundant here and in | |||
sgml-always-quote-attributes:t | similar cases throughout the document (as SD = Service Discovery)? | |||
sgml-indent-step:2 | That is, just examples below, more cases exist. | |||
sgml-indent-data:t | ||||
sgml-parent-document:nil | Original: | |||
sgml-exposed-tags:nil | DNS-SD Service registration uses public keys and SIG(0) to allow | |||
sgml-local-catalogs:nil | services to defend their registrations. | |||
sgml-local-ecat-files:nil | ||||
End: | Original: | |||
--> | Although in principle DNS-SD Service Description records can | |||
include other record types with the same Service Instance Name, in | ||||
practice they rarely do. | ||||
[Ted] No. Do not unpack the acronym! :) | ||||
c) For "TSIG", would you like us to expand to "transaction signature" | ||||
upon first usage to match RFC 8945? | ||||
Original: | ||||
The format of the KEY resource record in the SRP Update is defined in | ||||
[RFC3445]. Because the KEY RR used in TSIG is not a zone-signing | ||||
key, the flags field in the KEY RR <bcp14>MUST</bcp14> be all zeroes. | ||||
[Ted] Yikes! This should be SIG(0), not TSIG! That's the name of the protocol, a | ||||
nd we've given reference to the correct RFC, so unpacking it would just be confu | ||||
sing. | ||||
d) Throughout the document, "SRP Update" is used, and there is only | ||||
one instance of "SRV update". We wanted to make sure that "SRV" was | ||||
indeed intended and not "SRP". | ||||
Original: | ||||
* If there is one "Add to an RRset" SRV update, there <bcp14>MUST</bcp14> be | ||||
at | ||||
least one "Add to an RRset" TXT update. | ||||
[Ted] This is actually an update to an SRV RR, not an SRP Update, but I agree th | ||||
at it's confusing and have tweaked the text to address the concern. | ||||
e) We have updated to use the abbreviation CNN for Constrained-Node | ||||
Network (to match its use in RFC 7228). Please review and let us know | ||||
any objections. Further, please review uses of "constrained network" | ||||
and let us know if any of these should be updated to CNN as well. | ||||
[Ted] I'm vaguely on the fence about this, but I think consistency is | ||||
good, and the term is used enough that using the abbreviation pays off. | ||||
--> | ||||
<!-- [rfced] We had some questions regarding capitalization of certain terms: | ||||
a) We see instances of "Anycast" (capitalized) and "anycast" | ||||
(lowercase) throughout the document, but we are unsure if certain | ||||
instances are part of proper names while other instances are more | ||||
generic. Please let us know if these need to be made more consistent | ||||
or if they are accurate as they currently are. We've listed a few | ||||
instances below. | ||||
Anycast vs. anycast: | ||||
IPv6 Anycast address | ||||
Port Control Protocol anycast address | ||||
fixed anycast address | ||||
anycast address | ||||
[Ted] Should be lowercase, I've fixed in the text. | ||||
b) We see the following similar terms. Please review and let us know | ||||
if/how to make these terms consistent. | ||||
service instance name | ||||
Service Instance Name | ||||
"Service Instance Name" | ||||
[Ted] The above are all the same thing | ||||
service instance | ||||
[Ted] This is the data structure (a set of RRs) that the Service Instance Name p | ||||
oints to. It's not currently capitalized, and that's probably okay. | ||||
Service Name | ||||
[Ted] The Service Name has zero or more PTR RRs each of which has a Service Inst | ||||
ance Name as its target. IOW the Service Name is not the same as the Service Ins | ||||
tance Name. | ||||
c) We see the following similar terms. Please let us know how to | ||||
update for consistency. | ||||
BIND 9 vs. BIND9 | ||||
[Ted] Fixed | ||||
d) We have updated the quoted terms that correspond to Sections 2.5.1 | ||||
- 2.5.4 of RFC 2136 to appear consistently in double quotes and with | ||||
capitalization that matches those section titles. Please let us know | ||||
any objections. | ||||
[Ted] This seems fine. | ||||
We further wondered if the following update should be made: | ||||
Original: | ||||
The target of the SRV RR Add... | ||||
Perhaps: | ||||
The "Add To An RRset" SRV update | ||||
[Ted] That's indeed confusing, and I've updated the text to make it more clear. | ||||
Please review other terms similar to these titles if they exist and | ||||
let us know if any further changes should be made. | ||||
[Ted] I'm not sure what you're asking here, unfortunately. | ||||
e) The NoError status names are in all caps in Section 2.2 of RFC | ||||
2136. Should the following updates be made to match? | ||||
ServFail to SERVFAIL | ||||
Refused to REFUSED | ||||
YXDomain to YXDOMAIN | ||||
[Ted] I don't think this is necessary, and would rather we didn't. | ||||
f) Regarding the terms “Service Description”, Service Discovery, and | ||||
“Host Description”. | ||||
- We see both Instruction and instruction when following these terms. | ||||
If/How may we make this uniform? | ||||
- Should “instruction” or the like should be inserted after instances | ||||
of these terms? Sometimes they are followed by "record" or "update", | ||||
if they appear without a label, might this be confusing to the reader? | ||||
Example: | ||||
The KEY record in Service Description updates <bcp14>MAY</bcp14> be omitted f | ||||
or | ||||
brevity; if it is omitted, the SRP registrar <bcp14>MUST</bcp14> behave as if | ||||
the | ||||
same KEY record that is given for the Host Description is also given | ||||
for each Service Description for which no KEY record is provided. | ||||
[Ted] Please just leave this text alone. The working group reviewed it and belie | ||||
ves it is correct. Making editorial changes for consistency here might in some c | ||||
ases have merit, but our cache is blown on this work and I do not want to open t | ||||
his can of worms. | ||||
g) Please review the following similar terms and let us know if/how | ||||
they should be made uniform with regard to quotes and ending with a | ||||
period (note that this term would have IANA implications): | ||||
"default.service.arpa" | ||||
"default.service.arpa." | ||||
host.default.service.arpa | ||||
host-1.default.service.arpa | ||||
host-2.default.service.arpa | ||||
host-31773.default.service.arpa. (at end of sentence) | ||||
".service.arpa." | ||||
"service.arpa" | ||||
"service.arpa." | ||||
Further note that we have updated from single to double quotes around | ||||
terms that were quoted in the original consistently. Please review | ||||
and let us know if further updates are necessary. | ||||
[Ted] I've reviewed and don't see any issues. | ||||
h) Please review the following for the use of quotes and consistent | ||||
use of SRV record. Please let us know if/how to update. | ||||
"_dnssd-srp._tcp.<zone>" SRV record vs. _dnssd-srp._tcp.<zone> SRV | ||||
"_dnssd-srp-tls._tcp.<zone>" SRV record vs. _dnssd-srp-tls._tcp.<zone> record | ||||
_dns-update._udp SRV | ||||
[Ted] I've made changes for consistency here. Any inconsistency you still see, e | ||||
.g. with the zone file, is intentional. | ||||
--> | ||||
<!-- [rfced] Please review each artwork element in Appendix C in case | ||||
they should be tagged as sourcecode or another element. | ||||
[Ted] These are configuration files. Spacing should not be modified. I don't thi | ||||
nk there's a need to do anything fancy here. The HTML is currently correct. | ||||
--> | ||||
<!-- [rfced] Please review the "Inclusive Language" portion of the | ||||
online Style Guide | ||||
<https://www.rfc-editor.org/styleguide/part2/#inclusive_language> | ||||
and let us know if any changes are needed. | ||||
Note that our script did not flag any words in particular, but this | ||||
should still be reviewed as a best practice. | ||||
--> | ||||
</rfc> | ||||
End of changes. 250 change blocks. | ||||
1343 lines changed or deleted | 2041 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |