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