| rfc9665v1.txt | rfc9665.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) T. Lemon | Internet Engineering Task Force (IETF) T. Lemon | |||
| Request for Comments: 9665 S. Cheshire | Request for Comments: 9665 S. Cheshire | |||
| Category: Standards Track Apple Inc. | Category: Standards Track Apple Inc. | |||
| ISSN: 2070-1721 October 2024 | ISSN: 2070-1721 June 2025 | |||
| Service Registration Protocol for DNS-Based Service Discovery | Service Registration Protocol for DNS-Based Service Discovery | |||
| Abstract | Abstract | |||
| The Service Registration Protocol (SRP) for DNS-based Service | The Service Registration Protocol (SRP) for DNS-based Service | |||
| Discovery (DNS-SD) uses the standard DNS Update mechanism to enable | Discovery (DNS-SD) uses the standard DNS Update mechanism to enable | |||
| DNS-SD using only unicast packets. This makes it possible to deploy | DNS-SD using only unicast packets. This makes it possible to deploy | |||
| DNS-SD without multicast, which greatly improves scalability and | DNS-SD without multicast, which greatly improves scalability and | |||
| improves performance on networks where multicast service is not an | improves performance on networks where multicast service is not an | |||
| skipping to change at line 36 ¶ | skipping to change at line 36 ¶ | |||
| received public review and has been approved for publication by the | received public review and has been approved for publication by the | |||
| Internet Engineering Steering Group (IESG). Further information on | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | Internet Standards is available in Section 2 of RFC 7841. | |||
| Information about the current status of this document, any errata, | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | and how to provide feedback on it may be obtained at | |||
| https://www.rfc-editor.org/info/rfc9665. | https://www.rfc-editor.org/info/rfc9665. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Revised BSD License text as described in Section 4.e of the | include Revised BSD License text as described in Section 4.e of the | |||
| Trust Legal Provisions and are provided without warranty as described | Trust Legal Provisions and are provided without warranty as described | |||
| skipping to change at line 63 ¶ | skipping to change at line 63 ¶ | |||
| 3. Service Registration Protocol | 3. Service Registration Protocol | |||
| 3.1. Protocol Variants | 3.1. Protocol Variants | |||
| 3.1.1. Full-Featured Hosts | 3.1.1. Full-Featured Hosts | |||
| 3.1.2. Constrained Hosts | 3.1.2. Constrained Hosts | |||
| 3.1.3. Why two variants? | 3.1.3. Why two variants? | |||
| 3.2. Protocol Details | 3.2. Protocol Details | |||
| 3.2.1. What to Publish | 3.2.1. What to Publish | |||
| 3.2.2. Where to Publish It | 3.2.2. Where to Publish It | |||
| 3.2.3. How to Publish It | 3.2.3. How to Publish It | |||
| 3.2.3.1. How the DNS-SD Service Registration Process Differs | 3.2.3.1. How the DNS-SD Service Registration Process Differs | |||
| from the DNS Update Specified in RFC 2136 | from DNS Update | |||
| 3.2.3.2. Retransmission Strategy | 3.2.3.2. Retransmission Strategy | |||
| 3.2.3.3. Successive Updates | 3.2.3.3. Successive Updates | |||
| 3.2.4. How to Secure It | 3.2.4. How to Secure It | |||
| 3.2.4.1. FCFS Naming | 3.2.4.1. FCFS Naming | |||
| 3.2.5. SRP Requestor Behavior | 3.2.5. SRP Requester Behavior | |||
| 3.2.5.1. Public/Private Key Pair Generation and Storage | 3.2.5.1. Public/Private Key Pair Generation and Storage | |||
| 3.2.5.2. Name Conflict Handling | 3.2.5.2. Name Conflict Handling | |||
| 3.2.5.3. Record Lifetimes | 3.2.5.3. Record Lifetimes | |||
| 3.2.5.4. Compression in SRV Records | 3.2.5.4. Compression in SRV Records | |||
| 3.2.5.5. Removing Published Services | 3.2.5.5. Removing Published Services | |||
| 3.3. Validation and Processing of SRP Updates | 3.3. Validation and Processing of SRP Updates | |||
| 3.3.1. Validation of DNS Update Add and Delete RRs | 3.3.1. Validation of DNS Update Add and Delete RRs | |||
| 3.3.1.1. Service Discovery Instruction | 3.3.1.1. Service Discovery Instruction | |||
| 3.3.1.2. Service Description Instruction | 3.3.1.2. Service Description Instruction | |||
| 3.3.1.3. Host Description Instruction | 3.3.1.3. Host Description Instruction | |||
| skipping to change at line 100 ¶ | skipping to change at line 100 ¶ | |||
| 6.3. Risks of Allowing Arbitrary Names to be Registered in SRP | 6.3. Risks of Allowing Arbitrary Names to be Registered in SRP | |||
| Updates | Updates | |||
| 6.4. Security of Local Service Discovery | 6.4. Security of Local Service Discovery | |||
| 6.5. SRP Registrar Authentication | 6.5. SRP Registrar Authentication | |||
| 6.6. Required Signature Algorithm | 6.6. Required Signature Algorithm | |||
| 7. Privacy Considerations | 7. Privacy Considerations | |||
| 8. Domain Name Reservation Considerations | 8. Domain Name Reservation Considerations | |||
| 8.1. Users | 8.1. Users | |||
| 8.2. Application Software | 8.2. Application Software | |||
| 8.3. Name Resolution APIs and Libraries | 8.3. Name Resolution APIs and Libraries | |||
| 8.4. Caching DNS Servers | 8.4. Recursive Resolvers | |||
| 8.5. Authoritative DNS Servers | 8.5. Authoritative DNS Servers | |||
| 8.6. DNS Server Operators | 8.6. DNS Server Operators | |||
| 8.7. DNS Registries/Registrars | 8.7. DNS Registries/Registrars | |||
| 9. Delegation of "service.arpa." | 9. Delegation of "service.arpa." | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| 10.1. Registration and Delegation of "service.arpa" as a | 10.1. Registration and Delegation of "service.arpa." as a | |||
| Special-Use Domain Name | Special-Use Domain Name | |||
| 10.2. Subdomains of "service.arpa." | 10.2. Addition of "service.arpa." to the Locally-Served Zones | |||
| 10.3. Service Name Registrations | Registry | |||
| 10.3.1. 'dnssd-srp' Service Name | 10.3. Subdomains of "service.arpa." | |||
| 10.3.2. 'dnssd-srp-tls' Service Name | 10.4. Service Name Registrations | |||
| 10.4. Anycast Address | 10.4.1. "dnssd-srp" Service Name | |||
| 10.4.2. "dnssd-srp-tls" Service Name | ||||
| 10.5. Anycast Address | ||||
| 11. References | 11. References | |||
| 11.1. Normative References | 11.1. Normative References | |||
| 11.2. Informative References | 11.2. Informative References | |||
| Appendix A. Testing Using Standard DNS Servers Compliant with RFC | Appendix A. Using Standard Authoritative DNS Servers Compliant | |||
| 2136 | with RFC 2136 to Test SRP Requesters | |||
| Appendix B. How to Allow SRP Requestors to Update Standard Servers | Appendix B. How to Allow SRP Requesters to Update Standard Servers | |||
| Compliant with RFC 2136 | Compliant with RFC 2136 | |||
| Appendix C. Sample BIND9 Configuration for "default.service.arpa." | Appendix C. Sample BIND 9 Configuration for | |||
| "default.service.arpa." | ||||
| Acknowledgments | Acknowledgments | |||
| Authors' Addresses | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| DNS-SD (see [RFC6763]) is a component of Zero Configuration | DNS-SD [RFC6763] is a component of Zero Configuration Networking | |||
| Networking (see [RFC6760], [ZC], and [ROADMAP]). | [RFC6760] [ZC] [ROADMAP]. | |||
| This document describes an enhancement to DNS-SD that allows servers | This document describes an enhancement to DNS-SD that allows servers | |||
| to register the services they offer using the DNS protocol rather | to register the services they offer using the DNS protocol over | |||
| than using Multicast DNS (mDNS) (see [RFC6762]). There is already a | unicast rather than using Multicast DNS (mDNS) [RFC6762]. There is | |||
| large installed base of DNS-SD clients that can discover services | already a large installed base of DNS-SD clients that can discover | |||
| using the DNS protocol (e.g., Android, Windows, Linux, Apple). | services using the DNS protocol (e.g., Android, Windows, Linux, Apple | |||
| operating systems). | ||||
| This document is intended for three audiences: implementors of | This document is intended for three audiences: Implementers of | |||
| software that provides services that should be advertised using | software that provides services that should be advertised using | |||
| DNS-SD, implementors of DNS servers that will be used in contexts | DNS-SD, implementers of authoritative DNS servers that will be used | |||
| where DNS-SD registration is needed, and administrators of networks | in contexts where DNS-SD registration is needed, and administrators | |||
| where DNS-SD is required. The document is expected to provide | of networks where DNS-SD service is required. The document is | |||
| sufficient information to allow interoperable implementation of the | expected to provide sufficient information to allow interoperable | |||
| registration protocol. | implementation of the Service Registration Protocol. | |||
| DNS-SD allows services to advertise the fact that they provide | DNS-SD allows servers to publish the information required to access | |||
| service and to provide the information required to access that | the services they provide. DNS-SD clients can then discover the set | |||
| service. DNS-SD clients can then discover the set of services of a | of service instances of a particular type that are available. They | |||
| particular type that are available. They can then select a service | can then select an instance from among those that are available and | |||
| from among those that are available and obtain the information | obtain the information required to use it. Although DNS-SD using the | |||
| required to use it. Although DNS-SD using the DNS protocol (as | DNS protocol can be more efficient and versatile than using mDNS, it | |||
| opposed to mDNS) can be more efficient and versatile, it is not | is not common in practice because of the difficulties associated with | |||
| common in practice because of the difficulties associated with | ||||
| updating authoritative DNS services with service information. | updating authoritative DNS services with service information. | |||
| The existing practice for updating DNS zones is either to manually | The existing practice for updating DNS zones is either to enter new | |||
| enter new data or to use a DNS Update (see [RFC2136]). | data manually or to use DNS Update [RFC2136]. Unfortunately, DNS | |||
| Unfortunately, a DNS Update requires either: | Update requires either: | |||
| * that the authoritative DNS server automatically trust updates or | * that the authoritative DNS server automatically trust updates or | |||
| * that the DNS Update requestor have some kind of shared secret or | * that the DNS Update requester have some kind of shared secret or | |||
| public key that is known to the DNS server and can be used to | public key that is known to the authoritative DNS server and can | |||
| authenticate the update. | be used to authenticate the update. | |||
| Furthermore, the DNS Update can be a fairly chatty process, requiring | Furthermore, DNS Update can be a fairly chatty process, requiring | |||
| multiple roundtrips with different conditional predicates to complete | multiple roundtrips with different conditional predicates to complete | |||
| the update process. | the update process. | |||
| The Service Registration Protocol (SRP) adds a set of default | The Service Registration Protocol (SRP) adds a set of default | |||
| heuristics for processing DNS updates that eliminates the need for | heuristics for processing DNS updates that eliminates the need for | |||
| DNS-update-conditional predicates. Instead, the SRP registrar (a DNS | conditional predicates. Instead, the SRP registrar (an authoritative | |||
| server that supports SRP updates) has a set of default predicates | DNS server that supports SRP Updates) has a set of default predicates | |||
| that are applied to the update; and the update either succeeds | that are applied to the update; and the update either succeeds | |||
| entirely or fails in a way that allows the requestor to know what | entirely or fails in a way that allows the requester to know what | |||
| went wrong and construct a new update. | went wrong and construct a new update. | |||
| SRP also adds a feature called "First Come, First Served Naming" (or | SRP also adds a feature called "First Come, First Served Naming" (or | |||
| "FCFS Naming"), which allows the requestor to: | "FCFS Naming"), which allows the requester to: | |||
| * claim a name that is not yet in use, and | * claim a name that is not yet in use, and | |||
| * using SIG(0) ([RFC2931]), authenticate both the initial claim and | * authenticate, using SIG(0) [RFC2931], both the initial claim (to | |||
| subsequent updates. | ensure it has not been modified in transit) and subsequent updates | |||
| (to ensure they come from the same entity that performed the | ||||
| initial claim). | ||||
| This prevents name conflicts, since a second SRP requestor attempting | This prevents a new service instance from "stealing" a name that is | |||
| to claim the same name will not possess the SIG(0) key used by the | already in use: A second SRP requester attempting to claim an | |||
| first requestor to claim it: so its claim will be rejected, and the | existing name will not possess the SIG(0) key used by the first | |||
| second requestor will have to choose a new name. | requester to claim it. Because of this, its claim will be rejected. | |||
| This will force it to choose a new name. | ||||
| It is important to understand that "authenticate" here just means | It is important to understand that "authenticate" here just means | |||
| that we can tell that an update came from the same source as the | that we can tell that an update came from the same source as the | |||
| original registration. We have not established trust. This has | original registration. We have not established trust. This has | |||
| important implications for what we can and can't do with data the | important implications for what we can and can't do with data the SRP | |||
| client sends us. You will notice as you read this document that we | requester sends us. You will notice as you read this document that | |||
| only support adding a very restricted set of records, and the content | we only support adding a very restricted set of records, and the | |||
| of those records is further constrained. | content of those records is further constrained. | |||
| The reason for this is precisely that we have not established trust. | The reason for this is precisely that we have not established trust. | |||
| So, we can only publish information that we feel safe in publishing | So, we can only publish information that we feel safe in publishing | |||
| even though we do not have any basis for trusting the requestor. We | even though we do not have any basis for trusting the requester. We | |||
| reason that mDNS ([RFC6762]) allows arbitrary hosts on a single IP | reason that mDNS [RFC6762] allows arbitrary hosts on a single IP link | |||
| link to advertise services ([RFC6763]), relying on whatever service | to advertise services [RFC6763], relying on whatever service is | |||
| is advertised to provide authentication as a part of its protocol | advertised to provide authentication as a part of its protocol rather | |||
| rather than in the service advertisement. | than in the service advertisement. | |||
| This is considered reasonably safe because it requires physical | This is considered reasonably safe because it requires physical | |||
| presence on the network in order to advertise. An off-network mDNS | presence on the network in order to advertise. An off-network mDNS | |||
| attack is simply not possible. Our goal with this specification is | attack is simply not possible. Our goal with this specification is | |||
| to impose similar constraints. Therefore, you will see in | to impose similar constraints. Therefore, you will see in | |||
| Section 3.3.1 that a very restricted set of records with a very | Section 3.3.1 that a very restricted set of records with a very | |||
| restricted set of relationships are allowed. You will also see in | restricted set of relationships are allowed. You will also see in | |||
| Section 6.1 that we give advice on how to prevent off-network | Section 6.1 that we give advice on how to prevent off-network | |||
| attacks. | attacks. | |||
| This leads us to the disappointing observation that this protocol is | This leads us to the disappointing observation that this protocol is | |||
| not a mechanism for adding arbitrary information to DNS zones. We | not a mechanism for adding arbitrary information to DNS zones. We | |||
| have not evaluated the security properties of adding, for example, an | have not evaluated the security properties of adding, for example, an | |||
| SOA record, an MX record, or a CNAME record; therefore, these are | SOA record, an MX record, or a CNAME record; therefore, these are | |||
| forbidden. A future protocol specification might include analyses | forbidden. Future updates to this specification might include | |||
| for other records and extend the set of records that can be | analyses for other records and extend the set of records and/or | |||
| registered here. Or it might require establishment of trust, and add | record content that can be registered here. Or it might require | |||
| an authorization model to the authentication model we now have. But | establishment of trust, and add an authorization model to the | |||
| this is work for a future document. | authentication model we now have. But that is work for a future | |||
| document. | ||||
| Finally, SRP adds the concept of a "lease", similar to leases in DHCP | Finally, SRP adds the concept of a "lease" [RFC9664], analogous to | |||
| ([RFC8415]). The SRP registration itself has a lease that may be on | leases in DHCP [RFC2131] [RFC8415]. The SRP registration itself has | |||
| the order of an hour; if the requestor does not renew the lease | a lease that may be on the order of two hours; if the requester does | |||
| before it has elapsed, the registration is removed. The claim on the | not renew the lease before it has elapsed, the registration is | |||
| name can have a longer lease so that another requestor cannot claim | removed. The claim on the name can have a longer lease so that | |||
| the name, even though the registration has expired. | another requester cannot immediately claim the name, even though the | |||
| registration itself has expired. | ||||
| The SRP for DNS-SD specified in this document provides a reasonably | The Service Registration Protocol for DNS-SD specified in this | |||
| secure mechanism for publishing this information. Once published, | document provides a reasonably secure mechanism for publishing this | |||
| these services can be readily discovered by DNS-SD clients using | information. Once published, these services can be readily | |||
| standard DNS lookups. | discovered by DNS-SD clients using standard DNS lookups. | |||
| The DNS-SD specification (see Section 10 of [RFC6763] briefly | Section 10 of the DNS-SD specification [RFC6763] briefly discusses | |||
| discusses ways that servers can publish their information in the DNS | ways that servers can advertise the services they provide in the DNS | |||
| namespace. In the case of mDNS, it allows servers to publish their | namespace. In the case of mDNS, it allows servers to advertise their | |||
| information on the local link, using names in the ".local" namespace, | services on the local link, using names in the "local." namespace, | |||
| which makes their services directly discoverable by peers attached to | which makes their services directly discoverable by peers attached to | |||
| that same local link. | that same local link. | |||
| RFC 6763 also allows clients to discover services using the DNS | DNS-SD [RFC6763] also allows clients to discover services by using | |||
| protocol (see [RFC1035]). This can be done by having a system | the DNS protocol over traditional unicast [RFC1035]. This can be | |||
| administrator manually configure service information in the DNS; | done by having a system administrator manually configure service | |||
| however, manually populating DNS authoritative server databases is | information in the DNS; however, manually populating DNS | |||
| costly and potentially error-prone and requires a knowledgeable | authoritative server databases is costly and potentially error-prone | |||
| network administrator. Consequently, although all DNS-SD client | and requires a knowledgeable network administrator. Consequently, | |||
| implementations of which we are aware support DNS-SD using DNS | although all DNS-SD client implementations of which we are aware | |||
| queries, in practice, it is used much less frequently than mDNS. | support DNS-SD using DNS queries, in practice it is used much less | |||
| frequently than mDNS. | ||||
| The Discovery Proxy (see [RFC8766]) provides one way to automatically | The Discovery Proxy [RFC8766] provides one way to automatically | |||
| populate the DNS namespace but is only appropriate on networks where | populate the DNS namespace but is only appropriate on networks where | |||
| services are easily advertised using mDNS. The present document | services are easily advertised using mDNS. The present document | |||
| describes a solution more suitable for networks where multicast is | describes a solution more suitable for networks where multicast is | |||
| inefficient or where sleepy devices are common by supporting both the | inefficient, or where sleepy devices are common, by supporting the | |||
| offering of services and the discovery of services using unicast. | use of unicast for both the offering of and the discovery of | |||
| services. | ||||
| 2. Conventions and Terminology Used in This Document | 2. Conventions and Terminology Used in This Document | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| Strictly speaking, fully qualified domain names end with a dot ("."). | ||||
| In DNS zone files and other similar contexts, if the final dot is | ||||
| omitted, then a name may be treated incorrectly as relative to some | ||||
| other parent domain. This document follows the formal DNS | ||||
| convention, ending fully qualified domain names with a dot. When | ||||
| this document mentions domain names such as "local." and | ||||
| "default.service.arpa.", the final dot is part of the domain name; it | ||||
| is not a period indicating the end of the sentence. | ||||
| 3. Service Registration Protocol | 3. Service Registration Protocol | |||
| Services that implement SRP use DNS Update (see [RFC2136] and | Services that implement SRP use DNS Update [RFC2136] with SIG(0) | |||
| [RFC3007]) to publish service information in the DNS. Two variants | [RFC3007] to publish service information in the DNS. Two variants | |||
| exist: one for full-featured hosts and one for devices designed for | exist: One for full-featured hosts and one for devices designed for | |||
| Constrained-Node Networks (CNNs) ([RFC7228]). An SRP registrar is | Constrained-Node Networks (CNNs) [RFC7228]. An SRP registrar is most | |||
| most likely an authoritative DNS server or is updating an | likely an authoritative DNS server or is a source of data for one or | |||
| authoritative DNS server. There is no requirement that the server | more authoritative DNS servers. There is no requirement that the | |||
| that is receiving SRP updates be the same server that is answering | authoritative DNS server that is receiving SRP Updates be the same | |||
| queries that return records that have been registered. | authoritative DNS server that is answering queries that return | |||
| records that have been registered. For example, an SRP registrar | ||||
| could be the "hidden primary" that is the source of data for a fleet | ||||
| of secondary authoritative DNS servers. | ||||
| 3.1. Protocol Variants | 3.1. Protocol Variants | |||
| 3.1.1. Full-Featured Hosts | 3.1.1. Full-Featured Hosts | |||
| Full-featured hosts either are configured manually with a | Full-featured hosts either are configured manually with a | |||
| registration domain or discover the default registration domain as | registration domain or discover the default registration domain | |||
| described in Section 11 of [RFC6763]. If this process does not | automatically using the Domain Enumeration process described in | |||
| produce a default registration domain, the SRP is not discoverable on | Section 11 of the DNS-SD specification [RFC6763]. If this process | |||
| the local network using this mechanism. Other discovery mechanisms | does not produce a default registration domain, the SRP registrar is | |||
| are possible, but they are out of scope for this document. | not discoverable on the local network using this mechanism. Other | |||
| discovery mechanisms are possible, but they are out of scope for this | ||||
| document. | ||||
| Manual configuration of the registration domain can be done either: | Configuration of the registration domain can be done either: | |||
| * by querying the list of available registration domains | * by querying the list of available registration domains | |||
| ("r._dns-sd._udp") and allowing the user to select one from the UI | ("r._dns-sd._udp") and allowing the user to select one from the | |||
| or | UI, or | |||
| * by any other means appropriate to the particular use case being | * by any other means appropriate to the particular use case being | |||
| addressed. | addressed. | |||
| Full-featured devices construct the names of the SRV, TXT, and PTR | Full-featured devices construct the names of the SRV, TXT, and PTR | |||
| records describing their service or services as subdomains of the | records describing their service or services as subdomains of the | |||
| chosen service registration domain. For these names, they then | chosen service registration domain. For these names, they then | |||
| discover the zone apex of the closest enclosing DNS zone using SOA | discover the zone apex of the closest enclosing DNS zone using SOA | |||
| queries (see Section 6.1 of [RFC8765]). Having discovered the | queries as described in Section 6.1 of the DNS Push Notification | |||
| enclosing DNS zone, they query for the "_dnssd-srp._tcp.<zone>" SRV | specification [RFC8765]. Having discovered the enclosing DNS zone, | |||
| record to discover the server to which they can send SRP updates. | they query for the "_dnssd-srp._tcp.<zone>" SRV record to discover | |||
| Hosts that support SRP Updates using TLS use the | the SRP registrar to which they can send SRP Updates. Hosts that | |||
| "_dnssd-srp-tls._tcp.<zone>" SRV record instead. | support SRP Updates using TLS use the "_dnssd-srp-tls._tcp.<zone>" | |||
| SRV record instead. | ||||
| Examples of full-featured hosts include devices such as home | Examples of full-featured hosts include devices such as home | |||
| computers, laptops, powered peripherals with network connections | computers, laptops, powered peripherals with network connections | |||
| (such as printers, home routers, and even battery-operated devices | (such as printers and home routers), and even battery-operated | |||
| such as mobile phones that have long battery lives). | devices such as mobile phones that have long battery lives. | |||
| 3.1.2. Constrained Hosts | 3.1.2. Constrained Hosts | |||
| For devices designed for CNNs ([RFC7228]), some simplifications are | For devices designed for CNNs [RFC7228], some simplifications are | |||
| available. Instead of being configured with (or discovering) the | available. Instead of being configured with (or discovering) the | |||
| service registration domain, the special-use domain name (see | service registration domain, the special-use domain name [RFC6761] | |||
| [RFC6761]) "default.service.arpa" is used. The details of how SRP | "default.service.arpa." is used. The details of how SRP registrars | |||
| registrars are discovered will be specific to the constrained | are discovered will be specific to the constrained network; | |||
| network; therefore, we do not suggest a specific mechanism here. | therefore, we do not suggest a specific mechanism here. | |||
| SRP requestors on constrained networks are expected to receive, from | SRP requesters on CNNs are expected to receive, from the network, a | |||
| the network, a list of SRP registrars with which to register. It is | list of SRP registrars with which to register. It is the | |||
| the responsibility of a CNN supporting SRP to provide one or more | responsibility of a CNN supporting SRP to provide at least one | |||
| registrar addresses. It is the responsibility of the registrar | registrar address and port. It is the responsibility of the | |||
| supporting a CNN to handle the updates appropriately. In some | registrar supporting a CNN to handle the updates appropriately. In | |||
| network environments, updates may be accepted directly into a local | some network environments, updates may be accepted directly into a | |||
| "default.service.arpa" zone, which has only local visibility. In | local "default.service.arpa." zone, which has only local visibility. | |||
| other network environments, updates for names ending in | In other network environments, updates for names ending in | |||
| "default.service.arpa" may be rewritten by the registrar to names | "default.service.arpa." may be rewritten by the registrar to names | |||
| with broader visibility. | with broader visibility. Domain name rewriting should be performed | |||
| as appropriate for the network environment in question. Some | ||||
| suggested techniques for how domain names can be translated from a | ||||
| locally scoped name to a domain name with larger scope can be found | ||||
| in the discussion of data translation for names in Multicast DNS | ||||
| answers in Section 5.5 of the Discovery Proxy specification | ||||
| [RFC8766]. | ||||
| 3.1.3. Why two variants? | 3.1.3. Why two variants? | |||
| The reason for these different variants is that low-power devices | The reason for these different variants is that low-power devices | |||
| that typically use CNNs may have very limited battery storage. The | that typically use CNNs may have very limited battery capacity. The | |||
| series of DNS lookups required to discover an SRP registrar and then | series of DNS lookups required to discover an SRP registrar and then | |||
| communicate with it will increase the energy required to advertise a | communicate with it will increase the energy required to advertise a | |||
| service; for low-power devices, the additional flexibility this | service; for low-power devices, the additional flexibility this | |||
| provides does not justify the additional use of energy. It is also | provides does not justify the additional use of energy. It is also | |||
| fairly typical of such networks that some network service information | fairly typical of such networks that some network service information | |||
| is obtained as part of the process of joining the network; thus, this | is obtained as part of the process of joining the network; thus, this | |||
| can be relied upon to provide nodes with the information they need. | can be relied upon to provide nodes with the information they need. | |||
| Networks that are not constrained can have more complicated | Networks that are not CNNs can have more complicated topologies at | |||
| topologies at the IP layer. Nodes connected to such networks can be | the IP layer. Nodes connected to such networks can be assumed to be | |||
| assumed to be able to do DNS-SD service registration domain | able to do DNS-SD service registration domain discovery. Such | |||
| discovery. Such networks are generally able to provide registration | networks are generally able to provide registration domain discovery | |||
| domain discovery and routing. This creates the possibility of off- | and routing. This creates the possibility of off-network spoofing, | |||
| network spoofing, where a device from a foreign network registers a | where a device from a foreign network registers a service on the | |||
| service on the local network in order to attack devices on the local | local network in order to attack devices on the local network. To | |||
| network. To prevent such spoofing, TCP is required for such | guard against off-path spoofing, TCP is required for such networks. | |||
| networks. | ||||
| 3.2. Protocol Details | 3.2. Protocol Details | |||
| We will discuss several parts to this process: | We will discuss several parts to this process: | |||
| * how to know what to publish (see Section 3.2.1), | * how to know what to publish (Section 3.2.1), | |||
| * how to know where to publish it (under what name) (Section 3.2.2), | ||||
| * how to know where to publish it (under what name) (see | * how to publish it (Section 3.2.3), | |||
| Section 3.2.2), | * how to secure its publication (Section 3.2.4), and | |||
| * how to maintain the information once published (Section 5). | ||||
| * how to publish it (see Section 3.2.3), | ||||
| * how to secure its publication (see Section 3.2.4), and | ||||
| * how to maintain the information once published (see Section 5). | ||||
| 3.2.1. What to Publish | 3.2.1. What to Publish | |||
| SRP Updates are sent by SRP requestors to SRP registrars. Three | SRP Updates are sent by SRP requesters to SRP registrars. Three | |||
| types of instructions appear in an SRP update: Service Discovery | types of instructions appear in an SRP Update: Service Discovery | |||
| instructions, Service Description instructions, and Host Description | instructions, Service Description instructions, and Host Description | |||
| instructions. These instructions are made up of DNS Update Resource | instructions. These instructions are made up of DNS Update Resource | |||
| Records (RRs) that are either adds or deletes. The types of records | Records (RRs) that are either adds or deletes. The types of records | |||
| that are added, updated, and removed in each of these instructions, | that are added, updated, and removed in each of these instructions, | |||
| as well as the constraints that apply to them, are described in | as well as the constraints that apply to them, are described in | |||
| Section 3.3. An SRP Update is a DNS Update message that is | Section 3.3. An SRP Update is a DNS Update message [RFC2136] that is | |||
| constructed so as to meet the constraints described in that section. | constructed so as to meet the constraints described in that section. | |||
| The following is a brief overview of what is included in a typical | The following is a brief overview of what is included in a typical | |||
| SRP Update: | SRP Update: | |||
| * PTR RR for services, which map from a generic service type (or | * Service Discovery PTR RR(s) for service(s), which map from a | |||
| subtype) name to a specific Service Instance Name (Section 4.1 of | generic service type (or subtype(s)) to a specific service | |||
| [RFC6763]). | instance name [RFC6763]. | |||
| * For any Service Instance Name, an SRV RR, one or more TXT RRs, and | * For each service instance name, an SRV RR, one or more TXT RRs, | |||
| a KEY RR. Although, in principle, DNS-SD Service Description | and a KEY RR. Although, in principle, DNS-SD Service Description | |||
| records can include other record types with the same Service | records can include other record types with the same service | |||
| Instance Name, in practice, they rarely do. SRP does not permit | instance name, in practice, they rarely do. Currently, SRP does | |||
| other record types. The KEY RR is used to support FCFS naming and | not permit other record types. The KEY RR is used to support FCFS | |||
| has no specific meaning for DNS-SD lookups. SRV records for all | Naming and has no specific meaning for DNS-SD lookups. SRV | |||
| services described in an SRP update point to the same hostname. | records for all services described in an SRP Update point to the | |||
| same hostname. | ||||
| * There is never more than one hostname in a single SRP update. The | * There is always exactly one hostname in a single SRP Update. A | |||
| hostname has one or more address RRs (AAAA or A) and a KEY RR | DNS Update containing more than one hostname is not an SRP Update. | |||
| (used for FCFS naming). Depending on the use case, an SRP | The hostname has one or more address RRs (AAAA or A) and a KEY RR | |||
| requestor may be required to suppress some addresses that would | (used for FCFS Naming). Depending on the use case, an SRP | |||
| requester may be required to suppress some addresses that would | ||||
| not be usable by hosts discovering the service through the SRP | not be usable by hosts discovering the service through the SRP | |||
| registrar. The exact address record suppression behavior required | registrar. The exact address record suppression behavior required | |||
| may vary for different types of SRP requestors. An example of | may vary for different types of SRP requesters. Some suggested | |||
| such advice can be found in Section 5.5.2 of [RFC8766]. | policies for suppressing unusable records can be found in | |||
| Section 5.5.2 of the Discovery Proxy specification [RFC8766]. | ||||
| [RFC6763] describes the details of what each of these types of RRs | The DNS-Based Service Discovery specification [RFC6763] describes the | |||
| mean, with the exception of the KEY RR, which is defined in | details of what each of these RR types mean, with the exception of | |||
| [RFC2539]. These RFCs should be considered the definitive sources | the KEY RR, which is defined in the specification for how to store | |||
| for information about what to publish; the reason for summarizing | Diffie-Hellman Keys in the DNS [RFC2539]. These specifications | |||
| this here is to provide the reader with enough information about what | should be considered the definitive sources for information about | |||
| will be published that the service registration process can be | what to publish; the reason for summarizing this here is to provide | |||
| understood at a high level without first learning the full details of | the reader with enough information about what will be published that | |||
| DNS-SD. Also, the "Service Instance Name" is an important aspect of | the service registration process can be understood at a high level | |||
| FCFS naming, which we describe later on in this document. | without first learning the full details of DNS-SD. Also, the | |||
| "service instance name" is an important aspect of FCFS Naming, which | ||||
| we describe later on in this document. | ||||
| 3.2.2. Where to Publish It | 3.2.2. Where to Publish It | |||
| Multicast DNS (mDNS) uses a single namespace that is valid on the | Multicast DNS (mDNS) uses a single namespace, "local.". Subdomains | |||
| local link called ".local". This convenience is not available for | of "local." are specific to the local link on which they are | |||
| DNS-SD using the DNS protocol: services must exist in some specific | advertised. This convenience is not available for DNS-SD using the | |||
| DNS namespace that is chosen either by the network operator or | DNS protocol: Services must exist in some specific DNS namespace that | |||
| automatically. | is chosen either by the network operator or automatically. | |||
| As described above, full-featured devices are responsible for knowing | As described above, full-featured devices are responsible for knowing | |||
| the domain in which to register their services. Such devices MAY | the domain in which to register their services. Such devices MAY | |||
| optionally support configuration of a registration domain by the | optionally support configuration of a registration domain by the | |||
| operator of the device. However, such devices MUST support | operator of the device. However, such devices MUST support | |||
| registration domain discovery as described in Section 11 of | registration domain discovery as described in Section 11 of the | |||
| [RFC6763]. | DNS-SD specification [RFC6763]. | |||
| Devices made for CNNs register in the special-use domain name | Devices made for CNNs register in the special-use domain name | |||
| ([RFC6761]) "default.service.arpa" and let the SRP registrar handle | [RFC6761] "default.service.arpa." and let the SRP registrar handle | |||
| rewriting that to a different domain if necessary. | rewriting that to a different domain if necessary, as mentioned in | |||
| Section 3.1.2. | ||||
| 3.2.3. How to Publish It | 3.2.3. How to Publish It | |||
| It is possible to issue a DNS Update that does several things at | It is possible to send a DNS Update message that does several things | |||
| once: meaning that it's possible to do all the work of adding a PTR | at once: For example, it's possible in a single transaction to add or | |||
| RR to the PTR RRset on the Service Name and creating or updating the | update a single Host Description while also adding or updating the | |||
| Service Instance Name and Host Description in a single transaction. | RRs comprising the Service Description(s) for one or more service | |||
| instance(s) available on that host and adding or updating the RRs | ||||
| comprising the Service Discovery instruction(s) for those service | ||||
| instance(s). | ||||
| An SRP Update takes advantage of this: it is implemented as a single | An SRP Update takes advantage of this: It is implemented as a single | |||
| DNS Update message that contains a service's Service Discovery | DNS Update message that contains a service's Service Discovery | |||
| records, Service Description records, and Host Description records. | records, Service Description records, and Host Description records. | |||
| Updates done according to this specification are somewhat different | Updates done according to this specification are somewhat different | |||
| than regular DNS Updates as defined in [RFC2136] where the update | from normal DNS Updates [RFC2136] where the update process could | |||
| process could involve many update attempts. You might first attempt | involve many update attempts. The requester might first attempt to | |||
| to add a name if it doesn't exist; if that fails, then in a second | add a name if it doesn't exist; if that fails, then in a second | |||
| message you might update the name if it does exist but matches | message the requester might update the name if it does exist but | |||
| certain preconditions. Because the registration protocol described | matches certain preconditions. Because the Service Registration | |||
| in this document uses a single transaction, some of this adaptability | Protocol described in this document uses a single transaction, some | |||
| is lost. | of this adaptability is lost. | |||
| In order to allow updates to happen in a single transaction, SRP | In order to allow updates to happen in a single transaction, SRP | |||
| Updates do not include update prerequisites. The requirements | Updates do not include update prerequisites. The requirements | |||
| specified in Section 3.3 are implicit in the processing of SRP | specified in Section 3.3 are implicit in the processing of SRP | |||
| Updates; thus, there is no need for the SRP requestor to put in any | Updates; thus, there is no need for the SRP requester to put in any | |||
| explicit prerequisites. | explicit prerequisites. | |||
| 3.2.3.1. How the DNS-SD Service Registration Process Differs from the | 3.2.3.1. How the DNS-SD Service Registration Process Differs from DNS | |||
| DNS Update Specified in RFC 2136 | Update | |||
| DNS-SD Service Registration is based on the standard DNS Update | DNS-SD Service Registration uses the DNS Update specification | |||
| specified in [RFC2136], with some differences: | [RFC2136] with some additions: | |||
| * It implements FCFS name allocation, protected using SIG(0) | * It implements FCFS Naming, protected using SIG(0) [RFC2931]. | |||
| ([RFC2931]). | ||||
| * It enforces policy about what updates are allowed. | * It enforces policy about what updates are allowed. | |||
| * It optionally performs rewriting of "default.service.arpa" to some | * It optionally performs rewriting of "default.service.arpa." to | |||
| other domain. | some other domain. | |||
| * It optionally performs automatic population of the address-to-name | * It optionally performs automatic population of the address-to-name | |||
| reverse mapping domains. | reverse mapping domains. | |||
| * An SRP registrar is not required to implement general DNS Update | * An SRP registrar is not required to implement general DNS Update | |||
| prerequisite processing. | prerequisite processing. | |||
| * Constrained-Node SRP requestors are allowed to send updates to the | * CNN SRP requesters are allowed to send updates to the generic | |||
| generic domain "default.service.arpa.". | domain "default.service.arpa.". | |||
| 3.2.3.2. Retransmission Strategy | 3.2.3.2. Retransmission Strategy | |||
| The DNS protocol, including DNS updates, can operate over UDP or TCP. | The DNS protocol, including DNS updates, can operate over UDP or TCP. | |||
| When using UDP, reliable transmission must be guaranteed by | For UDP updates from CNN devices, reliable transmission must be | |||
| retransmitting if a DNS UDP message is not acknowledged in a | guaranteed by retransmitting when a DNS UDP message is not | |||
| reasonable interval. Section 4.2.1 of [RFC1035] provides some | acknowledged in a reasonable interval. Section 4.2.1 of the DNS | |||
| guidance on this topic, as does Section 1 of [RFC1536]. | specification [RFC1035] provides some guidance on this topic, as does | |||
| Section 3.1.3 of [RFC8085] also provides useful guidance that is | Section 1 of the IETF document describing common DNS implementation | |||
| particularly relevant to DNS. | errors [RFC1536]. Section 3.1.3 of the UDP Usage Guidelines document | |||
| [RFC8085] also provides useful guidance that is particularly relevant | ||||
| to DNS. | ||||
| 3.2.3.3. Successive Updates | 3.2.3.3. Successive Updates | |||
| SRP does not require that every update contain the same information. | SRP does not require that every update contain the same information. | |||
| When an SRP requestor needs to send more than one SRP update to the | When an SRP requester needs to send more than one SRP Update to the | |||
| SRP registrar, it MUST send these sequentially: until an earlier | SRP registrar, it SHOULD combine these into a single SRP Update, when | |||
| update has been successfully acknowledged, the requestor MUST NOT | possible, subject to DNS message size limits and link-specific size | |||
| begin sending a subsequent update. | limits (e.g., an IEEE 802.15.4 network will perform poorly when asked | |||
| to deliver a packet larger than about 500 bytes). If the updates do | ||||
| not fit into a single SRP Update, then the SRP requester MUST send | ||||
| subsequent SRP Updates sequentially: Until an earlier SRP Update has | ||||
| been acknowledged, the requester MUST NOT send any subsequent SRP | ||||
| Updates. If a configuration change occurs while an outstanding SRP | ||||
| Update is in flight, the SRP registrar MUST defer sending a new SRP | ||||
| Update for that change until the previous SRP Update has completed. | ||||
| 3.2.4. How to Secure It | 3.2.4. How to Secure It | |||
| A DNS update, as described in [RFC2136], is secured using secret key | DNS Update messages can be secured using secret key transaction | |||
| transaction signatures ([RFC8945]) that uses a secret key shared | signatures (TSIG) [RFC8945]. This approach uses a secret key shared | |||
| between the DNS Update requestor (which issues the update) and the | between the DNS Update requester (which issues the update) and the | |||
| server (which authenticates it). This model does not work for | authoritative DNS server (which authenticates it). This model does | |||
| automatic service registration. | not work for automatic service registration. | |||
| The goal of securing the DNS-SD Registration Protocol is to provide | The goal of securing the DNS-SD Registration Protocol is to provide | |||
| the best possible security given the constraint that service | the best possible security given the constraint that service | |||
| registration has to be automatic. It is possible to layer more | registration has to be automatic. It is possible to layer more | |||
| operational security on top of what we describe here, but FCFS naming | operational security on top of what we describe here, but FCFS Naming | |||
| is already an improvement over the security of mDNS. | is already an improvement over the security of mDNS. | |||
| 3.2.4.1. FCFS Naming | 3.2.4.1. FCFS Naming | |||
| FCFS naming provides a limited degree of security. A server that | FCFS Naming provides a limited degree of security. A server that | |||
| registers its service using the DNS-SD Registration Protocol is given | registers its service using SRP is given ownership of a name for an | |||
| ownership of a name for an extended period of time based on a lease | extended period of time based on a lease specific to the key used to | |||
| specific to the key used to authenticate the DNS Update, which may be | authenticate the SRP Update, which may be longer than the lease | |||
| longer than the lease associated with the registered records. As | associated with the registered RRs. As long as the registrar | |||
| long as the registration service remembers the name and the key used | remembers the name and the public key corresponding to the private | |||
| to register that name, no other server can add or update the | key used to register RRs on that name, no other SRP requester can add | |||
| information associated with that. If the server fails to renew its | or update the information associated with that name. If the SRP | |||
| service registration before the KEY lease (see Section 4 of | requester fails to renew its service registration before the KEY | |||
| [RFC9664]) expires, its name is no longer protected. FCFS naming is | lease expires (Section 4 of the DNS Update Lease specification | |||
| used to protect both the Service Description and the Host | [RFC9664]) its name is no longer protected. FCFS Naming is used to | |||
| Description. | protect both the Service Description and the Host Description. | |||
| 3.2.5. SRP Requestor Behavior | 3.2.5. SRP Requester Behavior | |||
| 3.2.5.1. Public/Private Key Pair Generation and Storage | 3.2.5.1. Public/Private Key Pair Generation and Storage | |||
| The requestor generates a public/private key pair (see Section 6.6). | The requester generates a public/private key pair (Section 6.6). | |||
| This key pair MUST be stored in stable storage; if there is no | This key pair MUST be stored in stable storage; if there is no | |||
| writable stable storage on the SRP requestor, the SRP requestor MUST | writable stable storage on the SRP requester, the SRP requester MUST | |||
| be preconfigured with a public/private key pair in read-only storage | be preconfigured with a public/private key pair in read-only storage. | |||
| that can be used. This key pair MUST be unique to the device. A | This key pair MUST be unique to the device. A device with rewritable | |||
| device with rewritable storage SHOULD retain this key indefinitely. | storage SHOULD retain this key indefinitely. When the device changes | |||
| When the device changes ownership, it may be appropriate for the | ownership, it may be appropriate for the former owner to erase the | |||
| former owner to erase the old key pair, which would then require the | old key pair, which would then require the new owner to install a new | |||
| new owner to install a new one. Therefore, the SRP requestor on the | one. Therefore, the SRP requester on the device SHOULD provide a | |||
| device SHOULD provide a mechanism to erase the key (for example, as | mechanism to erase the key (for example, as the result of a "factory | |||
| the result of a "factory reset") and to generate a new key. | reset") and to generate a new key. | |||
| Note that when a new key is generated, this will prevent the device | ||||
| from registering with the name associated with the old key in the | ||||
| same domain where it had previously registered. So, implicit in the | ||||
| generation of a new key is the generation of a new name; this can be | ||||
| done either proactively when regenerating a key or only in the event | ||||
| that the SRP update produces a name conflict. | ||||
| The policy described here for managing keys assumes that the keys are | The policy described here for managing keys assumes that the keys are | |||
| only used for SRP. If a key that is used for SRP is also used for | only used for SRP. If a key that is used for SRP is also used for | |||
| other purposes, the policy described here is likely to be | other purposes, the policy described here is likely to be | |||
| insufficient. The policy stated here is NOT RECOMMENDED in such a | insufficient. The policy stated here is NOT RECOMMENDED in such a | |||
| situation: a policy appropriate to the full set of uses for the key | situation: a policy appropriate to the full set of uses for the key | |||
| must be chosen. Specifying such a policy is out of scope for this | must be chosen. Specifying such a policy is out of scope for this | |||
| document. | document. | |||
| When sending DNS updates, the requestor includes a KEY record | When sending DNS updates, the requester includes a KEY record | |||
| containing the public portion of the key in each Host Description | containing the public portion of the key in each Host Description | |||
| Instruction and each Service Description Instruction. Each KEY | Instruction and each Service Description Instruction. Each KEY | |||
| record MUST contain the same public key. The update is signed using | record MUST contain the same public key. The update is signed using | |||
| SIG(0), using the private key that corresponds to the public key in | SIG(0), using the private key that corresponds to the public key in | |||
| the KEY record. The lifetimes of the records in the update is set | the KEY record. The lifetimes of the records in the update are set | |||
| using the Extension Mechanisms for DNS (EDNS(0)) Update Lease option | using the EDNS(0) Update Lease option [RFC9664]. | |||
| (see [RFC9664]). | ||||
| The format of the KEY resource record in the SRP Update is defined in | 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 | the IETF specification for DNSSEC Resource Records [RFC4034]. | |||
| key, the flags field in the KEY RR MUST be all zeroes. | Because the KEY RR used in SIG(0) is not a zone-signing key, the | |||
| flags field in the KEY RR MUST be all zeroes. | ||||
| The KEY record in Service Description updates MAY be omitted for | The KEY record in Service Description updates MAY be omitted for | |||
| brevity; if it is omitted, the SRP registrar MUST behave as if the | 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 | same KEY record that is given for the Host Description is also given | |||
| for each Service Description for which no KEY record is provided. | for each Service Description for which no KEY record is provided. | |||
| Omitted KEY records are not used when computing the SIG(0) signature. | Omitted KEY records are not used when computing the SIG(0) signature. | |||
| 3.2.5.2. Name Conflict Handling | 3.2.5.2. Name Conflict Handling | |||
| Adds for both Host Description RRs and Service Description RRs can | "Add" operations for both Host Description RRs and Service | |||
| have names that result in name conflicts. Service Discovery record | Description RRs can have names that result in name conflicts. | |||
| adds cannot have name conflicts. If any Host Description or Service | Service Discovery record "Add" operations cannot have name conflicts. | |||
| Description record is found by the SRP registrar to have a conflict | If any Host Description or Service Description record is found by the | |||
| with an existing name, the registrar will respond to the SRP Update | SRP registrar to have a conflict with an existing name, the registrar | |||
| with a YXDomain RCODE (Section 2.2 of [RFC2136]). In this case, the | will respond to the SRP Update with a YXDomain RCODE [RFC2136], | |||
| requestor MUST choose a new name or give up. | indicating that the desired name is already owned by a different | |||
| SIG(0) key. In this case, the SRP requester MUST choose a new name | ||||
| or give up. | ||||
| There is no specific requirement for how this is done. Typically, | There is no specific requirement for how the SRP requester should | |||
| however, the requestor will append a number to the preferred name. | choose a new name. Typically, however, the requester will append a | |||
| This number could be sequentially increasing or could be chosen | number to the preferred name. This number could be sequentially | |||
| randomly. One existing implementation attempts several sequential | increasing or could be chosen randomly. One existing implementation | |||
| numbers before choosing randomly. For instance, it might try | attempts several sequential numbers before choosing randomly. For | |||
| host.default.service.arpa, then host-1.default.service.arpa, then | instance, it might try host.default.service.arpa., then | |||
| host-2.default.service.arpa, then host-31773.default.service.arpa. | host-1.default.service.arpa., then host-2.default.service.arpa., then | |||
| host-31773.default.service.arpa. | ||||
| 3.2.5.3. Record Lifetimes | 3.2.5.3. Record Lifetimes | |||
| The lifetime of the DNS-SD PTR, SRV, A, AAAA, and TXT records (see | The lifetime of the DNS-SD PTR, SRV, A, AAAA, and TXT records | |||
| [RFC6763]) uses the LEASE field of the Update Lease option and is | [RFC6763] uses the LEASE field of the Update Lease option and is | |||
| typically set to two hours. Thus, if a device is disconnected from | typically set to two hours. Thus, if a device is disconnected from | |||
| the network, it does not appear in the user interfaces of devices | the network, it does not continue to appear for too long in the user | |||
| looking for services of that type for too long. | interfaces of devices looking for instances of that service type. | |||
| 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 much longer time, | the Update Lease Option and SHOULD be set to a much longer time, | |||
| typically 14 days. The result being that even though a device may be | typically 14 days. The result being that even though a device may be | |||
| temporarily unplugged -- disappearing from the network for a few days | temporarily disconnected or powered off -- disappearing from the | |||
| -- it makes a claim on its name that lasts much longer. | network for a few days -- it makes a claim on its name that lasts | |||
| much longer. | ||||
| Therefore, even if a device is unplugged from the network for a few | Therefore, even if a device is disconnected from the network for a | |||
| days, and its services are not available for that time, no other | few days, and its services are not available for that time, no other | |||
| device can come along and claim its name the moment it disappears | device can come along and claim its name the moment it disappears | |||
| from the network. In the event that a device is unplugged from the | from the network. In the event that a device is disconnected from | |||
| network and permanently discarded, then its name is eventually | the network and permanently discarded, then its name is eventually | |||
| cleaned up and made available for reuse. | cleaned up and made available for reuse. | |||
| 3.2.5.4. Compression in SRV Records | 3.2.5.4. Compression in SRV Records | |||
| Although [RFC2782] requires that the target name in the SRV record | Although the original SRV specification [RFC2782] requires that the | |||
| not be compressed, an SRP requestor MAY compress the target in the | target hostname in the RDATA of an SRV record not be compressed in | |||
| SRV record. The motivation for _not_ compressing in [RFC2782] is not | DNS queries and responses, an SRP requester MAY compress the target | |||
| stated but is assumed to be because a caching resolver that does not | in the SRV record, since an SRP Update is neither a DNS query nor a | |||
| understand the format of the SRV record might store it as binary data | DNS response. The motivation for _not_ compressing is not stated in | |||
| and thus return an invalid pointer in response to a query. This does | the SRV specification but is assumed to be because a recursive | |||
| resolver (caching server) that does not understand the format of the | ||||
| SRV record might store it as binary data without decoding a | ||||
| compression pointer embedded with the target hostname field and thus | ||||
| return nonsensical RDATA in response to a query. This concern does | ||||
| not apply in the case of SRP. An SRP registrar needs to understand | not apply in the case of SRP. An SRP registrar needs to understand | |||
| SRV records in order to validate the SRP Update. Compression of the | SRV records in order to validate the SRP Update. Compression of the | |||
| target can save space in the SRP Update, so we want clients to be | target can save space in the SRP Update, so we want SRP requesters to | |||
| able to assume that the registrar will handle this. Therefore, SRP | be able to assume that the registrar will handle this. Therefore, | |||
| registrars MUST support compression of SRV RR targets. | SRP registrars MUST support compression of SRV RR targets. | |||
| Note that this does not update [RFC2782]: DNS servers still MUST NOT | Note that this document does not update the SRV specification | |||
| compress SRV record targets. The requirement to accept compressed | [RFC2782]: Authoritative DNS servers still MUST NOT compress SRV | |||
| SRV records in updates only applies to SRP registrars, and SRP | record targets. The requirement to accept compressed SRV records in | |||
| registrars that are also DNS servers still MUST NOT compress SRV | updates only applies to SRP registrars. SRP registrars that are also | |||
| record targets in DNS responses. We note also that [RFC6762] | authoritative DNS servers still MUST NOT compress SRV record targets | |||
| recommends that SRV records be compressed in mDNS messages, so | in DNS responses. We note also that Multicast DNS [RFC6762] | |||
| [RFC2782] does not apply to mDNS messages. | similarly compresses SRV records in mDNS messages. | |||
| In addition, we note that an implementor of an SRP requestor might | In addition, we note that an implementer of an SRP requester might | |||
| update existing code that creates SRV records or compresses DNS | update existing code that creates SRV records or compresses DNS | |||
| messages so that it compresses the target of an SRV record. Care | messages so that it compresses the target of an SRV record. Care | |||
| must be taken if such code is used both in requestors and in DNS | must be taken if such code is used both in requesters and in | |||
| servers that the code only compresses in the case where a requestor | authoritative DNS servers that the code only compresses SRV targets | |||
| is generating an SRP update. | in the case where a requester is generating an SRP Update. | |||
| 3.2.5.5. Removing Published Services | 3.2.5.5. Removing Published Services | |||
| 3.2.5.5.1. Removing All Published Services | 3.2.5.5.1. Removing All Published Services | |||
| To remove all the services registered to a particular host, the SRP | To remove all the services registered to a particular hostname, the | |||
| requestor transmits an SRP update for that host with an Update Lease | SRP requester transmits an SRP Update for that hostname with an | |||
| option that has a LEASE value of zero. If the registration is to be | Update Lease option that has a LEASE value of zero. The SRP Update | |||
| permanently removed, KEY-LEASE SHOULD also be zero. Otherwise, it | MUST contain exactly one Host Description Instruction that contains | |||
| SHOULD be set to the same value it had previously; this holds the | exactly one "Delete All RRsets From A Name" instruction for the | |||
| name in reserve for when the SRP requestor is once again able to | hostname and no "Add to an RRSet" instructions for that hostname. If | |||
| provide the service. | the 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 in reserve for when the SRP requester | ||||
| is once again able to provide the service. | ||||
| SRP requestors are normally expected to remove all service instances | This method of removing services is intended for the case where the | |||
| when removing a host. However, in some cases, an SRP requestor may | requester is going offline and does not want any of its services to | |||
| not have retained sufficient state to know that some service instance | continue being advertised. | |||
| is pointing to a host that it is removing. This method of removing | ||||
| services is intended for the case where the requestor is going | ||||
| offline and does not want its services advertised. Therefore, it is | ||||
| sufficient for the requestor to send the Host Description Instruction | ||||
| (see Section 3.3.1.3). | ||||
| To support this, when removing services based on the lease time being | To support this, when removing a hostname, an SRP registrar MUST | |||
| zero, an SRP registrar MUST remove all service instances pointing to | remove all service instances pointing to that hostname and all | |||
| a host when a host is removed, even if the SRP requestor doesn't list | Service Discovery PTR records pointing to those service instances, | |||
| them explicitly. If the KEY lease time is nonzero, the SRP registrar | even if the SRP requester doesn't list them explicitly. If the KEY | |||
| MUST NOT delete the KEY records for these SRP requestors. | lease time is nonzero, the SRP registrar MUST NOT delete the KEY | |||
| records for these service instances. | ||||
| 3.2.5.5.2. Removing Some Published Services | 3.2.5.5.2. Removing Some Published Services | |||
| In some use cases, a requestor may need to remove a specific service | In some use cases, a requester may need to remove a specific service | |||
| without removing its other services. This can be accomplished in one | instance without removing its other services. For example, a device | |||
| of two ways: | may shut down its remote screen access (_rfb._tcp) service while | |||
| retaining its command-line login (_ssh._tcp) service. This can be | ||||
| accomplished in one of two ways: | ||||
| 1. To simply remove a specific service, the requestor sends a valid | 1. To simply remove a specific service instance, the requester sends | |||
| SRP Update where the Service Discovery Instruction (see | a valid SRP Update with a Service Description Instruction | |||
| Section 3.3.1.1) contains a single "Delete An RR From An RRset" | (Section 3.3.1.2) containing a single "Delete All RRsets From A | |||
| update (Section 2.5.4 of [RFC2136]) that deletes the PTR record | Name" update to the service instance name. The SRP Update SHOULD | |||
| whose target is the service instance name. In this case, the | include Service Discovery Instructions (Section 3.3.1.1) | |||
| Service Description Instruction (see Section 3.3.1.2) contains a | consisting of "Delete An RR From An RRset" updates [RFC2136] that | |||
| single "Delete All RRsets From A Name" update (Section 2.5.3 of | delete any Service Discovery PTR records whose target is the | |||
| [RFC2136]) to the service instance name. | service instance name. However, even in the absence of such | |||
| Service Discovery Instructions, the SRP registrar MUST delete any | ||||
| Service Discovery PTR records that point to the deleted service | ||||
| instance name. | ||||
| 2. This alternative is used when some service is being replaced by a | 2. When deleting one service instance while simultaneously creating | |||
| different service with a different service instance name. In | a new service instance with a different service instance name, an | |||
| this case, the old service is deleted as in the first | alternative is to perform both operations using a single SRP | |||
| Update. In this case, the old service is deleted as in the first | ||||
| alternative. The new service is added, just as it would be in an | alternative. The new service is added, just as it would be in an | |||
| update that wasn't deleting the old service. Because both the | update that wasn't deleting the old service. Because both the | |||
| removal of the old service and the add of the new service consist | removal of the old service and the add of the new service consist | |||
| of a valid Service Discovery Instruction and a valid Service | of a valid Service Discovery Instruction and a valid Service | |||
| Description Instruction, the update as a whole is a valid SRP | Description Instruction, the update as a whole is a valid SRP | |||
| Update and will result in the old service being removed and the | Update and will result in the old service being removed and the | |||
| new one added; or, to put it differently, the update will result | new one added; or, to put it differently, the SRP Update will | |||
| in the old service being replaced by the new service. | result in the old service being replaced by the new service. | |||
| It is perhaps worth noting that, if a service is being updated | It is perhaps worth noting that if a service is being updated without | |||
| without the service instance name changing, that situation will look | the service instance name changing (for example, when only the target | |||
| very much like the second alternative above. The difference is that | port in the SRV record is being updated), then that SRP Update will | |||
| because the target for the PTR record in the Service Discovery | look very much like the second alternative above. The PTR record in | |||
| Instruction is the same for both the "Delete An RR From An RRset" | the Service Discovery Instruction will be the same for both the | |||
| update and the "Add To An RRset" update (Section 2.5.1 of [RFC2136]), | "Delete An RR From An RRset" update and the "Add To An RRset" update | |||
| there is no way to tell whether they were intended to be one or two | [RFC2136]. Since the removal of the old service and the addition of | |||
| Instructions. The same would be true of the Service Description | the new service are both valid SRP Update operations, the combined | |||
| Instruction. | operation is a valid SRP Update operation. The SRP registrar does | |||
| not need to include code to recognize this special case and does not | ||||
| need to take any special actions to handle it correctly. | ||||
| Whichever of these two alternatives is used, the host lease will be | Whichever of these two alternatives is used, the hostname lease will | |||
| updated with the lease time provided in the SRP update. In neither | be updated with the lease time provided in the SRP update. In | |||
| of these cases is it permissible to delete the host. All services | neither of these cases is it permissible to delete the hostname. All | |||
| must point to a host. If a host is to be deleted, this must be done | services must point to a hostname. If a hostname is to be deleted, | |||
| using the method described in Section 3.2.5.5.1, which deletes the | this must be done using the method described in Section 3.2.5.5.1, | |||
| host and all services that have that host as their target. | which deletes the hostname and all services that have that hostname | |||
| as their target. | ||||
| 3.3. Validation and Processing of SRP Updates | 3.3. Validation and Processing of SRP Updates | |||
| 3.3.1. Validation of DNS Update Add and Delete RRs | 3.3.1. Validation of DNS Update Add and Delete RRs | |||
| The SRP registrar first validates that the DNS Update is a | The SRP registrar first validates that the DNS Update message is a | |||
| syntactically and semantically valid DNS Update according to the | syntactically and semantically valid DNS Update message according to | |||
| rules specified in [RFC2136]. | the usual DNS Update rules [RFC2136]. | |||
| SRP Updates consist of a set of _instructions_ that together add or | SRP Updates consist of a set of _instructions_ that together add or | |||
| remove one or more services. Each instruction consists of some | remove one or more services. Each _instruction_ consists of one or | |||
| combination of delete updates and add updates. When an instruction | more delete update(s), or one or more add update(s), or some | |||
| contains a delete and an add, the delete MUST precede the add. | combination of both delete updates and add updates. | |||
| The SRP registrar checks each instruction in the SRP Update to see | The SRP registrar checks each instruction in the SRP Update to see | |||
| that it is either a Service Discovery Instruction, a Service | that it is either a Service Discovery Instruction, a Service | |||
| Description Instruction, or a Host Description Instruction. Order | Description Instruction, or a Host Description Instruction. Order | |||
| matters in DNS updates. Specifically, deletes must precede adds for | matters in DNS updates. Specifically, deletes must precede adds for | |||
| records that the deletes would affect; otherwise, the add will have | records that the deletes would affect; otherwise, the add will have | |||
| no effect. This is the only ordering constraint: aside from this | no effect. This is the only ordering constraint: Aside from this | |||
| constraint, updates may appear in whatever order is convenient when | constraint, updates may appear in whatever order is convenient when | |||
| constructing the update. | constructing the update. | |||
| Because the SRP Update is a DNS update, it MUST contain a single | Because the SRP Update is a DNS update, it MUST contain a single | |||
| question that indicates the zone to be updated. Every delete and | entry in the Zone Section (what would be the Question Section in a | |||
| update in an SRP Update MUST be within the zone that is specified for | DNS query or response) that indicates the zone to be updated. Every | |||
| the SRP Update. | delete and update in an SRP Update MUST be within the zone that is | |||
| specified for the SRP Update. | ||||
| 3.3.1.1. Service Discovery Instruction | 3.3.1.1. Service Discovery Instruction | |||
| An instruction is a Service Discovery Instruction if it: | An instruction is a Service Discovery Instruction if it: | |||
| * Contains exactly one "Add To An RRset" RR update (Section 2.5.1 of | * consists of exactly one "Add To An RRSet" or exactly one "Delete | |||
| [RFC2136]) or exactly one "Delete An RR From An RRset" RR update | An RR From An RRSet" RR update (Section 2.5 of the DNS Update | |||
| (Section 2.5.4 of [RFC2136]), which updates a PTR RR; the target | specification [RFC2136]), | |||
| of which is a Service Instance Name for which name a Service | * which updates a PTR RR, | |||
| Description Instruction is present in the SRP Update. | * the target of which is a service instance name | |||
| Additionally: | * 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 | - if the Service Discovery Instruction is an "Add To An RRSet" | |||
| Service Description Instruction contains an "Add To An RRset" | instruction, that Service Description Instruction contains a | |||
| RR update for the SRV RR describing that service and no other | "Delete All RRsets From A Name" instruction for that service | |||
| "Delete From An RRset" instructions for that Service Instance | instance name followed by "Add To An RRset" instructions for | |||
| Name. | the SRV and TXT records describing that service; or | |||
| - If the RR Update is a "Delete An RR From An RRset" instruction, | - if the Service Discovery Instruction is a "Delete An RR From An | |||
| that Service Description Instruction contains a "Delete From An | RRSet" instruction, that Service Description Instruction | |||
| RRset" RR update and no other "Add To An RRset" instructions | contains a "Delete All RRsets From A Name" instruction for that | |||
| for that Service Instance Name. | service instance name with no following "Add To An RRset" | |||
| instructions for the SRV and TXT records describing that | ||||
| * Contains no other add or delete RR updates for the same name as | service. An "Add to an RRset" instruction for the KEY record | |||
| the PTR RR Update. | here is allowed but not implicit. | |||
| Note that there can be more than one Service Discovery Instruction | Note that there can be more than one Service Discovery Instruction | |||
| for the same name if the SRP requestor is advertising more than one | for the same service name (the owner name of the Service Discovery | |||
| service of the same type or is changing the target of a PTR RR. This | PTR record) if the SRP requester is advertising more than one | |||
| is also true for SRP subtypes (Section 7.1 of [RFC6763]). For each | instance of the same service type or is changing the target of a PTR | |||
| such PTR RR add or delete, the above constraints must be met. | RR. When subtypes are being used (Section 7.1 of the DNS-SD | |||
| specification [RFC6763]), each subtype is a separate Service | ||||
| Discovery Instruction. For each such PTR RR add or delete, the above | ||||
| constraints must be met. | ||||
| 3.3.1.2. Service Description Instruction | 3.3.1.2. Service Description Instruction | |||
| An instruction is a Service Description Instruction if, for the | An instruction is a Service Description Instruction if, for the given | |||
| appropriate Service Instance Name, the following are true: | service instance name, all of the following are true: | |||
| * It contains exactly one "Delete All RRsets From A Name" update for | * It contains exactly one "Delete All RRsets From A Name" update for | |||
| the service instance name (see Section 2.5.3 of [RFC2136]). | the service instance name (Section 2.5.3 of the DNS Update | |||
| specification [RFC2136]). | ||||
| * It contains zero or one "Add To An RRset" KEY RRs that, if | ||||
| present, contains the public key corresponding to the private key | ||||
| that was used to sign the message (if present, the KEY RR MUST | ||||
| match the KEY RR given in the Host Description). | ||||
| * It contains zero or one "Add To An RRset" SRV RR. | * It contains zero or one "Add To An RRset" SRV RR. | |||
| * If an "Add To An RRSet" update for an SRV RR is present, there | ||||
| * It contains zero or one "Add To An RRset" KEY RR that, if present, | MUST be at least one "Add To An RRset" update for the | |||
| contains the public key corresponding to the private key that was | corresponding TXT RR, and the target of the SRV RR MUST be the | |||
| used to sign the message (if present, the KEY MUST match the KEY | hostname given in the Host Description Instruction in the SRP | |||
| RR given in the Host Description). | Update, or | |||
| * If there is no "Add To An RRset" update for an SRV RR, then there | ||||
| * It contains zero or more "Add To An RRset" TXT RRs. | MUST be no "Add To An RRset" updates for the corresponding TXT RR, | |||
| and either: | ||||
| * If there is one "Add To An RRset" SRV update, there MUST be at | ||||
| least one "Add To An RRset" TXT update. | ||||
| * The target of the SRV RR Add, if present, points to a 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: | ||||
| - the name to which the "Delete All RRsets From A Name" applies | - the name to which the "Delete All RRsets From A Name" applies | |||
| does not exist, or | does not exist, or | |||
| - there is an existing KEY RR on that name that matches the key | - there is an existing KEY RR on that name that matches the key | |||
| with which the SRP Update was signed. | with which the SRP Update was signed. | |||
| * No other resource records on the Service Instance Name are | Service Description Instructions do not add any other resource | |||
| modified. | records. | |||
| An SRP registrar MUST correctly handle compressed names in the SRV | An SRP registrar MUST correctly handle compressed names in the SRV | |||
| target. | target. | |||
| 3.3.1.3. Host Description Instruction | 3.3.1.3. Host Description Instruction | |||
| Every SRP Update always contains exactly one Host Description | ||||
| Instruction. | ||||
| An instruction is a Host Description Instruction if, for the | An instruction is a Host Description Instruction if, for the | |||
| appropriate hostname, it contains the following: | appropriate hostname, it contains the following: | |||
| * exactly one "Delete All RRsets From A Name" RR, | * exactly one "Delete All RRsets From A Name" RR | |||
| * one or more "Add To An RRset" RRs of type A and/or AAAA, and | ||||
| * exactly one "Add To An RRset" RR that adds a KEY RR that contains | * exactly one "Add To An RRset" RR that adds a KEY RR that contains | |||
| the public key corresponding to the private key that was used to | the public key corresponding to the private key that was used to | |||
| sign the message | sign the message | |||
| Host Description Instructions do not modify any other resource | * zero "Add To An RRset" operations (in the case of deleting a | |||
| records. | registration) or one or more "Add To An RRset" RRs of type A and/ | |||
| or AAAA (in the case of creating or updating a registration) | ||||
| Host Description Instructions do not add any other resource records. | ||||
| A and/or AAAA records that are not of sufficient scope to be validly | A and/or AAAA records that are not of sufficient scope to be validly | |||
| published in a DNS zone MAY be ignored by the SRP registrar, which | published in a DNS zone MAY be ignored by the SRP registrar, which | |||
| could result in a host description effectively containing zero | could result in a Host Description effectively containing zero | |||
| reachable addresses even when it contains one or more addresses. | reachable addresses even when it contains one or more addresses. | |||
| For example, if a link-scope address or IPv4 autoconfiguration | For example, if an IPv4 link-local address [RFC3927] or an IPv6 link- | |||
| address is provided by the SRP requestor, the SRP registrar could not | local address [RFC4862] is provided by the SRP requester, the SRP | |||
| publish this in a DNS zone. However, in some situations, the | registrar could elect not to publish this in a DNS zone. However, in | |||
| registrar might make the records available through a mechanism such | some situations, the registrar might make the records available | |||
| as an advertising proxy only on the specific link from which the SRP | through a mechanism such as an advertising proxy only on the specific | |||
| update originated. In such a situation, locally scoped records are | link from which the SRP Update originated. In such a situation, | |||
| still valid. | locally scoped records are still valid. | |||
| 3.3.2. Valid SRP Update Requirements | 3.3.2. Valid SRP Update Requirements | |||
| An SRP Update MUST contain exactly one Host Description Instruction. | An SRP Update MUST contain exactly one Host Description Instruction. | |||
| In addition, there MUST NOT be any Service Description Instruction to | Multiple Service Discovery updates and Service Description updates | |||
| which no Service Discovery Instruction points. A DNS Update that | may be combined into a single single SRP Update along with a single | |||
| contains any additional adds or deletes that cannot be identified as | Host Description update, as described in Section 3.2.3. A DNS Update | |||
| Service Discovery, Service Description, or Host Description | message that contains any additional adds or deletes that cannot be | |||
| Instructions is not an SRP Update. A DNS update that contains any | identified as Service Discovery, Service Description, or Host | |||
| prerequisites is not an SRP Update. | Description Instructions is not an SRP Update. A DNS update that | |||
| contains any prerequisites is not an SRP Update. | ||||
| An SRP Update MUST include an EDNS(0) Update Lease option (see | An SRP Update MUST include an EDNS(0) Update Lease option [RFC9664]. | |||
| [RFC9664]). The LEASE time specified in the Update Lease option MUST | The LEASE time specified in the Update Lease option MUST be less than | |||
| be less than or equal to the KEY-LEASE time. A DNS update that does | or equal to the KEY-LEASE time. A DNS update that does not include | |||
| not include the Update Lease option, or that includes a KEY-LEASE | the Update Lease option, or that includes a KEY-LEASE value that is | |||
| value that is less than the LEASE value, is not an SRP update. | less than the LEASE value, is not an SRP Update. | |||
| When an SRP registrar receives a DNS Update that is not an SRP | When an SRP registrar receives a DNS Update message that is not an | |||
| update, it MAY process the update as regular updates described in | SRP update, it MAY process the update as normal DNS Update [RFC2136], | |||
| [RFC2136], including access control checks and constraint checks, if | including access control checks and constraint checks, if supported. | |||
| supported. Otherwise, the SRP registrar MUST reject the DNS Update | Otherwise, the SRP registrar MUST reject the DNS Update with the | |||
| with the Refused RCODE. | Refused RCODE. | |||
| If the definitions of each of these instructions are followed | If the definitions of each of these instructions are followed | |||
| carefully and the update requirements are validated correctly, many | carefully and the update requirements are validated correctly, many | |||
| DNS Updates that look very much like SRP Updates nevertheless will | DNS Update messages that look very much like SRP Updates nevertheless | |||
| fail to validate. For example, a DNS update that contains an "Add To | will fail to validate. For example, a DNS update that contains an | |||
| An RRset" instruction for a Service Name and an Add to an RRset | "Add To An RRset" instruction for a Service Name and an "Add to an | |||
| instruction for a Service Instance Name, where the PTR record added | RRset" instruction for a service instance name where the PTR record | |||
| to the Service Name does not reference the Service Instance Name, is | added to the Service Name does not reference the service instance | |||
| not a valid SRP Update message but may be a valid update as described | name is not a valid SRP Update but may be a valid DNS Update. | |||
| in [RFC2136]. | ||||
| 3.3.3. FCFS Name and Signature Validation | 3.3.3. FCFS Name and Signature Validation | |||
| Assuming that a DNS Update message has been validated with these | Assuming that the SRP registrar has confirmed that a DNS Update | |||
| conditions and is a valid SRP Update, the SRP registrar checks that | message is a valid SRP Update (Section 3.3.2), it then checks that | |||
| the name in the Host Description Instruction exists. If so, then the | the name in the Host Description Instruction exists in the zone being | |||
| registrar checks to see if the KEY record on that name is the same as | updated. If so, then the registrar checks to see if the KEY record | |||
| the KEY record in the Host Description Instruction. The registrar | on that name is the same as the KEY record in the Host Description | |||
| performs the same check for the KEY records in any Service | Instruction. The registrar performs the same check for the KEY | |||
| Description Instructions. For KEY records that were omitted from | records in any Service Description Instructions. For KEY records | |||
| Service Description Instructions, the KEY from the Host Description | that were omitted from Service Description Instructions, the KEY from | |||
| Instruction is used. If any existing KEY record corresponding to a | the Host Description Instruction is used. If any existing KEY record | |||
| KEY record in the SRP Update does not match the KEY record in the SRP | corresponding to a KEY record in the SRP Update does not match the | |||
| Update (whether provided or taken from the Host Description | KEY record in the SRP Update (whether provided or taken from the Host | |||
| Instruction), then the SRP registrar MUST reject the SRP Update with | Description Instruction), then the SRP registrar MUST reject the SRP | |||
| the YXDomain RCODE. | Update with a YXDomain RCODE indicating that the desired name is | |||
| already owned by a different SIG(0) key. This informs the SRP | ||||
| requester that it should select a different name and try again. | ||||
| Otherwise, the SRP registrar validates the SRP Update using SIG(0) | If the SRP Update is not in conflict with existing data in the zone | |||
| against the public key in the KEY record of the Host Description | being updated, the SRP registrar validates the SRP Update using | |||
| Instruction. If the validation fails, the registrar MUST reject the | SIG(0) against the public key in the KEY record of the Host | |||
| SRP Update with the Refused RCODE. Otherwise, the SRP Update is | Description Instruction. If the validation fails, the SRP Update is | |||
| considered valid and authentic and is processed according to the | malformed, and the registrar MUST reject the SRP Update with the | |||
| method described in [RFC2136]. | Refused RCODE. Otherwise, the SRP Update is considered valid and | |||
| authentic and is processed as for a normal DNS Update [RFC2136]. | ||||
| KEY record updates omitted from Service Description Instruction are | KEY record updates omitted from Service Description Instruction(s) | |||
| processed as if they had been explicitly present. After the SRP | are processed as if they had been explicitly present. After the SRP | |||
| Update has been applied, every Service Description that is updated | Update has been applied, every Service Description that is updated | |||
| MUST have a KEY RR: and it must be the same KEY RR that is present in | MUST have a KEY RR, which MUST have the same value as the KEY RR that | |||
| the Host Description to which the Service Description refers. | is present in the Host Description to which the Service Description | |||
| refers. | ||||
| [RFC3445] states that the flags field in the KEY RR MUST be zero | The IETF specification for DNSSEC Resource Records [RFC4034] states | |||
| except for bit 7, which can be one in the case of a zone key. | that the flags field in the KEY RR MUST be zero except for bit 7, | |||
| However, the SRP registrar MUST NOT validate the flags field. | which can be one in the case of a zone key. SRP requesters | |||
| implementing this version of the SRP specification MUST set the flags | ||||
| field in the KEY RR to all zeroes. SRP registrars implementing this | ||||
| version of the SRP specification MUST accept and store the flags | ||||
| field in the KEY RR as received, without checking or modifying its | ||||
| value. | ||||
| 3.3.4. Handling of Service Subtypes | 3.3.4. Handling of Service Subtypes | |||
| SRP registrars MUST treat the update instructions for a service type | SRP registrars MUST treat the update instructions for a service type | |||
| and all its subtypes as atomic. That is, when a service and its | and all its subtypes as atomic. That is, when a service and its | |||
| subtypes are being updated, whatever information appears in the SRP | subtypes are being updated, whatever information appears in the SRP | |||
| Update is the entirety of information about that service and its | Update is the entirety of information about that service and its | |||
| subtypes. If any subtype appeared in a previous update but does not | subtypes. If any subtype appeared in a previous update but does not | |||
| appear in the current update, then the SRP registrar MUST remove that | appear in the current update, then the SRP registrar MUST remove that | |||
| subtype. | subtype. | |||
| Similarly, there is no mechanism for deleting subtypes. A delete of | There is intentionally no mechanism for deleting a single subtype | |||
| a service deletes all of its subtypes. To delete an individual | individually. A delete of a service deletes all of its subtypes. To | |||
| subtype, an SRP Update must be constructed that contains the service | delete a single subtype individually, an SRP Update must be | |||
| type and all subtypes for that service except for the one to be | constructed that contains the service type and all subtypes for that | |||
| deleted. | service except for the subtype(s) to be deleted. | |||
| 3.3.5. SRP Update Response | 3.3.5. SRP Update Response | |||
| The status that is returned depends on the result of processing the | The status that is returned depends on the result of processing the | |||
| update and can be either NoError, ServFail, Refused, or YXDomain. | update and can be either NoError, ServFail, Refused, or YXDomain. | |||
| All other possible outcomes will already have been accounted for when | All other possible outcomes will already have been accounted for when | |||
| applying the constraints that qualify the update as an SRP Update. | applying the constraints that qualify the update as an SRP Update. | |||
| The meanings of these responses are explained in Section 2.2 of | The meanings of these responses are explained in Section 2.2 of the | |||
| [RFC2136]. | DNS Update specification [RFC2136]. | |||
| In the case of a response other than NoError, Section 3.8 of | In the case of a response other than NoError, Section 3.8 of the DNS | |||
| [RFC2136] specifies that the server is permitted to respond either | Update specification [RFC2136] states that the authoritative DNS | |||
| with no RRs or to copy the RRs sent by the client into the response. | server is permitted to respond either with no RRs or to copy the RRs | |||
| The SRP requestor MUST NOT attempt to validate any RRs that are | sent by the DNS Update client into the response. The SRP requester | |||
| included in the response. It is possible that a future SRP extension | MUST NOT attempt to validate any RRs that are included in the | |||
| may include per-RR indications as to why the update failed, but at | response. It is possible that a future SRP extension may include | |||
| the time of writing this is not specified. So, if a client were to | per-RR indications as to why the update failed, but at the time of | |||
| writing this is not specified. So, if an SRP requester were to | ||||
| attempt to validate the RRs in the response, it might reject such a | attempt to validate the RRs in the response, it might reject such a | |||
| response since it would contain RRs but probably not a set of RRs | response, since it would contain RRs but probably not a set of RRs | |||
| identical to what was sent in the SRP Update. | identical to what was sent in the SRP Update. | |||
| 3.3.6. Optional Behavior | 3.3.6. Optional Behavior | |||
| The SRP registrar MAY add a Reverse Mapping (see Section 3.5 of | The SRP registrar MAY add a Reverse Mapping PTR record (described for | |||
| [RFC1035] and Section 2.5 of [RFC3596]) that corresponds to the Host | IPv4 in Section 3.5 of the DNS specification [RFC1035] and for IPv6 | |||
| Description. This is not required because the reverse mapping serves | in Section 2.5 of the later document updating DNS for IPv6 [RFC3596]) | |||
| no protocol function, but it may be useful for debugging, e.g., in | that corresponds to the Host Description. This is optional: The | |||
| annotating network packet traces or logs. In order for the registrar | reverse mapping PTR record serves no essential protocol function. | |||
| One reason to provide reverse mappings is that they can be used to | ||||
| annotate logs and network packet traces. In order for the registrar | ||||
| to do a reverse mapping update, it must be authoritative for the zone | to do a reverse mapping update, it must be authoritative for the zone | |||
| that would need to be updated or have credentials to do the update. | that would need to be updated or have credentials to do the update. | |||
| The SRP requestor MAY also do a reverse mapping update if it has | The SRP requester MAY also do a reverse mapping update if it has | |||
| credentials to do so. | credentials to do so. | |||
| The SRP registrar MAY apply additional criteria when accepting | The SRP registrar MAY apply additional criteria when accepting | |||
| updates. In some networks, it may be possible to do out-of-band | updates. In some networks, it may be possible to do out-of-band | |||
| registration of keys and only accept updates from preregistered keys. | registration of keys and only accept updates from preregistered keys. | |||
| In this case, an update for a key that has not been registered SHOULD | In this case, an update for a key that has not been registered SHOULD | |||
| be rejected with the Refused RCODE. | be rejected with the Refused RCODE. When use of managed keys is | |||
| desired, there are at least two benefits to doing this in conjunction | ||||
| There are at least two benefits to doing this rather than simply | with SRP rather than simply performing traditional DNS Updates using | |||
| using normal SIG(0) DNS updates: | SIG(0) keys: | |||
| 1. The same registration protocol can be used in both cases, so both | 1. The same over-the-air registration protocol is used in both | |||
| use cases can be addressed by the same SRP requestor | cases, so both use cases can be addressed by the same SRP | |||
| implementation. | requester implementation. | |||
| 2. The registration protocol includes maintenance functionality not | 2. The Service Registration Protocol includes maintenance | |||
| present with normal DNS updates. | functionality not present with normal DNS updates. | |||
| Note that the semantics of using SRP in this way are different than | Note that the semantics of using SRP in this way are different from | |||
| for typical implementations described in [RFC2136]. The KEY used to | the semantics of typical implementations of DNS Update. The KEY used | |||
| sign the SRP Update only allows the SRP requestor to update records | to sign the SRP Update only allows the SRP requester to update | |||
| that refer to its Host Description. Implementations specific to | records that refer to its Host Description. Implementations of | |||
| [RFC2136] do not normally provide a way to enforce a constraint of | traditional DNS Update [RFC2136] do not normally provide a way to | |||
| this type. | enforce a constraint of this type. | |||
| The SRP registrar could also have a dictionary of names or name | The SRP registrar could also have a dictionary of names or name | |||
| patterns that are not permitted. If such a list is used, updates for | patterns that are not permitted. If such a list is used, updates for | |||
| Service Instance Names that match entries in the dictionary are | service instance names that match entries in the dictionary are | |||
| rejected with a Refused RCODE. | rejected with a Refused RCODE. | |||
| 4. TTL Consistency | 4. TTL Consistency | |||
| All RRs within an RRset are required to have the same TTL (see | All RRs within an RRset are required to have the same TTL (required | |||
| Section 5.2 of [RFC2181]). In order to avoid inconsistencies, SRP | by Section 5.2 of the DNS Clarifications document [RFC2181]). In | |||
| places restrictions on TTLs sent by requestors and requires that SRP | order to avoid inconsistencies, SRP places restrictions on TTLs sent | |||
| registrars enforce consistency. | by requesters and requires that SRP registrars enforce consistency. | |||
| Requestors sending SRP Updates MUST use consistent TTLs in all RRs | Requesters sending SRP Updates MUST use consistent TTLs in all RRs | |||
| within the SRP Update. | within each RRset contained within an SRP Update. | |||
| SRP registrars MUST check that the TTLs for all RRs within the SRP | SRP registrars MUST check that the TTLs for all RRs within each RRset | |||
| Update are the same. If they are not, the SRP update MUST be | contained within an SRP Update are the same. If they are not, the | |||
| rejected with a Refused RCODE. | SRP update MUST be rejected with a Refused RCODE. | |||
| Additionally, when adding RRs to an RRset (for example, when | Additionally, when adding RRs to an RRset (for example, when | |||
| processing Service Discovery records), the SRP registrar MUST use the | processing Service Discovery records), the SRP registrar MUST use the | |||
| same TTL on all RRs in the RRset. How this consistency is enforced | same TTL on all RRs in the RRset. How this consistency is enforced | |||
| is up to the implementation. | is up to the implementation. | |||
| TTLs sent in SRP Updates are advisory: they indicate the SRP | 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 | requester's guess as to what a good TTL would be. SRP registrars may | |||
| override these TTLs. SRP registrars SHOULD ensure that TTLs are | override these TTLs. SRP registrars SHOULD ensure that TTLs are | |||
| reasonable: neither too long nor too short. The TTL SHOULD NOT ever | reasonable: neither too long nor too short. The TTL SHOULD NOT ever | |||
| be longer than the lease time (Section 5.1). Shorter TTLs will | be longer than the lease time (Section 5.1). Shorter TTLs will | |||
| result in more frequent data refreshes; this increases latency on the | result in more frequent data refreshes; this increases latency on the | |||
| DNS-SD client side, increases load on any caching resolvers and on | DNS-SD client side, increases load on any caching resolvers and on | |||
| the authoritative server, and also increases network load, which may | the authoritative DNS server, and also increases network load, which | |||
| be an issue for constrained networks. Longer TTLs will increase the | may be an issue for CNNs. Longer TTLs will increase the likelihood | |||
| likelihood that data in caches will be stale. TTL minimums and | that data in caches will be stale. TTL minimums and maximums SHOULD | |||
| maximums SHOULD be configurable by the operator of the SRP registrar. | be configurable by the operator of the SRP registrar. | |||
| 5. Maintenance | 5. Maintenance | |||
| 5.1. Cleaning Up Stale Data | 5.1. Cleaning Up Stale Data | |||
| Because the DNS-SD registration protocol is automatic and not managed | Because the DNS-SD Service Registration Protocol is automatic and not | |||
| by humans, some additional bookkeeping is required. When an update | managed by humans, some additional bookkeeping is required. When an | |||
| is constructed by the SRP requestor, it MUST include an EDNS(0) | update is constructed by the SRP requester, it MUST include an | |||
| Update Lease Option (see [RFC9664]). The Update Lease Option | EDNS(0) Update Lease Option [RFC9664]. The Update Lease Option | |||
| contains two lease times: the Lease Time and the KEY Lease Time. | contains two lease times: the Lease Time and the KEY Lease Time. | |||
| Similar to DHCP leases (see [RFC2131]), these leases are promises | Similar to DHCP leases [RFC2131], these leases are promises from the | |||
| from the SRP requestor that it will send a new update for the service | SRP requester that it will send a new update for the service | |||
| registration before the lease time expires. The Lease time is chosen | registration before the lease time expires. The Lease time is chosen | |||
| to represent the time after the update during which the registered | to represent the duration after the update during which the | |||
| records other than the KEY record can be assumed to be valid. The | registered records other than the KEY record can be assumed to be | |||
| KEY lease time represents the time after the update during which the | valid. The KEY lease time represents the duration after the update | |||
| KEY record can be assumed to be valid. | during which the KEY record can be assumed to be valid. The | |||
| reasoning behind the different lease times is discussed in Sections | ||||
| 3.2.4.1 and 3.2.5.3. | ||||
| The reasoning behind the different lease times is discussed in | SRP registrars may be configured with limits for these values. At | |||
| Section 3.2.4.1. SRP registrars may be configured with limits for | the time of writing, a default limit of two hours for the Lease and | |||
| these values. At the time of writing, a default limit of two hours | 14 days for the SIG(0) KEY are thought to be good choices. Devices | |||
| for the Lease and 14 days for the SIG(0) KEY are thought to be good | with limited battery that wake infrequently are likely to request | |||
| choices. Constrained devices with limited battery that wake | longer leases; registrars that support such devices may need to set | |||
| infrequently are likely to request longer leases; registrars that | higher limits. SRP requesters that are going to continue to use | |||
| support such devices may need to set higher limits. SRP requestors | names on which they hold leases SHOULD refresh them well before the | |||
| that are going to continue to use names on which they hold leases | lease ends in case the registrar is temporarily unavailable or under | |||
| SHOULD update well before the lease ends in case the registrar is | heavy load. | |||
| unavailable or under heavy load. | ||||
| The lease time applies specifically to the host. All service | The lease time applies specifically to the hostname. All service | |||
| instances, and all service entries for such service instances, depend | instances, and all service entries for such service instances, depend | |||
| on the host. When the lease on a host expires, the host and all | on the hostname. When the lease on a hostname expires, the hostname | |||
| services that reference it MUST be removed at the same time: it is | and all services that reference it MUST be removed at the same time: | |||
| never valid for a service instance to remain when the host it | It is never valid for a service instance to remain when the hostname | |||
| references has been removed. If the KEY record for the host is to | it references has been removed. If the KEY record for the hostname | |||
| remain, the KEY record for any services that reference it MUST also | is to remain, the KEY record for any services that reference it MUST | |||
| remain. However, the service PTR record MUST be removed since it has | also remain. However, the Service Discovery PTR record MUST be | |||
| no key associated with it and since it is never valid to have a | removed since it has no key associated with it and since it is never | |||
| service PTR record for which there is no service instance on the | valid to have a Service Discovery PTR record for which there is no | |||
| target of the PTR record. | service instance on the target of the PTR record. | |||
| SRP registrars MUST also track a lease time per service instance. | SRP registrars MUST also track a lease time per service instance. | |||
| The reason being that a requestor may re-register a host with a | The reason being that a requester may re-register a hostname with a | |||
| different set of services and not remember that some different | different set of services and not remember that some different | |||
| service instance had previously been registered. In this case, when | service instance had previously been registered. In this case, when | |||
| that service instance lease expires, the SRP registrar MUST remove | that service instance lease expires, the SRP registrar MUST remove | |||
| the service instance (although the KEY record for the service | the service instance, and any associated Service Discovery PTR | |||
| instance SHOULD be retained until the KEY lease on that service | records pointing to that service instance, (although the KEY record | |||
| expires). This is beneficial because, otherwise, if the SRP | for the service instance SHOULD be retained until the KEY lease on | |||
| requestor continues to renew the host but never mentions the stale | that service expires). This is beneficial because it avoids stale | |||
| service again, the stale service will continue to be advertised. | services continuing to be advertised after the SRP requester has | |||
| forgotten about them. | ||||
| The SRP registrar MUST include an EDNS(0) Update Lease option in the | The SRP registrar MUST include an EDNS(0) Update Lease option in the | |||
| response if the lease time proposed by the requestor has been | response. The requester MUST check for the EDNS(0) Update Lease | |||
| shortened or lengthened by the registrar. The requestor MUST check | option in the response, and when deciding when to renew its | |||
| for the EDNS(0) Update Lease option in the response and MUST use the | registration the requester MUST use the lease times from the Update | |||
| lease times from that option in place of the options that it sent to | Lease option in the response in place of the lease times that it | |||
| the registrar when deciding when to renew its registration. The | originally requested from the registrar. The times may be shorter or | |||
| times may be shorter or longer than those specified in the SRP | longer than those specified in the SRP Update. The SRP requester | |||
| Update: the SRP requestor must honor them in either case. | must honor them in either case. | |||
| SRP requestors SHOULD assume that each lease ends N seconds after the | SRP requesters SHOULD assume that each lease ends N seconds after the | |||
| update was first transmitted (where N is the lease duration). SRP | update was first transmitted (where N is the granted lease duration). | |||
| registrars SHOULD assume that each lease ends N seconds after the | SRP registrars SHOULD assume that each lease ends N seconds after the | |||
| update that was successfully processed was received. Because the | update that was successfully processed was received. Because the | |||
| registrar will always receive the update after the SRP requestor sent | registrar will always receive the update after the SRP requester sent | |||
| it, this avoids the possibility of misunderstandings. | it, this avoids the possibility of a race condition where the SRP | |||
| registrar prematurely removes a service when the SRP requester thinks | ||||
| the lease has not yet expired. In addition, the SRP requester MUST | ||||
| begin attempting to renew its lease in advance of the expected | ||||
| expiration time, as required by the DNS Update Lease specification | ||||
| [RFC9664], to accommodate the situation where the clocks on the SRP | ||||
| requester and the SRP registrar do not run at precisely the same | ||||
| rate. | ||||
| SRP registrars MUST reject updates that do not include an EDNS(0) | SRP registrars MUST reject updates that do not include an EDNS(0) | |||
| Update Lease option. DNS authoritative servers that allow both SRP | Update Lease option. DNS authoritative servers that allow both SRP | |||
| and non-SRP DNS updates MAY accept updates that don't include leases, | and non-SRP DNS updates MAY accept updates that don't include leases, | |||
| but they SHOULD differentiate between SRP Updates and other updates | but they SHOULD differentiate between SRP Updates and other updates | |||
| and MUST reject updates that would otherwise be SRP Updates if they | and MUST reject updates that would otherwise be SRP Updates if they | |||
| do not include leases. | do not include leases. | |||
| Lease times have a completely different function than TTLs. On an | The function of Lease times and the function of TTLs are completely | |||
| authoritative DNS server, the TTL on a resource record is a constant. | different. On an authoritative DNS server, the TTL on a resource | |||
| Whenever that RR is served in a DNS response, the TTL value sent in | record is a constant. Whenever that RR is served in a DNS response, | |||
| the answer is the same. The lease time is never sent as a TTL; its | the TTL value sent in the answer is the same. The lease time is | |||
| sole purpose is to determine when the authoritative DNS server will | never sent as a TTL; its sole purpose is to determine when the | |||
| delete stale records. It is not an error to send a DNS response with | authoritative DNS server will delete stale records. It is not an | |||
| a TTL of 'n' when the remaining time on the lease is less than 'n'. | error to send a DNS response with a TTL of M when the remaining time | |||
| on the lease is less than M. | ||||
| 6. Security Considerations | 6. Security Considerations | |||
| 6.1. Source Validation | 6.1. Source Validation | |||
| SRP Updates have no authorization semantics other than FCFS. Thus, | SRP Updates have no authorization semantics other than "First Come, | |||
| if an attacker from outside the administrative domain of the SRP | First Served" (FCFS). Thus, if an attacker from outside the | |||
| registrar knows the registrar's IP address, it can, in principle, | administrative domain of the SRP registrar knows the registrar's IP | |||
| send updates to the registrar that will be processed successfully. | address, it can, in principle, send updates to the registrar that | |||
| Therefore, SRP registrars SHOULD be configured to reject updates from | will be processed successfully. Therefore, SRP registrars SHOULD be | |||
| source addresses outside of the administrative domain of the | configured to reject updates from source addresses outside of the | |||
| registrar. | administrative domain of the registrar. | |||
| For TCP updates, the initial SYN-SYN+ACK handshake prevents updates | For TCP updates, the initial SYN-SYN+ACK handshake prevents updates | |||
| being forged by an off-network attacker. In order to ensure that | being forged by an off-path attacker. In order to ensure that this | |||
| this handshake happens, SRP registrars relying on three-way-handshake | handshake happens, SRP registrars relying on three-way-handshake | |||
| validation MUST NOT accept TCP Fast Open payloads (see [RFC7413]). | validation MUST NOT accept TCP Fast Open payloads [RFC7413]. If the | |||
| If the network infrastructure allows it, an SRP registrar MAY accept | network infrastructure allows it, an SRP registrar MAY accept TCP | |||
| TCP Fast Open payloads if all such packets are validated along the | Fast Open payloads if all such packets are validated along the path, | |||
| path, and the network is able to reject this type of spoofing at all | and the network is able to reject this type of spoofing at all | |||
| ingress points. | ingress points. | |||
| For UDP updates from constrained devices, spoofing would have to be | For UDP updates from CNN devices, spoofing would have to be prevented | |||
| prevented with appropriate source address filtration on routers | with appropriate source address filtering on routers [RFC2827]. This | |||
| ([RFC2827]). This would ordinarily be accomplished by measures such | would ordinarily be accomplished by measures such as those described | |||
| as those described in (Section 4.5 of [RFC7084]). For example, a | in Section 4.5 of the IPv6 CE Router Requirements document [RFC7084]. | |||
| stub router ([SNAC-SIMPLE]) for a constrained network might only | For example, a stub router [SNAC-SIMPLE] for a CNN might only accept | |||
| accept UDP updates from source addresses known to be on-link on that | UDP updates from source addresses known to be on-link on that stub | |||
| stub network and might further validate that the UDP update was | network and might further validate that the UDP update was actually | |||
| actually received on the stub network interface and not the interface | received on the stub network interface and not the interface | |||
| connected to the adjacent infrastructure link. | connected to the adjacent infrastructure link. | |||
| 6.2. Other DNS Updates | 6.2. Other DNS Updates | |||
| Note that these rules only apply to the validation of SRP Updates. A | Note that these rules only apply to the validation of SRP Updates. | |||
| server that accepts updates from SRP requestors may also accept other | An authoritative DNS server that accepts updates from SRP requesters | |||
| DNS updates, and those DNS updates may be validated using different | may also accept other DNS Update messages, and those DNS Update | |||
| rules. However, in the case of a DNS server that accepts SRP | messages may be validated using different rules. However, in the | |||
| updates, the intersection of the SRP Update rules and whatever other | case of an authoritative DNS server that accepts SRP updates, the | |||
| update rules are present must be considered very carefully. | intersection of the SRP Update rules and whatever other update rules | |||
| are present must be considered very carefully. | ||||
| For example, a normal authenticated DNS update to any RR that was | For example, a normal authenticated DNS update to any RR that was | |||
| added using SRP, but that is authenticated using a different key, | added using SRP, but is authenticated using a different key, could be | |||
| could be used to override a promise made by the SRP registrar to an | used to override a promise made by the SRP registrar to an SRP | |||
| SRP requestor by replacing all or part of the service registration | requester by replacing all or part of the service registration | |||
| information with information provided by an authenticated DNS update | information with information provided by an authenticated DNS update | |||
| requestor. An implementation that allows both kinds of updates | requester. An implementation that allows both kinds of updates | |||
| SHOULD NOT allow DNS Update requestors that are using different | SHOULD NOT allow DNS Update requesters that are using different | |||
| authentication and authorization credentials to update records added | authentication and authorization credentials to update records added | |||
| by SRP requestors. | by SRP requesters. | |||
| 6.3. Risks of Allowing Arbitrary Names to be Registered in SRP Updates | 6.3. Risks of Allowing Arbitrary Names to be Registered in SRP Updates | |||
| It is possible to set up SRP updates for a zone that is used for non- | It is possible to set up SRP Updates for a zone that is also used for | |||
| DNSSD services. For example, imagine that you set up SRP service for | non-DNS-SD records. For example, imagine that you set up SRP service | |||
| example.com. SRP hosts can now register names like "www" or "mail" | for "example.com". SRP requesters can now register names like "www" | |||
| or "smtp" in this domain. In addition, SRP updates using FCFS naming | or "mail" or "smtp" in this domain. In addition, SRP Updates using | |||
| can insert names that are obscene or offensive into the zone. There | FCFS Naming can insert names that are obscene or offensive into the | |||
| is no simple solution to these problems. However, we have two | zone. There is no simple solution to these problems. However, we | |||
| recommendations to address this problem: | have two recommendations to address this problem: | |||
| * Do not provide SRP service in organization-level zones. Use | * Do not provide SRP service in organization-level zones. Use | |||
| subdomains of the organizational domain for DNS-SD. This does not | subdomains of the organizational domain for DNS-SD. This does not | |||
| prevent registering names as mentioned above but does ensure that | prevent registering names as mentioned above but does ensure that | |||
| genuinely important names are not accidentally reserved for SRP | genuinely important names are not accidentally claimed by SRP | |||
| clients. So, for example, the zone "dnssd.example.com" could be | requesters. So, for example, the zone "dnssd.example.com." could | |||
| used instead of "example.com" for SRP updates. Because of the way | be used instead of "example.com." for SRP Updates. Because of the | |||
| that DNS-browsing domains are discovered, there is no need for the | way that DNS-browsing domains are discovered, there is no need for | |||
| DNSSD discovery zone that is updated by SRP to have a user- | the DNS-SD discovery zone that is updated by SRP to have a user- | |||
| friendly or important-sounding name. | friendly or important-sounding name. | |||
| * Configure a dictionary of names that are prohibited. Dictionaries | * Configure a dictionary of names that are prohibited. Dictionaries | |||
| of common obscene and offensive names are no doubt available and | of common obscene and offensive names are no doubt available and | |||
| can be augmented with a list of typical "special" names like | can be augmented with a list of typical "special" names like | |||
| "www", "mail", "smtp", and so on. Lists of names are generally | "www", "mail", "smtp", and so on. Lists of names are generally | |||
| available or can be constructed manually. | available or can be constructed manually. Names rejected due to | |||
| this should return a Refused RCODE, indicating to the SRP | ||||
| requester that it should not append or increment a number at the | ||||
| end of the name and then try again, since this would likely result | ||||
| in an infinite loop. If a name is considered unacceptable because | ||||
| it is obscene or offensive, adding a number on the end is unlikely | ||||
| to make the name acceptable. | ||||
| 6.4. Security of Local Service Discovery | 6.4. Security of Local Service Discovery | |||
| Local links can be protected by managed services such as Router | Local links can be protected by managed services such as RA Guard | |||
| Advertisement Guard (see [RFC6105]), but multicast services like | [RFC6105], but multicast services like DHCP [RFC2131], DHCPv6 | |||
| DHCP, DHCPv6, and IPv6 Neighbor Discovery (see [RFC2131], [RFC8415], | [RFC8415], and IPv6 Neighbor Discovery [RFC4861] are, in most cases, | |||
| and [RFC4861], respectively) are, in most cases, not authenticated | not authenticated and can't be controlled on unmanaged networks, such | |||
| and can't be controlled on unmanaged networks, such as home networks | as home networks and small office networks where no network | |||
| and small office networks where no network management staff are | management staff are present. In such situations, the SRP service | |||
| present. In such situations, the SRP service has comparatively fewer | has comparatively fewer potential security exposures and, hence, is | |||
| potential security exposures and, hence, is not the weak link. This | not the weak link. This is discussed in more detail in | |||
| is discussed in more detail in Section 3.2.4. | Section 3.2.4. | |||
| The fundamental protection for networks of this type is the user's | The fundamental protection for networks of this type is the user's | |||
| choice of what devices to add to the network. Work is being done in | choice 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 | other working groups and standards bodies to improve the state of the | |||
| art for network on-boarding and device isolation (e.g., [RFC8520] | art for network on-boarding and device isolation (e.g., Manufacturer | |||
| provides a means for constraining what behaviors are allowed for a | Usage Descriptions [RFC8520] provide a means for constraining what | |||
| device in an automatic way), but such work is out of scope for this | behaviors are allowed for a device in an automatic way), but such | |||
| document. | work is out of scope for this document. | |||
| 6.5. SRP Registrar Authentication | 6.5. SRP Registrar Authentication | |||
| This specification does not provide a mechanism for validating | This specification does not provide a mechanism for validating | |||
| responses from SRP registrars to SRP requestors. In principle, a KEY | responses from SRP registrars to SRP requesters. In principle, a KEY | |||
| RR could be used by a non-constrained SRP requestor to validate | RR could be used by a non-CNN SRP requester to validate responses | |||
| responses from the registrar, but this is not required, nor do we | from the registrar, but this is not required, nor do we specify a | |||
| specify a mechanism for determining which key to use. | mechanism for determining which key to use. | |||
| In addition, for DNS-over-TLS connections, out-of-band key pinning as | In addition, for DNS-over-TLS connections, out-of-band key pinning as | |||
| described in Section 4.2 of [RFC7858] could be used for | described in Section 4.2 of the DNS-over-TLS specification [RFC7858] | |||
| authentication of the SRP registrar, e.g., to prevent man-in-the- | could be used for authentication of the SRP registrar, e.g., to | |||
| middle attacks. However, the use of such keys is impractical for an | prevent man-in-the-middle attacks. However, the use of such keys is | |||
| unmanaged service registration protocol; hence, it is out of scope | impractical for an unmanaged service registration protocol; hence, it | |||
| for this document. | is out of scope for this document. | |||
| 6.6. Required Signature Algorithm | 6.6. Required Signature Algorithm | |||
| For validation, SRP registrars MUST implement the ECDSAP256SHA256 | For validation, SRP registrars MUST implement the ECDSAP256SHA256 | |||
| signature algorithm. SRP registrars SHOULD implement the algorithms | signature algorithm. SRP registrars SHOULD implement the algorithms | |||
| that are specified in Section 3.1 of [RFC8624], in the validation | that are listed in Section 3.1 of the DNSSEC Cryptographic Algorithms | |||
| column of the table, that are numbered 13 or higher, and that have a | specification [RFC8624], in the validation column of the table, that | |||
| "MUST", "RECOMMENDED", or "MAY" designation in the validation column | are numbered 13 or higher and that have a "MUST", "RECOMMENDED", or | |||
| of the table. SRP requestors MUST NOT assume that any algorithm | "MAY" designation in the validation column of the table. SRP | |||
| numbered lower than 13 is available for use in validating SIG(0) | requesters MUST NOT assume that any algorithm numbered lower than 13 | |||
| signatures. | is available for use in validating SIG(0) signatures. | |||
| 7. Privacy Considerations | 7. Privacy Considerations | |||
| Because DNS-SD SRP Updates can be sent off-link, the privacy | Because DNS-SD SRP Updates can be sent off-link, the privacy | |||
| implications of SRP are different than for mDNS responses. Host | implications of SRP are different from those for mDNS responses. SRP | |||
| implementations that are using TCP SHOULD also use TLS if available. | Requester implementations that are using TCP SHOULD also use DNS- | |||
| SRP registrar implementations MUST offer TLS support. The use of TLS | over-TLS [RFC7858] if available. SRP registrar implementations MUST | |||
| with DNS is described in [RFC7858]. Because there is no mechanism | offer TLS support. Because there is no mechanism for sharing keys, | |||
| for sharing keys, validation of DNS-over-TLS keys is not possible; | validation of DNS-over-TLS keys is not possible; DNS-over-TLS is used | |||
| DNS-over-TLS is used only as described in Section 4.1 of [RFC7858]. | only for Opportunistic Privacy, as documented in Section 4.1 of the | |||
| DNS-over-TLS specification [RFC7858]. | ||||
| Hosts that implement TLS support SHOULD NOT fall back to TCP. Since | SRP requesters that are able to use TLS SHOULD NOT fall back to TCP. | |||
| SRP registrars are required to support TLS, it is entirely up to the | Since all SRP registrars are required to support TLS, whether to use | |||
| host implementation whether to use it. | TLS is entirely the decision of the SRP requester. | |||
| Public keys can be used as identifiers to track hosts. SRP | Public keys can be used as identifiers to track hosts. SRP | |||
| registrars MAY elect not to return KEY records for queries for SRP | registrars MAY elect not to return KEY records for queries for SRP | |||
| registrations. To avoid DNSSEC validation failures, an SRP registrar | registrations. To avoid DNSSEC validation failures, an SRP registrar | |||
| that signs the zone for DNSSEC but refuses to return a KEY record | that signs the zone for DNSSEC but refuses to return a KEY record | |||
| MUST NOT store the KEY record in the zone itself. Because the KEY | MUST NOT store the KEY record in the zone itself. Because the KEY | |||
| record isn't in the zone, the nonexistence of the KEY record can be | record isn't in the zone, the nonexistence of the KEY record can be | |||
| validated. If the zone is not signed, the server MAY instead return | validated. If the zone is not signed, the authoritative DNS server | |||
| a negative non-error response (either NXDOMAIN or no data). | MAY instead return a negative response (either NXDOMAIN or no data). | |||
| 8. Domain Name Reservation Considerations | 8. Domain Name Reservation Considerations | |||
| This section specifies considerations for systems involved in domain | This section specifies considerations for systems involved in domain | |||
| name resolution when resolving queries for names ending with | name resolution when resolving queries for names ending with | |||
| ".service.arpa.". Each item in this section addresses some aspect of | ".service.arpa.". Each item in this section addresses some aspect of | |||
| the DNS or the process of resolving domain names that would be | the DNS or the process of resolving domain names that would be | |||
| affected by this special-use allocation. Detailed explanations of | affected by this special-use allocation. Detailed explanations of | |||
| these items can be found in Section 5 of [RFC6761]. | these items can be found in Section 5 of the Special-Use Domain Names | |||
| specification [RFC6761]. | ||||
| 8.1. Users | 8.1. Users | |||
| The current proposed use for "service.arpa" does not require special | The current proposed use for "service.arpa." does not require special | |||
| knowledge on the part of the user. While the "default.service.arpa." | knowledge on the part of the user. While the "default.service.arpa." | |||
| subdomain is used as a generic name for registration, users are not | subdomain is used as a generic name for registration, users are not | |||
| expected to see this name in user interfaces. In the event that it | expected to see this name in user interfaces. In the event that it | |||
| does show up in a user interface, it is just a domain name and | does show up in a user interface, it is just a domain name and | |||
| requires no special treatment by the user. Users are not expected to | requires no special treatment by the user. | |||
| 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. | ||||
| 8.2. Application Software | 8.2. Application Software | |||
| Application software does not need to handle subdomains of | Application software does not need to handle subdomains of | |||
| "service.arpa" specially. "service.arpa" SHOULD NOT be treated as | "service.arpa." specially. "service.arpa." SHOULD NOT be treated as | |||
| more trustworthy than any other insecure DNS domain, simply because | more trustworthy than any other insecure DNS domain, simply because | |||
| it is locally served (or for any other reason). It is not possible | it is locally served (or for any other reason). It is not possible | |||
| to register a PKI certificate for a subdomain of "service.arpa." | to register a PKI certificate for a subdomain of "service.arpa." | |||
| because it is a locally served domain name. So, no such subdomain | because it is a locally served domain name. So, no such subdomain | |||
| can be considered to be uniquely identifying a particular host, as | can be considered to be uniquely identifying a particular host, as | |||
| would be required for such a PKI certificate to be issued. If a | would be required for such a PKI certificate to be issued. If a | |||
| subdomain of "service.arpa." is returned by an API or entered in an | subdomain of "service.arpa." is returned by an API or entered in an | |||
| input field of an application, PKI authentication of the endpoint | input field of an application, PKI authentication of the endpoint | |||
| being identified by the name will not be possible. Alternative | being identified by the name will not be possible. Alternative | |||
| methods and practices for authenticating such endpoints are out of | methods and practices for authenticating such endpoints are out of | |||
| scope for this document. | scope for this document. | |||
| 8.3. Name Resolution APIs and Libraries | 8.3. Name Resolution APIs and Libraries | |||
| Name resolution APIs and libraries MUST NOT recognize names that end | Name resolution APIs and libraries MUST NOT recognize names that end | |||
| in "service.arpa." as special and MUST NOT treat them as having | in "service.arpa." as special and MUST NOT treat them as having | |||
| special significance, except that it may be necessary that such APIs | special significance, except that it may be necessary that such APIs | |||
| not bypass the locally configured recursive resolvers. | not bypass the locally discovered recursive resolvers. | |||
| One or more IP addresses for recursive DNS servers will usually be | One or more IP addresses for recursive resolvers will usually be | |||
| supplied to the client through router advertisements or DHCP. For an | supplied to the SRP requester through router advertisements or DHCP. | |||
| administrative domain that uses subdomains of "service.arpa.", the | For an administrative domain that uses subdomains of "service.arpa.", | |||
| recursive resolvers provided by that domain will be able to answer | the recursive resolvers provided by that domain will be able to | |||
| queries for subdomains of "service.arpa.". Other (non-local) | answer queries for subdomains of "service.arpa.". Other (non-local) | |||
| resolvers will not, or they will provide answers that are not correct | resolvers will not, or they will provide answers that are not correct | |||
| within that administrative domain. | within that administrative domain. | |||
| A host that is configured to use a resolver other than one that has | A host that is configured to use a resolver other than one that has | |||
| been provided by the local network may not be able to resolve or may | been provided by the local network may not be able to resolve or may | |||
| receive incorrect results for subdomains of "service.arpa.". In | receive incorrect results for subdomains of "service.arpa.". In | |||
| order to avoid this, it is permissible that hosts use the resolvers | order to avoid this, hosts SHOULD use the resolvers that are locally | |||
| that are locally provided for resolving "service.arpa.", even when | provided for resolving "service.arpa." names, even when they are | |||
| they are configured to use other resolvers. | configured to use other resolvers for other names. | |||
| 8.4. Caching DNS Servers | 8.4. Recursive Resolvers | |||
| There are three considerations for caching DNS servers that follow | There are two considerations for recursive resolvers (also known as | |||
| this specification: | "caching DNS servers" or "recursive DNS servers") that follow this | |||
| specification: | ||||
| 1. For correctness, recursive resolvers at sites using | 1. For correctness, recursive resolvers at sites using | |||
| 'service.arpa.' must, in practice, transparently support DNSSEC | 'service.arpa.' must, in practice, transparently support DNSSEC | |||
| queries: queries for DNSSEC records and queries with the DNSSEC | queries: queries for DNSSEC records and queries with the DNSSEC | |||
| OK (DO) bit set (Section 3.2.1 of [RFC4035]). DNSSEC validation | OK (DO) bit set (Section 3.2.1 of the DNSSEC specification | |||
| is a Best Current Practice ([RFC9364]): although validation is | [RFC4035]). DNSSEC validation [RFC9364] is a best current | |||
| not required, a caching recursive resolver that does not validate | practice: Although validation is not required, a caching | |||
| answers that can be validated may cache invalid data. In turn, | recursive resolver that does not validate answers that can be | |||
| this would prevent validating stub resolvers from successfully | validated may cache invalid data. In turn, this would prevent | |||
| validating answers. Hence, as a practical matter, recursive | validating stub resolvers from successfully validating answers. | |||
| resolvers at sites using "service.arpa" should do DNSSEC | Hence, as a practical matter, recursive resolvers at sites using | |||
| validation. | "service.arpa." should do DNSSEC validation. | |||
| 2. Unless configured otherwise, recursive resolvers and DNS proxies | 2. Unless configured otherwise, recursive resolvers and DNS proxies | |||
| MUST behave as described in Locally Served Zones (Section 3 of | MUST behave following the rules prescribed for Iterative | |||
| [RFC6303]). That is, queries for "service.arpa." and subdomains | Resolvers in Section 3 of the IETF Locally Served DNS Zones | |||
| of "service.arpa." MUST NOT be forwarded, with one important | document [RFC6303]. That is, queries for "service.arpa." and | |||
| exception: a query for a DS record with the DO bit set MUST | subdomains of "service.arpa." MUST NOT be forwarded, with one | |||
| return the correct answer for that question, including correct | important exception: a query for a DS record with the DO bit set | |||
| information in the authority section that proves that the record | MUST return the correct answer for that question, including | |||
| is nonexistent. | 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." | So, for example, a query for the NS record for "service.arpa." | |||
| MUST NOT result in that query being forwarded to an upstream | MUST NOT result in that query being forwarded to an upstream | |||
| cache nor to the authoritative DNS server for ".arpa.". However, | cache nor to the authoritative DNS server for ".arpa.". However, | |||
| as necessary to provide accurate authority information, a query | to provide accurate authority information, a query for the DS | |||
| for the DS record MUST result in forwarding whatever queries are | record MUST result in forwarding whatever queries are necessary. | |||
| necessary. Typically, this will just be a query for the DS | Typically, this will just be a query for the DS record since the | |||
| record since the necessary authority information will be included | necessary authority information will be included in the authority | |||
| in the authority section of the response if the DO bit is set. | section of the response if the DO bit is set. | |||
| 8.5. Authoritative DNS Servers | 8.5. Authoritative DNS Servers | |||
| No special processing of "service.arpa." is required for | No special processing of "service.arpa." is required for | |||
| authoritative DNS server implementations. It is possible that an | authoritative DNS server implementations. It is possible that an | |||
| authoritative DNS server might attempt to check the authoritative | authoritative DNS server might attempt to check the authoritative DNS | |||
| servers for "service.arpa." for a delegation beneath that name before | servers for "service.arpa." for a delegation beneath that name before | |||
| answering authoritatively for such a delegated name. In such a case, | answering authoritatively for such a delegated name. In such a case, | |||
| because the name always has only local significance, there will be no | because the name always has only local significance, there will be no | |||
| such delegation in the "service.arpa." zone; therefore, the server | such delegation in the "service.arpa." zone; therefore, the | |||
| would refuse to answer authoritatively for such a zone. A server | authoritative DNS server would refuse to answer authoritatively for | |||
| that implements this sort of check MUST be configurable so that | such a zone. An authoritative DNS server that implements this sort | |||
| either it does not do this check for the "service.arpa." domain or it | of check MUST be configurable so that either it does not do this | |||
| ignores the results of the check. | check for the "service.arpa." domain or it ignores the results of the | |||
| check. | ||||
| 8.6. DNS Server Operators | 8.6. DNS Server Operators | |||
| DNS server operators MAY configure an authoritative server for | DNS server operators MAY configure an authoritative DNS server for | |||
| "service.arpa." for use with SRP. The operator for the DNS servers | "service.arpa." for use with SRP. The operator for the DNS servers | |||
| authoritative for "service.arpa." in the global DNS will configure | that are authoritative for "service.arpa." in the global DNS will | |||
| any such servers as described in Section 9. | configure any such DNS servers as described in Section 9. | |||
| 8.7. DNS Registries/Registrars | 8.7. DNS Registries/Registrars | |||
| "service.arpa." is a subdomain of the "arpa" top-level domain, which | "service.arpa." is a subdomain of the "arpa." top-level domain, which | |||
| is operated by IANA under the authority of the Internet Architecture | is operated by IANA under the authority of the Internet Architecture | |||
| Board (IAB) according to the rules established in [RFC3172]. There | Board (IAB) [RFC3172]. There are no other DNS registrars for | |||
| are no other DNS registrars for ".arpa". | "arpa.". | |||
| 9. Delegation of "service.arpa." | 9. Delegation of "service.arpa." | |||
| In order to be fully functional, the owner of the "arpa." zone must | The owner of the "arpa." zone, at the time of writing the IAB | |||
| add a delegation of "service.arpa." in the ".arpa." zone (see | [IAB-ARPA], has added a delegation of "service.arpa." in the "arpa." | |||
| [RFC3172]). This delegation is to be set up as was done for | zone [RFC3172], following the guidance provided in Section 7 of the | |||
| "home.arpa", as a result of the specification in Section 7 of | "home.arpa." specification [RFC8375]. | |||
| [RFC8375]. This is currently the responsibility of the IAB (see | ||||
| [IAB-ARPA]). | ||||
| 10. IANA Considerations | 10. IANA Considerations | |||
| 10.1. Registration and Delegation of "service.arpa" as a Special-Use | 10.1. Registration and Delegation of "service.arpa." as a Special-Use | |||
| Domain Name | Domain Name | |||
| IANA has recorded the domain name "service.arpa." in the "Special-Use | IANA has recorded the domain name "service.arpa." in the "Special-Use | |||
| Domain Names" registry (see [SUDN]). IANA has implemented the | Domain Names" registry [SUDN]. IANA has implemented the delegation | |||
| delegation requested in Section 9. | requested in Section 9. | |||
| 10.2. Addition of "service.arpa." to the Locally-Served Zones Registry | ||||
| IANA has also added a new entry to the "Transport-Independent | IANA has also added a new entry to the "Transport-Independent | |||
| Locally-Served Zones Registry" registry of the "Locally-Served DNS | Locally-Served Zones Registry" registry of the "Locally-Served DNS | |||
| Zones" group (see [LSDZ]). The entry is for the domain | Zones" group [LSDZ]. The entry is for the domain "SERVICE.ARPA." | |||
| "SERVICE.ARPA" with the description "DNS-SD Service Registration | with the description "DNS-SD Service Registration Protocol Special- | |||
| Protocol Special-Use Domain" and lists this document as the | Use Domain" and lists this document as the reference. | |||
| reference. | ||||
| 10.2. Subdomains of "service.arpa." | 10.3. Subdomains of "service.arpa." | |||
| This document only makes use of the "default.service.arpa" subdomain | This document only makes use of the "default.service.arpa." subdomain | |||
| of "service.arpa." Other subdomains are reserved for future use by | of "service.arpa." Other subdomains are reserved for future use by | |||
| DNS-SD or related work. IANA has created the "service.arpa | DNS-SD or related work. IANA has created the "service.arpa. | |||
| Subdomain" registry (see [SUB]). The IETF has change control for | Subdomain" registry [SUB]. The IETF has change control for this | |||
| this registry. New entries may be added either as a result of | registry. New entries may be added either as a result of Standards | |||
| Standards Action (Section 4.9 of [RFC8126]) or with IESG Approval | Action (Section 4.9 of the IANA Guidelines) or with IESG Approval | |||
| (Section 4.10 of [RFC8126]), provided that a specification exists | (Section 4.10 of the IANA Guidelines) [RFC8126], provided that the | |||
| (Section 4.6 of [RFC8126]). | values and their meanings are documented in a permanent and readily | |||
| available public specification, in sufficient detail so that | ||||
| interoperability between independent implementations is possible. | ||||
| IANA has grouped the "service.arpa Subdomain" registry with the | IANA has grouped the "service.arpa. Subdomain" registry with the | |||
| "Locally-Served DNS Zones" group. The registry is a table with three | "Locally-Served DNS Zones" group. The registry is a table with three | |||
| columns: the subdomain name (expressed as a fully qualified domain | columns: the subdomain name (expressed as a fully qualified domain | |||
| name), a brief description of how it is used, and a reference to the | name), a brief description of how it is used, and a reference to the | |||
| document that describes its use in detail. | document that describes its use in detail. | |||
| This initial contents of this registry are as follows: | This initial contents of this registry are as follows: | |||
| +=======================+=================+===========+ | +=======================+=================+===========+ | |||
| | Subdomain Name | Description | Reference | | | Subdomain Name | Description | Reference | | |||
| +=======================+=================+===========+ | +=======================+=================+===========+ | |||
| | default.service.arpa. | Default domain | RFC 9665 | | | default.service.arpa. | Default domain | RFC 9665 | | |||
| | | for SRP updates | | | | | for SRP Updates | | | |||
| +-----------------------+-----------------+-----------+ | +-----------------------+-----------------+-----------+ | |||
| Table 1 | Table 1 | |||
| 10.3. Service Name Registrations | 10.4. Service Name Registrations | |||
| IANA has added two new entries to the "Service Name and Transport | IANA has added two new entries to the "Service Name and Transport | |||
| Protocol Port Number Registry" (see [PORT]). The following | Protocol Port Number Registry" [PORT]. The following subsections | |||
| subsections contain tables with the fields required by Section 8.1.1 | contain tables with the fields required by Section 8.1.1 of IANA's | |||
| of [RFC6335]. | Procedures for Service Name allocation [RFC6335]. | |||
| 10.3.1. 'dnssd-srp' Service Name | 10.4.1. "dnssd-srp" Service Name | |||
| +====================+=============================+ | +====================+=============================+ | |||
| | Field Name | Value | | | Field Name | Value | | |||
| +====================+=============================+ | +====================+=============================+ | |||
| | Service Name | dnssd-srp | | | Service Name | dnssd-srp | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Transport Protocol | tcp | | | Transport Protocol | tcp | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Assignee | IESG <iesg@ietf.org> | | | Assignee | IESG <iesg@ietf.org> | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| skipping to change at line 1439 ¶ | skipping to change at line 1540 ¶ | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Reference | RFC 9665 | | | Reference | RFC 9665 | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Port Number | None | | | Port Number | None | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Service Code | None | | | Service Code | None | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| Table 2 | Table 2 | |||
| 10.3.2. 'dnssd-srp-tls' Service Name | 10.4.2. "dnssd-srp-tls" Service Name | |||
| +====================+================================+ | +====================+================================+ | |||
| | Field Name | Value | | | Field Name | Value | | |||
| +====================+================================+ | +====================+================================+ | |||
| | Service Name | dnssd-srp-tls | | | Service Name | dnssd-srp-tls | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Transport Protocol | tcp | | | Transport Protocol | tcp | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Assignee | IESG <iesg@ietf.org> | | | Assignee | IESG <iesg@ietf.org> | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Contact | IETF Chair<chair@ietf.org> | | | Contact | IETF Chair <chair@ietf.org> | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Description | DNS-SD Service Discovery (TLS) | | | Description | DNS-SD Service Discovery (TLS) | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Reference | RFC 9665 | | | Reference | RFC 9665 | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Port Number | None | | | Port Number | None | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| | Service Code | None | | | Service Code | None | | |||
| +--------------------+--------------------------------+ | +--------------------+--------------------------------+ | |||
| Table 3 | Table 3 | |||
| 10.4. Anycast Address | 10.5. Anycast Address | |||
| IANA has allocated an IPv6 Anycast address from the "IANA IPv6 | IANA has allocated an IPv6 anycast address from the "IANA IPv6 | |||
| Special-Purpose Address Registry" (see [IPv6]), similar to the Port | Special-Purpose Address Registry" [IPv6], similar to the Port Control | |||
| Control Protocol anycast address: 2001:1::1. The purpose of this | Protocol [RFC6887] anycast address [RFC7723]. The purpose of this | |||
| allocation is to provide a fixed anycast address that can be commonly | allocation is to provide a fixed anycast address that can be commonly | |||
| used as a destination for SRP updates when no SRP registrar is | used as a destination for SRP Updates when no SRP registrar is | |||
| explicitly configured. The initial values for the registry are as | explicitly configured. The initial values for the registry are as | |||
| follows: | follows: | |||
| +======================+=============================+ | +======================+=============================+ | |||
| | Attribute | Value | | | Attribute | Value | | |||
| +======================+=============================+ | +======================+=============================+ | |||
| | Address Block | 2001:1::3/128 | | | Address Block | 2001:1::3/128 | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Name | DNS-SD Service Registration | | | Name | DNS-SD Service Registration | | |||
| | | Protocol Anycast Address | | | | Protocol Anycast Address | | |||
| skipping to change at line 1545 ¶ | skipping to change at line 1646 ¶ | |||
| [RFC2931] Eastlake 3rd, D., "DNS Request and Transaction Signatures | [RFC2931] Eastlake 3rd, D., "DNS Request and Transaction Signatures | |||
| ( SIG(0)s )", RFC 2931, DOI 10.17487/RFC2931, September | ( SIG(0)s )", RFC 2931, DOI 10.17487/RFC2931, September | |||
| 2000, <https://www.rfc-editor.org/info/rfc2931>. | 2000, <https://www.rfc-editor.org/info/rfc2931>. | |||
| [RFC3172] Huston, G., Ed., "Management Guidelines & Operational | [RFC3172] Huston, G., Ed., "Management Guidelines & Operational | |||
| Requirements for the Address and Routing Parameter Area | Requirements for the Address and Routing Parameter Area | |||
| Domain ("arpa")", BCP 52, RFC 3172, DOI 10.17487/RFC3172, | Domain ("arpa")", BCP 52, RFC 3172, DOI 10.17487/RFC3172, | |||
| September 2001, <https://www.rfc-editor.org/info/rfc3172>. | September 2001, <https://www.rfc-editor.org/info/rfc3172>. | |||
| [RFC3445] Massey, D. and S. Rose, "Limiting the Scope of the KEY | ||||
| Resource Record (RR)", RFC 3445, DOI 10.17487/RFC3445, | ||||
| December 2002, <https://www.rfc-editor.org/info/rfc3445>. | ||||
| [RFC3596] Thomson, S., Huitema, C., Ksinant, V., and M. Souissi, | [RFC3596] Thomson, S., Huitema, C., Ksinant, V., and M. Souissi, | |||
| "DNS Extensions to Support IP Version 6", STD 88, | "DNS Extensions to Support IP Version 6", STD 88, | |||
| RFC 3596, DOI 10.17487/RFC3596, October 2003, | RFC 3596, DOI 10.17487/RFC3596, October 2003, | |||
| <https://www.rfc-editor.org/info/rfc3596>. | <https://www.rfc-editor.org/info/rfc3596>. | |||
| [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | ||||
| Rose, "Resource Records for the DNS Security Extensions", | ||||
| RFC 4034, DOI 10.17487/RFC4034, March 2005, | ||||
| <https://www.rfc-editor.org/info/rfc4034>. | ||||
| [RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "Protocol Modifications for the DNS Security | Rose, "Protocol Modifications for the DNS Security | |||
| Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005, | Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005, | |||
| <https://www.rfc-editor.org/info/rfc4035>. | <https://www.rfc-editor.org/info/rfc4035>. | |||
| [RFC6303] Andrews, M., "Locally Served DNS Zones", BCP 163, | [RFC6303] Andrews, M., "Locally Served DNS Zones", BCP 163, | |||
| RFC 6303, DOI 10.17487/RFC6303, July 2011, | RFC 6303, DOI 10.17487/RFC6303, July 2011, | |||
| <https://www.rfc-editor.org/info/rfc6303>. | <https://www.rfc-editor.org/info/rfc6303>. | |||
| [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
| skipping to change at line 1604 ¶ | skipping to change at line 1706 ¶ | |||
| [RFC8765] Pusateri, T. and S. Cheshire, "DNS Push Notifications", | [RFC8765] Pusateri, T. and S. Cheshire, "DNS Push Notifications", | |||
| RFC 8765, DOI 10.17487/RFC8765, June 2020, | RFC 8765, DOI 10.17487/RFC8765, June 2020, | |||
| <https://www.rfc-editor.org/info/rfc8765>. | <https://www.rfc-editor.org/info/rfc8765>. | |||
| [RFC9364] Hoffman, P., "DNS Security Extensions (DNSSEC)", BCP 237, | [RFC9364] Hoffman, P., "DNS Security Extensions (DNSSEC)", BCP 237, | |||
| RFC 9364, DOI 10.17487/RFC9364, February 2023, | RFC 9364, DOI 10.17487/RFC9364, February 2023, | |||
| <https://www.rfc-editor.org/info/rfc9364>. | <https://www.rfc-editor.org/info/rfc9364>. | |||
| [RFC9664] Cheshire, S. and T. Lemon, "An EDNS(0) Option to Negotiate | [RFC9664] Cheshire, S. and T. Lemon, "An EDNS(0) Option to Negotiate | |||
| Leases on DNS Updates", RFC 9664, DOI 10.17487/RFC9664, | Leases on DNS Updates", RFC 9664, DOI 10.17487/RFC9664, | |||
| October 2024, <https://www.rfc-editor.org/info/rfc9664>. | June 2025, <https://www.rfc-editor.org/info/rfc9664>. | |||
| 11.2. Informative References | 11.2. Informative References | |||
| [IAB-ARPA] "Internet Architecture Board statement on the registration | [IAB-ARPA] "Internet Architecture Board statement on the registration | |||
| of special use names in the ARPA domain", March 2017, | of special use names in the ARPA domain", March 2017, | |||
| <https://www.iab.org/documents/correspondence-reports- | <https://www.iab.org/documents/correspondence-reports- | |||
| documents/2017-2/iab-statement-on-the-registration-of- | documents/2017-2/iab-statement-on-the-registration-of- | |||
| special-use-names-in-the-arpa-domain/>. | special-use-names-in-the-arpa-domain/>. | |||
| [IPv6] IANA, "IANA IPv6 Special-Purpose Address Registry", | [IPv6] IANA, "IANA IPv6 Special-Purpose Address Registry", | |||
| skipping to change at line 1639 ¶ | skipping to change at line 1741 ¶ | |||
| [RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: | [RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: | |||
| Defeating Denial of Service Attacks which employ IP Source | Defeating Denial of Service Attacks which employ IP Source | |||
| Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, | Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, | |||
| May 2000, <https://www.rfc-editor.org/info/rfc2827>. | May 2000, <https://www.rfc-editor.org/info/rfc2827>. | |||
| [RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic | [RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic | |||
| Update", RFC 3007, DOI 10.17487/RFC3007, November 2000, | Update", RFC 3007, DOI 10.17487/RFC3007, November 2000, | |||
| <https://www.rfc-editor.org/info/rfc3007>. | <https://www.rfc-editor.org/info/rfc3007>. | |||
| [RFC3927] Cheshire, S., Aboba, B., and E. Guttman, "Dynamic | ||||
| Configuration of IPv4 Link-Local Addresses", RFC 3927, | ||||
| DOI 10.17487/RFC3927, May 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3927>. | ||||
| [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
| "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
| DOI 10.17487/RFC4861, September 2007, | DOI 10.17487/RFC4861, September 2007, | |||
| <https://www.rfc-editor.org/info/rfc4861>. | <https://www.rfc-editor.org/info/rfc4861>. | |||
| [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | ||||
| Address Autoconfiguration", RFC 4862, | ||||
| DOI 10.17487/RFC4862, September 2007, | ||||
| <https://www.rfc-editor.org/info/rfc4862>. | ||||
| [RFC6105] Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. | [RFC6105] Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. | |||
| Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, | Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, | |||
| DOI 10.17487/RFC6105, February 2011, | DOI 10.17487/RFC6105, February 2011, | |||
| <https://www.rfc-editor.org/info/rfc6105>. | <https://www.rfc-editor.org/info/rfc6105>. | |||
| [RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | [RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | |||
| Cheshire, "Internet Assigned Numbers Authority (IANA) | Cheshire, "Internet Assigned Numbers Authority (IANA) | |||
| Procedures for the Management of the Service Name and | Procedures for the Management of the Service Name and | |||
| Transport Protocol Port Number Registry", BCP 165, | Transport Protocol Port Number Registry", BCP 165, | |||
| RFC 6335, DOI 10.17487/RFC6335, August 2011, | RFC 6335, DOI 10.17487/RFC6335, August 2011, | |||
| skipping to change at line 1669 ¶ | skipping to change at line 1781 ¶ | |||
| <https://www.rfc-editor.org/info/rfc6760>. | <https://www.rfc-editor.org/info/rfc6760>. | |||
| [RFC6761] Cheshire, S. and M. Krochmal, "Special-Use Domain Names", | [RFC6761] Cheshire, S. and M. Krochmal, "Special-Use Domain Names", | |||
| RFC 6761, DOI 10.17487/RFC6761, February 2013, | RFC 6761, DOI 10.17487/RFC6761, February 2013, | |||
| <https://www.rfc-editor.org/info/rfc6761>. | <https://www.rfc-editor.org/info/rfc6761>. | |||
| [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | |||
| DOI 10.17487/RFC6762, February 2013, | DOI 10.17487/RFC6762, February 2013, | |||
| <https://www.rfc-editor.org/info/rfc6762>. | <https://www.rfc-editor.org/info/rfc6762>. | |||
| [RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | ||||
| P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | ||||
| DOI 10.17487/RFC6887, April 2013, | ||||
| <https://www.rfc-editor.org/info/rfc6887>. | ||||
| [RFC7084] Singh, H., Beebee, W., Donley, C., and B. Stark, "Basic | [RFC7084] Singh, H., Beebee, W., Donley, C., and B. Stark, "Basic | |||
| Requirements for IPv6 Customer Edge Routers", RFC 7084, | Requirements for IPv6 Customer Edge Routers", RFC 7084, | |||
| DOI 10.17487/RFC7084, November 2013, | DOI 10.17487/RFC7084, November 2013, | |||
| <https://www.rfc-editor.org/info/rfc7084>. | <https://www.rfc-editor.org/info/rfc7084>. | |||
| [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | |||
| Constrained-Node Networks", RFC 7228, | Constrained-Node Networks", RFC 7228, | |||
| DOI 10.17487/RFC7228, May 2014, | DOI 10.17487/RFC7228, May 2014, | |||
| <https://www.rfc-editor.org/info/rfc7228>. | <https://www.rfc-editor.org/info/rfc7228>. | |||
| [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | |||
| Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | |||
| <https://www.rfc-editor.org/info/rfc7413>. | <https://www.rfc-editor.org/info/rfc7413>. | |||
| [RFC7723] Kiesel, S. and R. Penno, "Port Control Protocol (PCP) | ||||
| Anycast Addresses", RFC 7723, DOI 10.17487/RFC7723, | ||||
| January 2016, <https://www.rfc-editor.org/info/rfc7723>. | ||||
| [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | |||
| Richardson, M., Jiang, S., Lemon, T., and T. Winters, | Richardson, M., Jiang, S., Lemon, T., and T. Winters, | |||
| "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | |||
| RFC 8415, DOI 10.17487/RFC8415, November 2018, | RFC 8415, DOI 10.17487/RFC8415, November 2018, | |||
| <https://www.rfc-editor.org/info/rfc8415>. | <https://www.rfc-editor.org/info/rfc8415>. | |||
| [RFC8520] Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage | [RFC8520] Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage | |||
| Description Specification", RFC 8520, | Description Specification", RFC 8520, | |||
| DOI 10.17487/RFC8520, March 2019, | DOI 10.17487/RFC8520, March 2019, | |||
| <https://www.rfc-editor.org/info/rfc8520>. | <https://www.rfc-editor.org/info/rfc8520>. | |||
| skipping to change at line 1712 ¶ | skipping to change at line 1833 ¶ | |||
| <https://www.rfc-editor.org/info/rfc8945>. | <https://www.rfc-editor.org/info/rfc8945>. | |||
| [ROADMAP] Cheshire, S., "Service Discovery Road Map", Work in | [ROADMAP] Cheshire, S., "Service Discovery Road Map", Work in | |||
| Progress, Internet-Draft, draft-cheshire-dnssd-roadmap-03, | Progress, Internet-Draft, draft-cheshire-dnssd-roadmap-03, | |||
| 23 October 2018, <https://datatracker.ietf.org/doc/html/ | 23 October 2018, <https://datatracker.ietf.org/doc/html/ | |||
| draft-cheshire-dnssd-roadmap-03>. | draft-cheshire-dnssd-roadmap-03>. | |||
| [SNAC-SIMPLE] | [SNAC-SIMPLE] | |||
| Lemon, T. and J. Hui, "Automatically Connecting Stub | Lemon, T. and J. Hui, "Automatically Connecting Stub | |||
| Networks to Unmanaged Infrastructure", Work in Progress, | Networks to Unmanaged Infrastructure", Work in Progress, | |||
| Internet-Draft, draft-ietf-snac-simple-05, 8 July 2024, | Internet-Draft, draft-ietf-snac-simple-06, 4 November | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-snac- | 2024, <https://datatracker.ietf.org/doc/html/draft-ietf- | |||
| simple-05>. | snac-simple-06>. | |||
| [SUB] IANA, "service.arpa Subdomain", | [SUB] IANA, "service.arpa Subdomain", | |||
| <https://www.iana.org/assignments/locally-served-dns- | <https://www.iana.org/assignments/locally-served-dns- | |||
| zones/locally-served-dns-zones>. | zones/locally-served-dns-zones>. | |||
| [SUDN] IANA, "Special-Use Domain Names", | [SUDN] IANA, "Special-Use Domain Names", | |||
| <https://www.iana.org/assignments/special-use-domain- | <https://www.iana.org/assignments/special-use-domain- | |||
| names>. | names>. | |||
| [ZC] Steinberg, D.H. and S. Cheshire, "Zero Configuration | [ZC] Steinberg, D.H. and S. Cheshire, "Zero Configuration | |||
| Networking: The Definitive Guide", O'Reilly Media, Inc., | Networking: The Definitive Guide", O'Reilly Media, Inc., | |||
| ISBN 9780596101008, December 2005. | ISBN 9780596101008, December 2005. | |||
| Appendix A. Testing Using Standard DNS Servers Compliant with RFC 2136 | Appendix A. Using Standard Authoritative DNS Servers Compliant with RFC | |||
| 2136 to Test SRP Requesters | ||||
| It may be useful to set up an authoritative DNS server for testing | For testing, it may be useful to set up an authoritative DNS server | |||
| that does not implement SRP. This can be done by configuring the | that does not implement SRP. This can be done by configuring the | |||
| server to listen on the anycast address or by advertising it in the | authoritative DNS server to listen on the anycast address or by | |||
| _dnssd-srp._tcp.<zone> SRV and _dnssd-srp-tls._tcp.<zone> record. It | advertising it in the "_dnssd-srp._tcp.<zone>" and | |||
| must be configured to be authoritative for "default.service.arpa" and | "_dnssd-srp-tls._tcp.<zone>" SRV records. It must be configured to | |||
| to accept updates from hosts on local networks for names under | be authoritative for "default.service.arpa." and to accept updates | |||
| "default.service.arpa" without authentication since such servers will | from hosts on local networks for names under "default.service.arpa." | |||
| not have support for FCFS authentication (Section 3.2.4.1). | without authentication since such authoritative DNS servers will not | |||
| have support for FCFS authentication (Section 3.2.4.1). | ||||
| An authoritative DNS server configured in this way will be able to | An authoritative DNS server configured in this way will be able to | |||
| successfully accept and process SRP Updates from requestors that send | successfully accept and process SRP Updates from requesters that send | |||
| SRP updates. However, no prerequisites will be applied; this means | SRP updates. However, no prerequisites will be applied; this means | |||
| that the test server will accept internally inconsistent SRP Updates | that the test authoritative DNS server will accept internally | |||
| and will not stop two SRP Updates sent by different services that | inconsistent SRP Updates and will not stop two SRP Updates sent by | |||
| claim the same name or names from overwriting each other. | different services that claim the same name or names from overwriting | |||
| each other. | ||||
| Since SRP Updates are signed with keys, validation of the SIG(0) | Since SRP Updates are signed with keys, validation of the SIG(0) | |||
| algorithm used by the requestor can be done by manually installing | algorithm used by the requester can be done by manually installing | |||
| the requestor's public key on the DNS server that will be receiving | the requester's public key on the authoritative DNS server that will | |||
| the updates. The key can then be used to authenticate the SRP update | be receiving the updates. The key can then be used to authenticate | |||
| and can be used as a requirement for the update. An example | the SRP Update and can be used as a requirement for the update. An | |||
| configuration for testing SRP using BIND 9 is given in Appendix C. | example configuration for testing SRP using BIND 9 is given in | |||
| Appendix C. | ||||
| Appendix B. How to Allow SRP Requestors to Update Standard Servers | Appendix B. How to Allow SRP Requesters to Update Standard Servers | |||
| Compliant with RFC 2136 | Compliant with RFC 2136 | |||
| Ordinarily, SRP Updates will fail when sent to a server compliant | Ordinarily, CNN SRP Updates sent to an authoritative DNS server that | |||
| with [RFC2136] that does not implement SRP because the zone being | implements standard DNS Update [RFC2136] but not SRP will fail | |||
| updated is "default.service.arpa" and because no DNS server that is | because the zone being updated is "default.service.arpa." and because | |||
| not an SRP registrar would normally be configured to be authoritative | no authoritative DNS server that is not an SRP registrar would | |||
| for "default.service.arpa". Therefore, a requestor that sends an SRP | normally be configured to be authoritative for | |||
| Update can tell that the receiving server does not support SRP but | "default.service.arpa.". Therefore, a requester that sends an SRP | |||
| does support [RFC2136] because the RCODE will either be NotZone, | Update can tell that the receiving authoritative DNS server does not | |||
| NotAuth, or Refused or because there is no response to the update | support SRP but does support standard DNS Update [RFC2136] because | |||
| request (when using the anycast address). | the RCODE will either be NotZone, NotAuth, or Refused or because | |||
| there is no response to the update request (when using the anycast | ||||
| address). | ||||
| In this case, a requestor MAY attempt to register itself using | In this case, a requester MAY attempt to register itself using normal | |||
| regular DNS updates described in [RFC2136]. To do so, it must | DNS updates [RFC2136]. To do so, it must discover the default | |||
| discover the default registration zone and the DNS server designated | registration zone and the authoritative DNS server designated to | |||
| to receive updates for that zone, as described earlier, using the | receive updates for that zone, as described earlier, using the | |||
| _dns-update._udp SRV record. It can then send the update to the port | _dns-update._udp SRV record. It can then send the update to the port | |||
| and host pointed to by the SRV record, and it is expected to use | and host pointed to by the SRV record, and it is expected to use | |||
| appropriate prerequisites to avoid overwriting competing records. | appropriate prerequisites to avoid overwriting competing records. | |||
| Such updates are out of scope for SRP, and a requestor that | Such updates are out of scope for SRP, and a requester that | |||
| implements SRP MUST first attempt to use SRP to register itself and | implements SRP MUST first attempt to use SRP to register itself and | |||
| only attempt to use backwards capability with [RFC2136] if that | only attempt to use backwards capability with normal DNS Update | |||
| fails. Although the owner name for the SRV record specifies UDP for | [RFC2136] if that fails. Although the owner name of the SRV record | |||
| updates, it is also possible to use TCP, and TCP SHOULD be required | for DNS Update (_dns-update._udp) specifies UDP, it is also possible | |||
| to prevent spoofing. | to use TCP, and TCP SHOULD be required to prevent spoofing. | |||
| Appendix C. Sample BIND9 Configuration for "default.service.arpa." | Appendix C. Sample BIND 9 Configuration for "default.service.arpa." | |||
| 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.; }; | |||
| }; | }; | |||
| Figure 1: Zone Configuration in named.conf | Figure 1: Zone Configuration in named.conf | |||
| $ORIGIN . | $TTL 57600 ; 16 hours | |||
| $TTL 57600 ; 16 hours | @ IN SOA ns postmaster ( | |||
| default.service.arpa IN SOA ns3.default.service.arpa. | 2951053287 ; serial | |||
| postmaster.default.service.arpa. ( | 3600 ; refresh (1 hour) | |||
| 2951053287 ; serial | 1800 ; retry (30 minutes) | |||
| 3600 ; refresh (1 hour) | 604800 ; expire (1 week) | |||
| 1800 ; retry (30 minutes) | 3600 ; minimum (1 hour) | |||
| 604800 ; expire (1 week) | ) | |||
| 3600 ; minimum (1 hour) | NS ns | |||
| ) | ns AAAA 2001:db8:0:2::1 | |||
| NS ns3.default.service.arpa. | ||||
| SRV 0 0 53 ns3.default.service.arpa. | ||||
| $ORIGIN default.service.arpa. | ||||
| $TTL 3600 ; 1 hour | ||||
| _ipps._tcp PTR demo._ipps._tcp | ||||
| $ORIGIN _ipps._tcp.default.service.arpa. | ||||
| demo TXT "0" | ||||
| SRV 0 0 9992 demo.default.service.arpa. | ||||
| $ORIGIN _udp.default.service.arpa. | ||||
| $TTL 3600 ; 1 hour | ||||
| _dns-update PTR ns3.default.service.arpa. | ||||
| $ORIGIN _tcp.default.service.arpa. | ||||
| _dnssd-srp PTR ns3.default.service.arpa. | ||||
| $ORIGIN default.service.arpa. | ||||
| $TTL 300 ; 5 minutes | ||||
| ns3 AAAA 2001:db8:0:1::1 | ||||
| $TTL 3600 ; 1 hour | ||||
| demo AAAA 2001:db8:0:2::1 | ||||
| KEY 0 3 13 ( | ||||
| qweEmaaq0FAWok5//ftuQtZgiZoiFSUsm0srWREdywQU | ||||
| 9dpvtOhrdKWUuPT3uEFF5TZU6B4q1z1I662GdaUwqg== | ||||
| ); alg = ECDSAP256SHA256 ; key id = 15008 | ||||
| AAAA ::1 | ||||
| Figure 2: Example Zone File | $TTL 3600 ; 1 hour | |||
| ; Autoconguration bootstrap records | ||||
| _dnssd-srp._tcp SRV 0 0 53 ns | ||||
| _dnssd-srp-tls._tcp SRV 0 0 853 ns | ||||
| ; Service Discovery Instruction | ||||
| _ipps._tcp PTR demo._ipps._tcp | ||||
| ; Service Description Instruction | ||||
| demo._ipps._tcp SRV 0 0 631 demohost | ||||
| TXT "" | ||||
| ; Host Description Instruction | ||||
| demohost AAAA 2001:db8:0:2::2 | ||||
| KEY 0 3 13 ( | ||||
| qweEmaaq0FAWok5//ftuQtZgiZoiFSUsm0srWREdywQU | ||||
| 9dpvtOhrdKWUuPT3uEFF5TZU6B4q1z1I662GdaUwqg== | ||||
| ); alg = ECDSAP256SHA256 ; key id = 14495 | ||||
| Figure 2: Example Zone File | ||||
| Acknowledgments | Acknowledgments | |||
| Thanks to Toke Høiland-Jørgensen, Jonathan Hui, Esko Dijk, Kangping | Thanks to Toke Høiland-Jørgensen, Jonathan Hui, Esko Dijk, Kangping | |||
| Dong, and Abtin Keshavarzian for their thorough technical reviews. | Dong, and Abtin Keshavarzian for their thorough technical reviews. | |||
| Thanks to Kangping and Abtin as well for testing the document by | Thanks to Kangping and Abtin as well for testing the document by | |||
| doing an independent implementation. Thanks to Tamara Kemper for | doing an independent implementation. Thanks to Tamara Kemper for | |||
| doing a nice developmental edit, Tim Wattenberg for doing an SRP | doing a nice developmental edit, Tim Wattenberg for doing an SRP | |||
| requestor proof-of-concept implementation at the Montreal Hackathon | requester proof-of-concept implementation at the Montreal Hackathon | |||
| at IETF 102, and Tom Pusateri for reviewing during the hackathon and | at IETF 102, and Tom Pusateri for reviewing during the hackathon and | |||
| afterwards. Thanks to Esko for a really thorough second Last Call | afterwards. Thanks to Esko for a really thorough second Last Call | |||
| review. Thanks also to Nathan Dyck, Gabriel Montenegro, Kangping | review. Thanks also to Nathan Dyck, Gabriel Montenegro, Kangping | |||
| Dong, Martin Turon, and Michael Cowan for their detailed second last | Dong, Martin Turon, and Michael Cowan for their detailed second last | |||
| call reviews. Thanks to Patrik Fältström, Dhruv Dhody, David Dong, | call reviews. Thanks to Patrik Fältström, Dhruv Dhody, David Dong, | |||
| Joey Salazar, Jean-Michel Combes, and Joerg Ott for their respective | Joey Salazar, Jean-Michel Combes, and Joerg Ott for their respective | |||
| directorate reviews. Thanks to Paul Wouters for a _really_ detailed | directorate reviews. Thanks to Paul Wouters for a _really_ detailed | |||
| IESG review! Thanks also to the other IESG members who provided | IESG review! Thanks also to the other IESG members who provided | |||
| comments or simply took the time to review the document. | comments or simply took the time to review the document. | |||
| End of changes. 225 change blocks. | ||||
| 828 lines changed or deleted | 952 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||