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