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