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 October 2024 | |||
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) 2024 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 services of a particular type that are available. They can then | |||
the set of services of a particular type that are available. They | select a service from among those that are available and obtain the | |||
can then select a service from among those that are available and | information required to use it. Although DNS-SD using the DNS | |||
obtain the information required to use it. Although DNS Service | protocol can be more efficient and versatile than using mDNS, it is | |||
Discovery (DNS-SD) using the DNS protocol (as opposed to mDNS) can be | 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 claim the name, even though the registration | |||
the registration has expired. | 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 period. | ||||
In DNS zone files and other similar contexts, if the final period 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 period ("."). | ||||
When this document mentions domain names such as "local." and | ||||
"default.service.arpa.", the final period is part of the domain name | ||||
and does not indicate the end of a sentence as it would in normal | ||||
prose. | ||||
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 one or more | |||
provide one or more registrar addresses. It is the responsibility of | registrar addresses. It is the responsibility of the registrar | |||
the registrar supporting a Constrained-Node Network to handle the | supporting a CNN to handle the updates appropriately. In some | |||
updates appropriately. In some network environments, updates may be | network environments, updates may be accepted directly into a local | |||
accepted directly into a local "default.service.arpa" zone, which has | "default.service.arpa." zone, which has only local visibility. In | |||
only local visibility. In other network environments, updates for | 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 | prevent such 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 was 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 described 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. You might first attempt to add a name | |||
attempt to add a name if it doesn't exist; if that fails, then in a | if it doesn't exist; if that fails, then in a second message you | |||
second message you might update the name if it does exist but matches | might update the name if it does exist but matches certain | |||
certain preconditions. Because the registration protocol uses a | preconditions. Because the Service Registration Protocol described | |||
single transaction, some of this adaptability is lost. | 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 | When using UDP, reliable transmission must be guaranteed by | |||
retransmitting if a DNS UDP message is not acknowledged in a | retransmitting if a DNS UDP message is not acknowledged in a | |||
reasonable interval. Section 4.2.1 of [RFC1035] provides some | reasonable interval. Section 4.2.1 of the DNS specification | |||
guidance on this topic, as does Section 1 of [RFC1536]. | [RFC1035] provides some guidance on this topic, as does Section 1 of | |||
Section 3.1.3 of [RFC8085] also provides useful guidance that is | the IETF document describing common DNS implementation errors | |||
particularly relevant to DNS. | [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 when 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 unplugged -- disappearing from the network for a few days | |||
days, it makes a claim on its name that lasts much longer. | -- 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 unplugged from the network for a few | |||
few days, and its services are not available for that time, no other | 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 unplugged from the | |||
network and permanently discarded, then its name is eventually | 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, and SRP registrars that are | |||
record targets in DNS responses. We note also that [RFC6762] | also authoritative DNS servers still MUST NOT compress SRV record | |||
recomments that SRV records be compressed in mDNS messages, so | targets 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 in the case | |||
is generating an SRP update. | 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 SRP requesters. | ||||
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 | without removing its other services. For example, a device may shut | |||
accomplished in one of two ways. To simply remove a specific | down its remote screen access (_rfb._tcp) service while retaining its | |||
service, the requestor sends a valid SRP Update where the Service | command-line login (_ssh._tcp) service. This can be accomplished in | |||
Discovery Instruction (Section 3.3.1.1) contains a single Delete an | 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, the requester sends a valid | |||
a different service with a different service instance name. In this | 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 | ||||
consists 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 | traditional DNS message) that indicates the zone to be updated. | |||
the SRP Update. | Every 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. | |||
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 modify 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 alway 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 modify 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 an 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 valua 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 [RFC1035] of the DNS specification [RFC1035] | |||
Description. This is not required because the Reverse Mapping serves | and for IPv6 in Section 2.5 of [RFC3596] of the later document | |||
no protocol function, but it may be useful for debugging, e.g. in | updating DNS for IPv6 [RFC3596]) that corresponds to the Host | |||
annotating network packet traces or logs. In order for the registrar | Description. This is optional: The reverse mapping PTR record serves | |||
to do a reverse mapping update, it must be authoritative for the zone | no essential protocol function. One reason to provide reverse | |||
that would need to be updated, or have credentials to do the update. | mappings is that they can be used to annotate logs and network packet | |||
The SRP requestor MAY also do a reverse mapping update if it has | traces. In order for the registrar to do a reverse mapping update, | |||
credentials to do so. | it must be authoritative for the zone that would need to be updated | |||
or have credentials to do the update. The SRP requester MAY also do | ||||
a reverse mapping update if it has 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 a | ||||
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 that | |||
lease times from that option in place of the options that it sent to | received option in place of the lease times that it originally | |||
the registrar when deciding when to renew its registration. The | requested from the registrar. The times may be shorter or longer | |||
times may be shorter or longer than those specified in the SRP | than those specified in the SRP Update. The SRP requester must honor | |||
Update; the SRP requestor must honor them in either case. | 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 accomodate 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 | |||
or "smtp" in this domain. In addition, SRP updates using FCFS naming | "mail" or "smtp" in this domain. In addition, SRP Updates using FCFS | |||
can insert names that are obscene or offensive into the zone. There | Naming can insert names that are obscene or offensive into the zone. | |||
is no simple solution to these problems. We have two recommendations | There is no simple solution to these problems. However, we have two | |||
to address this problem, however: | 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 non-error 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 [RFC8126]) or with IESG Approval (Section 4.10 | ||||
of [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 1647 ¶ | |||
[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 1705 ¶ | |||
<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, | ||||
October 2024, <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 1782 ¶ | |||
<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 1831 ¶ | |||
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. 262 change blocks. | ||||
1152 lines changed or deleted | 1271 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |