| rfc9665.original | rfc9665.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force T. Lemon | Internet Engineering Task Force (IETF) T. Lemon | |||
| Internet-Draft S. Cheshire | Request for Comments: 9665 S. Cheshire | |||
| Intended status: Standards Track Apple Inc. | Category: Standards Track Apple Inc. | |||
| Expires: 5 September 2024 4 March 2024 | ISSN: 2070-1721 June 2025 | |||
| Service Registration Protocol for DNS-Based Service Discovery | Service Registration Protocol for DNS-Based Service Discovery | |||
| draft-ietf-dnssd-srp-25 | ||||
| Abstract | Abstract | |||
| The Service Registration Protocol for DNS-Based Service Discovery | The Service Registration Protocol (SRP) for DNS-based Service | |||
| uses the standard DNS Update mechanism to enable DNS-Based Service | Discovery (DNS-SD) uses the standard DNS Update mechanism to enable | |||
| Discovery using only unicast packets. This makes it possible to | DNS-SD using only unicast packets. This makes it possible to deploy | |||
| deploy DNS Service Discovery without multicast, which greatly | DNS-SD without multicast, which greatly improves scalability and | |||
| improves scalability and improves performance on networks where | improves performance on networks where multicast service is not an | |||
| multicast service is not an optimal choice, particularly IEEE 802.11 | optimal choice, particularly IEEE 802.11 (Wi-Fi) and IEEE 802.15.4 | |||
| (Wi-Fi) and IEEE 802.15.4 networks. DNS-SD Service registration uses | networks. DNS-SD Service registration uses public keys and SIG(0) to | |||
| public keys and SIG(0) to allow services to defend their | allow services to defend their registrations. | |||
| registrations. | ||||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| The latest revision of this draft can be found at https://dnssd- | ||||
| wg.github.io/draft-ietf-dnssd-srp/draft-ietf-dnssd-srp.html. Status | ||||
| information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-dnssd-srp/. | ||||
| Discussion of this document takes place on the DNS-SD Working Group | ||||
| mailing list (mailto:dnssd@ietf.org), which is archived at | ||||
| https://mailarchive.ietf.org/arch/browse/dnssd/. Subscribe at | ||||
| https://www.ietf.org/mailman/listinfo/dnssd/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/dnssd-wg/draft-ietf-dnssd-srp. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 5 September 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
| 2. Conventions and Terminology Used in This Document . . . . . . 6 | 2. Conventions and Terminology Used in This Document | |||
| 3. Service Registration Protocol . . . . . . . . . . . . . . . . 6 | 3. Service Registration Protocol | |||
| 3.1. Protocol Variants . . . . . . . . . . . . . . . . . . . . 7 | 3.1. Protocol Variants | |||
| 3.1.1. Full-featured Hosts . . . . . . . . . . . . . . . . . 7 | 3.1.1. Full-Featured Hosts | |||
| 3.1.2. Constrained Hosts . . . . . . . . . . . . . . . . . . 7 | 3.1.2. Constrained Hosts | |||
| 3.1.3. Why two variants? . . . . . . . . . . . . . . . . . . 8 | 3.1.3. Why two variants? | |||
| 3.2. Protocol Details . . . . . . . . . . . . . . . . . . . . 8 | 3.2. Protocol Details | |||
| 3.2.1. What to publish . . . . . . . . . . . . . . . . . . . 8 | 3.2.1. What to Publish | |||
| 3.2.2. Where to publish it . . . . . . . . . . . . . . . . . 9 | 3.2.2. Where to Publish It | |||
| 3.2.3. How to publish it . . . . . . . . . . . . . . . . . . 10 | 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 DNS Update as specified in RFC2136 . . . . . . 10 | from DNS Update | |||
| 3.2.3.2. Retransmission Strategy . . . . . . . . . . . . . 11 | 3.2.3.2. Retransmission Strategy | |||
| 3.2.3.3. Successive Updates . . . . . . . . . . . . . . . 11 | 3.2.3.3. Successive Updates | |||
| 3.2.4. How to secure it . . . . . . . . . . . . . . . . . . 11 | 3.2.4. How to Secure It | |||
| 3.2.4.1. First-Come First-Served Naming . . . . . . . . . 11 | 3.2.4.1. FCFS Naming | |||
| 3.2.5. SRP Requestor Behavior . . . . . . . . . . . . . . . 12 | 3.2.5. SRP Requester Behavior | |||
| 3.2.5.1. Public/Private key pair generation and storage . 12 | 3.2.5.1. Public/Private Key Pair Generation and Storage | |||
| 3.2.5.2. Name Conflict Handling . . . . . . . . . . . . . 13 | 3.2.5.2. Name Conflict Handling | |||
| 3.2.5.3. Record Lifetimes . . . . . . . . . . . . . . . . 13 | 3.2.5.3. Record Lifetimes | |||
| 3.2.5.4. Compression in SRV records . . . . . . . . . . . 13 | 3.2.5.4. Compression in SRV Records | |||
| 3.2.5.5. Removing published services . . . . . . . . . . . 14 | 3.2.5.5. Removing Published Services | |||
| 3.3. Validation and Processing of SRP Updates . . . . . . . . 15 | 3.3. Validation and Processing of SRP Updates | |||
| 3.3.1. Validation of DNS Update Add and Delete RRs . . . . . 15 | 3.3.1. Validation of DNS Update Add and Delete RRs | |||
| 3.3.1.1. Service Discovery Instruction . . . . . . . . . . 16 | 3.3.1.1. Service Discovery Instruction | |||
| 3.3.1.2. Service Description Instruction . . . . . . . . . 17 | 3.3.1.2. Service Description Instruction | |||
| 3.3.1.3. Host Description Instruction . . . . . . . . . . 17 | 3.3.1.3. Host Description Instruction | |||
| 3.3.2. Valid SRP Update Requirements . . . . . . . . . . . . 18 | 3.3.2. Valid SRP Update Requirements | |||
| 3.3.3. FCFS Name And Signature Validation . . . . . . . . . 18 | 3.3.3. FCFS Name and Signature Validation | |||
| 3.3.4. Handling of Service Subtypes . . . . . . . . . . . . 19 | 3.3.4. Handling of Service Subtypes | |||
| 3.3.5. SRP Update response . . . . . . . . . . . . . . . . . 20 | 3.3.5. SRP Update Response | |||
| 3.3.6. Optional Behavior . . . . . . . . . . . . . . . . . . 20 | 3.3.6. Optional Behavior | |||
| 4. TTL Consistency . . . . . . . . . . . . . . . . . . . . . . . 21 | 4. TTL Consistency | |||
| 5. Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 5. Maintenance | |||
| 5.1. Cleaning up stale data . . . . . . . . . . . . . . . . . 22 | 5.1. Cleaning Up Stale Data | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 6. Security Considerations | |||
| 6.1. Source Validation . . . . . . . . . . . . . . . . . . . . 24 | 6.1. Source Validation | |||
| 6.2. Other DNS updates . . . . . . . . . . . . . . . . . . . . 24 | 6.2. Other DNS Updates | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . . 25 | Updates | |||
| 6.4. Security of local service discovery . . . . . . . . . . . 25 | 6.4. Security of Local Service Discovery | |||
| 6.5. SRP Registrar Authentication . . . . . . . . . . . . . . 26 | 6.5. SRP Registrar Authentication | |||
| 6.6. Required Signature Algorithm . . . . . . . . . . . . . . 26 | 6.6. Required Signature Algorithm | |||
| 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 26 | 7. Privacy Considerations | |||
| 8. Domain Name Reservation Considerations . . . . . . . . . . . 27 | 8. Domain Name Reservation Considerations | |||
| 8.1. Users . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 8.1. Users | |||
| 8.2. Application Software . . . . . . . . . . . . . . . . . . 27 | 8.2. Application Software | |||
| 8.3. Name Resolution APIs and Libraries . . . . . . . . . . . 27 | 8.3. Name Resolution APIs and Libraries | |||
| 8.4. Caching DNS Servers . . . . . . . . . . . . . . . . . . . 28 | 8.4. Recursive Resolvers | |||
| 8.5. Authoritative DNS Servers . . . . . . . . . . . . . . . . 29 | 8.5. Authoritative DNS Servers | |||
| 8.6. DNS Server Operators . . . . . . . . . . . . . . . . . . 29 | 8.6. DNS Server Operators | |||
| 8.7. DNS Registries/Registrars . . . . . . . . . . . . . . . . 29 | 8.7. DNS Registries/Registrars | |||
| 9. Delegation of 'service.arpa.' . . . . . . . . . . . . . . . . 29 | 9. Delegation of "service.arpa." | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | 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 . . . . . . . . . . . . . . . . 30 | Special-Use Domain Name | |||
| 10.2. Subdomains of 'service.arpa.' . . . . . . . . . . . . . 30 | 10.2. Addition of "service.arpa." to the Locally-Served Zones | |||
| 10.3. Service Name registrations . . . . . . . . . . . . . . . 30 | Registry | |||
| 10.4. 'dnssd-srp' Service Name . . . . . . . . . . . . . . . . 31 | 10.3. Subdomains of "service.arpa." | |||
| 10.5. 'dnssd-srp-tls' Service Name . . . . . . . . . . . . . . 31 | 10.4. Service Name Registrations | |||
| 10.6. Anycast Address . . . . . . . . . . . . . . . . . . . . 32 | 10.4.1. "dnssd-srp" Service Name | |||
| 11. Implementation Status . . . . . . . . . . . . . . . . . . . . 32 | 10.4.2. "dnssd-srp-tls" Service Name | |||
| 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 33 | 10.5. Anycast Address | |||
| 13. Normative References . . . . . . . . . . . . . . . . . . . . 33 | 11. References | |||
| 14. Informative References . . . . . . . . . . . . . . . . . . . 36 | 11.1. Normative References | |||
| Appendix A. Testing using standard RFC2136-compliant DNS | 11.2. Informative References | |||
| servers . . . . . . . . . . . . . . . . . . . . . . . . . 38 | Appendix A. Using Standard Authoritative DNS Servers Compliant | |||
| Appendix B. How to allow SRP requestors to update standard | with RFC 2136 to Test SRP Requesters | |||
| RFC2136-compliant servers . . . . . . . . . . . . . . . . 39 | Appendix B. How to Allow SRP Requesters to Update Standard Servers | |||
| Appendix C. Sample BIND9 configuration for | Compliant with RFC 2136 | |||
| default.service.arpa. . . . . . . . . . . . . . . . . . . 39 | Appendix C. Sample BIND 9 Configuration for | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 40 | "default.service.arpa." | |||
| Acknowledgments | ||||
| Authors' Addresses | ||||
| 1. Introduction | 1. Introduction | |||
| DNS-Based Service Discovery [RFC6763] is a component of Zero | DNS-SD [RFC6763] is a component of Zero Configuration Networking | |||
| Configuration Networking [RFC6760] [ZC] [ROADMAP]. | [RFC6760] [ZC] [ROADMAP]. | |||
| This document describes an enhancement to DNS-Based Service Discovery | This document describes an enhancement to DNS-SD that allows servers | |||
| [RFC6763] (DNS-SD) that allows servers to register the services they | to register the services they offer using the DNS protocol over | |||
| offer using the DNS protocol rather than using Multicast DNS | unicast rather than using Multicast DNS (mDNS) [RFC6762]. There is | |||
| [RFC6762] (mDNS). There is already a large installed base of DNS-SD | already a large installed base of DNS-SD clients that can discover | |||
| clients that can discover services using the DNS protocol (e.g. | services using the DNS protocol (e.g., Android, Windows, Linux, Apple | |||
| 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 service is required. The document is expected to | of networks where DNS-SD service is required. The document is | |||
| provide sufficient information to allow interoperable implementation | expected to provide sufficient information to allow interoperable | |||
| of the registration protocol. | implementation of the Service Registration Protocol. | |||
| DNS-Based Service Discovery (DNS-SD) allows services to advertise the | DNS-SD allows servers to publish the information required to access | |||
| fact that they provide service, and to provide the information | the services they provide. DNS-SD clients can then discover the set | |||
| required to access that service. DNS-SD clients can then discover | of service instances of a particular type that are available. They | |||
| the set of services of a particular type that are available. They | can then select an instance from among those that are available and | |||
| can then select a service from among those that are available and | obtain the information required to use it. Although DNS-SD using the | |||
| obtain the information required to use it. Although DNS Service | DNS protocol can be more efficient and versatile than using mDNS, it | |||
| Discovery (DNS-SD) using the DNS protocol (as opposed to mDNS) can be | is not common in practice because of the difficulties associated with | |||
| more efficient and versatile, it is not common in practice, because | updating authoritative DNS services with service information. | |||
| of the difficulties associated with updating authoritative DNS | ||||
| services with service information. | ||||
| Existing practice for updating DNS zones is to either manually enter | The existing practice for updating DNS zones is either to enter new | |||
| new data, or else use DNS Update [RFC2136]. Unfortunately DNS Update | data manually or to use DNS Update [RFC2136]. Unfortunately, DNS | |||
| requires either that the authoritative DNS server automatically trust | Update requires either: | |||
| updates, or else that the DNS Update requestor have some kind of | ||||
| shared secret or public key that is known to the DNS server and can | * that the authoritative DNS server automatically trust updates or | |||
| be used to authenticate the update. Furthermore, DNS Update can be a | ||||
| fairly chatty process, requiring multiple round trips with different | * that the DNS Update requester have some kind of shared secret or | |||
| conditional predicates to complete the update process. | public key that is known to the authoritative DNS server and can | |||
| be used to authenticate the update. | ||||
| Furthermore, DNS Update can be a fairly chatty process, requiring | ||||
| multiple roundtrips with different conditional predicates to complete | ||||
| 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 (FCFS) | SRP also adds a feature called "First Come, First Served Naming" (or | |||
| Naming, which allows the requestor to claim a name that is not yet in | "FCFS Naming"), which allows the requester to: | |||
| use, and, using SIG(0) [RFC2931], to authenticate both the initial | ||||
| claim and subsequent updates. This prevents name conflicts, since a | * claim a name that is not yet in use, and | |||
| second SRP requestor attempting to claim the same name will not | ||||
| possess the SIG(0) key used by the first requestor to claim it, and | * authenticate, using SIG(0) [RFC2931], both the initial claim (to | |||
| so its claim will be rejected and the second requestor will have to | ensure it has not been modified in transit) and subsequent updates | |||
| choose a new name. | (to ensure they come from the same entity that performed the | |||
| initial claim). | ||||
| This prevents a new service instance from "stealing" a name that is | ||||
| already in use: A second SRP requester attempting to claim an | ||||
| existing name will not possess the SIG(0) key used by the first | ||||
| requester to claim it. Because of this, its claim will be rejected. | ||||
| This will force it to choose a new name. | ||||
| 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 link | reason that mDNS [RFC6762] allows arbitrary hosts on a single IP link | |||
| to advertise services [RFC6763], relying on whatever service is | to advertise services [RFC6763], relying on whatever service is | |||
| advertised to provide authentication as a part of its protocol rather | advertised to provide authentication as a part of its protocol 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. Because of this 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, and so 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 | Finally, SRP adds the concept of a "lease" [RFC9664], analogous to | |||
| Dynamic Host Configuration Protocol [RFC8415]. The SRP registration | leases in DHCP [RFC2131] [RFC8415]. The SRP registration itself has | |||
| itself has a lease which may be on the order of an hour; if the | a lease that may be on the order of two hours; if the requester does | |||
| requestor does not renew the lease before it has elapsed, the | not renew the lease before it has elapsed, the registration is | |||
| registration is removed. The claim on the name can have a longer | removed. The claim on the name can have a longer lease so that | |||
| lease, so that another requestor cannot claim the name, even though | another requester cannot immediately claim the name, even though the | |||
| the registration has expired. | registration itself has expired. | |||
| The Service Registration Protocol for DNS-SD (SRP), specified in this | The Service Registration Protocol for DNS-SD specified in this | |||
| document, provides a reasonably secure mechanism for publishing this | document provides a reasonably secure mechanism for publishing this | |||
| information. Once published, these services can be readily | information. Once published, these services can be readily | |||
| discovered by DNS-SD clients using standard DNS lookups. | discovered by DNS-SD clients using standard DNS lookups. | |||
| The DNS-SD specification ([RFC6763], Section 10, “Populating the DNS | Section 10 of the DNS-SD specification [RFC6763] briefly discusses | |||
| with Information”), briefly discusses ways that servers can publish | ways that servers can advertise the services they provide in the DNS | |||
| their information in the DNS namespace. In the case of mDNS, it | namespace. In the case of mDNS, it allows servers to advertise their | |||
| allows servers to publish their information on the local link, using | services on the local link, using names in the "local." namespace, | |||
| names in the ".local" namespace, which makes their services directly | which makes their services directly discoverable by peers attached to | |||
| discoverable by peers attached to that same local link. | that same local link. | |||
| RFC6763 also allows clients to discover services using the DNS | DNS-SD [RFC6763] also allows clients to discover services by using | |||
| protocol [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, but | done by having a system administrator manually configure service | |||
| manually populating DNS authoritative server databases is costly and | information in the DNS; however, manually populating DNS | |||
| potentially error-prone, and requires a knowledgeable network | authoritative server databases is costly and potentially error-prone | |||
| 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 [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. This document describes a | services are easily advertised using mDNS. The present document | |||
| solution more suitable for networks where multicast is inefficient, | describes a solution more suitable for networks where multicast is | |||
| or where sleepy devices are common, by supporting both offering of | inefficient, or where sleepy devices are common, by supporting the | |||
| services, and 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 BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 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 [RFC2136] [RFC3007] to | Services that implement SRP use DNS Update [RFC2136] with SIG(0) | |||
| publish service information in the DNS. Two variants exist, one for | [RFC3007] to publish service information in the DNS. Two variants | |||
| full-featured hosts, and one for devices designed for "Constrained- | exist: One for full-featured hosts and one for devices designed for | |||
| Node Networks" [RFC7228]. An SRP registrar is most likely an | Constrained-Node Networks (CNNs) [RFC7228]. An SRP registrar is most | |||
| authoritative DNS server, or else is updating an authoritative DNS | likely an authoritative DNS server or is a source of data for one or | |||
| server. There is no requirement that the server that is receiving | more authoritative DNS servers. There is no requirement that the | |||
| SRP updates be the same server that is answering queries that return | authoritative DNS server that is receiving SRP Updates be the same | |||
| 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 Service Registration | Section 11 of the DNS-SD specification [RFC6763]. If this process | |||
| protocol is not discoverable on the local network using this | does not produce a default registration domain, the SRP registrar is | |||
| mechanism. Other discovery mechanisms are possible, but are out of | not discoverable on the local network using this mechanism. Other | |||
| scope for this document. | discovery mechanisms are possible, but they are out of scope for this | |||
| document. | ||||
| Manual configuration of the registration domain can be done either by | Configuration of the registration domain can be done either: | |||
| querying the list of available registration domains | ||||
| ("r._dns-sd._udp") and allowing the user to select one from the UI, | * by querying the list of available registration domains | |||
| or by any other means appropriate to the particular use case being | ("r._dns-sd._udp") and allowing the user to select one from the | |||
| addressed. Full-featured devices construct the names of the SRV, | UI, or | |||
| TXT, and PTR records describing their service(s) as subdomains of the | ||||
| chosen service registration domain. For these names they then | * by any other means appropriate to the particular use case being | |||
| addressed. | ||||
| Full-featured devices construct the names of the SRV, TXT, and PTR | ||||
| records describing their service or services as subdomains of the | ||||
| 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 Section 6.1 of [RFC8765]. Having discovered the enclosing | queries as described in Section 6.1 of the DNS Push Notification | |||
| DNS zone, they query for the "_dnssd-srp._tcp.<zone>" SRV record to | specification [RFC8765]. Having discovered the enclosing DNS zone, | |||
| discover the server to which they can send SRP updates. Hosts that | they query for the "_dnssd-srp._tcp.<zone>" SRV record to discover | |||
| the SRP registrar to which they can send SRP Updates. Hosts that | ||||
| support SRP Updates using TLS use the "_dnssd-srp-tls._tcp.<zone>" | support SRP Updates using TLS use the "_dnssd-srp-tls._tcp.<zone>" | |||
| SRV record instead. | 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 such | computers, laptops, powered peripherals with network connections | |||
| as printers, home routers, and even battery-operated devices such as | (such as printers and home routers), and even battery-operated | |||
| 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 Constrained-Node Networks [RFC7228] some | For devices designed for CNNs [RFC7228], some simplifications are | |||
| simplifications are available. Instead of being configured with (or | available. Instead of being configured with (or discovering) the | |||
| discovering) the service registration domain, the special-use domain | service registration domain, the special-use domain name [RFC6761] | |||
| name (see [RFC6761]) "default.service.arpa" is used. The details of | "default.service.arpa." is used. The details of how SRP registrars | |||
| how SRP registrar(s) are discovered will be specific to the | are discovered will be specific to the constrained network; | |||
| constrained network, and therefore we do not suggest a specific | therefore, we do not suggest a specific mechanism here. | |||
| 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 Constrained-Node Network supporting SRP to | responsibility of a CNN supporting SRP to provide at least one | |||
| provide one or more registrar addresses. It is the responsibility of | registrar address and port. It is the responsibility of the | |||
| the registrar supporting a Constrained-Node Network to handle the | registrar supporting a CNN to handle the updates appropriately. In | |||
| updates appropriately. In some network environments, updates may be | some network environments, updates may be accepted directly into a | |||
| accepted directly into a local "default.service.arpa" zone, which has | local "default.service.arpa." zone, which has only local visibility. | |||
| only local visibility. In other network environments, updates for | In other network environments, updates for names ending in | |||
| names ending in "default.service.arpa" may be rewritten by the | "default.service.arpa." may be rewritten by the registrar to names | |||
| 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 Constrained-Node Networks may have very limited | that typically use CNNs may have very limited battery capacity. The | |||
| battery storage. The series of DNS lookups required to discover an | series of DNS lookups required to discover an SRP registrar and then | |||
| SRP registrar and then communicate with it will increase the energy | communicate with it will increase the energy required to advertise a | |||
| required to advertise a service; for low-power devices, the | service; for low-power devices, the additional flexibility this | |||
| additional flexibility this provides does not justify the additional | provides does not justify the additional use of energy. It is also | |||
| use of energy. It is also fairly typical of such networks that some | fairly typical of such networks that some network service information | |||
| network service information is obtained as part of the process of | is obtained as part of the process of joining the network; thus, this | |||
| joining the network, and so this can be relied upon to provide nodes | can be relied upon to provide nodes with the information they need. | |||
| with the information they need. | ||||
| Networks that are not constrained networks 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: how to know what to | We will discuss several parts to this process: | |||
| publish, how to know where to publish it (under what name), how to | ||||
| publish it, and how to secure its publication. In Section 5, we | ||||
| specify how to maintain the information once published. | ||||
| 3.2.1. What to publish | * 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 publish it (Section 3.2.3), | ||||
| * how to secure its publication (Section 3.2.4), and | ||||
| * how to maintain the information once published (Section 5). | ||||
| SRP Updates are sent by SRP requestors to SRP registrars. Three | 3.2.1. What to Publish | |||
| types of instructions appear in an SRP update: Service Discovery | ||||
| SRP Updates are sent by SRP requesters to SRP registrars. Three | ||||
| 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 RRs that | instructions. These instructions are made up of DNS Update Resource | |||
| are either adds or deletes. The types of records that are added, | Records (RRs) that are either adds or deletes. The types of records | |||
| updated and removed in each of these instructions, as well as the | that are added, updated, and removed in each of these instructions, | |||
| constraints that apply to them, are described in Section 3.3. An SRP | as well as the constraints that apply to them, are described in | |||
| Update is a DNS Update message that is constructed so as to meet the | Section 3.3. An SRP Update is a DNS Update message [RFC2136] that is | |||
| constraints described in that section. The following is a brief | constructed so as to meet the constraints described in that section. | |||
| overview of what is included in a typical SRP Update: | The following is a brief overview of what is included in a typical | |||
| SRP Update: | ||||
| * PTR Resource Record (RR) for services, which map from a generic | * Service Discovery PTR RR(s) for service(s), which map from a | |||
| service type (or subtype) name to a specific Service Instance | generic service type (or subtype(s)) to a specific service | |||
| Name. | instance name [RFC6763]. | |||
| * For any Service Instance Name ([RFC6763], Section 4.1), an SRV RR, | ||||
| one or more TXT RRs, and a KEY RR. Although in principle DNS-SD | * For each service instance name, an SRV RR, one or more TXT RRs, | |||
| Service Description records can include other record types with | and a KEY RR. Although, in principle, DNS-SD Service Description | |||
| the same Service Instance Name, in practice they rarely do. SRP | records can include other record types with the same service | |||
| does not permit other record types. The KEY RR is used to support | instance name, in practice, they rarely do. Currently, SRP does | |||
| FCFS naming, and has no specific meaning for DNS-SD lookups. SRV | not permit other record types. The KEY RR is used to support FCFS | |||
| records for all services described in an SRP update point to the | Naming and has no specific meaning for DNS-SD lookups. SRV | |||
| records for all services described in an SRP Update point to the | ||||
| same hostname. | same hostname. | |||
| * There is never more than one hostname in a single SRP update. The | ||||
| hostname has one or more address RRs (AAAA or A) and a KEY RR | * There is always exactly one hostname in a single SRP Update. A | |||
| (used for FCFS naming). Depending on the use case, an SRP | DNS Update containing more than one hostname is not an SRP Update. | |||
| requestor may be required to suppress some addresses that would | The hostname has one or more address RRs (AAAA or A) and a KEY RR | |||
| (used for FCFS Naming). Depending on the use case, an SRP | ||||
| requester may be required to suppress some addresses that would | ||||
| not be usable by hosts discovering the 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 RR | 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 source for | the KEY RR, which is defined in the specification for how to store | |||
| information about what to publish; the reason for summarizing this | Diffie-Hellman Keys in the DNS [RFC2539]. These specifications | |||
| here is to provide the reader with enough information about what will | should be considered the definitive sources for information about | |||
| be published that the service registration process can be understood | what to publish; the reason for summarizing this here is to provide | |||
| at a high level without first learning the full details of DNS-SD. | the reader with enough information about what will be published that | |||
| Also, the "Service Instance Name" is an important aspect of FCFS | the service registration process can be understood at a high level | |||
| 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 uses a single namespace, ".local", which is valid on | Multicast DNS (mDNS) uses a single namespace, "local.". Subdomains | |||
| the local link. This convenience is not available for DNS-SD using | of "local." are specific to the local link on which they are | |||
| the DNS protocol: services must exist in some specific DNS namespace | advertised. This convenience is not available for DNS-SD using the | |||
| that is chosen either by the network operator, or automatically. | DNS protocol: Services must exist in some specific DNS namespace that | |||
| 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], "Discovery of Browsing and Registration Domains". | DNS-SD specification [RFC6763]. | |||
| Devices made for Constrained-Node Networks register in the special | Devices made for CNNs register in the special-use domain name | |||
| use domain name [RFC6761] "default.service.arpa", and let the SRP | [RFC6761] "default.service.arpa." and let the SRP registrar handle | |||
| 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; this means that it's possible to do all the work of adding a | at once: For example, it's possible in a single transaction to add or | |||
| PTR resource record to the PTR RRset on the Service Name, and | update a single Host Description while also adding or updating the | |||
| creating or updating the Service Instance Name and Host Description, | RRs comprising the Service Description(s) for one or more service | |||
| in a single transaction. | 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]. The [RFC2136] | from normal DNS Updates [RFC2136] where the update process could | |||
| update process can involve many update attempts: you might first | involve many update attempts. The requester might first attempt to | |||
| attempt to add a name if it doesn't exist; if that fails, then in a | add a name if it doesn't exist; if that fails, then in a second | |||
| 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 uses a | matches certain preconditions. Because the Service Registration | |||
| single transaction, some of this adaptability is lost. | Protocol described in this document uses a single transaction, some | |||
| 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, and so 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 DNS | 3.2.3.1. How the DNS-SD Service Registration Process Differs from DNS | |||
| Update as specified in RFC2136 | Update | |||
| DNS-SD Service Registration is based on standard RFC2136 DNS Update, | DNS-SD Service Registration uses the DNS Update specification | |||
| with some differences: | [RFC2136] with some additions: | |||
| * It implements FCFS Naming, protected using SIG(0) [RFC2931]. | ||||
| * It implements first-come first-served name allocation, protected | ||||
| using SIG(0) [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 | ||||
| other domain. | * It optionally performs rewriting of "default.service.arpa." to | |||
| 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 | ||||
| generic domain "default.service.arpa." | * CNN SRP requesters are allowed to send updates to the generic | |||
| 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 | |||
| Service Registration Protocol does not require that every update | SRP does not require that every update contain the same information. | |||
| contain the same information. When an SRP requestor needs to send | When an SRP requester needs to send more than one SRP Update to the | |||
| more than one SRP update to the SRP registrar, it MUST send these | SRP registrar, it SHOULD combine these into a single SRP Update, when | |||
| sequentially: until an earlier update has been successfully | possible, subject to DNS message size limits and link-specific size | |||
| acknowledged, the requestor MUST NOT begin sending a subsequent | limits (e.g., an IEEE 802.15.4 network will perform poorly when asked | |||
| update. | 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 | |||
| DNS update as described in [RFC2136] is secured using Secret Key | DNS Update messages can be secured using secret key transaction | |||
| Transaction Signatures, [RFC8945], which 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. First-Come First-Served Naming | 3.2.4.1. FCFS Naming | |||
| First-Come First-Serve naming provides a limited degree of security: | FCFS Naming provides a limited degree of security. A server that | |||
| a server that registers its service using DNS-SD Registration | registers its service using SRP is given ownership of a name for an | |||
| protocol is given ownership of a name for an extended period of time | extended period of time based on a lease specific to the key used to | |||
| based on a lease specific to the key used to authenticate the DNS | authenticate the SRP Update, which may be longer than the lease | |||
| Update, which may be longer than the lease associated with the | associated with the registered RRs. As long as the registrar | |||
| registered records. As long as the registration service remembers | remembers the name and the public key corresponding to the private | |||
| the name and the key used to register that name, no other server can | key used to register RRs on that name, no other SRP requester can add | |||
| add or update the information associated with that. If the server | or update the information associated with that name. If the SRP | |||
| fails to renew its service registration before the KEY lease | requester fails to renew its service registration before the KEY | |||
| (Section 4 of [I-D.ietf-dnssd-update-lease]) expires, its name is no | lease expires (Section 4 of the DNS Update Lease specification | |||
| longer protected. FCFS naming is used to protect both the Service | [RFC9664]) its name is no longer protected. FCFS Naming is used to | |||
| Description and the Host 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 pre-configured 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 EDNS(0) Update Lease option [I-D.ietf-dnssd-update-lease]. | using the EDNS(0) Update Lease option [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 | |||
| Both Host Description RR adds and Service Description RR adds 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. So 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 | 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. This means that if a device is | typically set to two hours. Thus, if a device is disconnected from | |||
| disconnected from the network, it does not appear in the user | the network, it does not continue to appear for too long in the user | |||
| interfaces of devices 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 of this is that even though a device | typically 14 days. The result being that even though a device may be | |||
| may be temporarily unplugged, disappearing from the network for a few | temporarily disconnected or powered off -- disappearing from the | |||
| days, 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. | ||||
| This means that even if a device is unplugged from the network for a | Therefore, even if a device is disconnected from the network for a | |||
| few days, and its services are not available for that time, no other | 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 re-use. | 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 | |||
| not apply in the case of SRP: an SRP registrar needs to understand | 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 | ||||
| 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 | |||
| recomments 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 | ||||
| (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 some specific | In some use cases, a requester may need to remove a specific service | |||
| service, without removing its other services. This can be | instance without removing its other services. For example, a device | |||
| accomplished in one of two ways. To simply remove a specific | may shut down its remote screen access (_rfb._tcp) service while | |||
| service, the requestor sends a valid SRP Update where the Service | retaining its command-line login (_ssh._tcp) service. This can be | |||
| Discovery Instruction (Section 3.3.1.1) contains a single Delete an | accomplished in one of two ways: | |||
| RR from an RRset ([RFC2136], Section 2.5.4) update that deletes the | ||||
| PTR record whose target is the service instance name. The Service | ||||
| Description Instruction (Section 3.3.1.2) in this case contains a | ||||
| single Delete all RRsets from a Name ([RFC2136], Section 2.5.3) | ||||
| update to the service instance name. | ||||
| The second alternative is used when some service is being replaced by | 1. To simply remove a specific service instance, the requester sends | |||
| a different service with a different service instance name. In this | a valid SRP Update with a Service Description Instruction | |||
| case, the old service is deleted as in the first alternative. The | (Section 3.3.1.2) containing a single "Delete All RRsets From A | |||
| new service is added, just as it would be in an update that wasn't | Name" update to the service instance name. The SRP Update SHOULD | |||
| deleting the old service. Because both the removal of the old | include Service Discovery Instructions (Section 3.3.1.1) | |||
| service and the add of the new service consist of a valid Service | consisting of "Delete An RR From An RRset" updates [RFC2136] that | |||
| Discovery Instruction and a valid Service Description Instruction, | delete any Service Discovery PTR records whose target is the | |||
| the update as a whole is a valid SRP Update, and will result in the | service instance name. However, even in the absence of such | |||
| old service being removed and the new one added, or, to put it | Service Discovery Instructions, the SRP registrar MUST delete any | |||
| differently, in the old service being replaced by the new service. | Service Discovery PTR records that point to the deleted service | |||
| instance name. | ||||
| 2. When deleting one service instance while simultaneously creating | ||||
| a new service instance with a different service instance name, an | ||||
| alternative is to perform both operations using a single SRP | ||||
| Update. In this case, the old service is deleted as in the first | ||||
| alternative. The new service is added, just as it would be in an | ||||
| update that wasn't deleting the old service. Because both the | ||||
| removal of the old service and the add of the new service consist | ||||
| of a valid Service Discovery Instruction and a valid Service | ||||
| Description Instruction, the update as a whole is a valid SRP | ||||
| Update and will result in the old service being removed and the | ||||
| new one added; or, to put it differently, the SRP Update will | ||||
| result in the old service being replaced by the new service. | ||||
| It is perhaps worth noting that if a service is being updated without | It is perhaps worth noting that if a service is being updated without | |||
| the service instance name changing, that will look very much like the | the service instance name changing (for example, when only the target | |||
| second alternative above. The difference is that because the target | port in the SRV record is being updated), then that SRP Update will | |||
| for the PTR record in the Service Discovery Instruction is the same | look very much like the second alternative above. The PTR record in | |||
| for both the Delete An RR From An RRset update and the Add To An | the Service Discovery Instruction will be the same for both the | |||
| RRSet update, there is no way to tell whether they were intended to | "Delete An RR From An RRset" update and the "Add To An RRset" update | |||
| be one or two Instructions. The same would be true of the Service | [RFC2136]. Since the removal of the old service and the addition of | |||
| Description Instruction. | the new service are both valid SRP Update operations, the combined | |||
| operation is a valid SRP Update operation. The SRP registrar does | ||||
| not need to include code to recognize this special case and does not | ||||
| need to take any special actions to handle it correctly. | ||||
| 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 no | records that the deletes would affect; otherwise, the add will have | |||
| 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 contains | An instruction is a Service Discovery Instruction if it: | |||
| * exactly one "Add to an RRSet" ([RFC2136], Section 2.5.1) or | * consists of exactly one "Add To An RRSet" or exactly one "Delete | |||
| exactly one "Delete an RR from an RRSet" ([RFC2136], | An RR From An RRSet" RR update (Section 2.5 of the DNS Update | |||
| Section 2.5.4) RR update, | specification [RFC2136]), | |||
| * which updates a PTR RR, | * which updates a PTR RR, | |||
| * the target of which is a Service Instance Name | * the target of which is a service instance name | |||
| * for which name a Service Description Instruction is present in the | * for which name a Service Description Instruction is present in the | |||
| SRP Update, and: | 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; or | 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" | |||
| * and contains no other add or delete RR updates for the same name | instructions for the SRV and TXT records describing that | |||
| as the PTR RR Update. | service. An "Add to an RRset" instruction for the KEY record | |||
| 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. | PTR record) if the SRP requester is advertising more than one | |||
| This is also true for SRP subtypes (Section 7.1 of [RFC6763]). For | instance of the same service type or is changing the target of a PTR | |||
| each 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 ([RFC2136], Section 2.5.3), | the service instance name (Section 2.5.3 of the DNS Update | |||
| * It contains zero or one "Add to an RRset" SRV RR, | specification [RFC2136]). | |||
| * It contains zero or one "Add to an RRset" KEY RR that, if present, | * It contains zero or one "Add To An RRset" KEY RRs that, if | |||
| contains the public key corresponding to the private key that was | present, contains the public key corresponding to the private key | |||
| used to sign the message (if present, the KEY MUST match the KEY | that was used to sign the message (if present, the KEY RR MUST | |||
| RR given in the Host Description), | match the KEY RR given in the Host Description). | |||
| * It contains zero or more "Add to an RRset" TXT RRs, | * It contains zero or one "Add To An RRset" SRV RR. | |||
| * If there is one "Add to an RRset" SRV update, there MUST be at | * If an "Add To An RRSet" update for an SRV RR is present, there | |||
| least one "Add to an RRset" TXT update. | MUST be at least one "Add To An RRset" update for the | |||
| * The target of the SRV RR Add, if present points to a hostname for | corresponding TXT RR, and the target of the SRV RR MUST be the | |||
| which there is a Host Description Instruction in the SRP Update, | hostname given in the Host Description Instruction in the SRP | |||
| or | Update, or | |||
| * If there is no "Add to an RRset" SRV RR, then either: | * If there is no "Add To An RRset" update for an SRV RR, then there | |||
| - the name to which the "Delete all RRsets from a name" applies | MUST be no "Add To An RRset" updates for the corresponding TXT RR, | |||
| and either: | ||||
| - 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, which 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 | ||||
| modified. | Service Description Instructions do not add any other resource | |||
| 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 | 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, | ||||
| * 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 | ||||
| records. | * zero "Add To An RRset" operations (in the case of deleting a | |||
| 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 | An SRP Update MUST include an EDNS(0) Update Lease option [RFC9664]. | |||
| [I-D.ietf-dnssd-update-lease]. The LEASE time specified in the | The LEASE time specified in the Update Lease option MUST be less than | |||
| Update Lease option MUST be less than or equal to the KEY-LEASE time. | or equal to the KEY-LEASE time. A DNS update that does not include | |||
| A DNS update that does not include the Update Lease option, or that | the Update Lease option, or that includes a KEY-LEASE value that is | |||
| includes a KEY-LEASE value that is less than the LEASE value, is not | less than the LEASE value, is not an SRP Update. | |||
| 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 RFC2136 updates, | SRP update, it MAY process the update as normal DNS Update [RFC2136], | |||
| including access control checks and constraint checks, if supported. | including access control checks and constraint checks, if supported. | |||
| Otherwise the SRP registrar MUST reject the DNS Update with the | Otherwise, the SRP registrar MUST reject the DNS Update 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 RFC2136 update. | name is not a valid SRP Update but may be a valid DNS Update. | |||
| 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: every Service | are processed as if they had been explicitly present. After the SRP | |||
| Description that is updated MUST, after the SRP Update has been | Update has been applied, every Service Description that is updated | |||
| applied, have a KEY RR, and it must be the same KEY RR that is | MUST have a KEY RR, which MUST have the same value as the KEY RR that | |||
| present in the Host Description to which the Service Description | is present in the Host Description to which the Service Description | |||
| refers. | 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: all | update and can be either NoError, ServFail, Refused, or YXDomain. | |||
| 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 | |||
| present this is not specified, so if a client were to attempt to | per-RR indications as to why the update failed, but at the time of | |||
| validate the RRs in the response, it might reject such a response, | writing this is not specified. So, if an SRP requester were to | |||
| since it would contain RRs, but probably not a set of RRs identical | attempt to validate the RRs in the response, it might reject such a | |||
| to what was sent in the SRP Update. | response, since it would contain RRs but probably not a set of RRs | |||
| 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 (Section 3.5 of | The SRP registrar MAY add a Reverse Mapping PTR record (described for | |||
| [RFC1035], 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 pre-registered | registration of keys and only accept updates from preregistered keys. | |||
| keys. In this case, an update for a key that has not been registered | In this case, an update for a key that has not been registered SHOULD | |||
| 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 | ||||
| with SRP rather than simply performing traditional DNS Updates using | ||||
| SIG(0) keys: | ||||
| There are at least two benefits to doing this rather than simply | 1. The same over-the-air registration protocol is used in both | |||
| using normal SIG(0) DNS updates. First, the same registration | cases, so both use cases can be addressed by the same SRP | |||
| protocol can be used in both cases, so both use cases can be | requester implementation. | |||
| addressed by the same SRP requestor implementation. Second, the | ||||
| registration protocol includes maintenance functionality not present | ||||
| with normal DNS updates. | ||||
| Note that the semantics of using SRP in this way are different than | 2. The Service Registration Protocol includes maintenance | |||
| for typical RFC2136 implementations: the KEY used to sign the SRP | functionality not present with normal DNS updates. | |||
| Update only allows the SRP requestor to update records that refer to | ||||
| its Host Description. RFC2136 implementations do not normally | Note that the semantics of using SRP in this way are different from | |||
| provide a way to enforce a constraint of this type. | the semantics of typical implementations of DNS Update. The KEY used | |||
| to sign the SRP Update only allows the SRP requester to update | ||||
| records that refer to its Host Description. Implementations of | ||||
| traditional DNS Update [RFC2136] do not normally provide a way to | ||||
| 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 | All RRs within an RRset are required to have the same TTL (required | |||
| (Clarifications to the DNS Specification [RFC2181], Section 5.2). In | by Section 5.2 of the DNS Clarifications document [RFC2181]). In | |||
| order to avoid inconsistencies, SRP places restrictions on TTLs sent | order to avoid inconsistencies, SRP places restrictions on TTLs sent | |||
| by requestors and requires that SRP 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 | ||||
| Because the DNS-SD registration protocol is automatic, and not | 5.1. Cleaning Up Stale Data | |||
| Because the DNS-SD Service Registration Protocol is automatic and not | ||||
| managed by humans, some additional bookkeeping is required. When an | managed by humans, some additional bookkeeping is required. When an | |||
| update is constructed by the SRP requestor, it MUST include an | update is constructed by the SRP requester, it MUST include an | |||
| EDNS(0) Update Lease Option [I-D.ietf-dnssd-update-lease]. The | EDNS(0) Update Lease Option [RFC9664]. The Update Lease Option | |||
| Update Lease Option contains two lease times: the Lease Time and the | contains two lease times: the Lease Time and the KEY Lease Time. | |||
| KEY Lease Time. | ||||
| These leases are promises, similar to DHCP leases [RFC2131], from the | Similar to DHCP leases [RFC2131], these leases are promises 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 the | SRP registrars may be configured with limits for these values. At | |||
| section on FCFS naming (Section 3.2.4.1). SRP registrars may be | the time of writing, a default limit of two hours for the Lease and | |||
| configured with limits for these values. A default limit of two | 14 days for the SIG(0) KEY are thought to be good choices. Devices | |||
| hours for the Lease and 14 days for the SIG(0) KEY are currently | with limited battery that wake infrequently are likely to request | |||
| thought to be good choices. Constrained devices with limited battery | longer leases; registrars that support such devices may need to set | |||
| that wake infrequently are likely to request longer leases; | higher limits. SRP requesters that are going to continue to use | |||
| registrars that support such devices may need to set higher limits. | names on which they hold leases SHOULD refresh them well before the | |||
| SRP requestors that are going to continue to use names on which they | lease ends in case the registrar is temporarily unavailable or under | |||
| hold leases SHOULD update well before the lease ends, in case the | heavy load. | |||
| registrar is 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 | also remain. However, the Service Discovery PTR record MUST be | |||
| has 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 for doing this is that a requestor may re-register a host | The reason being that a requester may re-register a hostname with a | |||
| with a different set of services, and not remember that some | different set of services and not remember that some different | |||
| different service instance had previously been registered. In this | service instance had previously been registered. In this case, when | |||
| case, when that service instance lease expires, the SRP registrar | that service instance lease expires, the SRP registrar MUST remove | |||
| MUST remove the service instance (although the KEY record for the | the service instance, and any associated Service Discovery PTR | |||
| service instance SHOULD be retained until the KEY lease on that | records pointing to that service instance, (although the KEY record | |||
| service 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 SHOULD differentiate between SRP Updates and other updates, and | but they SHOULD differentiate between SRP Updates and other updates | |||
| MUST reject updates that would otherwise be SRP Updates if they do | and MUST reject updates that would otherwise be SRP Updates if they | |||
| 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. This | SRP Updates have no authorization semantics other than "First Come, | |||
| means that if an attacker from outside of the administrative domain | First Served" (FCFS). Thus, if an attacker from outside the | |||
| of the SRP registrar knows the registrar's IP address, it can in | administrative domain of the SRP registrar knows the registrar's IP | |||
| principle send updates to the registrar that will be processed | address, it can, in principle, send updates to the registrar that | |||
| successfully. SRP Registrars SHOULD therefore be configured to | will be processed successfully. Therefore, SRP registrars SHOULD be | |||
| reject updates from source addresses outside of the administrative | configured to reject updates from source addresses outside of the | |||
| domain 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 [RFC7413] payloads. If the | validation MUST NOT accept TCP Fast Open payloads [RFC7413]. If the | |||
| network infrastructure allows it, an SRP registrar MAY accept TCP | network infrastructure allows it, an SRP registrar MAY accept TCP | |||
| Fast Open payloads if all such packets are validated along the path, | Fast Open payloads if all such packets are validated along the 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 as | would ordinarily be accomplished by measures such as those described | |||
| are described in Section 4.5 of [RFC7084]. For example, a stub | in Section 4.5 of the IPv6 CE Router Requirements document [RFC7084]. | |||
| router [I-D.ietf-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. We have two recommendations | zone. There is no simple solution to these problems. However, we | |||
| to address this problem, however: | 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 service discovery. | subdomains of the organizational domain for DNS-SD. This does not | |||
| This does not prevent registering names as mentioned above, but | prevent registering names as mentioned above but does ensure that | |||
| does ensure that genuinely important names are not accidentally | genuinely important names are not accidentally claimed by SRP | |||
| reserved for SRP clients. So for example, the zone | requesters. So, for example, the zone "dnssd.example.com." could | |||
| "dnssd.example.com" could be used instead of "example.com" for SRP | be used instead of "example.com." for SRP Updates. Because of the | |||
| updates. Because of the way that DNS browsing domains are | way that DNS-browsing domains are discovered, there is no need for | |||
| discovered, there is no need for the DNSSD discovery zone that is | the DNS-SD discovery zone that is updated by SRP to have a user- | |||
| 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 RA Guard | Local links can be protected by managed services such as RA Guard | |||
| [RFC6105], but multicast services like DHCP [RFC2131], DHCPv6 | [RFC6105], but multicast services like DHCP [RFC2131], DHCPv6 | |||
| [RFC8415] and IPv6 Neighbor Discovery [RFC4861] are in most cases not | [RFC8415], and IPv6 Neighbor Discovery [RFC4861] are, in most cases, | |||
| authenticated and can't be controlled on unmanaged networks, such as | not authenticated and can't be controlled on unmanaged networks, such | |||
| home networks and small-office networks where no network management | as home networks and small office networks where no network | |||
| staff are present. In such situations, the SRP service has | management staff are present. In such situations, the SRP service | |||
| comparatively fewer potential security exposures and hence is not the | has comparatively fewer potential security exposures and, hence, is | |||
| weak link. This is discussed in more detail in Section 3.2.4. | not the weak link. This is discussed in more detail in | |||
| 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 [RFC7858], Section 4.2 could be used for authentication | described in Section 4.2 of the DNS-over-TLS specification [RFC7858] | |||
| of the SRP registrar, e.g. to prevent man-in-the-middle attacks. | could be used for authentication of the SRP registrar, e.g., to | |||
| However the use of such keys is impractical for an unmanaged service | prevent man-in-the-middle attacks. However, the use of such keys is | |||
| registration protocol, and hence is out of scope for this document. | impractical for an unmanaged service registration protocol; hence, it | |||
| 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 | |||
| specified in [RFC8624], Section 3.1, in the validation column of the | that are listed in Section 3.1 of the DNSSEC Cryptographic Algorithms | |||
| table, that are numbered 13 or higher and have a "MUST", | specification [RFC8624], in the validation column of the table, that | |||
| "RECOMMENDED", or "MAY" designation in the validation column of the | are numbered 13 or higher and that have a "MUST", "RECOMMENDED", or | |||
| table. SRP requestors MUST NOT assume that any algorithm numbered | "MAY" designation in the validation column of the table. SRP | |||
| lower than 13 is available for use in validating SIG(0) signatures. | requesters MUST NOT assume that any algorithm numbered lower than 13 | |||
| 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 multicast DNS responses. | implications of SRP are different from those for mDNS responses. SRP | |||
| Host implementations that are using TCP SHOULD also use TLS if | Requester implementations that are using TCP SHOULD also use DNS- | |||
| available. SRP Registrar implementations MUST offer TLS support. | over-TLS [RFC7858] if available. SRP registrar implementations MUST | |||
| The use of TLS with DNS is described in [RFC7858]. Because there is | offer TLS support. Because there is no mechanism for sharing keys, | |||
| no mechanism for sharing keys, validation of DNS-over-TLS keys is not | validation of DNS-over-TLS keys is not possible; DNS-over-TLS is used | |||
| possible; DNS-over-TLS is used only as described in [RFC7858], | only for Opportunistic Privacy, as documented in Section 4.1 of the | |||
| Section 4.1 | 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 nonexistance 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 can | because it is a locally served domain name. So, no such subdomain | |||
| be considered as uniquely identifying a particular host, as would be | can be considered to be uniquely identifying a particular host, as | |||
| required for such a PKI cert to be issued. If a subdomain of | would be required for such a PKI certificate to be issued. If a | |||
| 'service.arpa.' is returned by an API or entered in an input field of | subdomain of "service.arpa." is returned by an API or entered in an | |||
| an application, PKI authentication of the endpoint being identified | input field of an application, PKI authentication of the endpoint | |||
| by the name will not be possible. Alternative methods and practices | being identified by the name will not be possible. Alternative | |||
| for authenticating such endpoints are out of scope for this document. | methods and practices for authenticating such endpoints are out of | |||
| 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 be unable 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 not | [RFC4035]). DNSSEC validation [RFC9364] is a best current | |||
| 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. This, in | recursive resolver that does not validate answers that can be | |||
| turn, 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 | necessary authority information will be included in the authority | |||
| included in the authority section of the response if the DO bit | section of the response if the DO bit is set. | |||
| 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, and so the server would | such delegation in the "service.arpa." zone; therefore, the | |||
| refuse to answer authoritatively for such a zone. A server that | authoritative DNS server would refuse to answer authoritatively for | |||
| implements this sort of check MUST be configurable so that either it | such a zone. An authoritative DNS server that implements this sort | |||
| does not do this check for the 'service.arpa.' domain or it ignores | of check MUST be configurable so that either it does not do this | |||
| 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 according to the rules established in [RFC3172]. There are no | Board (IAB) [RFC3172]. There are no other DNS registrars for | |||
| 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 [RFC3172]. | [IAB-ARPA], has added a delegation of "service.arpa." in the "arpa." | |||
| This delegation is to be set up as was done for 'home.arpa', as a | zone [RFC3172], following the guidance provided in Section 7 of the | |||
| result of the specification in Section 7 of [RFC8375]. This is | "home.arpa." specification [RFC8375]. | |||
| currently the responsibility of the IAB [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 is requested to record the domain name 'service.arpa.' in the | IANA has recorded the domain name "service.arpa." in the "Special-Use | |||
| Special-Use Domain Names registry [SUDN]. IANA is requested, with | Domain Names" registry [SUDN]. IANA has implemented the delegation | |||
| the approval of IAB, to implement the delegation requested in | requested in Section 9. | |||
| Section 9. | ||||
| IANA is further requested to add a new entry to the "Transport- | 10.2. Addition of "service.arpa." to the Locally-Served Zones Registry | |||
| Independent Locally-Served Zones" subregistry of the "Locally-Served | ||||
| DNS Zones" registry [LSDZ]. The entry will be for the domain | ||||
| 'service.arpa.' with the description "DNS-SD Service Registration | ||||
| Protocol Special-Use Domain", listing this document as the reference. | ||||
| 10.2. Subdomains of 'service.arpa.' | IANA has also added a new entry to the "Transport-Independent | |||
| Locally-Served Zones Registry" registry of the "Locally-Served DNS | ||||
| Zones" group [LSDZ]. The entry is for the domain "SERVICE.ARPA." | ||||
| with the description "DNS-SD Service Registration Protocol Special- | ||||
| Use Domain" and lists this document as the reference. | ||||
| This document only makes use of the 'default.service.arpa' subdomain | 10.3. Subdomains of "service.arpa." | |||
| of 'service.arpa.' Other subdomains are reserved for future use by | ||||
| DNS-SD or related work. The IANA is requested to create a registry, | ||||
| the "service.arpa Subdomain" registry. The IETF shall have change | ||||
| control for this registry. New entries may be added either as a | ||||
| result of Standards Action Section 4.9 of [RFC8126] or with IESG | ||||
| approval Section 4.10 of [RFC8126], provided that a specification | ||||
| exists Section 4.6 of [RFC8126]. | ||||
| The IANA shall group the "service.arpa Subdomain" registry with the | This document only makes use of the "default.service.arpa." subdomain | |||
| "Locally-Served DNS Zones" registry. The registry shall be a table | of "service.arpa." Other subdomains are reserved for future use by | |||
| with three columns: the subdomain name (expressed as a fully- | DNS-SD or related work. IANA has created the "service.arpa. | |||
| qualified domain name), a brief description of how it is used, and a | Subdomain" registry [SUB]. The IETF has change control for this | |||
| reference to the document that describes its use in detail. | registry. New entries may be added either as a result of Standards | |||
| Action (Section 4.9 of the IANA Guidelines) or with IESG Approval | ||||
| (Section 4.10 of the IANA Guidelines) [RFC8126], provided that the | ||||
| values and their meanings are documented in a permanent and readily | ||||
| available public specification, in sufficient detail so that | ||||
| interoperability between independent implementations is possible. | ||||
| This registry shall begin as the following table: | IANA has grouped the "service.arpa. Subdomain" registry with the | |||
| "Locally-Served DNS Zones" group. The registry is a table with three | ||||
| columns: the subdomain name (expressed as a fully qualified domain | ||||
| name), a brief description of how it is used, and a reference to the | ||||
| document that describes its use in detail. | ||||
| This initial contents of this registry are as follows: | ||||
| +=======================+=================+===========+ | +=======================+=================+===========+ | |||
| | Subdomain Name | Description | reference | | | Subdomain Name | Description | Reference | | |||
| +=======================+=================+===========+ | +=======================+=================+===========+ | |||
| | default.service.arpa. | Default domain | [THIS | | | default.service.arpa. | Default domain | RFC 9665 | | |||
| | | for SRP updates | DOCUMENT] | | | | for SRP Updates | | | |||
| +-----------------------+-----------------+-----------+ | +-----------------------+-----------------+-----------+ | |||
| Table 1 | Table 1 | |||
| 10.3. Service Name registrations | 10.4. Service Name Registrations | |||
| IANA is requested to add two new entries to the Service Names and | IANA has added two new entries to the "Service Name and Transport | |||
| Port Numbers registry. The following sections contain tables with | Protocol Port Number Registry" [PORT]. The following subsections | |||
| the fields required by Section 8.1.1 of [RFC6335]. | contain tables with the fields required by Section 8.1.1 of IANA's | |||
| Procedures for Service Name allocation [RFC6335]. | ||||
| 10.4. '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> | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Contact | IETF Chair <chair@ietf.org> | | | Contact | IETF Chair <chair@ietf.org> | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Description | DNS-SD Service Registration | | | Description | DNS-SD Service Discovery | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Reference | this document | | | Reference | RFC 9665 | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Port Number | None | | | Port Number | None | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| | Service Code | None | | | Service Code | None | | |||
| +--------------------+-----------------------------+ | +--------------------+-----------------------------+ | |||
| Table 2 | Table 2 | |||
| 10.5. '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 | | | Assignee | IESG <iesg@ietf.org> | | |||
| +--------------------+-----------------------------------+ | +--------------------+--------------------------------+ | |||
| | Contact | IETF Chair | | | Contact | IETF Chair <chair@ietf.org> | | |||
| +--------------------+-----------------------------------+ | +--------------------+--------------------------------+ | |||
| | Description | DNS-SD Service Registration (TLS) | | | Description | DNS-SD Service Discovery (TLS) | | |||
| +--------------------+-----------------------------------+ | +--------------------+--------------------------------+ | |||
| | Reference | this document | | | Reference | RFC 9665 | | |||
| +--------------------+-----------------------------------+ | +--------------------+--------------------------------+ | |||
| | Port Number | None | | | Port Number | None | | |||
| +--------------------+-----------------------------------+ | +--------------------+--------------------------------+ | |||
| | Service Code | None | | | Service Code | None | | |||
| +--------------------+-----------------------------------+ | +--------------------+--------------------------------+ | |||
| Table 3 | Table 3 | |||
| 10.6. Anycast Address | 10.5. Anycast Address | |||
| IANA is requested to allocate an IPv6 Anycast address from the IPv6 | IANA has allocated an IPv6 anycast address from the "IANA IPv6 | |||
| Special-Purpose Address Registry, similar to the Port Control | Special-Purpose Address Registry" [IPv6], similar to the Port Control | |||
| Protocol anycast address, 2001:1::1. The value TBD is to be replaced | Protocol [RFC6887] anycast address [RFC7723]. The purpose of this | |||
| with the actual allocation in the table that follows. The purpose of | allocation is to provide a fixed anycast address that can be commonly | |||
| this allocation is to provide a fixed anycast address that can be | used as a destination for SRP Updates when no SRP registrar is | |||
| commonly used as a destination for SRP updates when no SRP registrar | explicitly configured. The initial values for the registry are as | |||
| is explicitly configured. The values for the registry are: | follows: | |||
| +----------------------+-----------------------------+ | +======================+=============================+ | |||
| | Attribute | value | | | Attribute | Value | | |||
| +----------------------+-----------------------------+ | +======================+=============================+ | |||
| | Address Block | 2001:1::TBD/128 | | | Address Block | 2001:1::3/128 | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Name | DNS-SD Service Registration | | | Name | DNS-SD Service Registration | | |||
| | | Protocol Anycast Address | | | | Protocol Anycast Address | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | RFC | [this document] | | | RFC | RFC 9665 | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Allocation Date | [date of allocation] | | | Allocation Date | 2024-04 | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Termination Date | N/A | | | Termination Date | N/A | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Source | True | | | Source | True | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Destination | True | | | Destination | True | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Forwardable | True | | | Forwardable | True | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Global | True | | | Globally Reachable | True | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| | Reserved-by-protocol | False | | | Reserved-by-Protocol | False | | |||
| +----------------------+-----------------------------+ | +----------------------+-----------------------------+ | |||
| Table 4 | Table 4 | |||
| 11. Implementation Status | 11. References | |||
| [Note to the RFC Editor: please remove this section prior to | ||||
| publication.] | ||||
| This section records the status of known implementations of the | ||||
| protocol defined by this specification at the time of posting of this | ||||
| Internet-Draft, and is based on a proposal described in RFC 7942. | ||||
| The description of implementations in this section is intended to | ||||
| assist the IETF in its decision processes in progressing drafts to | ||||
| RFCs. Please note that the listing of any individual implementation | ||||
| here does not imply endorsement by the IETF. Furthermore, no effort | ||||
| has been spent to verify the information presented here that was | ||||
| supplied by IETF contributors. This is not intended as, and must not | ||||
| be construed to be, a catalog of available implementations or their | ||||
| features. Readers are advised to note that other implementations may | ||||
| exist. | ||||
| According to RFC 7942, "this will allow reviewers and working groups | ||||
| to assign due consideration to documents that have the benefit of | ||||
| running code, which may serve as evidence of valuable experimentation | ||||
| and feedback that have made the implemented protocols more mature. | ||||
| It is up to the individual working groups to use this information as | ||||
| they see fit". | ||||
| There are two known independent implementations of SRP requestors: | ||||
| * SRP Client for OpenThread: | ||||
| https://github.com/openthread/openthread/pull/6038 | ||||
| * mDNSResponder open source project: https://github.com/Abhayakara/ | ||||
| mdnsresponder | ||||
| There are two related implementations of an SRP registrar. One acts | ||||
| as a DNS Update proxy, taking an SRP Update and applying it to the | ||||
| specified DNS zone using DNS update. The other acts as an | ||||
| Advertising Proxy [AP]. Both are included in the mDNSResponder open | ||||
| source project mentioned above. | ||||
| 12. Acknowledgments | ||||
| Thanks to Toke Høiland-Jørgensen, Jonathan Hui, Esko Dijk, Kangping | ||||
| Dong and Abtin Keshavarzian for their thorough technical reviews. | ||||
| Thanks to Kangping and Abtin as well for testing the document by | ||||
| doing an independent implementation. Thanks to Tamara Kemper for | ||||
| doing a nice developmental edit, Tim Wattenberg for doing an SRP | ||||
| requestor proof-of-concept implementation at the Montreal Hackathon | ||||
| at IETF 102, and Tom Pusateri for reviewing during the hackathon and | ||||
| afterwards. Thanks to Esko for a really thorough second last call | ||||
| review. Thanks also to Nathan Dyck, Gabriel Montenegro, Kangping | ||||
| Dong, Martin Turon, and Michael Cowan for their detailed second last | ||||
| call reviews. Thanks to Patrik Fältström, Dhruv Dhody, David Dong, | ||||
| Joey Salazar, Jean-Michel Combes, and Joerg Ott for their respective | ||||
| directorate reviews. Thanks to Paul Wouters for a _really_ detailed | ||||
| IESG review! Thanks also to the other IESG members who provided | ||||
| comments or simply took the time to review the document. | ||||
| 13. Normative References | ||||
| [I-D.ietf-dnssd-update-lease] | 11.1. Normative References | |||
| Cheshire, S. and T. Lemon, "An EDNS(0) option to negotiate | ||||
| Leases on DNS Updates", Work in Progress, Internet-Draft, | ||||
| draft-ietf-dnssd-update-lease-08, 7 July 2023, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-dnssd- | ||||
| update-lease-08>. | ||||
| [RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
| specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
| November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
| [RFC1536] Kumar, A., Postel, J., Neuman, C., Danzig, P., and S. | [RFC1536] Kumar, A., Postel, J., Neuman, C., Danzig, P., and S. | |||
| Miller, "Common DNS Implementation Errors and Suggested | Miller, "Common DNS Implementation Errors and Suggested | |||
| Fixes", RFC 1536, DOI 10.17487/RFC1536, October 1993, | Fixes", RFC 1536, DOI 10.17487/RFC1536, October 1993, | |||
| <https://www.rfc-editor.org/info/rfc1536>. | <https://www.rfc-editor.org/info/rfc1536>. | |||
| skipping to change at page 35, line 5 ¶ | 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 page 36, line 13 ¶ | skipping to change at line 1704 ¶ | |||
| <https://www.rfc-editor.org/info/rfc8624>. | <https://www.rfc-editor.org/info/rfc8624>. | |||
| [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>. | |||
| 14. Informative References | [RFC9664] Cheshire, S. and T. Lemon, "An EDNS(0) Option to Negotiate | |||
| Leases on DNS Updates", RFC 9664, DOI 10.17487/RFC9664, | ||||
| June 2025, <https://www.rfc-editor.org/info/rfc9664>. | ||||
| 11.2. Informative References | ||||
| [IAB-ARPA] "Internet Architecture Board statement on the registration | ||||
| of special use names in the ARPA domain", March 2017, | ||||
| <https://www.iab.org/documents/correspondence-reports- | ||||
| documents/2017-2/iab-statement-on-the-registration-of- | ||||
| special-use-names-in-the-arpa-domain/>. | ||||
| [IPv6] IANA, "IANA IPv6 Special-Purpose Address Registry", | ||||
| <https://www.iana.org/assignments/iana-ipv6-special- | ||||
| registry>. | ||||
| [LSDZ] IANA, "Locally-Served DNS Zones", | ||||
| <https://www.iana.org/assignments/locally-served-dns- | ||||
| zones>. | ||||
| [PORT] IANA, "Service Name and Transport Protocol Port Number | ||||
| Registry", <https://www.iana.org/assignments/service- | ||||
| names-port-numbers>. | ||||
| [RFC2131] Droms, R., "Dynamic Host Configuration Protocol", | [RFC2131] Droms, R., "Dynamic Host Configuration Protocol", | |||
| RFC 2131, DOI 10.17487/RFC2131, March 1997, | RFC 2131, DOI 10.17487/RFC2131, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2131>. | <https://www.rfc-editor.org/info/rfc2131>. | |||
| [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 page 37, line 9 ¶ | 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 page 38, line 5 ¶ | skipping to change at line 1830 ¶ | |||
| Gudmundsson, O., and B. Wellington, "Secret Key | Gudmundsson, O., and B. Wellington, "Secret Key | |||
| Transaction Authentication for DNS (TSIG)", STD 93, | Transaction Authentication for DNS (TSIG)", STD 93, | |||
| RFC 8945, DOI 10.17487/RFC8945, November 2020, | RFC 8945, DOI 10.17487/RFC8945, November 2020, | |||
| <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>. | |||
| [AP] Cheshire, S. and T. Lemon, "Advertising Proxy for DNS-SD | [SNAC-SIMPLE] | |||
| Service Registration Protocol", Work in Progress, | ||||
| Internet-Draft, draft-ietf-dnssd-advertising-proxy-03, 28 | ||||
| July 2023, <https://datatracker.ietf.org/doc/html/draft- | ||||
| ietf-dnssd-advertising-proxy-03>. | ||||
| [I-D.ietf-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-03, 30 January | Internet-Draft, draft-ietf-snac-simple-06, 4 November | |||
| 2024, <https://datatracker.ietf.org/doc/html/draft-ietf- | 2024, <https://datatracker.ietf.org/doc/html/draft-ietf- | |||
| snac-simple-03>. | snac-simple-06>. | |||
| [SUDN] "Special-Use Domain Names Registry", July 2012, | ||||
| <https://www.iana.org/assignments/special-use-domain- | ||||
| names/special-use-domain-names.xhtml>. | ||||
| [LSDZ] "Locally-Served DNS Zones Registry", July 2011, | [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.xhtml>. | zones/locally-served-dns-zones>. | |||
| [IAB-ARPA] "Internet Architecture Board statement on the registration | [SUDN] IANA, "Special-Use Domain Names", | |||
| of special use names in the ARPA domain", March 2017, | <https://www.iana.org/assignments/special-use-domain- | |||
| <https://www.iab.org/documents/correspondence-reports- | names>. | |||
| documents/2017-2/iab-statement-on-the-registration-of- | ||||
| special-use-names-in-the-arpa-domain/>. | ||||
| [ZC] Cheshire, S. and D.H. Steinberg, "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 0-596-10100-7, December 2005. | ISBN 9780596101008, December 2005. | |||
| Appendix A. Testing using standard RFC2136-compliant DNS servers | 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 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", | "_dnssd-srp-tls._tcp.<zone>" SRV records. It must be configured to | |||
| and 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 | from hosts on local networks for names under "default.service.arpa." | |||
| will 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, and this | SRP updates. However, no prerequisites will be applied; this means | |||
| means that the test server will accept internally inconsistent SRP | that the test authoritative DNS server will accept internally | |||
| Updates, and will not stop two SRP Updates, sent by different | inconsistent SRP Updates and will not stop two SRP Updates sent by | |||
| services, that claim the same name(s), 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 | be receiving the updates. The key can then be used to authenticate | |||
| update, 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 | Appendix B. How to Allow SRP Requesters to Update Standard Servers | |||
| RFC2136-compliant servers | Compliant with RFC 2136 | |||
| Ordinarily SRP Updates will fail when sent to an RFC 2136-compliant | Ordinarily, CNN SRP Updates sent to an authoritative DNS server that | |||
| server that does not implement SRP because the zone being updated is | implements standard DNS Update [RFC2136] but not SRP will fail | |||
| "default.service.arpa", and no DNS server that is not an SRP | because the zone being updated is "default.service.arpa." and because | |||
| registrar would normally be configured to be authoritative for | no authoritative DNS server that is not an SRP registrar would | |||
| "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 regular | In this case, a requester MAY attempt to register itself using normal | |||
| RFC2136 DNS updates. To do so, it must discover the default | DNS updates [RFC2136]. To do so, it must discover the default | |||
| registration zone and the DNS server designated to receive updates | registration zone and the authoritative DNS server designated to | |||
| for that zone, as described earlier, using the _dns-update._udp SRV | receive updates for that zone, as described earlier, using the | |||
| record. It can then send the update to the port and host pointed to | _dns-update._udp SRV record. It can then send the update to the port | |||
| by the SRV record, and is expected to use appropriate prerequisites | and host pointed to by the SRV record, and it is expected to use | |||
| to avoid overwriting competing records. Such updates are out of | appropriate prerequisites to avoid overwriting competing records. | |||
| scope for SRP, and a requestor that implements SRP MUST first attempt | Such updates are out of scope for SRP, and a requester that | |||
| to use SRP to register itself, and only attempt to use RFC2136 | implements SRP MUST first attempt to use SRP to register itself and | |||
| backwards compatibility if that fails. Although the owner name for | only attempt to use backwards capability with normal DNS Update | |||
| the SRV record specifies the UDP protocol for updates, it is also | [RFC2136] if that fails. Although the owner name of the SRV record | |||
| possible to use TCP, and TCP SHOULD be required to prevent spoofing. | for DNS Update (_dns-update._udp) specifies UDP, it is also possible | |||
| 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 | ||||
| Thanks to Toke Høiland-Jørgensen, Jonathan Hui, Esko Dijk, Kangping | ||||
| Dong, and Abtin Keshavarzian for their thorough technical reviews. | ||||
| Thanks to Kangping and Abtin as well for testing the document by | ||||
| doing an independent implementation. Thanks to Tamara Kemper for | ||||
| doing a nice developmental edit, Tim Wattenberg for doing an SRP | ||||
| requester proof-of-concept implementation at the Montreal Hackathon | ||||
| at IETF 102, and Tom Pusateri for reviewing during the hackathon and | ||||
| afterwards. Thanks to Esko for a really thorough second Last Call | ||||
| review. Thanks also to Nathan Dyck, Gabriel Montenegro, Kangping | ||||
| Dong, Martin Turon, and Michael Cowan for their detailed second last | ||||
| call reviews. Thanks to Patrik Fältström, Dhruv Dhody, David Dong, | ||||
| Joey Salazar, Jean-Michel Combes, and Joerg Ott for their respective | ||||
| directorate reviews. Thanks to Paul Wouters for a _really_ detailed | ||||
| IESG review! Thanks also to the other IESG members who provided | ||||
| comments or simply took the time to review the document. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Ted Lemon | Ted Lemon | |||
| Apple Inc. | Apple Inc. | |||
| One Apple Park Way | One Apple Park Way | |||
| Cupertino, California 95014 | Cupertino, CA 95014 | |||
| United States of America | United States of America | |||
| Email: mellon@fugue.com | Email: mellon@fugue.com | |||
| Stuart Cheshire | Stuart Cheshire | |||
| Apple Inc. | Apple Inc. | |||
| One Apple Park Way | One Apple Park Way | |||
| Cupertino, California 95014 | Cupertino, CA 95014 | |||
| United States of America | United States of America | |||
| Phone: +1 408 974 3207 | Phone: +1 408 974 3207 | |||
| Email: cheshire@apple.com | Email: cheshire@apple.com | |||
| End of changes. 264 change blocks. | ||||
| 1154 lines changed or deleted | 1272 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||