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-25" numb | ||||
er="9665" ipr="trust200902" xmlns:xi="http://www.w3.org/2001/XInclude" obsoletes | ||||
="" updates="" version="3" sortRefs="true" consensus="true" symRefs="true" tocDe | ||||
pth="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-SD) | ||||
uses the standard DNS Update mechanism to enable DNS-SD using only unica | ||||
st packets. This makes it possible to | ||||
deploy DNS-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-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-SD (see <xref target="RFC6763"></xref>) is a component of Zero Confi | ||||
<xref target="RFC6763">DNS-Based Service Discovery</xref> is a component | guration Networking | |||
of Zero Configuration Networking | (see <xref target="RFC6760"/>, <xref target="ZC"/>, and <xref target="I- | |||
<xref target="RFC6760"/> <xref target="ZC"/> <xref target="I-D.cheshire- | D.cheshire-dnssd-roadmap"/>).</t> | |||
dnssd-roadmap"/>.</t> | ||||
<t> | <t> | |||
This document describes an enhancement to <xref target="RFC6763">DNS-Bas | This document describes an enhancement to DNS-SD that | |||
ed Service Discovery</xref> (DNS&nbhy;SD) that | allows servers to register the services they offer using the DNS protocol | |||
allows servers to register the services they offer using the DNS protocol | rather than using Multicast DNS (mDNS) (see <xref target="RFC6762"></xref>). T | |||
rather than using <xref target="RFC6762">Multicast | here is already a large installed base of DNS&nbhy;SD clients that can discover | |||
DNS</xref> (mDNS). There is already a large installed base of DNS&nbhy;S | services using the DNS | |||
D clients that can discover services using the DNS | protocol (e.g., Android, Windows, Linux, Apple).</t> | |||
protocol (e.g. Android, Windows, Linux, Apple).</t> | ||||
<t> | <t> | |||
This document is intended for three audiences: implementors of software that provides services that should be advertised | This document is intended for three audiences: implementors of software that provides services that should be advertised | |||
using DNS&nbhy;SD, implementors of DNS servers that will be used in cont exts where DNS&nbhy;SD registration is needed, and | using DNS&nbhy;SD, implementors of DNS servers that will be used in cont exts where DNS&nbhy;SD registration is needed, and | |||
administrators of networks where DNS&nbhy;SD service is required. The d ocument is expected to provide sufficient | administrators of networks where DNS&nbhy;SD is required. The document is expected to provide sufficient | |||
information to allow interoperable implementation of the registration pr otocol.</t> | information to allow interoperable implementation of the registration pr otocol.</t> | |||
<t> | <t> | |||
DNS-Based Service Discovery (DNS&nbhy;SD) allows services to advertise t | ||||
he fact that they provide service, and to provide | <!--[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. | ||||
--> | ||||
DNS&nbhy;SD allows services to advertise the fact that they provide serv | ||||
ice and to provide | ||||
the information required to access that service. DNS&nbhy;SD clients ca n then discover the set of services of a particular | the information required to access that service. DNS&nbhy;SD clients ca n then discover the set of services of a particular | |||
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-SD using the DNS protocol (as opposed | |||
NS protocol (as opposed to mDNS) can be more efficient and versatile, it is | to mDNS) can be more efficient and versatile, 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 manually enter | |||
data, or else use DNS Update | new data or to use a DNS Update | |||
<xref target="RFC2136"/>. Unfortunately DNS Update requires either that t | (see <xref target="RFC2136"/>). Unfortunately, a DNS Update requires eithe | |||
he authoritative DNS server automatically trust | r:</t> | |||
updates, or else that the DNS Update requestor have some kind of shared s | <ul> | |||
ecret or public key that is known to the DNS server | <li>that the authoritative DNS server automatically trust | |||
and can be used to authenticate the update. Furthermore, DNS Update can | updates or</li> | |||
be a fairly chatty process, requiring multiple | <li>that the DNS Update requestor have some kind of shared secret or publ | |||
round trips with different conditional predicates to complete the update | ic key that is known to the DNS server | |||
process.</t> | and can be used to authenticate the update.</li></ul> | |||
<t>Furthermore, the DNS Update can be a fairly chatty process, requiring | ||||
multiple | ||||
roundtrips with different conditional predicates to complete the update p | ||||
rocess.</t> | ||||
<t> | <t> | |||
The Service Registration Protocol (SRP) adds a set of default heuristics | The Service Registration Protocol (SRP) adds a set of default heuristics | |||
for processing DNS updates that eliminates the need for DNS update | for processing DNS updates that eliminates the need for DNS-update-conditional p | |||
conditional predicates: instead, the SRP registrar (a DNS server that sup | redicates. Instead, the SRP registrar (a DNS server that supports SRP updates) h | |||
ports SRP updates) has a set of default predicates | as a set of default predicates | |||
that are applied to the update, and the update either succeeds entirely, | that are applied to the update; and the update either succeeds entirely o | |||
or fails in a way that allows the requestor to know | r fails in a way that allows the requestor 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 requestor 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>using SIG(0) (<xref target="RFC2931"/>), authenticate both the initia | |||
pting to claim the same name will not possess the | l claim and subsequent | |||
SIG(0) key used by the first requestor to claim it, and so its claim will | updates.</li></ul> | |||
be rejected and the second requestor will have to | <t>This prevents name conflicts, since a second SRP requestor attempting | |||
to claim the same name will not possess the | ||||
SIG(0) key used by the first requestor to claim it: so its claim will be | ||||
rejected, and the second requestor will have 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 that we only support adding a very restricted set | with data the client sends us. 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 requesto | |||
r. We reason that mDNS <xref target="RFC6762"/> | r. We reason that mDNS (<xref target="RFC6762"/>) | |||
allows arbitrary hosts on a single IP link to advertise services <xref ta | allows arbitrary hosts on a single IP link to advertise services (<xref t | |||
rget="RFC6763"/>, relying on whatever service is | arget="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 include analyses for other records, and extend | record; therefore, these are forbidden. A future protocol specification m ight include analyses for other records and extend | |||
the set of records that can be registered here. Or it might require estab lishment of trust, and add an authorization model | the set of records that can be registered here. Or it might require estab lishment of trust, and add an authorization model | |||
to the authentication model we now have. But this is work for a future do cument.</t> | to the authentication model we now have. But this is work for a future do cument.</t> | |||
<t> | <t> | |||
Finally, SRP adds the concept of a 'lease,' similar to leases in Dynamic | Finally, SRP adds the concept of a "lease", similar to leases in DHCP | |||
Host Configuration Protocol | (<xref target="RFC8415"/>). The SRP registration itself has a lease that | |||
<xref target="RFC8415"/>. The SRP registration itself has a lease which | may be on the order of an hour; if the requestor | |||
may be on the order of an hour; if the requestor | ||||
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 egistration has expired.</t> | lease so that another requestor cannot claim the name, even though the re gistration has expired.</t> | |||
<t> | <t> | |||
The Service Registration Protocol for DNS&nbhy;SD (SRP), specified in th | The SRP for DNS-SD specified in this document provides a reasonably secu | |||
is document, provides a reasonably secure mechanism | re mechanism | |||
for publishing this information. Once published, these services can be | for publishing this information. Once published, these services can be | |||
readily discovered by DNS&nbhy;SD clients using | readily discovered by DNS-SD clients using | |||
standard DNS lookups.</t> | standard DNS lookups.</t> | |||
<t> | <t> | |||
The DNS&nbhy;SD specification (<xref target="RFC6763" section="10" secti | The DNS-SD specification (see <xref target="RFC6763" section="10" sectio | |||
onFormat="comma"/>, “Populating the DNS with | nFormat="of"/> briefly discusses ways that servers can publish their information | |||
Information”), briefly discusses ways that servers can publish their inf | in the DNS namespace. In the case of | |||
ormation in the DNS namespace. In the case of | ||||
mDNS, it allows servers to publish their information on the local link, using names in the ".local" namespace, which makes | mDNS, it allows servers to publish their information on the local link, 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 | RFC 6763 also allows clients to discover services using the DNS protocol | |||
1035">the DNS protocol</xref>. This can be done by | (see <xref target="RFC1035"></xref>). This can be done by | |||
having a system administrator manually configure service information in | having a system administrator manually configure service information in | |||
the DNS, but manually populating DNS authoritative | the DNS; however, manually populating DNS authoritative | |||
server databases is costly and potentially error-prone, and requires a k | server databases is costly and potentially error-prone and requires a kn | |||
nowledgeable network administrator. Consequently, | owledgeable network administrator. Consequently, | |||
although all DNS&nbhy;SD client implementations of which we are aware su | although all DNS-SD client implementations of which we are aware support | |||
pport DNS&nbhy;SD using DNS queries, in practice it | DNS-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 (see <xref target="RFC8766"></xref>) provides one wa | |||
tomatically populate the DNS | y to automatically 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 or wh | |||
here sleepy devices are common, by supporting both | ere sleepy devices are common by supporting both the | |||
offering of services, and discovery of services, using unicast.</t> | offering of services and the discovery of services using unicast.</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> | ||||
</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 (see <xref target="RFC2136"/> | |||
f target="RFC3007"/> to publish service information | and <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"/>). An SRP registrar is most likely an authorita | |||
ve DNS server, or else is updating an authoritative | tive DNS server or is updating an authoritative | |||
DNS server. There is no requirement that the server that is receiving SRP updates be the same server that is answering | DNS server. There is no requirement that the server that is receiving SRP updates be the same server that is answering | |||
queries that return records that have been registered.</t> | queries that return records that have been registered.</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 on domain, or discover the default registration | Full-featured hosts either are configured manually with a registrati on domain or discover the default registration | |||
domain as described in <xref target="RFC6763" section="11" sectionFor mat="of"/>. If this process does not produce a | domain as described in <xref target="RFC6763" section="11" sectionFor mat="of"/>. If this process does not produce a | |||
default registration domain, the Service Registration protocol is not | default registration domain, the SRP is not discoverable on the local | |||
discoverable on the local network using this | network using this | |||
mechanism. Other discovery mechanisms are possible, but are out of sc | mechanism. Other discovery mechanisms are possible, but they are out | |||
ope for this document.</t> | of scope for this document.</t> | |||
<t> | <t> | |||
Manual configuration of the registration domain can be done either b | Manual configuration of the registration domain can be done either:< | |||
y querying the list of available registration | /t> | |||
domains ("r._dns&nbhy;sd._udp") and allowing the user to select one | <ul><li>by querying the list of available registration | |||
from the UI, or by any other means appropriate to | domains ("r._dns&nbhy;sd._udp") and allowing the user to select one | |||
the particular use case being addressed. Full-featured devices cons | from the UI or</li> | |||
truct the names of the SRV, TXT, and PTR records | <li>by any other means appropriate to | |||
describing their service(s) as subdomains of the chosen service regi | the particular use case being addressed.</li></ul> | |||
stration domain. For these names they then discover | <t>Full-featured devices construct the names of the SRV, TXT, and PTR | |||
the zone apex of the closest enclosing DNS zone using SOA queries <x | records | |||
ref target="RFC8765" section="6.1"/>. Having | describing their service or services as subdomains of the chosen ser | |||
vice registration domain. For these names, they then discover | ||||
the zone apex of the closest enclosing DNS zone using SOA queries (s | ||||
ee <xref target="RFC8765" section="6.1"/>). 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 | server to which they can send SRP updates. Hosts that support SRP U pdates 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 | connections (such as printers, home routers, and even battery-operate | |||
devices such as mobile phones that have | d devices such as mobile phones that have | |||
long battery lives. | long battery lives). | |||
</t> | </t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Constrained Hosts</name> | <name>Constrained Hosts</name> | |||
<t> | <t> | |||
For devices designed for Constrained-Node Networks <xref target="RFC 7228"/> some simplifications are available. Instead of | For devices designed for CNNs (<xref target="RFC7228"/>), some simpl ifications are available. Instead of | |||
being configured with (or discovering) the service registration doma in, the special-use domain name (see | being configured with (or discovering) the service registration doma in, the special-use domain name (see | |||
<xref target="RFC6761"/>) "default.service.arpa" is used. The detai | <xref target="RFC6761"/>) "default.service.arpa" is used. The detai | |||
ls of how SRP registrar(s) are discovered will be specific | ls of how SRP registrars are discovered will be specific | |||
to the constrained network, and therefore we do not suggest a specif | to the constrained network; therefore, we do not suggest a specific | |||
ic mechanism here.</t> | mechanism here.</t> | |||
<t> | <t> | |||
SRP requestors on constrained networks are expected to receive from | SRP requestors on constrained networks are expected to receive, from | |||
the network a list of SRP registrars with which to register. | the network, a 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 "default.service.arpa" zone, which has only local | network environments, updates may be accepted directly into a local "default.service.arpa" zone, which has only local | |||
visibility. In other network environments, updates for names ending in "default.service.arpa" may be rewritten by the registrar | visibility. In other network environments, updates for names ending in "default.service.arpa" may be rewritten by the registrar | |||
to names with broader visibility.</t> | to names with broader visibility.</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 at typically use Constrained-Node Networks may have | The reason for these different variants is that low-power devices th at typically use CNNs may have | |||
very limited battery storage. The series of DNS lookups required to discover an SRP registrar and then communicate with | very limited battery storage. The series of DNS lookups required to 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 topologies at the IP layer. Nodes connected | Networks that are not constrained can have more complicated topologi es at the IP layer. Nodes connected | |||
to such networks can be assumed to be able to do DNS-SD service regi stration domain discovery. Such networks are | to such networks can be assumed to be able to do DNS-SD service regi stration 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> | |||
<name>What to publish</name> | <li>how to know what to publish (see <xref target="what"/>),</li> | |||
<li>how to know where to publish it (under what name) (see <xref target="where | ||||
"/>),</li> | ||||
<li>how to publish it (see <xref target="how"/>),</li> | ||||
<li>how to secure its publication (see <xref target="how-to-secure"/>), and</li> | ||||
<li>how to maintain | ||||
the information once published (see <xref target="maintenance"/>).</li | ||||
></ul> | ||||
<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 requestors 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 et the constraints described in that section. The | An SRP Update is a DNS Update message that is constructed so as to me et 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 | PTR RR for services, which map from a generic service type (or sub | |||
rvice type (or subtype) name to a specific | type) name to a specific | |||
Service Instance Name.</li> | Service Instance Name (<xref target="RFC6763" section="4.1" sectio | |||
nFormat="of"/>).</li> | ||||
<li> | <li> | |||
For any Service Instance Name (<xref target="RFC6763" section="4.1" | For any 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-SD Service Descr | |||
TXT RRs, and a KEY RR. Although in principle DNS-SD Service Descrip | iption 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. SRP do | |||
the same Service Instance Name, in practice they rarely do. SRP doe | es not permit other record types. The KEY RR is used | |||
s not permit other record types. The KEY RR is used | to support FCFS naming and has no specific meaning for DNS-SD looku | |||
to support FCFS naming, and has no specific meaning for DNS-SD look | ps. SRV records for all services described in an | |||
ups. 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 ostname has one or more address RRs (AAAA or A) and | There is never more than one hostname in a single SRP update. The h ostname has one or more address RRs (AAAA or A) and | |||
a KEY RR (used for FCFS naming). Depending on the use case, an SRP requestor may be required to suppress some | a KEY RR (used for FCFS naming). Depending on the use case, an SRP requestor 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 of SRP requestors. An example of such advice can be | record suppression behavior required may vary for different types of SRP requestors. An example of such advice can be | |||
found in <xref target="RFC8766" section="5.5.2" sectionFormat="of" />. | found in <xref target="RFC8766" section="5.5.2" sectionFormat="of" />. | |||
</li> | </li> | |||
</ul> | </ul> | |||
<t> | <t> | |||
<xref target="RFC6763"/> describes the details of what each of these | <xref target="RFC6763"/> describes the details of what each of these | |||
types of RR mean, with the exception of | types of RRs mean, with the exception of | |||
the KEY RR, which is defined in <xref target="RFC2539"/>. These RFCs | the KEY RR, which is defined in <xref target="RFC2539"/>. These RFCs | |||
should be considered the definitive source for | 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 ce Name" is an important aspect of FCFS | learning the full details of DNS-SD. Also, the "Service Instance Na me" 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> | |||
<t> | <t> | |||
Multicast DNS uses a single namespace, ".local", which is valid on t | Multicast DNS (mDNS) uses a single namespace that is valid on the lo | |||
he local link. This convenience is not available for | cal link called ".local". This convenience is not available for | |||
DNS&nbhy;SD using the DNS protocol: services must exist in some spec | DNS-SD using the DNS protocol: services must exist in some specific | |||
ific DNS namespace that is chosen either by the | DNS namespace that is chosen either by the | |||
network operator, or automatically.</t> | 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 <xref target="RFC6763" section="11" sectionFormat="of"/>. | |||
"Discovery of Browsing and Registration Domains". | ||||
</t> | </t> | |||
<t> | <t> | |||
Devices made for Constrained-Node Networks register in the special u | Devices made for CNNs register in the special-use domain name (<xref | |||
se domain name <xref target="RFC6761"/> | target="RFC6761"/>) | |||
"default.service.arpa", and let the SRP registrar handle rewriting t | "default.service.arpa" and let the SRP registrar handle rewriting th | |||
hat to a different domain if necessary.</t> | at to a different domain if necessary.</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 issue a DNS Update that does several things at onc | |||
e; this means that it's possible to do all the work of | e: meaning that it's possible to do all the work of | |||
adding a PTR resource record to the PTR RRset on the Service Name, a | adding a PTR RR to the PTR RRset on the Service Name and creating or | |||
nd creating or updating the Service Instance Name and | updating the Service Instance Name and | |||
Host Description, in a single transaction.</t> | Host Description in a single transaction.</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 than regular DNS Updates as defined in | Updates done according to this specification are somewhat different than regular DNS Updates as defined in | |||
<xref target="RFC2136"/>. The <xref target="RFC2136"/> update proces s can involve many update attempts: you might first | <xref target="RFC2136"/> where the update process could involve many 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 otocol uses a single transaction, some of this | exist but matches certain preconditions. Because the registration pr otocol 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 cit in the processing of SRP Updates, and so there is | requirements specified in <xref target="server_behavior"/> are impli cit in the processing of SRP Updates; thus, there is | |||
no need for the SRP requestor to put in any explicit prerequisites.< /t> | no need for the SRP requestor to put in any explicit prerequisites.< /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-SD Service Registration Process Differs from the DN S Update Specified in RFC 2136</name> | |||
<t> | <t> | |||
DNS&nbhy;SD Service Registration is based on standard RFC2136 DNS | DNS-SD Service Registration is based on the standard DNS Update sp | |||
Update, with some differences:</t> | ecified in <xref target="RFC2136"/>, with some differences:</t> | |||
<ul spacing="compact"> | <ul spacing="normal"> | |||
<li> | <li> | |||
It implements first-come first-served name allocation, protected using SIG(0) <xref target="RFC2931"/>.</li> | It implements FCFS name allocation, protected using SIG(0) (<xref target="RFC2931"/>).</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 som e 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> | Constrained-Node SRP requestors are allowed to send updates to th e generic domain "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 Format="of"/> provides some | reasonable interval. <xref target="RFC1035" section="4.2.1" section Format="of"/> provides some | |||
guidance on this topic, as does <xref target="RFC1536" section="1" sectionFormat="of"/>. | guidance on this topic, as does <xref target="RFC1536" section="1" sectionFormat="of"/>. | |||
<xref target="RFC8085" section="3.1.3" sectionFormat="of"/> also pr ovides useful guidance that | <xref target="RFC8085" section="3.1.3" sectionFormat="of"/> also pr ovides useful guidance that | |||
is particularly relevant to DNS.</t> | 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 requestor needs to send more than one SRP update to the | |||
SRP registrar, it MUST send | SRP registrar, it <bcp14>MUST</bcp14> send | |||
these sequentially: until an earlier update has been successfully a cknowledged, the requestor | these sequentially: until an earlier update has been successfully a cknowledged, the requestor | |||
MUST NOT begin sending a subsequent update.</t> | <bcp14>MUST NOT</bcp14> begin sending a subsequent update.</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 | A DNS update, as described in <xref target="RFC2136"/>, is secured u | |||
Secret Key Transaction Signatures, | sing secret key transaction signatures | |||
<xref target="RFC8945"/>, which uses a secret key shared between the | (<xref target="RFC8945"/>) that uses a secret key shared between the | |||
DNS Update requestor (which issues the update) and | DNS Update requestor (which issues the update) and | |||
the server (which authenticates it). This model does not work for a utomatic service registration.</t> | the server (which authenticates it). This model does not work for a utomatic service registration.</t> | |||
<t> | <t> | |||
The goal of securing the DNS&nbhy;SD Registration Protocol is to pro vide the best possible security given the constraint | The goal of securing the DNS-SD Registration Protocol 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: | |||
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. | ||||
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 them. | ||||
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. | ||||
--> | ||||
FCFS naming provides a limited degree of security. A server that r | ||||
egisters its service using the | ||||
DNS-SD Registration Protocol is given ownership of a name for an e | ||||
xtended period of time based on a lease | ||||
specific to the key used to authenticate the DNS Update, which may be longer than the lease associated with the | specific to the key used to authenticate the DNS Update, which may be longer than the lease associated with the | |||
registered records. As long as the registration service remembers the name and | registered records. As long as the registration service remembers the name and | |||
the key used to register that name, no other server can add or upd ate the information associated with that. If the | the key used to register that name, no other server can add or upd ate the information associated with that. If the | |||
server fails to renew its service registration before the KEY leas e (<xref target="I-D.ietf-dnssd-update-lease" | server fails to renew its service registration before the KEY leas e (see <xref target="RFC9664" | |||
section="4"/>) expires, its name is no longer protected. FCFS nam ing is used to protect both the Service Description | section="4"/>) expires, its name is no longer protected. FCFS nam ing 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 Requestor 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 requestor generates a public/private key pair (see <xref target | |||
="rsa"/>). This key pair MUST be stored in stable | ="rsa"/>). This key pair <bcp14>MUST</bcp14> be stored in stable | |||
storage; if there is no writable stable storage on the SRP requesto | storage; if there is no writable stable storage on the SRP requesto | |||
r, the SRP requestor MUST be pre-configured with a | r, the SRP requestor <bcp14>MUST</bcp14> be preconfigured with a | |||
public/private key pair in read-only storage that can be used. Thi | public/private key pair in read-only storage that can be used. Thi | |||
s key pair MUST be unique to the device. A device | s key pair <bcp14>MUST</bcp14> be unique to the device. A device | |||
with rewritable storage SHOULD retain this key indefinitely. When | with rewritable storage <bcp14>SHOULD</bcp14> retain this key indef | |||
the device changes ownership, it may be appropriate | 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 requestor on the device <bcp14>SHOULD</bcp1 | |||
chanism to erase the key, for example as the | 4> 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> | <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 ining the public portion of the key in each Host | When sending DNS updates, the requestor includes a KEY record conta ining the public portion of the key in each Host | |||
Description Instruction and each Service Description Instruction. Each KEY record MUST contain the same public key. | Description Instruction and each Service Description Instruction. 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 is set using the Extension M | |||
ate Lease option | echanisms for DNS (EDNS(0)) Update Lease option | |||
<xref target="I-D.ietf-dnssd-update-lease"/>.</t> | (see <xref target="RFC9664"/>).</t> | |||
<t> | <t> | |||
The format of the KEY resource record in the SRP Update is defined in <xref target="RFC3445"/>. Because the KEY RR | The format of the KEY resource record in the SRP Update is defined in <xref target="RFC3445"/>. Because the KEY RR | |||
used in TSIG is not a zone-signing key, the flags field in the KEY RR MUST be all zeroes.</t> | used in TSIG is not a zone-signing key, the flags field in the KEY 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 ave names that result in name conflicts. | Adds for both Host Description RRs and Service Description RRs can have names that result in name conflicts. | |||
Service Discovery record adds cannot have name conflicts. If any Ho st Description or Service Description record | Service Discovery record adds cannot have name conflicts. If any Ho st 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 Format="of"/>). In this case, the | with a YXDomain RCODE (<xref target="RFC2136" section="2.2" section Format="of"/>). In this case, the | |||
requestor MUST choose a new name or give up.</t> | requestor <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 this is done. Typically, h | |||
owever, the requestor will append a number to the | owever, the requestor will append a number to the | |||
preferred name. This number could be sequentially increasing, or co | preferred name. This number could be sequentially increasing or cou | |||
uld be chosen randomly. One existing implementation | ld be chosen randomly. One existing implementation | |||
attempts several sequential numbers before choosing randomly. So fo | attempts several sequential numbers before choosing randomly. For i | |||
r instance, it might try host.default.service.arpa, | nstance, it might try host.default.service.arpa, | |||
then host-1.default.service.arpa, then host-2.default.service.arpa, then host-31773.default.service.arpa.</t> | then host-1.default.service.arpa, then host-2.default.service.arpa, then host-31773.default.service.arpa.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<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-SD PTR, SRV, A, AAAA, and TXT records (see | |||
AAAA and TXT records</xref> uses the LEASE field | <xref target="RFC6763"></xref>) 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 ng for services of that type for too long.</t> | network, it does not appear in the user interfaces of devices looki ng for services of that type for too long.</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> | <t> | |||
Although <xref target="RFC2782"/> requires that the target name in the SRV record not be compressed, an SRP requestor | 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 | <bcp14>MAY</bcp14> compress the target in the SRV record. The motiv | |||
ot</em> compressing in <xref target="RFC2782"/> | ation for <em>not</em> compressing in <xref target="RFC2782"/> | |||
is not stated, but is assumed to be because a caching resolver that | is not stated but is assumed to be because a caching resolver that | |||
does not understand the format of the SRV record | 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 | 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 | 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 | 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 | this. Therefore, SRP registrars <bcp14>MUST</bcp14> support compres | |||
targets.</t> | sion of SRV RR targets.</t> | |||
<t> | <t> | |||
Note that this does not update <xref target="RFC2782"/>: DNS server | ||||
s still MUST NOT compress SRV record targets. The | <!--[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 MUST | ||||
NOT compress SRV record targets. | ||||
--> | ||||
Note that this does not update <xref target="RFC2782"/>: DNS server | ||||
s still <bcp14>MUST NOT</bcp14> compress SRV record targets. The | ||||
requirement to accept compressed SRV records in updates only applie s to SRP registrars, and SRP registrars that are | requirement to accept compressed SRV records in updates only applie s to SRP registrars, and SRP registrars that are | |||
also DNS servers still MUST NOT compress SRV record targets in DNS | also DNS servers still <bcp14>MUST NOT</bcp14> compress SRV record | |||
responses. We note also that | targets in DNS responses. We note also that | |||
<xref target="RFC6762"/> recomments that SRV records be compressed | <xref target="RFC6762"/> recommends that SRV records be compressed | |||
in mDNS messages, so <xref target="RFC2782"/> does | in mDNS messages, so <xref target="RFC2782"/> does | |||
not apply to mDNS messages.</t> | not apply to 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 implementor of an SRP requestor 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 esses in the case where a requestor is generating | used both in requestors and in DNS servers that the code only compr esses in the case where a requestor is generating | |||
an SRP update.</t> | an SRP update.</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 RP requestor transmits an SRP update for that host | To remove all the services registered to a particular host, the S RP requestor transmits an SRP update for that host | |||
with an Update Lease option that has a LEASE value of zero. If th e registration is to be permanently removed, | with an Update Lease option that has a LEASE value of zero. If th e registration is to be permanently removed, | |||
KEY-LEASE SHOULD also be zero. Otherwise, it SHOULD be set to the same value it had previously; this holds the name | 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 requestor is once again able to provi de the service.</t> | in reserve for when the SRP requestor is once again able to provi de the service.</t> | |||
<t> | <t> | |||
SRP requestors are normally expected to remove all service instan ces when removing a host. However, in some cases an SRP | SRP requestors are normally expected to remove all service instan ces when removing a host. However, in some cases, an SRP | |||
requestor may not have retained sufficient state to know that som e service instance is pointing to a host that it is | requestor may not have retained sufficient state to know that som 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 | 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 | not want its services advertised. Therefore, it is sufficient for | |||
the requestor to send the | the requestor to send the Host Description Instruction (see <xref target="hdi"> | |||
<xref target="hdi">Host Description Instruction</xref>. | </xref>). | |||
</t> | </t> | |||
<t> | <t> | |||
To support this, when removing services based on the lease time b eing zero, an SRP registrar MUST remove all service | To support this, when removing services based on the lease time b eing zero, an SRP registrar <bcp14>MUST</bcp14> remove all service | |||
instances pointing to a host when a host is removed, even if the SRP requestor doesn't list them explicitly. If the | instances pointing to a host when a host is removed, even if the SRP requestor doesn't list them explicitly. If the | |||
KEY lease time is nonzero, the SRP registrar MUST NOT delete the KEY records for these SRP requestors. | KEY lease time is nonzero, the SRP registrar <bcp14>MUST NOT</bcp 14> delete the KEY records for these SRP requestors. | |||
</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 requestor may need to remove a specific serv | |||
d by a different service with a different service | ice without removing its other services. This can | |||
be accomplished in one of two ways:</t> | ||||
<ol><li>To simply remove a specific service, the requestor sends a valid SRP Upd | ||||
ate where | ||||
the Service Discovery Instruction (see <xref target="servdis"></x | ||||
ref>) contains a single "Delete An RR From An RRset" update | ||||
(<xref target="RFC2136" section="2.5.4" sectionFormat="of"/>) tha | ||||
t deletes the PTR record whose target is | ||||
the service instance name. In this case, the Service Description | ||||
Instruction (see <xref target="servdesc"></xref>) contains | ||||
a single "Delete All RRsets From A Name" update (<xref target="RF | ||||
C2136" section="2.5.3" sectionFormat="of"/>) to | ||||
the service instance name. </li> | ||||
<li> | ||||
This alternative is used when some service is being replaced by a | ||||
different service with a different service | ||||
instance name. In this case, the old service is deleted as in the first alternative. The new service is added, just | instance name. 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 | 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 consist of a valid Service Discovery I nstruction and a valid Service Description | the add of the new service consist of a valid Service Discovery I nstruction and a valid Service Description | |||
Instruction, the update as a whole is a valid SRP Update, and wil | Instruction, the update as a whole is a valid SRP Update and will | |||
l result in the old service being removed and the | result in the old service being removed and the | |||
new one added, or, to put it differently, in the old service bein | new one added; or, to put it differently, the update will result | |||
g replaced by the new service. | in the old service being replaced by the new service. | |||
</t> | </li></ol> | |||
<t> | <t> | |||
It is perhaps worth noting that if a service is being updated wit hout the service instance name changing, that will | It is perhaps worth noting that, if a service is being updated wi thout the service instance name changing, that situation will | |||
look very much like the second alternative above. The difference is that because the target for the PTR record in | look very much like the second alternative above. The difference is that because the target for the PTR record in | |||
the Service Discovery Instruction is the same for both the Delete | the Service Discovery Instruction is the same for both the "Delet | |||
An RR From An RRset update and the Add To An RRSet | e An RR From An RRset" update and the "Add | |||
update, there is no way to tell whether they were intended to be | To An RRset" update (<xref target="RFC2136" section="2.5.1" secti | |||
one or two Instructions. The same would be true of | onFormat="of"/>), there is no way to tell whether they were intended to be one o | |||
r two Instructions. The same would be true of | ||||
the Service Description Instruction. | the Service Description Instruction. | |||
</t> | </t> | |||
<t> | <t> | |||
Whichever of these two alternatives is used, the host lease will be updated with the lease time provided in the SRP | Whichever of these two alternatives is used, the host lease will be updated with the lease time provided in the SRP | |||
update. In neither of these cases is it permissible to delete the host. All services must point to a host. If a host | update. In neither of these cases is it permissible to delete the host. All services must point to a host. If a host | |||
is to be deleted, this must be done using the method described in <xref target="zero-lease"/>, which deletes the | is to be deleted, this must be done using the method described in <xref target="zero-lease"/>, which deletes the | |||
host and all services that have that host as their target. | host and all services that have that host as their target. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
skipping to change at line 541 ¶ | skipping to change at line 595 ¶ | |||
<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 lly and semantically valid DNS Update according to | The SRP registrar first validates that the DNS Update is a syntactica lly and semantically valid DNS Update according to | |||
the rules specified in <xref target="RFC2136"/>.</t> | the rules specified in <xref target="RFC2136"/>.</t> | |||
<t> | <t> | |||
SRP Updates consist of a set of <em>instructions</em> that together a dd or remove one or more services. Each instruction | SRP Updates consist of a set of <em>instructions</em> that together a dd or remove one or more services. Each instruction | |||
consists of some combination of delete updates and add updates. When an instruction contains a delete and an add, the | consists of some combination of delete updates and add updates. When an instruction contains a delete and an add, the | |||
delete MUST precede the add.</t> | delete <bcp14>MUST</bcp14> precede the add.</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 a single question that indicates the zone to be updated. | |||
Every delete and update in an SRP Update MUST be within the zone that | Every delete and update in an SRP Update <bcp14>MUST</bcp14> be withi | |||
is specified for the SRP Update.</t> | 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> | ||||
<ul spacing="compact"> | <!-- [rfced] FYI - we updated the list as follows for clarity. Please let us | |||
<li>exactly one "Add to an RRSet" (<xref target="RFC2136" section=" | know if there are any objections. | |||
2.5.1" sectionFormat="comma"/>) or exactly one | ||||
"Delete an RR from an RRSet" (<xref target="RFC2136" section="2.5 | Original: | |||
.4" sectionFormat="comma"/>) RR update,</li> | An instruction is a Service Discovery Instruction if it contains | |||
<li>which updates a PTR RR,</li> | ||||
<li>the target of which is a Service Instance Name</li> | * exactly one "Add to an RRSet" ([RFC2136], Section 2.5.1) or | |||
<li><t>for which name a Service Description Instruction is present | exactly one "Delete an RR from an RRSet" ([RFC2136], | |||
in the SRP Update, and:</t> | 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. | ||||
--> | ||||
<ul spacing="normal"> | ||||
<li><t>Contains exactly one "Add To An RRset" RR update (<xref | ||||
target="RFC2136" section="2.5.1" sectionFormat="of"/>) or | ||||
exactly one "Delete An RR From An RRset" RR update (<xref target="R | ||||
FC2136" | ||||
section="2.5.4" sectionFormat="of"/>), 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:</t> | ||||
<ul spacing="compact"> | <ul spacing="compact"> | |||
<li>if the RR Update is an "Add to an RRSet" instruction, that | <li>If the RR Update is an "Add To An RRset" instruction, | |||
Service Description Instruction contains an "Add to | that Service Description Instruction contains an "Add To An | |||
an RRset" RR update for the SRV RR describing that service an | RRset" RR update for the SRV RR describing that service and | |||
d no other "Delete from an RRset" instructions for | no other "Delete From An RRset" instructions for that | |||
that Service Instance Name; or</li> | Service Instance Name.</li> | |||
<li>if the RR Update is a "Delete an RR from an RRSet" instruct | <li>If the RR Update is a "Delete An RR From An RRset" | |||
ion, that Service Description Instruction contains | instruction, that Service Description Instruction contains a | |||
a "Delete from an RRset" RR update and no other "Add to an RR | "Delete From An RRset" RR update and no other "Add To An | |||
set" instructions for that Service Instance | RRset" instructions for that Service Instance | |||
Name.</li></ul></li> | Name.</li></ul></li> | |||
<li>and contains no other add or delete RR updates for the same nam | <li>Contains no other add or delete RR updates for the same name | |||
e as the PTR RR Update.</li> | as the PTR RR Update.</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 name if the SRP requestor is | |||
advertising more than one service of the same type, or is changing | advertising more than one service of the same type or is | |||
the target of a PTR RR. This is also true for SRP | changing the target of a PTR RR. This is also true for SRP | |||
subtypes (<xref target="RFC6763" section="7.1"/>). For each such PT | subtypes (<xref target="RFC6763" section="7.1" | |||
R RR add or delete, the above constraints must be | sectionFormat="of"/>). For each such PTR RR add or delete, the | |||
met.</t> | above constraints must be met.</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> | appropriate Service Instance Name, the following are true:</t> | |||
<ul spacing="compact"> | <ul spacing="normal"> | |||
<li> | ||||
It contains exactly one "Delete all RRsets from a name" update fo | ||||
r the service instance name | ||||
(<xref target="RFC2136" section="2.5.3" sectionFormat="comma"/>), | ||||
</li> | ||||
<li> | ||||
It contains zero or one "Add to an RRset" SRV RR,</li> | ||||
<li> | <li> | |||
It contains zero or one "Add to an RRset" KEY RR that, if present | It contains exactly one "Delete All RRsets From A Name" update | |||
, contains the public key corresponding to the private key | for the service instance name (see <xref target="RFC2136" | |||
that was used to sign the message (if present, the KEY MUST match | section="2.5.3" sectionFormat="of"/>).</li> | |||
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" SRV RR.</li> | |||
<li> | <li> | |||
If there is one "Add to an RRset" SRV update, there MUST be at le | It contains zero or one "Add To An RRset" KEY RR that, if | |||
ast one "Add to an RRset" TXT update.</li> | present, contains the public key corresponding to the private | |||
key that was used to sign the message (if present, the KEY | ||||
<bcp14>MUST</bcp14> match the KEY RR given in the Host | ||||
Description).</li> | ||||
<li> | <li> | |||
The target of the SRV RR Add, if present points to a hostname for | It contains zero or more "Add To An RRset" TXT RRs.</li> | |||
which there is a Host Description Instruction in | ||||
the SRP Update, or</li> | ||||
<li> | <li> | |||
If there is no "Add to an RRset" SRV RR, then either:</li> | If there is one "Add To An RRset" SRV update, there | |||
<li><ul> | <bcp14>MUST</bcp14> be at least one "Add To An RRset" TXT | |||
<li>the name to which the "Delete all RRsets from a name" applies | update.</li> | |||
does not exist, or</li> | <li> | |||
<li>there is an existing KEY RR on that name, which matches the k | ||||
ey with which the SRP Update was | <t>The target of the SRV RR Add, if present, points to a | |||
signed.</li></ul></li> | hostname for which there is a Host Description Instruction in | |||
the SRP Update; or if there is no "Add To An RRset" SRV RR, | ||||
then either:</t> | ||||
<ul spacing="normal"> | ||||
<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> | ||||
<li> | <li> | |||
No other resource records on the Service Instance Name are modifi | No other resource records on the Service Instance Name are | |||
ed.</li> | modified.</li> | |||
</ul> | </ul> | |||
<t>An SRP registrar MUST correctly handle compressed names in the SRV target.</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>An instruction is a Host Description Instruction if, for the appr | |||
opriate hostname, it contains</t> | opriate hostname, it contains the following:</t> | |||
<ul spacing="compact"> | <ul spacing="normal"> | |||
<li> | ||||
exactly one "Delete all RRsets from a name" RR,</li> | ||||
<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 | one or more "Add To An RRset" RRs of type A and/or AAAA, and </li | |||
the public key corresponding to the private key | > | |||
that was used to sign the message,</li> | ||||
<li> | <li> | |||
Host Description Instructions do not modify any other resource re | exactly one "Add To An RRset" RR that adds a KEY RR that | |||
cords.</li> | contains the public key corresponding to the private key that | |||
</ul> | was used to sign the message</li> | |||
</ul> | ||||
<t>Host Description Instructions do not modify any other resource rec | ||||
ords.</t> | ||||
<t> | <t> | |||
A and/or AAAA records that are not of sufficient scope to be validl | A and/or AAAA records that are not of sufficient scope to be | |||
y published in a DNS zone MAY be ignored by the | validly published in a DNS zone <bcp14>MAY</bcp14> be ignored by | |||
SRP registrar, which could result in a host description effectively | the SRP registrar, which could result in a host description | |||
containing zero reachable addresses even when it | 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 ess is provided by the SRP requestor, the SRP | For example, if a link-scope address or IPv4 autoconfiguration addr ess is provided by the SRP requestor, the SRP | |||
registrar could not publish this in a DNS zone. However, in some si tuations, the registrar might make the records | registrar could not publish this in a DNS zone. However, in some si tuations, the registrar might make the records | |||
available through a mechanism such as an advertising proxy only on the specific link from which the SRP update | available through a mechanism such as an advertising proxy only on the specific link from which the SRP update | |||
originated; in such a situation, locally-scoped records are still v alid.</t> | originated. In such a situation, locally scoped records are still v alid.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Valid SRP Update Requirements</name> | <name>Valid SRP Update Requirements</name> | |||
<t> | <t> | |||
An SRP Update MUST contain exactly one Host Description Instruction. In addition, there MUST NOT be any Service | An SRP Update <bcp14>MUST</bcp14> contain exactly one Host Descriptio n Instruction. In addition, there <bcp14>MUST NOT</bcp14> be any Service | |||
Description Instruction to which no Service Discovery Instruction poi nts. A DNS Update that contains any additional | Description Instruction to which no Service Discovery Instruction poi nts. A DNS Update that contains any additional | |||
adds or deletes that cannot be identified as Service Discovery, Servi ce Description or Host Description Instructions is | 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 | (see <xref target="RFC9664"/>). The LEASE time specified in the Updat | |||
e 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 te.</t> | KEY-LEASE value that is less than the LEASE value, is not an SRP upda 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 that is not an SRP | |||
e, it MAY | update, it <bcp14>MAY</bcp14> process the update as regular updates | |||
process the update as regular RFC2136 updates, including access contr | described in <xref target="RFC2136" format="default"/>, including | |||
ol checks and constraint | access control checks and constraint checks, if supported. Otherwise, | |||
checks, if supported. Otherwise the SRP registrar MUST reject the DNS | the SRP registrar <bcp14>MUST</bcp14> reject the DNS Update with the | |||
Update with the Refused RCODE.</t> | Refused RCODE.</t> | |||
<t> | <t> | |||
If the definitions of each of these instructions are followed careful ly and the update requirements are validated | If the definitions of each of these instructions are followed careful ly and the update requirements are validated | |||
correctly, many DNS Updates that look very much like SRP Updates neve rtheless will fail to validate. For example, a DNS | correctly, many DNS Updates that look very much like SRP Updates neve rtheless will fail to validate. For example, a DNS | |||
update that contains an Add to an RRset instruction for a Service Nam e and an Add to an RRset instruction for a Service | update that contains an "Add To An RRset" instruction for a Service N ame and an Add to an RRset instruction for a Service | |||
Instance Name, where the PTR record added to the Service Name does no t reference the Service Instance Name, is not a | Instance Name, where the PTR record added to the Service Name does no t reference the Service Instance Name, is not a | |||
valid SRP Update message, but may be a valid RFC2136 update.</t> | valid SRP Update message but may be a valid update as described in <x ref target="RFC2136" format="default"/>.</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. | ||||
--> | ||||
<t> | <t> | |||
Assuming that a DNS Update message has been validated with these cond itions and is a valid SRP Update, the SRP registrar | Assuming that a DNS Update message has been validated with these cond itions and is a valid SRP Update, the SRP registrar | |||
checks that the name in the Host Description Instruction exists. If so, then the registrar checks to see if the KEY | checks that the name in the Host Description Instruction exists. 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 <bcp14>MUST</bcp14> reject the SRP Update with the YXDomain | |||
RCODE.</t> | RCODE.</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. | ||||
--> | ||||
<t> | <t> | |||
Otherwise, the SRP registrar validates the SRP Update using SIG(0) ag ainst the public key in the KEY record of the Host | Otherwise, the SRP registrar validates the SRP Update using SIG(0) ag ainst the public key in the KEY record of the Host | |||
Description Instruction. If the validation fails, the registrar MUST | Description Instruction. If the validation fails, the registrar <bcp | |||
reject the SRP Update with the Refused RCODE. | 14>MUST</bcp14> reject the SRP Update with the Refused RCODE. | |||
Otherwise, the SRP Update is considered valid and authentic, and is p | Otherwise, the SRP Update is considered valid and authentic and is pr | |||
rocessed according to the method described in | ocessed according to the method described in | |||
RFC2136.</t> | <xref target="RFC2136" format="default"/>.</t> | |||
<t> | <t> | |||
KEY record updates omitted from Service Description Instruction are p | KEY record updates omitted from Service Description Instruction are p | |||
rocessed as if they had been explicitly present: | rocessed 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: and it must be the | |||
same KEY RR that is present in the Host Description to which the Serv ice Description refers.</t> | same KEY RR that is present in the Host Description to which the Serv ice Description refers.</t> | |||
<t> | <t> | |||
<xref target="RFC3445"/> states that the flags field in the KEY RR MU | <xref target="RFC3445"/> states that the flags field in the KEY RR <b | |||
ST be zero except for bit 7, which can | cp14>MUST</bcp14> be zero except for bit 7, which can | |||
be one in the case of a zone key. However, the SRP registrar MUST NOT | be one in the case of a zone key. However, the SRP registrar <bcp14>M | |||
validate the flags field.</t> | UST NOT</bcp14> validate the flags field.</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 service deletes all of its subtypes. To delete an | Similarly, there is no mechanism for deleting subtypes. A delete of a service deletes all of its subtypes. To delete an | |||
individual subtype, an SRP Update must be constructed that contains t he service type and all subtypes for that service | individual subtype, an SRP Update must be constructed that contains t he service type and all subtypes for that service | |||
except for the one to be deleted. | except for the one 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 are explained in <xref target="RFC2136" | qualify the update as an SRP Update. The meanings of these responses are explained in <xref target="RFC2136" | |||
section="2.2"/>.</t> | section="2.2"/>.</t> | |||
<t> | <t> | |||
In the case of a response other than NoError, <xref target="RFC2136" section="3.8"/> specifies that the server is permitted | In the case of a response other than NoError, <xref target="RFC2136" section="3.8"/> specifies that the server is permitted | |||
to respond either with no RRs or to copy the RRs sent by the client into the response. The SRP Requestor MUST NOT attempt | to respond either with no RRs or to copy the RRs sent by the client into the response. The SRP requestor <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 at the time of writing t | |||
pecified, so if a client were to attempt to validate | his is not specified. So, if a client were to attempt to validate | |||
the RRs in the response, it might reject such a response, since it w | the RRs in the response, it might reject such a response since it wo | |||
ould contain RRs, but probably not a set of RRs | uld 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> | |||
<t> | <t> | |||
The SRP registrar MAY add a Reverse Mapping (<xref target="RFC1035" s | The SRP registrar <bcp14>MAY</bcp14> add a Reverse Mapping (see <xref | |||
ection="3.5"/>, <xref target="RFC3596" section="2.5"/>) | target="RFC1035" section="3.5"/> and <xref target="RFC3596" section="2.5"/>) | |||
that corresponds to the Host Description. This is not required becau | that corresponds to the Host Description. This is not required becau | |||
se the Reverse Mapping serves no protocol function, | se the reverse mapping serves no protocol function, | |||
but it may be useful for debugging, e.g. in annotating network packet | but it may be useful for debugging, e.g., in annotating network packe | |||
traces or logs. In order for the registrar to do | t traces or logs. In order for the registrar to do | |||
a reverse mapping update, it must be authoritative for the zone that | a reverse mapping update, it must be authoritative for the zone that | |||
would need to be updated, or have credentials to do | would need to be updated or have credentials to do | |||
the update. The SRP requestor MAY also do a reverse mapping update i | the update. The SRP requestor <bcp14>MAY</bcp14> also do a reverse m | |||
f it has credentials to do so.</t> | apping update if it has credentials to do so.</t> | |||
<t> | <t> | |||
The SRP registrar MAY apply additional criteria when accepting update | The SRP registrar <bcp14>MAY</bcp14> apply additional criteria when a | |||
s. In some networks, it may be possible to do | ccepting updates. In some networks, it may be possible to do | |||
out-of-band registration of keys, and only accept updates from pre-re | out-of-band registration of keys and only accept updates from preregi | |||
gistered keys. In this case, an update for a key | stered keys. In this case, an update for a key | |||
that has not been registered SHOULD be rejected with the Refused RCOD | that has not been registered <bcp14>SHOULD</bcp14> be rejected with t | |||
E.</t> | he Refused RCODE.</t> | |||
<t> | <t> | |||
There are at least two benefits to doing this rather than simply usin | There are at least two benefits to doing this rather than simply using | |||
g normal SIG(0) DNS updates. First, the same | normal SIG(0) DNS updates:</t> | |||
<ol><li>The same | ||||
registration protocol can be used in both cases, so both use cases ca n be addressed by the same SRP requestor | registration protocol can be used in both cases, so both use cases ca n be addressed by the same SRP requestor | |||
implementation. Second, the registration protocol includes maintenan | implementation.</li> | |||
ce functionality not present with normal DNS | <li>The registration protocol includes maintenance functionality not | |||
updates.</t> | 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 are different than f | |||
or typical RFC2136 implementations: the KEY used | or typical implementations described in <xref target="RFC2136" format="default"/ | |||
to sign the SRP Update only allows the SRP requestor to update record | >. The KEY used | |||
s that refer to its Host Description. RFC2136 | to sign the SRP Update only allows the SRP requestor 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 specific to <xref target="RFC2136" format="default"/> | |||
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 ns to the DNS Specification</xref>). | (see <xref target="RFC2181" section="5.2" sectionFormat="of"/>). | |||
In order to avoid inconsistencies, SRP places restrictions on TTLs sent b y requestors and requires that SRP registrars enforce | In order to avoid inconsistencies, SRP places restrictions on TTLs sent b y requestors and requires that SRP registrars enforce | |||
consistency.</t> | consistency.</t> | |||
<t> | <t> | |||
Requestors sending SRP Updates MUST use consistent TTLs in all RRs within the SRP Update.</t> | Requestors sending SRP Updates <bcp14>MUST</bcp14> use consistent TTLs in all RRs within the 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 within | |||
are the same. If they are not, the SRP | the SRP Update are the same. If they are not, the SRP | |||
update MUST be rejected with a Refused RCODE.</t> | 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 guess as to what a good TTL would be. SRP registrars may | TTLs sent in SRP Updates are advisory: they indicate the SRP requestor's guess as to what a good TTL would be. SRP registrars may | |||
override these TTLs. SRP registrars SHOULD ensure that TTLs are reasonab le: neither too long nor too short. The TTL SHOULD NOT | override these TTLs. SRP registrars <bcp14>SHOULD</bcp14> ensure that TT 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 aching resolvers and on the authoritative server, | this increases latency on the DNS-SD client side, increases load on any c aching resolvers and on the authoritative server, | |||
and also increases network load, which may be an issue for constrained ne tworks. Longer TTLs will increase the likelihood | and also increases network load, which may be an issue for constrained ne tworks. Longer TTLs will increase the likelihood | |||
that data in caches will be stale. TTL minimums and maximums SHOULD be c onfigurable by the operator of the SRP registrar. | that data in caches will be stale. TTL minimums and maximums <bcp14>SHOU 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-SD registration protocol is automatic and not managed | |||
naged by humans, | by humans, | |||
some additional bookkeeping is required. When an update is constructe d by the SRP requestor, | some additional bookkeeping is required. When an update is constructe d by the SRP requestor, | |||
it MUST include an EDNS(0) Update Lease Option <xref target="I-D.ietf- dnssd-update-lease"/>. | it <bcp14>MUST</bcp14> include an EDNS(0) Update Lease Option (see <xr ef target="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 (see <xref target="RFC2131"></xref>), these lea | |||
es</xref>, | ses are promises from the SRP requestor that it will send a new update for the s | |||
from the SRP requestor that it will send a new update for the service | ervice registration before the | |||
registration before the | ||||
lease time expires. The Lease time is chosen to represent the time af ter the | lease time expires. The Lease time is chosen to represent the time af ter the | |||
update during which the registered records other than the KEY record c an be assumed | update during which the registered records other than the KEY record c an be assumed | |||
to be valid. The KEY lease time represents the time after the update during | to be valid. The KEY lease time represents the time after the update during | |||
which the KEY record can be assumed to be valid.</t> | which the KEY record can be assumed to be valid.</t> | |||
<t>The reasoning behind the different lease times is discussed in the sec | <t>The reasoning behind the different lease times is discussed in <xref t | |||
tion on FCFS naming | arget="fcfs" format="default"/>. SRP registrars may be configured with limits f | |||
(<xref target="fcfs"/>). SRP registrars may be configured with limits | or these values. At the time of writing, a default limit of two hours for | |||
for these values. A default limit of two hours for | the Lease and 14 days for the SIG(0) KEY are thought to be good choice | |||
the Lease and 14 days for the SIG(0) KEY are currently thought to be g | s. Constrained devices with limited | |||
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 requestors that are going to continue to use names | |||
on which they hold leases SHOULD update well before | on which they hold leases <bcp14>SHOULD</bcp14> update well before | |||
the lease ends, in case the registrar is unavailable or under heavy lo | the lease ends in case the registrar is unavailable or under heavy loa | |||
ad.</t> | d.</t> | |||
<t> | <t> | |||
The lease time applies specifically to the host. All service instances, and all service entries for such service | The lease time applies specifically to the host. 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 host. When the lease on a host expires, the ho | |||
st and all services that reference it MUST be | st and all services that reference it <bcp14>MUST</bcp14> be | |||
removed at the same time—it is never valid for a service instance | removed at the same time: it is never valid for a service instance to r | |||
to remain when the host it references has been | emain when the host it references has been | |||
removed. If the KEY record for the host is to remain, the KEY record fo | removed. If the KEY record for the host is to remain, the KEY record fo | |||
r any services that reference it MUST also | r any services that reference it <bcp14>MUST</bcp14> also | |||
remain. However, the service PTR record MUST be removed, since it has n | remain. However, the service PTR record <bcp14>MUST</bcp14> be removed | |||
o key associated with it, and since it is never | since it has no key associated with it and since it is never | |||
valid to have a service PTR record for which there is no service instan ce on the target of the PTR record. | valid to have a service PTR record for which there is no service instan ce 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 requestor may | |||
re-register a host with a different set of services, and not remember t | re-register a host with a different set of services and not remember th | |||
hat some different service instance had previously | at 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 (although the KEY record for the service instance <bcp14>SHOUL | |||
tained until the KEY lease on that service | D</bcp14> be retained until the KEY lease on that service | |||
expires). This is beneficial because otherwise if the SRP requestor con | expires). This is beneficial because, otherwise, if the SRP requestor c | |||
tinues to renew the host, but never mentions the | ontinues to renew the host but never mentions the | |||
stale service again, the stale service will continue to be advertised. | stale service again, the stale service will continue to be advertised. | |||
</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 option in the | |||
response if the lease time proposed by the requestor has been shortene d or lengthened by the registrar. The requestor | response if the lease time proposed by the requestor has been shortene d or lengthened by the registrar. The requestor | |||
MUST check for the EDNS(0) Update Lease option in the response and MUS T use the lease | <bcp14>MUST</bcp14> check for the EDNS(0) Update Lease option in the r esponse and <bcp14>MUST</bcp14> use the lease | |||
times from that option in place of the options that it sent to the reg istrar when | times from that option in place of the options that it sent to the reg istrar when | |||
deciding when to renew its registration. The times may be shorter or longer than | deciding when to renew its registration. The times may be shorter or longer than | |||
those specified in the SRP Update; the SRP requestor must honor them i n either case.</t> | those specified in the SRP Update: the SRP requestor must honor them i 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 requestors SHOULD assume that each lease ends N seconds after the | |||
h SRP and non-SRP DNS updates MAY accept updates that don't include | update was first transmitted, where N is the lease duration. | |||
leases, but SHOULD differentiate between SRP Updates and | ||||
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 | ||||
DNS server will | <t>SRP requestors <bcp14>SHOULD</bcp14> assume that each lease ends N | |||
delete stale records. It is not an error to send a DNS response with | seconds after the update was first transmitted (where N is the lease | |||
a TTL of 'n' when | duration). SRP registrars <bcp14>SHOULD</bcp14> assume that each lease | |||
the remaining time on the lease is less than 'n'.</t> | ends N seconds after the update that was successfully processed was | |||
received. Because the registrar will always receive the update after | ||||
the SRP requestor sent it, this avoids the possibility of | ||||
misunderstandings.</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>Lease times have a completely different function than TTLs. 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 'n' when the remaining time on the lease is | ||||
less than 'n'.</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 | FCFS. Thus, if an attacker from outside the administrative | |||
ve | domain of the SRP registrar knows the registrar's IP address, it can, i | |||
domain of the SRP registrar knows the registrar's IP address, it can in | n principle, send updates to the registrar | |||
principle send updates to the registrar | that will be processed successfully. Therefore, SRP registrars <bcp14 | |||
that will be processed successfully. SRP Registrars SHOULD therefore | >SHOULD</bcp14> be configured to reject updates | |||
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 ing forged by an off-network attacker. In order to | <t>For TCP updates, the initial SYN-SYN+ACK handshake prevents updates be ing forged by an off-network 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 | (see <xref target="RFC7413"/>). If the network infrastructure allows i | |||
s it, an SRP registrar MAY accept TCP Fast Open payloads if all such packets | t, 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 evented with appropriate source address filtration | <t>For UDP updates from constrained devices, spoofing would have to be pr evented with appropriate source address filtration | |||
on routers <xref target="RFC2827"/>. This would ordinarily be accomplis | on routers (<xref target="RFC2827"/>). This would ordinarily be accompl | |||
hed by measures such as are described in | ished by measures such as those described in | |||
<xref target="RFC7084" section="4.5" sectionFormat="of"/>. For example, | (<xref target="RFC7084" section="4.5" sectionFormat="of"/>). For exampl | |||
a stub router <xref target="I-D.ietf-snac-simple"/> | e, a stub router (<xref target="I-D.ietf-snac-simple"/>) | |||
for a constrained network might only accept UDP updates from source add | for a constrained network might only accept UDP updates from source add | |||
resses known to be on-link on that stub network, and might | resses 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 | A server that accepts updates from SRP | |||
requestors may also accept other DNS updates, and those DNS updates may be validated | requestors may also accept other DNS updates, and those DNS updates may be validated | |||
using different rules. However, in the case of a DNS server that acce pts SRP | using different rules. However, in the case of a DNS server that acce pts 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 RR that was adde | |||
ed using SRP, but that is authenticated using a | d using SRP, but that 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 requestor by replacing all or part of | |||
the service registration information with information provided by an au thenticated DNS update requestor. An implementation | the service registration information with information provided by an au thenticated DNS update requestor. An implementation | |||
that allows both kinds of updates SHOULD NOT allow DNS Update requestor s that are using different authentication and | that allows both kinds of updates <bcp14>SHOULD NOT</bcp14> allow DNS U pdate requestors that are using different authentication and | |||
authorization credentials to update records added by SRP requestors.</t > | authorization credentials to update records added by SRP requestors.</t > | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Risks of allowing arbitrary names to be registered in SRP updates</ name> | <name>Risks of Allowing Arbitrary Names to be Registered in SRP Updates</ name> | |||
<t>It is possible to set up SRP updates for a zone that is used for non-D NSSD services. For example, imagine that you set | <t>It is possible to set up SRP updates for a zone that is used for non-D NSSD services. For example, imagine that you set | |||
up SRP service for example.com. SRP hosts can now register names like " www" or "mail" or "smtp" in this domain. In addition, | up SRP service for example.com. SRP hosts can now register names like " www" or "mail" or "smtp" in this domain. In addition, | |||
SRP updates using FCFS naming can insert names that are obscene or offe nsive into the zone. There is no simple solution to | SRP updates using FCFS naming can insert names that are obscene or offe nsive into the zone. There is no simple solution to | |||
these problems. We have two recommendations to address this problem, ho | these problems. However, we have two recommendations to address this pr | |||
wever:</t> | oblem:</t> | |||
<ul spacing="compact"> | <ul spacing="normal"> | |||
<li>Do not provide SRP service in organization-level zones. Use subdoma | <li>Do not provide SRP service in organization-level zones. Use subdoma | |||
ins of the organizational domain for DNS service | ins of the organizational domain for DNS-SD. This does not prevent registering | |||
discovery. This does not prevent registering names as mentioned abov | names as mentioned above but does ensure that genuinely important names | |||
e, but does ensure that genuinely important names | are not accidentally reserved for SRP clients. So, for example, the z | |||
are not accidentally reserved for SRP clients. So for example, the zo | one "dnssd.example.com" could be used instead of | |||
ne "dnssd.example.com" could be used instead of | "example.com" for SRP updates. Because of the way that DNS-browsing d | |||
"example.com" for SRP updates. Because of the way that DNS browsing d | omains are discovered, there is no need for the | |||
omains are discovered, there is no need for the | DNSSD discovery zone that is updated by SRP to have a user-friendly or | |||
DNSSD discovery zone that is updated by SRP to have a user-friendly o | important-sounding name.</li> | |||
r 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.</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 Router Advert | |||
f target="RFC6105"/>, but multicast services like | isement Guard (see <xref target="RFC6105"/>), but multicast services like | |||
DHCP <xref target="RFC2131"/>, DHCPv6 <xref target="RFC8415"/> and IPv6 | DHCP, DHCPv6, and IPv6 Neighbor Discovery (see <xref target="RFC2131"/> | |||
Neighbor Discovery <xref target="RFC4861"/> are | , <xref target="RFC8415"/>, and <xref target="RFC4861"/>, respectively) are, | |||
in most cases not authenticated and can't be controlled on unmanaged ne | in most cases, not authenticated and can't be controlled on unmanaged n | |||
tworks, such as home networks and small-office | etworks, such as home networks and small office | |||
networks where no network management staff are present. In such situati ons, the SRP service has comparatively fewer | networks where no network management staff are present. In such situati ons, the SRP service has comparatively fewer | |||
potential security exposures and hence is not the weak link. This is di scussed in more detail in | potential security exposures and, hence, is not the weak link. This is discussed in more detail in | |||
<xref target="how-to-secure"/>.</t> | <xref target="how-to-secure"/>.</t> | |||
<t>The fundamental protection for networks of this type is the user's cho ice of what devices to add to the network. Work is | <t>The fundamental protection for networks of this type is the user's cho ice of what devices to add to the network. Work is | |||
being done in other working groups and standards bodies to improve the state of the art for network on-boarding and device | being done in other working groups and standards bodies to improve the state of the art for network on-boarding and device | |||
isolation (e.g., <xref target="RFC8520"/> provides a means for constrai ning what behaviors are allowed for a device in an | isolation (e.g., <xref target="RFC8520"/> provides a means for constrai ning what behaviors are allowed for a device in an | |||
automatic 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 es from SRP Registrars to | <t>This specification does not provide a mechanism for validating respons es from SRP registrars to | |||
SRP requestors. In principle, a KEY RR could be used by | SRP requestors. In principle, a KEY RR could be used by | |||
a non-constrained SRP requestor to validate responses from the registra r, but this is not required, | a non-constrained SRP requestor to validate responses from the registra r, but this 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 | <xref target="RFC7858" section="4.2" sectionFormat="of"/> could be used | |||
sed for authentication of the SRP registrar, | for authentication of the SRP registrar, | |||
e.g. to prevent man-in-the-middle attacks. However the use of such keys | e.g., to prevent man-in-the-middle attacks. However, the use of such ke | |||
is impractical for an unmanaged service | ys is impractical for an unmanaged service | |||
registration protocol, and hence is out of scope for this document.</t> | 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 specified in <xref target="RFC8624" section="3.1" s | |||
table, that are numbered 13 or higher and have a "MUST", "RECOMMENDED", | ectionFormat="of"/>, in the validation column of the | |||
or "MAY" designation in the validation column of | table, that are numbered 13 or higher, and that have a "<bcp14>MUST</bc | |||
p14>", "<bcp14>RECOMMENDED</bcp14>", or "<bcp14>MAY</bcp14>" designation in the | ||||
validation column of | ||||
the table. | the table. | |||
SRP requestors MUST NOT assume that any algorithm numbered lower than 1 3 is | SRP requestors <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-SD SRP Updates can be sent off-link, the privacy implications | |||
of SRP are different than for multicast DNS | of SRP are different than for mDNS | |||
responses. Host implementations that are using TCP SHOULD also use TLS i | responses. Host implementations that are using TCP <bcp14>SHOULD</bcp14> | |||
f available. SRP Registrar implementations MUST offer | also use TLS if available. SRP registrar implementations <bcp14>MUST</bcp14> o | |||
ffer | ||||
TLS support. The use of TLS with DNS is described in <xref target="RFC78 58"/>. Because there is no mechanism for sharing | TLS support. The use of TLS with DNS is described in <xref target="RFC78 58"/>. Because there is no mechanism for sharing | |||
keys, validation of DNS-over-TLS keys is not possible; DNS-over-TLS is us ed only as described in | keys, validation of DNS-over-TLS keys is not possible; DNS-over-TLS is us ed only as described in | |||
<xref target="RFC7858" section="4.1" sectionFormat="comma"/> | <xref target="RFC7858" section="4.1" sectionFormat="of"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
Hosts that implement TLS support SHOULD NOT fall back to TCP; since SRP r egistrars are required to support | Hosts that implement TLS support <bcp14>SHOULD NOT</bcp14> fall back to T CP. Since SRP registrars are required to support | |||
TLS, it is entirely up to the host implementation whether to use it. | TLS, it is entirely up to the host implementation whether to use it. | |||
</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. If the zone is not signed, the server <b | |||
Y instead return a negative non-error response | cp14>MAY</bcp14> instead return a negative non-error response | |||
(either NXDOMAIN or no data). | (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. Detailed ex | |||
planations of these items can be found in Section 5 | planations of these items can be found in <xref target="RFC6761" sectionFormat=" | |||
of <xref target="RFC6761"/>.</t> | of" section="5"/>.</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 require special k | |||
nowledge on the part of the user. While the | nowledge 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 interfaces, although it's certainly possible that | treatment by the user. Users are not expected to see this name in user interfaces, although it's certainly possible that | |||
they might. If they do, they are not expected to treat it specially.</t > | 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 subdomains of "service.arp | |||
a' specially. 'service.arpa' SHOULD NOT be treated | a" specially. "service.arpa" <bcp14>SHOULD NOT</bcp14> be treated | |||
as more trustworthy than any other insecure DNS domain, simply because | as more trustworthy than any other insecure DNS domain, simply because | |||
it is locally-served (or for any other reason). It | it is locally served (or for any other reason). It | |||
is not possible to register a PKI certificate for a subdomain of 'servi | is not possible to register a PKI certificate for a subdomain of "servi | |||
ce.arpa.' because it is a locally-served domain | ce.arpa." because it is a locally served domain | |||
name. So no such subdomain can be considered as uniquely identifying a | name. So, no such subdomain can be considered to be uniquely identifyin | |||
particular host, as would be required for such a | g a particular host, as would be required for such a | |||
PKI cert to be issued. If a subdomain of 'service.arpa.' is returned by | PKI certificate to be issued. If a subdomain of "service.arpa." is retu | |||
an API or entered in an input field of an | 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 n '.service.arpa.' as special and MUST NOT treat | <t>Name resolution APIs and libraries <bcp14>MUST NOT</bcp14> recognize n 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 at such APIs not bypass the locally configured | them as having special significance, except that it may be necessary th at such APIs not bypass the locally configured | |||
recursive resolvers.</t> | recursive resolvers.</t> | |||
<t>One or more IP addresses for recursive DNS servers will usually be sup plied to the client through router advertisements | <t>One or more IP addresses for recursive DNS servers will usually be sup plied to the client 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 "service.arp | |||
rpa.'. In order to avoid this, it is permissible | a.". In order to avoid this, it is permissible | |||
that hosts use the resolvers that are locally provided for resolving 's | that hosts use the resolvers that are locally provided for resolving "s | |||
ervice.arpa.', even when they are configured to | ervice.arpa.", even when they are configured to | |||
use other resolvers.</t> | use other resolvers.</t> | |||
</section> | </section> | |||
<section> | <section> | |||
<name>Caching DNS Servers</name> | <name>Caching DNS Servers</name> | |||
<!-- [rfced] In the following text, before the two numbered points, | ||||
the text reads "There are three considerations". Should we update | ||||
"three" to "two", or is there another point that the text is | ||||
missing? | ||||
Current: | ||||
There are three considerations for caching DNS servers that follow | ||||
this specification: | ||||
1. 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 3.2.1 of [RFC4035]). DNSSEC validation | ||||
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 | ||||
MUST behave as described in Locally Served Zones (Section 3 of | ||||
[RFC6303]). That is, queries for 'service.arpa.' and subdomains | ||||
of 'service.arpa.' MUST NOT be forwarded, with one important | ||||
exception: a query for a DS record with the DO bit set MUST | ||||
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.' | ||||
MUST NOT result in that query being forwarded to an upstream | ||||
cache nor to the authoritative DNS server for '.arpa.'. However, | ||||
as necessary to provide accurate authority information, a query | ||||
for the DS record MUST 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>There are three considerations for caching DNS servers that | <t>There are three considerations for caching DNS servers that | |||
follow this specification:</t> | follow this specification:</t> | |||
<ol> | ||||
<li>For correctness, recursive resolvers at sites using 'service.arpa.' | <!--[rfced In the following, is the intention to talk about the | |||
must in practice transparently support DNSSEC | document status of RFC 9365 or to talk about the concept of | |||
queries: queries for DNSSEC records and queries with the DNSSEC OK ( | DNSSEC validation as being a best current practice in the general | |||
DO) bit set (<xref target="RFC4035" section="3.2.1" | sense? | |||
sectionFormat="of"/>). DNSSEC validation is a Best Current Practice | ||||
<xref target="RFC9364"/>: although validation is | Original: | |||
not required, a caching recursive resolver that does not validate an | DNSSEC validation is a Best Current Practice [RFC9364]: | |||
swers that can be validated may cache invalid data. | ||||
This, in turn, would prevent validating stub resolvers from successf | Perhaps A: | |||
ully validating answers. Hence, as a practical | "DNS Security Extensions (DNSSEC)" is a Best Current Practice | |||
matter, recursive resolvers at sites using 'service.arpa' should do | ([RFC9364]) that describes DNSSEC validation: | |||
DNSSEC validation.</li> | ||||
Perhaps B: | ||||
DNSSEC (see [RFC9364]) validation is a best current practice: | ||||
--> | ||||
<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 (<xref target="RFC4035" section="3.2.1" | ||||
sectionFormat="of"/>). DNSSEC validation is a Best Current Practice | ||||
(<xref target="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.</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 as described in Locally Served | |||
<xref target="RFC6303" section="3" sectionFormat="of"/>. That is, | Zones (<xref target="RFC6303" section="3" sectionFormat="of"/>). | |||
queries for 'service.arpa.' and subdomains of | That is, queries for "service.arpa." and subdomains of | |||
'service.arpa.' MUST NOT be forwarded, with one important exceptio | "service.arpa." <bcp14>MUST NOT</bcp14> be forwarded, with one | |||
n: a query for a DS record with the DO bit set MUST | important exception: a query for a DS record with the DO bit set | |||
return the correct answer for that question, including correct info | <bcp14>MUST</bcp14> return the correct answer for that question, | |||
rmation in the authority section that proves that | including correct information in the authority section that proves | |||
the record is nonexistent.</t> | that the record is nonexistent.</t> | |||
<t>So, for example, a query for the NS record for 'service.arpa.' M | ||||
UST NOT result in that query being forwarded to an | <!--[rfced] Is this text redundant (with two uses of necessary)? Does our | |||
upstream cache nor to the authoritative DNS server for '.arpa.'. H | suggestion change your intended meaning? | |||
owever, as necessary to provide accurate | ||||
authority information, a query for the DS record MUST result in for | Original: | |||
warding whatever queries are necessary; | However, as necessary to provide accurate authority information, a | |||
typically, this will just be a query for the DS record, since the n | query for the DS record MUST result in forwarding whatever queries are | |||
ecessary authority information will be included | necessary; typically, ... | |||
in the authority section of the response if the DO bit is set.</t> | ||||
Perhaps: | ||||
However, to provide accurate authority information, a | ||||
query for the DS record MUST result in forwarding whatever queries are | ||||
necessary. | ||||
--> | ||||
<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, as necessary 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 serve | |||
rs for 'service.arpa.' for a delegation beneath that | rs 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; therefore, the server would refuse to answer | |||
authoritatively for such a zone. A server that implements this sort of | authoritatively for such a zone. A server that implements this sort of | |||
check MUST be configurable so that either it does | check <bcp14>MUST</bcp14> be configurable so that either it does | |||
not do this check for the 'service.arpa.' domain or it ignores the resu | not do this check for the "service.arpa." domain or it ignores the resu | |||
lts of the check.</t> | 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. | ||||
--> | ||||
<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 ser | |||
e.arpa.' for use with SRP. The operator for the | ver 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 authoritative for "service.arpa." in the global DNS will co | |||
nfigure any such servers as described in | nfigure any such 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, which i | |||
s operated by IANA under the authority of the | s operated by IANA under the authority of the | |||
Internet Architecture Board according to the rules established in [RFC3 | Internet Architecture Board (IAB) according to the rules established in | |||
172]. There are no other DNS registrars for | <xref target="RFC3172" format="default"/>. There are no other DNS registrars f | |||
'.arpa'.</t> | or | |||
".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>In order to be fully functional, the owner of the "arpa." zone must add | |||
a delegation of 'service.arpa.' in the '.arpa.' | a delegation of "service.arpa." in the ".arpa." | |||
zone <xref target="RFC3172"/>. This delegation is to be set up as was don | zone (see <xref target="RFC3172"/>). This delegation is to be set up as w | |||
e for 'home.arpa', as a result of the | as done for "home.arpa", as a result of the | |||
specification in <xref target="RFC8375" section="7" sectionFormat="of"/>. This is currently the responsibility of the IAB | specification in <xref target="RFC8375" section="7" sectionFormat="of"/>. This is currently the responsibility of the IAB | |||
<xref target="IAB-ARPA"/></t> | (see <xref target="IAB-ARPA"/>).</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. | ||||
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]. | ||||
--> | ||||
<name>Registration and Delegation of "service.arpa" as a Special-Use Doma | ||||
in Name</name> | ||||
<t>IANA has recorded the domain name "service.arpa." in the "Special-Use | ||||
Domain Names" registry | ||||
(see <xref target="SUDN"/>). IANA has implemented the delegation reques | ||||
ted in | ||||
<xref target="delegation"/>.</t> | <xref target="delegation"/>.</t> | |||
<t>IANA is further requested to add a new entry to the "Transport-Indepen | <t>IANA has also added a new entry to the "Transport-Independent Locally- | |||
dent Locally-Served Zones" subregistry of | Served Zones Registry" registry of | |||
the "Locally-Served DNS Zones" registry <xref target="LSDZ"/>. The ent | the "Locally-Served DNS Zones" group (see <xref target="LSDZ"/>). The | |||
ry will be for the domain 'service.arpa.' with the | entry is for the domain "SERVICE.ARPA" with the | |||
description "DNS&nbhy;SD Service Registration Protocol Special-Use Doma | description "DNS-SD Service Registration Protocol Special-Use Domain" a | |||
in", listing this document as the reference.</t> | nd 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" subdomain o | |||
future use by DNS-SD or related work. The IANA is requested to create a | f "service.arpa." Other subdomains are reserved for | |||
registry, the "service.arpa Subdomain" registry. | future use by DNS-SD or related work. IANA has created the "service.arp | |||
The IETF shall have change control for this registry. New entries may b | a Subdomain" registry (see <xref target="SUB"/>). | |||
e added either as a result of Standards Action | The IETF has change control for this registry. New entries may be added | |||
<xref target="RFC8126" section="4.9"/> or with IESG approval <xref targ | either as a result of Standards Action | |||
et="RFC8126" section="4.10"/>, provided that a | (<xref target="RFC8126" section="4.9" sectionFormat="of"/>) or with IES | |||
specification exists <xref target="RFC8126" section="4.6"/>. | G Approval (<xref target="RFC8126" section="4.10" sectionFormat="of"/>), provide | |||
d that a | ||||
specification exists (<xref target="RFC8126" section="4.6"/>). | ||||
</t> | </t> | |||
<t> | <t> | |||
The IANA shall group the "service.arpa Subdomain" registry with the "Lo | IANA has grouped the "service.arpa Subdomain" registry with the "Locall | |||
cally-Served DNS Zones" registry. | y-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 "Service Name and Transport Prot | |||
Numbers registry. The following sections | ocol Port Number Registry" (see <xref target="PORT"/>). The following subsection | |||
s | ||||
contain tables with the fields required by <xref target="RFC6335" secti on="8.1.1" sectionFormat="of"/>.</t> | contain tables with the fields required by <xref target="RFC6335" secti on="8.1.1" sectionFormat="of"/>.</t> | |||
</section> | ||||
<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-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> | gt; </td></tr> | |||
<tr><td> Description </td><td> DNS-SD Service Registration ( | <tr><td> Description </td><td> DNS-SD Service Discovery (TLS | |||
TLS) </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> | <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 "IANA IPv6 Special | |||
ecial-Purpose Address Registry, similar to the Port | -Purpose Address Registry" (see <xref target="IPv6"/>), similar to the Port | |||
Control Protocol anycast address, 2001:1::1. The value TBD is to be rep | Control Protocol anycast address: 2001:1::1. The purpose of this alloca | |||
laced with the actual allocation in the table that | tion is to provide a fixed anycast address that can be commonly used as a destin | |||
follows. The purpose of this allocation is to provide a fixed anycast a | ation for | |||
ddress that can be commonly used as a destination for | SRP updates when no SRP registrar is explicitly configured. The initial | |||
SRP updates when no SRP registrar is explicitly configured. The values | values for the registry are as follows:</t> | |||
for the registry are:</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 r> | <tr><td>Address Block</td> <td>2001:1::3/128</td></tr> | |||
<tr><td>Name</td> <td>DNS-SD Service Registra tion Protocol Anycast Address</td></tr> | <tr><td>Name</td> <td>DNS-SD Service Registra tion Protocol Anycast Address</td></tr> | |||
<tr><td>RFC</td> <td>[this document]</td></t | <tr><td>RFC</td> <td>RFC 9665</td></tr> | |||
r> | <tr><td>Allocation Date</td> <td>2024-04</td></tr> | |||
<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 | ||||
.8174.xml"/> | <!-- [rfced] Normative reference RFC 3445 has been obsoleted by | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | RFC 4033. We will update to the latter unless we hear objection. | |||
.8375.xml"/> | --> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8624.xml"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.344 | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | 5.xml"/> | |||
.8765.xml" /> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.359 | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | 6.xml"/> | |||
.9364.xml" /> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.403 | |||
5.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.630 | ||||
3.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.676 | ||||
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.486 | |||
.4861.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.610 | |||
.6105.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 | |||
.6335.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 | |||
.6760.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 | |||
.6761.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 | |||
.6762.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.708 | |||
.7084.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.722 | |||
.7228.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 | |||
.7413.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.841 | |||
.8415.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.852 | |||
.8520.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.876 | |||
.8766.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.894 | |||
.8945.xml" /> | 5.xml" /> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | ||||
D.cheshire-dnssd-roadmap.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | ||||
D.ietf-dnssd-advertising-proxy.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I- | ||||
D.ietf-snac-simple.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"> | <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--> | ||||
<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 | ||||
--> | ||||
<section> | <section> | |||
<name>Testing using standard RFC2136-compliant DNS servers</name> | <name>Testing Using Standard DNS Servers Compliant with RFC 2136</name> | |||
<t> | <t> | |||
It may be useful to set up an authoritative DNS server for testing that does not implement SRP. This can be done by configuring the | It may be useful to set up an authoritative DNS server for testing that does not implement SRP. This can be done by configuring the | |||
server to listen on the anycast address, or advertising it in the _dnssd &nbhy;srp._tcp.<zone> SRV and | server to listen on the anycast address or by advertising it in the _dns sd&nbhy;srp._tcp.<zone> SRV and | |||
_dnssd&nbhy;srp&nbhy;tls._tcp.<zone> record. It must be configure d to be authoritative for | _dnssd&nbhy;srp&nbhy;tls._tcp.<zone> record. It must be configure d to be authoritative for | |||
"default.service.arpa", and to accept updates from hosts on local networ | "default.service.arpa" and to accept updates from hosts on local network | |||
ks for names under "default.service.arpa" | s for names under "default.service.arpa" | |||
without authentication, since such servers will not have support for FCF | without authentication since such servers will not have support for FCFS | |||
S authentication (<xref target="fcfs"/>).</t> | authentication (<xref target="fcfs"/>).</t> | |||
<t> | <t> | |||
An authoritative DNS server configured in this way will be able to succe ssfully accept and process SRP Updates from requestors that send SRP | An authoritative DNS server configured in this way will be able to succe ssfully accept and process SRP Updates from requestors that send SRP | |||
updates. However, no prerequisites will be applied, and this means that | updates. However, no prerequisites will be applied; this means that the | |||
the test server will accept internally | test 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 hm used by the requestor can be done by manually | Since SRP Updates are signed with keys, validation of the SIG(0) algorit hm used by the requestor can be done by manually | |||
installing the requestor's public key on the DNS server that will be rec eiving the updates. The key can then be used to | installing the requestor's public key on the DNS server that will be rec eiving the updates. The key can then be used to | |||
authenticate the SRP update, and can be used as a requirement for the up date. An example configuration for testing SRP | authenticate the SRP update and can be used as a requirement for the upd 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 Requestors 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, SRP Updates will fail when sent to a server compliant with < | |||
er that does not implement SRP because the zone | xref target="RFC2136"/> that does not implement SRP because the zone | |||
being updated is "default.service.arpa", and no DNS server that is not a | being updated is "default.service.arpa" and because no DNS server that i | |||
n SRP registrar would normally be configured to be | s not an SRP registrar would normally be configured to be | |||
authoritative for "default.service.arpa". Therefore, a requestor that s ends an SRP Update can tell that the receiving server | authoritative for "default.service.arpa". Therefore, a requestor that s ends an SRP Update can tell that the receiving server | |||
does not support SRP, but does support RFC2136, because the RCODE will e | does not support SRP but does support <xref target="RFC2136"/> because t | |||
ither be NotZone, NotAuth or Refused, or because | he RCODE will either be NotZone, NotAuth, or Refused or because | |||
there is no response to the update request (when using the anycast addre | there is no response to the update request (when using the anycast addre | |||
ss)</t> | ss).</t> | |||
<t> | <t> | |||
In this case a requestor MAY attempt to register itself using regular RF C2136 DNS updates. To do so, it must discover the | In this case, a requestor <bcp14>MAY</bcp14> attempt to register itself using regular DNS updates described in <xref target="RFC2136"/>. To do so, it mu st discover the | |||
default registration zone and the DNS server designated to receive updat es for that zone, as described earlier, using the | default registration zone and the DNS server designated to receive updat es 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 is | _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 requestor that implements SRP <bcp14>MUST</bcp14> first attempt to | |||
ister itself, and only attempt to use RFC2136 | use SRP to register itself and only attempt to use backwards capability with <x | |||
backwards compatibility if that fails. Although the owner name for the | ref target="RFC2136"/> | |||
SRV record specifies the UDP protocol for updates, | if that fails. Although the owner name for the SRV record specifies UDP | |||
it is also possible to use TCP, and TCP SHOULD be required to prevent sp | for updates, | |||
oofing.</t> | 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 BIND9 Configuration for "default.service.arpa."</name> | |||
<figure title="Zone Configuration in named.conf"><artwork><![CDATA[ | ||||
<figure title="Zone Configuration in named.conf"> | ||||
<artwork><![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[ | ||||
<figure title="Example Zone File"> | ||||
<artwork><![CDATA[ | ||||
$ORIGIN . | $ORIGIN . | |||
$TTL 57600 ; 16 hours | $TTL 57600 ; 16 hours | |||
default.service.arpa IN SOA ns3.default.service.arpa. | default.service.arpa IN SOA ns3.default.service.arpa. | |||
postmaster.default.service.arpa. ( | 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) | |||
) | ) | |||
skipping to change at line 1367 ¶ | skipping to change at line 1739 ¶ | |||
$ORIGIN default.service.arpa. | $ORIGIN default.service.arpa. | |||
$TTL 300 ; 5 minutes | $TTL 300 ; 5 minutes | |||
ns3 AAAA 2001:db8:0:1::1 | ns3 AAAA 2001:db8:0:1::1 | |||
$TTL 3600 ; 1 hour | $TTL 3600 ; 1 hour | |||
demo AAAA 2001:db8:0:2::1 | demo AAAA 2001:db8:0:2::1 | |||
KEY 0 3 13 ( | KEY 0 3 13 ( | |||
qweEmaaq0FAWok5//ftuQtZgiZoiFSUsm0srWREdywQU | qweEmaaq0FAWok5//ftuQtZgiZoiFSUsm0srWREdywQU | |||
9dpvtOhrdKWUuPT3uEFF5TZU6B4q1z1I662GdaUwqg== | 9dpvtOhrdKWUuPT3uEFF5TZU6B4q1z1I662GdaUwqg== | |||
); alg = ECDSAP256SHA256 ; key id = 15008 | ); alg = ECDSAP256SHA256 ; key id = 15008 | |||
AAAA ::1 | AAAA ::1 | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
</section> | </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 requestor | ||||
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> | ||||
</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 | b) Is the "Service" (or "Service Description") redundant here and in | |||
sgml-general-insert-case:lower | similar cases throughout the document (as SD = Service Discovery)? | |||
sgml-minimize-attributes:nil | That is, just examples below, more cases exist. | |||
sgml-always-quote-attributes:t | ||||
sgml-indent-step:2 | Original: | |||
sgml-indent-data:t | DNS-SD Service registration uses public keys and SIG(0) to allow | |||
sgml-parent-document:nil | services to defend their registrations. | |||
sgml-exposed-tags:nil | ||||
sgml-local-catalogs:nil | Original: | |||
sgml-local-ecat-files:nil | Although in principle DNS-SD Service Description records can | |||
End: | include other record types with the same Service Instance Name, in | |||
--> | practice they rarely do. | |||
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 MUST be all zeroes. | ||||
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 MUST be at | ||||
least one "Add to an RRset" TXT update. | ||||
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. | ||||
--> | ||||
<!-- [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 | ||||
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" | ||||
service instance | ||||
Service Name | ||||
c) We see the following similar terms. Please let us know how to | ||||
update for consistency. | ||||
BIND 9 vs. BIND9 | ||||
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. | ||||
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 | ||||
Please review other terms similar to these titles if they exist and | ||||
let us know if any further changes should be made. | ||||
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 | ||||
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 MAY be omitted for | ||||
brevity; if it is omitted, the SRP registrar MUST 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. | ||||
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. | ||||
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 | ||||
--> | ||||
<!-- [rfced] Please review each artwork element in Appendix C in case | ||||
they should be tagged as sourcecode or another element. | ||||
--> | ||||
<!-- [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. 252 change blocks. | ||||
1001 lines changed or deleted | 1336 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |