diff options
Diffstat (limited to 'doc/rfc/rfc8766.txt')
-rw-r--r-- | doc/rfc/rfc8766.txt | 1837 |
1 files changed, 1837 insertions, 0 deletions
diff --git a/doc/rfc/rfc8766.txt b/doc/rfc/rfc8766.txt new file mode 100644 index 0000000..c53efe8 --- /dev/null +++ b/doc/rfc/rfc8766.txt @@ -0,0 +1,1837 @@ + + + + +Internet Engineering Task Force (IETF) S. Cheshire +Request for Comments: 8766 Apple Inc. +Category: Standards Track June 2020 +ISSN: 2070-1721 + + + Discovery Proxy for Multicast DNS-Based Service Discovery + +Abstract + + This document specifies a network proxy that uses Multicast DNS to + automatically populate the wide-area unicast Domain Name System + namespace with records describing devices and services found on the + local link. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc8766. + +Copyright Notice + + Copyright (c) 2020 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + +Table of Contents + + 1. Introduction + 2. Operational Analogy + 3. Conventions and Terminology Used in This Document + 4. Compatibility Considerations + 5. Discovery Proxy Operation + 5.1. Delegated Subdomain for DNS-based Service Discovery Records + 5.2. Domain Enumeration + 5.2.1. Domain Enumeration via Unicast Queries + 5.2.2. Domain Enumeration via Multicast Queries + 5.3. Delegated Subdomain for LDH Host Names + 5.4. Delegated Subdomain for Reverse Mapping + 5.5. Data Translation + 5.5.1. DNS TTL Limiting + 5.5.2. Suppressing Unusable Records + 5.5.3. NSEC and NSEC3 Queries + 5.5.4. No Text-Encoding Translation + 5.5.5. Application-Specific Data Translation + 5.6. Answer Aggregation + 6. Administrative DNS Records + 6.1. DNS SOA (Start of Authority) Record + 6.2. DNS NS Records + 6.3. DNS Delegation Records + 6.4. DNS SRV Records + 6.5. Domain Enumeration Records + 7. DNSSEC Considerations + 7.1. Online Signing Only + 7.2. NSEC and NSEC3 Records + 8. IPv6 Considerations + 9. Security Considerations + 9.1. Authenticity + 9.2. Privacy + 9.3. Denial of Service + 10. IANA Considerations + 11. References + 11.1. Normative References + 11.2. Informative References + Appendix A. Implementation Status + A.1. Already Implemented and Deployed + A.2. Already Implemented + A.3. Partially Implemented + Acknowledgments + Author's Address + +1. Introduction + + Multicast DNS [RFC6762] and its companion technology DNS-based + Service Discovery [RFC6763] were created to provide IP networking + with the ease of use and autoconfiguration for which AppleTalk was + well known [RFC6760] [ZC] [ROADMAP]. + + For a small home network consisting of just a single link (or a few + physical links bridged together to appear as a single logical link + from the point of view of IP), Multicast DNS [RFC6762] is sufficient + for client devices to look up the ".local" host names of peers on the + same home network, and to use Multicast DNS-based Service Discovery + (DNS-SD) [RFC6763] to discover services offered on that home network. + + For a larger network consisting of multiple links that are + interconnected using IP-layer routing instead of link-layer bridging, + link-local Multicast DNS alone is insufficient because link-local + Multicast DNS packets, by design, are not propagated onto other + links. + + Using link-local multicast packets for Multicast DNS was a conscious + design choice [RFC6762]. Even when limited to a single link, + multicast traffic is still generally considered to be more expensive + than unicast, because multicast traffic impacts many devices instead + of just a single recipient. In addition, with some technologies like + Wi-Fi [IEEE-11], multicast traffic is inherently less efficient and + less reliable than unicast, because Wi-Fi multicast traffic is sent + at lower data rates, and is not acknowledged [MCAST]. Increasing the + amount of expensive multicast traffic by flooding it across multiple + links would make the traffic load even worse. + + Partitioning the network into many small links curtails the spread of + expensive multicast traffic but limits the discoverability of + services. At the opposite end of the spectrum, using a very large + local link with thousands of hosts enables better service discovery + but at the cost of larger amounts of multicast traffic. + + Performing DNS-based Service Discovery using purely Unicast DNS is + more efficient and doesn't require large multicast domains but does + require that the relevant data be available in the Unicast DNS + namespace. The Unicast DNS namespace in question could fall within a + traditionally assigned globally unique domain name, or it could be + within a private local unicast domain name such as ".home.arpa" + [RFC8375]. + + In the DNS-SD specification [RFC6763], Section 10 ("Populating the + DNS with Information") discusses various possible ways that a + service's PTR, SRV, TXT, and address records can make their way into + the Unicast DNS namespace, including manual zone file configuration + [RFC1034] [RFC1035], DNS Update [RFC2136] [RFC3007], and proxies of + various kinds. + + One option is to make the relevant data available in the Unicast DNS + namespace by manual DNS configuration. This option has been used for + many years at IETF meetings to advertise the IETF terminal room + printer. Details of this example are given in Appendix A of the + Roadmap document [ROADMAP]. However, this manual DNS configuration + is labor intensive, error prone, and requires a reasonable degree of + DNS expertise. + + Another option is to populate the Unicast DNS namespace by having the + devices offering the services do that themselves, using DNS Update + [REG-PROT] [DNS-UL]. However, this requires configuration of DNS + Update keys on those devices, which has proven onerous and + impractical for simple devices like printers and network cameras. + + Hence, to facilitate efficient and reliable DNS-based Service + Discovery, a hybrid is needed that combines the ease of use of + Multicast DNS with the efficiency and scalability of Unicast DNS. + + This document specifies a type of proxy called a "Discovery Proxy" + that uses Multicast DNS [RFC6762] to discover Multicast DNS records + on its local link on demand, and makes corresponding DNS records + visible in the Unicast DNS namespace. + + In principle, similar mechanisms could be defined for other local + discovery protocols, by creating a proxy that (i) uses the protocol + in question to discover local information on demand, and then (ii) + makes corresponding DNS records visible in the Unicast DNS namespace. + Such mechanisms for other local discovery protocols could be + addressed in future documents. + + The design of the Discovery Proxy is guided by the previously + published DNS-based Service Discovery requirements document + [RFC7558]. + + In simple terms, a descriptive DNS name is chosen for each link in an + organization. Using a DNS NS record, responsibility for that DNS + name is delegated to a Discovery Proxy physically attached to that + link. When a remote client issues a unicast query for a name falling + within the delegated subdomain, the normal DNS delegation mechanism + results in the unicast query arriving at the Discovery Proxy, since + it has been declared authoritative for those names. Now, instead of + consulting a textual zone file on disk to discover the answer to the + query as a traditional authoritative DNS server would, a Discovery + Proxy consults its local link, using Multicast DNS, to find the + answer to the question. + + For fault tolerance reasons, there may be more than one Discovery + Proxy serving a given link. + + Note that the Discovery Proxy uses a "pull" model. Until some remote + client has requested data, the local link is not queried using + Multicast DNS. In the idle state, in the absence of client requests, + the Discovery Proxy sends no packets and imposes no burden on the + network. It operates purely "on demand". + + An alternative proposal that has been discussed is a proxy that + performs DNS updates to a remote DNS server on behalf of the + Multicast DNS devices on the local network. The difficulty with this + is that Multicast DNS devices do not routinely announce their records + on the network. Generally, they remain silent until queried. This + means that the complete set of Multicast DNS records in use on a link + can only be discovered by active querying, not by passive listening. + Because of this, a proxy can only know what names exist on a link by + issuing queries for them, and since it would be impractical to issue + queries for every possible name just to find out which names exist + and which do not, there is no reasonable way for a proxy to + programmatically learn all the answers it would need to push up to + the remote DNS server using DNS Update. Even if such a mechanism + were possible, it would risk generating high load on the network + continuously, even when there are no clients with any interest in + that data. + + Hence, having a model where the query comes to the Discovery Proxy is + much more efficient than a model where the Discovery Proxy pushes the + answers out to some other remote DNS server. + + A client seeking to discover services and other information performs + this by sending traditional DNS queries to the Discovery Proxy or by + sending DNS Push Notification subscription requests [RFC8765]. + + How a client discovers what domain name(s) to use for its DNS-based + Service Discovery queries (and, consequently, what Discovery Proxy or + Proxies to use) is described in Section 5.2. + + The diagram below illustrates a network topology using a Discovery + Proxy to provide discovery service to a remote client. + + +--------+ Unicast +-----------+ +---------+ +---------+ + | Remote | Communication | Discovery | | Network | | Network | + | Client |---- . . . ----| Proxy | | Printer | | Camera | + +--------+ +-----------+ +---------+ +---------+ + | | | | + ------------ -------------------------------------------- + Multicast-capable LAN segment (e.g., Ethernet) + + Figure 1: Example Deployment + + Note that there need not be any Discovery Proxy on the link to which + the remote client is directly attached. The remote client + communicates directly with the Discovery Proxy using normal unicast + TCP/IP communication mechanisms, potentially spanning multiple IP + hops, possibly including VPN tunnels and other similar long-distance + communication channels. + +2. Operational Analogy + + A Discovery Proxy does not operate as a multicast relay or multicast + forwarder. There is no danger of multicast forwarding loops that + result in traffic storms, because no multicast packets are forwarded. + A Discovery Proxy operates as a _proxy_ for remote clients, + performing queries on their behalf and reporting the results back. + + A reasonable analogy is making a telephone call to a colleague at + your workplace and saying, "I'm out of the office right now. Would + you mind bringing up a printer browser window and telling me the + names of the printers you see?" That entails no risk of a forwarding + loop causing a traffic storm, because no multicast packets are sent + over the telephone call. + + A similar analogy, instead of enlisting another human being to + initiate the service discovery operation on your behalf, is to log in + to your own desktop work computer using screen sharing and then run + the printer browser yourself to see the list of printers. Or, log in + using Secure Shell (ssh) and type "dns-sd -B _ipp._tcp" and observe + the list of discovered printer names. In neither case is there any + risk of a forwarding loop causing a traffic storm, because no + multicast packets are being sent over the screen-sharing or ssh + connection. + + The Discovery Proxy provides another way of performing remote + queries, which uses a different protocol instead of screen sharing or + ssh. The Discovery Proxy mechanism can be thought of as a custom + Remote Procedure Call (RPC) protocol that allows a remote client to + exercise the Multicast DNS APIs on the Discovery Proxy device, just + as a local client running on the Discovery Proxy device would use + those APIs. + + When the Discovery Proxy software performs Multicast DNS operations, + the exact same Multicast DNS caching mechanisms are applied as when + any other client software on that Discovery Proxy device performs + Multicast DNS operations, regardless of whether that be running a + printer browser client locally, a remote user running the printer + browser client via a screen-sharing connection, a remote user logged + in via ssh running a command-line tool like "dns-sd", or a remote + user sending DNS requests that cause a Discovery Proxy to perform + discovery operations on its behalf. + +3. Conventions and Terminology Used in This Document + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + + The Discovery Proxy builds on Multicast DNS, which works between + hosts on the same link. For the purposes of this document, a set of + hosts is considered to be "on the same link" if: + + * when any host from that set sends a packet to any other host in + that set, using unicast, multicast, or broadcast, the entire link- + layer packet payload arrives unmodified, and + + * a broadcast sent over that link, by any host from that set of + hosts, can be received by every other host in that set. + + The link-layer _header_ may be modified, such as in Token Ring Source + Routing [IEEE-5], but not the link-layer _payload_. In particular, + if any device forwarding a packet modifies any part of the IP header + or IP payload, then the packet is no longer considered to be on the + same link. This means that the packet may pass through devices such + as repeaters, bridges, hubs, or switches and still be considered to + be on the same link for the purpose of this document, but not through + a device such as an IP router that decrements the IP TTL or otherwise + modifies the IP header. + +4. Compatibility Considerations + + No changes to existing devices are required to work with a Discovery + Proxy. + + Existing devices that advertise services using Multicast DNS work + with a Discovery Proxy. + + Existing clients that support DNS-based Service Discovery over + Unicast DNS work with a Discovery Proxy. DNS-based Service Discovery + over Unicast DNS was introduced in Mac OS X 10.4 Tiger in April 2005 + and has been included in Apple products introduced since then, + including the iPhone and iPad. It has also been included in products + from other vendors, such as Microsoft Windows 10. + + An overview of the larger collection of associated DNS-based Service + Discovery technologies, and how the Discovery Proxy technology + relates to those, is given in the Service Discovery Road Map document + [ROADMAP]. + +5. Discovery Proxy Operation + + In a typical configuration, a Discovery Proxy is configured to be + authoritative [RFC1034] [RFC1035] for four or more DNS subdomains, + listed below. Authority for these subdomains is delegated from the + parent domain to the Discovery Proxy in the usual way for DNS + delegation, via NS records. + + A DNS subdomain for DNS-based Service Discovery records. + This subdomain name may contain rich text, including spaces and + other punctuation. This is because this subdomain name is used + only in graphical user interfaces, where rich text is appropriate. + + A DNS subdomain for host name records. + This subdomain name SHOULD be limited to letters, digits, and + hyphens in order to facilitate the convenient use of host names in + command-line interfaces. + + One or more DNS subdomains for IPv4 Reverse Mapping records. + These subdomains will have names that end in "in-addr.arpa". + + One or more DNS subdomains for IPv6 Reverse Mapping records. + These subdomains will have names that end in "ip6.arpa". + + In an enterprise network, the naming and delegation of these + subdomains is typically performed by conscious action of the network + administrator. In a home network, naming and delegation would + typically be performed using some automatic configuration mechanism + such as Home Networking Control Protocol (HNCP) [RFC7788]. + + These three varieties of delegated subdomains (service discovery, + host names, and reverse mapping) are described below in Sections 5.1, + 5.3, and 5.4. + + How a client discovers where to issue its DNS-based Service Discovery + queries is described in Section 5.2. + +5.1. Delegated Subdomain for DNS-based Service Discovery Records + + In its simplest form, each link in an organization is assigned a + unique Unicast DNS domain name such as "Building 1.example.com" or + "2nd Floor.Building 3.example.com". Grouping multiple links under a + single Unicast DNS domain name is to be specified in a future + companion document, but for the purposes of this document, assume + that each link has its own unique Unicast DNS domain name. In a + graphical user interface these names are not displayed as strings + with dots as shown above, but something more akin to a typical file + browser graphical user interface (which is harder to illustrate in a + text-only document) showing folders, subfolders, and files in a file + system. + + +---------------+--------------+-------------+-------------------+ + | *example.com* | Building 1 | 1st Floor | Alice's printer | + | | Building 2 | *2nd Floor* | Bob's printer | + | | *Building 3* | 3rd Floor | Charlie's printer | + | | Building 4 | 4th Floor | | + | | Building 5 | | | + | | Building 6 | | | + +---------------+--------------+-------------+-------------------+ + + Figure 2: Illustrative GUI + + Each named link in an organization has one or more Discovery Proxies + that serve it. This Discovery Proxy function could be performed by a + device like a router or switch that is physically attached to that + link. In the parent domain, NS records are used to delegate + ownership of each defined link name (e.g., "Building 1.example.com") + to one or more Discovery Proxies that serve the named link. In other + words, the Discovery Proxies are the authoritative name servers for + that subdomain. As in the rest of DNS-based Service Discovery, all + names are represented as-is using plain UTF-8 encoding and, as + described in Section 5.5.4, no text-encoding translations are + performed. + + With appropriate VLAN configuration [IEEE-1Q], a single Discovery + Proxy device could have a logical presence on many links and serve as + the Discovery Proxy for all those links. In such a configuration, + the Discovery Proxy device would have a single physical Ethernet + [IEEE-3] port, configured as a VLAN trunk port, which would appear to + software on that device as multiple virtual Ethernet interfaces, one + connected to each of the VLAN links. + + As an alternative to using VLAN technology, using a Multicast DNS + Discovery Relay [RELAY] is another way that a Discovery Proxy can + have a "virtual" presence on a remote link. + + When a DNS-SD client issues a Unicast DNS query to discover services + in a particular Unicast DNS subdomain + (e.g., "_ipp._tcp.Building 1.example.com. PTR ?"), the normal DNS + delegation mechanism results in that query being forwarded until it + reaches the delegated authoritative name server for that subdomain, + namely, the Discovery Proxy on the link in question. Like a + conventional Unicast DNS server, a Discovery Proxy implements the + usual Unicast DNS protocol [RFC1034] [RFC1035] over UDP and TCP. + However, unlike a conventional Unicast DNS server that generates + answers from the data in its manually configured zone file, a + Discovery Proxy learns answers using Multicast DNS. A Discovery + Proxy does this by consulting its Multicast DNS cache and/or issuing + Multicast DNS queries, as appropriate according to the usual protocol + rules of Multicast DNS [RFC6762], for the corresponding Multicast DNS + name, type, and class, with the delegated zone part of the name + replaced with ".local" (e.g., in this case, + "_ipp._tcp.local. PTR ?"). Then, from the received Multicast DNS + data, the Discovery Proxy synthesizes the appropriate Unicast DNS + response, with the ".local" top-level label of the owner name + replaced with the name of the delegated zone. Further details of the + name translation rules are described in Section 5.5. Rules + specifying how long the Discovery Proxy should wait to accumulate + Multicast DNS responses before sending its unicast reply are + described in Section 5.6. + + The existing Multicast DNS caching mechanism is used to minimize + unnecessary Multicast DNS queries on the wire. The Discovery Proxy + is acting as a client of the underlying Multicast DNS subsystem and + benefits from the same caching and efficiency measures as any other + client using that subsystem. + + Note that the contents of the delegated zone, generated as it is by + performing ".local" Multicast DNS queries, mirrors the records + available on the local link via Multicast DNS very closely, but not + precisely. There is not a full bidirectional equivalence between the + two. Certain records that are available via Multicast DNS may not + have equivalents in the delegated zone possibly because they are + invalid or not relevant in the delegated zone or because they are + being suppressed because they are unusable outside the local link + (see Section 5.5.2). Conversely, certain records that appear in the + delegated zone may not have corresponding records available on the + local link via Multicast DNS. In particular, there are certain + administrative SRV records (see Section 6) that logically fall within + the delegated zone but semantically represent metadata _about_ the + zone rather than records _within_ the zone. Consequently, these + administrative records in the delegated zone do not have any + corresponding counterparts in the Multicast DNS namespace of the + local link. + +5.2. Domain Enumeration + + A DNS-SD client performs Domain Enumeration [RFC6763] via certain PTR + queries, using both unicast and multicast. + + If a DNS-SD client receives a Domain Name configuration via DHCP then + it issues unicast queries derived from this domain name. It also + issues unicast queries using names derived from its IPv4 subnet + address(es) and IPv6 prefix(es). These unicast Domain Enumeration + queries are described in Section 5.2.1. A DNS-SD client also issues + multicast Domain Enumeration queries in the "local" domain [RFC6762], + as described in Section 5.2.2. The results of all the Domain + Enumeration queries are combined for DNS-based Service Discovery + purposes. + +5.2.1. Domain Enumeration via Unicast Queries + + The (human or automated) administrator creates Unicast DNS Domain + Enumeration PTR records [RFC6763] to inform clients of available + service discovery domains. Two varieties of such Unicast DNS Domain + Enumeration PTR records exist: those with names derived from the + domain name communicated to the clients via DHCP option 15 [RFC2132], + and those with names derived from either IPv4 subnet address(es) or + IPv6 prefix(es) in use by the clients. Below is an example showing + the name-based variety, where the DHCP server configured the client + with the domain name "example.com": + + b._dns-sd._udp.example.com. PTR Building 1.example.com. + PTR Building 2.example.com. + PTR Building 3.example.com. + PTR Building 4.example.com. + + db._dns-sd._udp.example.com. PTR Building 1.example.com. + + lb._dns-sd._udp.example.com. PTR Building 1.example.com. + + The meaning of these records is defined in the DNS-based Service + Discovery specification [RFC6763] but, for convenience, is repeated + here. The "b" ("browse") records tell the client device the list of + browsing domains to display for the user to select from. The "db" + ("default browse") record tells the client device which domain in + that list should be selected by default. The "db" domain MUST be one + of the domains in the "b" list; if not, then no domain is selected by + default. The "lb" ("legacy browse") record tells the client device + which domain to automatically browse on behalf of applications that + don't implement user interface for multi-domain browsing (which is + most of them at the time of writing). The "lb" domain is often the + same as the "db" domain, or sometimes the "db" domain plus one or + more others that should be included in the list of automatic browsing + domains for legacy clients. + + Note that in the example above, for clarity, space characters in + names are shown as actual spaces. If this data is manually entered + into a textual zone file for authoritative server software such as + BIND, care must be taken because the space character is used as a + field separator, and other characters like dot ('.'), semicolon + (';'), dollar ('$'), backslash ('\'), etc., also have special + meaning. These characters have to be escaped when entered into a + textual zone file, following the rules in Section 5.1 of the DNS + specification [RFC1035]. For example, a literal space in a name is + represented in the textual zone file using '\032', so + "Building 1.example.com" is entered as "Building\0321.example.com". + + DNS responses are limited to a maximum size of 65535 bytes. This + limits the maximum number of domains that can be returned for a + Domain Enumeration query as follows: + + A DNS response header is 12 bytes. That's typically followed by a + single qname (up to 256 bytes) plus qtype (2 bytes) and qclass + (2 bytes), leaving 65275 for the Answer Section. + + An Answer Section Resource Record consists of: + + * Owner name, encoded as a compression pointer, 2 bytes + * RRTYPE (type PTR), 2 bytes + * RRCLASS (class IN), 2 bytes + * TTL, 4 bytes + * RDLENGTH, 2 bytes + * RDATA (domain name), up to 256 bytes + + This means that each Resource Record in the Answer Section can take + up to 268 bytes total, which means that the Answer Section can + contain, in the worst case, no more than 243 domains. + + In a more typical scenario, where the domain names are not all + maximum-sized names, and there is some similarity between names so + that reasonable name compression is possible, each Answer + Section Resource Record may average 140 bytes, which means that the + Answer Section can contain up to 466 domains. + + It is anticipated that this should be sufficient for even a large + corporate network or university campus. + +5.2.2. Domain Enumeration via Multicast Queries + + In the case where Discovery Proxy functionality is widely deployed + within an enterprise (either by having a Discovery Proxy physically + on each link, or by having a Discovery Proxy with a remote "virtual" + presence on each link using VLANs or Multicast DNS Discovery Relays + [RELAY]), this offers an additional way to provide Domain Enumeration + configuration data for clients. + + Note that this function of the Discovery Proxy is supplementary to + the primary purpose of the Discovery Proxy, which is to facilitate + _remote_ clients discovering services on the Discovery Proxy's local + link. This publication of Domain Enumeration configuration data via + link-local multicast on the Discovery Proxy's local link is performed + for the benefit of _local_ clients attached to that link, and + typically directs those clients to contact other distant Discovery + Proxies attached to other links. Generally, a client does not need + to use the local Discovery Proxy on its own link, because a client is + generally able to perform its own Multicast DNS queries on that link. + (The exception to this is when the local Wi-Fi access point is + blocking or filtering local multicast traffic, requiring even local + clients to use their local Discovery Proxy to perform local + discovery.) + + A Discovery Proxy can be configured to generate Multicast DNS + responses for the following Multicast DNS Domain Enumeration queries + issued by clients: + + b._dns-sd._udp.local. PTR ? + db._dns-sd._udp.local. PTR ? + lb._dns-sd._udp.local. PTR ? + + This provides the ability for Discovery Proxies to indicate + recommended browsing domains to DNS-SD clients on a per-link + granularity. In some enterprises, it may be preferable to provide + this per-link configuration information in the form of Discovery + Proxy configuration data rather than by populating the Unicast DNS + servers with the same data (in the "ip6.arpa" or "in-addr.arpa" + domains). + + Regardless of how the network operator chooses to provide this + configuration data, clients will perform Domain Enumeration via both + unicast and multicast queries and then combine the results of these + queries. + +5.3. Delegated Subdomain for LDH Host Names + + DNS-SD service instance names and domains are allowed to contain + arbitrary Net-Unicode text [RFC5198], encoded as precomposed UTF-8 + [RFC3629]. + + Users typically interact with service discovery software by viewing a + list of discovered service instance names on a display and selecting + one of them by pointing, touching, or clicking. Similarly, in + software that provides a multi-domain DNS-SD user interface, users + view a list of offered domains on the display and select one of them + by pointing, touching, or clicking. To use a service, users don't + have to remember domain or instance names, or type them; users just + have to be able to recognize what they see on the display and touch + or click on the thing they want. + + In contrast, host names are often remembered and typed. Also, host + names have historically been used in command-line interfaces where + spaces can be inconvenient. For this reason, host names have + traditionally been restricted to letters, digits, and hyphens (LDH) + with no spaces or other punctuation. + + While we do want to allow rich text for DNS-SD service instance names + and domains, it is advisable, for maximum compatibility with existing + usage, to restrict host names to the traditional letter-digit-hyphen + rules. This means that while the service name + "My Printer._ipp._tcp.Building 1.example.com" is acceptable and + desirable (it is displayed in a graphical user interface as an + instance called "My Printer" in the domain "Building 1" at + "example.com"), the host name "My-Printer.Building 1.example.com" is + less desirable (because of the space in "Building 1"). + + To accommodate this difference in allowable characters, a Discovery + Proxy SHOULD support having two separate subdomains delegated to it + for each link it serves: one whose name is allowed to contain + arbitrary Net-Unicode text [RFC5198], and a second more constrained + subdomain whose name is restricted to contain only letters, digits, + and hyphens, to be used for host name records (names of 'A' and + 'AAAA' address records). The restricted names may be any valid name + consisting of only letters, digits, and hyphens, including Punycode- + encoded names [RFC3492]. + + For example, a Discovery Proxy could have the two subdomains + "Building 1.example.com" and "bldg-1.example.com" delegated to it. + The Discovery Proxy would then translate these two Multicast DNS + records: + + My Printer._ipp._tcp.local. SRV 0 0 631 prnt.local. + prnt.local. A 203.0.113.2 + + into Unicast DNS records as follows: + + My Printer._ipp._tcp.Building 1.example.com. + SRV 0 0 631 prnt.bldg-1.example.com. + prnt.bldg-1.example.com. A 203.0.113.2 + + Note that the SRV record name is translated using the rich-text + domain name ("Building 1.example.com"), and the address record name + is translated using the LDH domain ("bldg-1.example.com"). Further + details of the name translation rules are described in Section 5.5. + + A Discovery Proxy MAY support only a single rich-text Net-Unicode + domain and use that domain for all records, including 'A' and 'AAAA' + address records, but implementers choosing this option should be + aware that this choice may produce host names that are awkward to use + in command-line environments. Whether or not this is an issue + depends on whether users in the target environment are expected to be + using command-line interfaces. + + A Discovery Proxy MUST NOT be restricted to support only a letter- + digit-hyphen subdomain, because that results in an unnecessarily poor + user experience. + + As described in Section 5.2.1, for clarity, in examples here space + characters in names are shown as actual spaces. If this dynamically + discovered data were to be manually entered into a textual zone file + (which it isn't), then spaces would need to be represented using + '\032', so "My Printer._ipp._tcp.Building 1.example.com" would become + "My\032Printer._ipp._tcp.Building\0321.example.com". + + Note that the '\032' representation does not appear in DNS messages + sent over the air. In the wire format of DNS messages, spaces are + sent as spaces, not as '\032', and likewise, in a graphical user + interface at the client device, spaces are shown as spaces, not as + '\032'. + +5.4. Delegated Subdomain for Reverse Mapping + + A Discovery Proxy can facilitate easier management of reverse mapping + domains, particularly for IPv6 addresses where manual management may + be more onerous than it is for IPv4 addresses. + + To achieve this, in the parent domain, NS records are used to + delegate ownership of the appropriate reverse mapping domain to the + Discovery Proxy. In other words, the Discovery Proxy becomes the + authoritative name server for the reverse mapping domain. For fault + tolerance reasons, there may be more than one Discovery Proxy serving + a given link. + + If a given link is using the IPv4 subnet 203.0.113/24, then the + domain "113.0.203.in-addr.arpa" is delegated to the Discovery Proxy + for that link. + + If a given link is using the IPv6 prefix 2001:0DB8:1234:5678::/64, + then the domain "8.7.6.5.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa" is + delegated to the Discovery Proxy for that link. + + When a reverse mapping query arrives at the Discovery Proxy, it + issues the identical query on its local link, as a Multicast DNS + query. The mechanism to force an apparently unicast name to be + resolved using link-local Multicast DNS varies depending on the API + set being used. For example, in the "dns_sd.h" APIs (available on + macOS, iOS, Bonjour for Windows, Linux, and Android), using + kDNSServiceFlagsForceMulticast indicates that the + DNSServiceQueryRecord() call should perform the query using Multicast + DNS. Other API sets have different ways of forcing multicast + queries. When the host owning that IPv4 or IPv6 address responds + with a name of the form "something.local", the Discovery Proxy + rewrites it to use its configured LDH host name domain instead of + ".local" and returns the response to the caller. + + For example, a Discovery Proxy with the two subdomains + "113.0.203.in-addr.arpa" and "bldg-1.example.com" delegated to it + would translate this Multicast DNS record: + + 2.113.0.203.in-addr.arpa. PTR prnt.local. + + into this Unicast DNS response: + + 2.113.0.203.in-addr.arpa. PTR prnt.bldg-1.example.com. + + In this example the "prnt.local" host name is translated using the + delegated LDH subdomain, as described in Section 5.5. + + Subsequent queries for the prnt.bldg-1.example.com address record, + falling as it does within the bldg-1.example.com domain, which is + delegated to this Discovery Proxy, will arrive at this Discovery + Proxy where they are answered by issuing Multicast DNS queries and + using the received Multicast DNS answers to synthesize Unicast DNS + responses, as described above. + + Note that this description assumes that all addresses on a given IPv4 + subnet or IPv6 prefix are mapped to host names using the Discovery + Proxy mechanism. It would be possible to implement a Discovery Proxy + that can be configured so that some address-to-name mappings are + performed using Multicast DNS on the local link, while other address- + to-name mappings within the same IPv4 subnet or IPv6 prefix are + configured manually. + +5.5. Data Translation + + For the delegated rich-text and LDH subdomains, generating + appropriate Multicast DNS queries involves translating from the + configured DNS domain (e.g., "Building 1.example.com") on the Unicast + DNS side to ".local" on the Multicast DNS side. + + For the delegated reverse-mapping subdomain, generating appropriate + Multicast DNS queries involves using the appropriate API mechanism to + indicate that a query should be performed using Multicast DNS, as + described in Section 5.4. + + Generating appropriate Unicast DNS responses from the received + Multicast DNS answers involves translating back from ".local" to the + appropriate configured Unicast DNS domain as necessary, as described + below. + + In the examples below, the delegated subdomains are as follows: + + Delegated subdomain for rich-text names Building 1.example.com. + Delegated subdomain for LDH names bldg-1.example.com. + Delegated subdomain for IPv4 reverse mapping 113.0.203.in-addr.arpa. + + Names in Multicast DNS answers that do not end in ".local" do not + require any translation. + + Names in Multicast DNS answers that end in ".local" are only + meaningful on the local link, and require translation to make them + useable by clients outside the local link. + + Names that end in ".local" may appear both as the owner names of + received Multicast DNS answer records, and in the RDATA of received + Multicast DNS answer records. + + In a received Multicast DNS answer record, if the owner name ends + with ".local", then the ".local" top-level label is replaced with the + name of the delegated subdomain as was used in the originating query. + + In a received Multicast DNS answer record, if a name in the RDATA + ends with ".local", then the name is translated according to the + delegated subdomain that was used in the originating query, as + explained below. + + For queries in subdomains delegated for LDH host names, ".local" + names in RDATA are translated to that delegated LDH subdomain. For + example, a query for "thing.bldg-1.example.com" will be translated to + a Multicast DNS query for "thing.local". If that query returns this + CNAME record: + + thing.local. CNAME prnt.local. + + then both the owner name and the name in the RDATA are translated + from ".local" to the LDH subdomain "bldg-1.example.com": + + thing.bldg-1.example.com. CNAME prnt.bldg-1.example.com. + + For queries in subdomains delegated for reverse mapping names, + ".local" names in RDATA are translated to the delegated LDH + subdomain, if one is configured, or to the delegated rich-text + subdomain otherwise. For example, consider a reverse mapping query + that returns this PTR record: + + 2.113.0.203.in-addr.arpa. PTR prnt.local. + + The owner name is not translated because it does not end in ".local". + The name in the RDATA is translated from ".local" to the LDH + subdomain "bldg-1.example.com": + + 2.113.0.203.in-addr.arpa. PTR prnt.bldg-1.example.com. + + For queries in subdomains delegated for rich-text names, ".local" + names in RDATA are translated according to whether or not they + represent host names (i.e., RDATA names that are the owner names of A + and AAAA DNS records). RDATA names ending in ".local" that represent + host names are translated to the delegated LDH subdomain, if one is + configured, or to the delegated rich-text subdomain otherwise. All + other RDATA names ending in ".local" are translated to the delegated + rich-text subdomain. For example, consider a DNS-SD service browsing + PTR query that returns this PTR record for IPP printing: + + _ipp._tcp.local. PTR My Printer._ipp._tcp.local. + + Both the owner name and the name in the RDATA are translated from + ".local" to the rich-text subdomain: + + _ipp._tcp.Building 1.example.com. + PTR My Printer._ipp._tcp.Building 1.example.com. + + In contrast, consider a query that returns this SRV record for a + specific IPP printing instance: + + My Printer._ipp._tcp.local. SRV 0 0 631 prnt.local. + + As for all queries, the owner name is translated to the delegated + subdomain of the originating query, the delegated rich-text subdomain + "Building 1.example.com". However, the ".local" name in the RDATA is + the target host name field of an SRV record, a field that is used + exclusively for host names. Consequently it is translated to the LDH + subdomain "bldg-1.example.com", if configured, instead of the rich- + text subdomain: + + My Printer._ipp._tcp.Building 1.example.com. + SRV 0 0 631 prnt.bldg-1.example.com. + + Other beneficial translation and filtering operations are described + below. + +5.5.1. DNS TTL Limiting + + For efficiency, Multicast DNS typically uses moderately high DNS TTL + values. For example, the typical TTL on DNS-SD service browsing PTR + records is 75 minutes. What makes these moderately high TTLs + acceptable is the cache coherency mechanisms built in to the + Multicast DNS protocol, which protect against stale data persisting + for too long. When a service shuts down gracefully, it sends goodbye + packets to remove its service browsing PTR record(s) immediately from + neighboring caches. If a service shuts down abruptly without sending + goodbye packets, the Passive Observation Of Failures (POOF) mechanism + described in Section 10.5 of the Multicast DNS specification + [RFC6762] comes into play to purge the cache of stale data. + + A traditional Unicast DNS client on a distant remote link does not + get to participate in these Multicast DNS cache coherency mechanisms + on the local link. For traditional Unicast DNS queries (those + received without using Long-Lived Queries (LLQ) [RFC8764] or DNS Push + Notification subscriptions [RFC8765]), the DNS TTLs reported in the + resulting Unicast DNS response MUST be capped to be no more than ten + seconds. + + Similarly, for negative responses, the negative caching TTL indicated + in the SOA record [RFC2308] should also be ten seconds (see + Section 6.1). + + This value of ten seconds is chosen based on user-experience + considerations. + + For negative caching, suppose a user is attempting to access a remote + device (e.g., a printer), and they are unsuccessful because that + device is powered off. Suppose they then place a telephone call and + ask for the device to be powered on. We want the device to become + available to the user within a reasonable time period. It is + reasonable to expect it to take on the order of ten seconds for a + simple device with a simple embedded operating system to power on. + Once the device is powered on and has announced its presence on the + network via Multicast DNS, we would like it to take no more than a + further ten seconds for stale negative cache entries to expire from + Unicast DNS caches, making the device available to the user desiring + to access it. + + Similar reasoning applies to capping positive TTLs at ten seconds. + In the event of a device moving location, getting a new DHCP address, + or other renumbering events, we would like the updated information to + be available to remote clients in a relatively timely fashion. + + However, network administrators should be aware that many recursive + resolvers by default are configured to impose a minimum TTL of 30 + seconds. If stale data appears to be persisting in the network to + the extent that it adversely impacts user experience, network + administrators are advised to check the configuration of their + recursive resolvers. + + For received Unicast DNS queries that use LLQ [RFC8764] or DNS Push + Notifications [RFC8765], the Multicast DNS record's TTL SHOULD be + returned unmodified, because the notification channel exists to + inform the remote client as records come and go. For further details + about Long-Lived Queries and its newer replacement, DNS Push + Notifications, see Section 5.6. + +5.5.2. Suppressing Unusable Records + + A Discovery Proxy SHOULD offer a configurable option, enabled by + default, to suppress Unicast DNS answers for records that are not + useful outside the local link. When the option to suppress unusable + records is enabled: + + * For a Discovery Proxy that is serving only clients outside the + local link, DNS A and AAAA records for IPv4 link-local addresses + [RFC3927] and IPv6 link-local addresses [RFC4862] SHOULD be + suppressed. + + * Similarly, for sites that have multiple private address realms + [RFC1918], in cases where the Discovery Proxy can determine that + the querying client is in a different address realm, private + addresses SHOULD NOT be communicated to that client. + + * IPv6 Unique Local Addresses [RFC4193] SHOULD be suppressed in + cases where the Discovery Proxy can determine that the querying + client is in a different IPv6 address realm. + + * By the same logic, DNS SRV records that reference target host + names that have no addresses usable by the requester should be + suppressed, and likewise, DNS-SD service browsing PTR records that + point to unusable SRV records should similarly be suppressed. + +5.5.3. NSEC and NSEC3 Queries + + Multicast DNS devices do not routinely announce their records on the + network. Generally, they remain silent until queried. This means + that the complete set of Multicast DNS records in use on a link can + only be discovered by active querying, not by passive listening. + Because of this, a Discovery Proxy can only know what names exist on + a link by issuing queries for them, and since it would be impractical + to issue queries for every possible name just to find out which names + exist and which do not, a Discovery Proxy cannot programmatically + generate the traditional Unicast DNS NSEC [RFC4034] and NSEC3 + [RFC5155] records that assert the nonexistence of a large range of + names. + + When queried for an NSEC or NSEC3 record type, the Discovery Proxy + issues a qtype "ANY" query using Multicast DNS on the local link and + then generates an NSEC or NSEC3 response with a Type Bit Map + signifying which record types do and do not exist for just the + specific name queried, and no other names. + + Multicast DNS NSEC records received on the local link MUST NOT be + forwarded unmodified to a unicast querier, because there are slight + differences in the NSEC record data. In particular, Multicast DNS + NSEC records do not have the NSEC bit set in the Type Bit Map, + whereas conventional Unicast DNS NSEC records do have the NSEC bit + set. + +5.5.4. No Text-Encoding Translation + + A Discovery Proxy does no translation between text encodings. + Specifically, a Discovery Proxy does no translation between Punycode + encoding [RFC3492] and UTF-8 encoding [RFC3629], either in the owner + name of DNS records or anywhere in the RDATA of DNS records (such as + the RDATA of PTR records, SRV records, NS records, or other record + types like TXT, where it is ambiguous whether the RDATA may contain + DNS names). All bytes are treated as-is with no attempt at text- + encoding translation. A client implementing DNS-based Service + Discovery [RFC6763] will use UTF-8 encoding for its unicast DNS-based + Service Discovery queries, which the Discovery Proxy passes through + without any text-encoding translation to the Multicast DNS subsystem. + Responses from the Multicast DNS subsystem are similarly returned, + without any text-encoding translation, back to the requesting unicast + client. + +5.5.5. Application-Specific Data Translation + + There may be cases where Application-Specific Data Translation is + appropriate. + + For example, AirPrint printers tend to advertise fairly verbose + information about their capabilities in their DNS-SD TXT record. TXT + record sizes in the range of 500-1000 bytes are not uncommon. This + information is a legacy from lineprinter (LPR) printing, because LPR + does not have in-band capability negotiation, so all of this + information is conveyed using the DNS-SD TXT record instead. + Internet Printing Protocol (IPP) printing does have in-band + capability negotiation, but for convenience, printers tend to include + the same capability information in their IPP DNS-SD TXT records as + well. For local Multicast DNS (mDNS) use, this extra TXT record + information is wasteful but not fatal. However, when a Discovery + Proxy aggregates data from multiple printers on a link, and sends it + via unicast (via UDP or TCP), this amount of unnecessary TXT record + information can result in large responses. A DNS reply over TCP + carrying information about 70 printers with an average of 700 bytes + per printer adds up to about 50 kilobytes of data. Therefore, a + Discovery Proxy that is aware of the specifics of an application- + layer protocol such as AirPrint (which uses IPP) can elide + unnecessary key/value pairs from the DNS-SD TXT record for better + network efficiency. + + Also, the DNS-SD TXT record for many printers contains an "adminurl" + key (e.g., "adminurl=http://printername.local/status.html"). For + this URL to be useful outside the local link, the embedded ".local" + host name needs to be translated to an appropriate name with larger + scope. It is easy to translate ".local" names when they appear in + well-defined places: as a record's owner name, or in domain name + fields in the RDATA of record types like PTR and SRV. In the + printing case, some application-specific knowledge about the + semantics of the "adminurl" key is needed for the Discovery Proxy to + know that it contains a name that needs to be translated. This is + somewhat analogous to the need for NAT gateways to contain ALGs + (Application-Level Gateways) to facilitate the correct translation of + protocols that embed addresses in unexpected places. + + To avoid the need for application-specific knowledge about the + semantics of particular TXT record keys, protocol designers are + advised to avoid placing link-local names or link-local IP addresses + in TXT record keys if translation of those names or addresses would + be required for off-link operation. In the printing case, the + consequence of failing to translate the "adminurl" key correctly + would be that, when accessed from a different link, printing will + still work, but clicking the "Admin" user interface button will fail + to open the printer's administration page. Rather than duplicating + the host name from the service's SRV record in its "adminurl" key, + thereby having the same host name appear in two places, a better + design might have been to omit the host name from the "adminurl" key + and instead have the client implicitly substitute the target host + name from the service's SRV record in place of a missing host name in + the "adminurl" key. That way, the desired host name only appears + once and is in a well-defined place where software like the Discovery + Proxy is expecting to find it. + + Note that this kind of Application-Specific Data Translation is + expected to be very rare; it is the exception rather than the rule. + This is an example of a common theme in computing. It is frequently + the case that it is wise to start with a clean, layered design with + clear boundaries. Then, in certain special cases, those layer + boundaries may be violated where the performance and efficiency + benefits outweigh the inelegance of the layer violation. + + These layer violations are optional. They are done primarily for + efficiency reasons and generally should not be required for correct + operation. A Discovery Proxy MAY operate solely at the mDNS layer + without any knowledge of semantics at the DNS-SD layer or above. + +5.6. Answer Aggregation + + In a simple analysis, simply gathering multicast answers and + forwarding them in a unicast response seems adequate, but it raises + the question of how long the Discovery Proxy should wait to be sure + that it has received all the Multicast DNS answers it needs to form a + complete Unicast DNS response. If it waits too little time, then it + risks its Unicast DNS response being incomplete. If it waits too + long, then it creates a poor user experience at the client end. In + fact, there may be no time that is both short enough to produce a + good user experience and at the same time long enough to reliably + produce complete results. + + Similarly, the Discovery Proxy (the authoritative name server for the + subdomain in question) needs to decide what DNS TTL to report for + these records. If the TTL is too long, then the recursive resolvers + issuing queries on behalf of their clients risk caching stale data + for too long. If the TTL is too short, then the amount of network + traffic will be more than necessary. In fact, there may be no TTL + that is both short enough to avoid undesirable stale data and, at the + same time, long enough to be efficient on the network. + + Both these dilemmas are solved by the use of DNS Long-Lived Queries + (LLQ) [RFC8764] or its newer replacement, DNS Push Notifications + [RFC8765]. + + Clients supporting unicast DNS-based Service Discovery SHOULD + implement DNS Push Notifications [RFC8765] for improved user + experience. + + Clients and Discovery Proxies MAY support both LLQ and DNS Push + Notifications, and when talking to a Discovery Proxy that supports + both, the client may use either protocol, as it chooses, though it is + expected that only DNS Push Notifications will continue to be + supported in the long run. + + When a Discovery Proxy receives a query using LLQ or DNS Push + Notifications, it responds immediately using the Multicast DNS + records it already has in its cache (if any). This provides a good + client user experience by providing a near-instantaneous response. + Simultaneously, the Discovery Proxy issues a Multicast DNS query on + the local link to discover if there are any additional Multicast DNS + records it did not already know about. Should additional Multicast + DNS responses be received, these are then delivered to the client + using additional LLQ or DNS Push Notification update messages. The + timeliness of such update messages is limited only by the timeliness + of the device responding to the Multicast DNS query. If the + Multicast DNS device responds quickly, then the update message is + delivered quickly. If the Multicast DNS device responds slowly, then + the update message is delivered slowly. The benefit of using + multiple update messages to deliver results as they become available + is that the Discovery Proxy can respond promptly because it doesn't + have to deliver all the results in a single response that needs to be + delayed to allow for the expected worst-case delay for receiving all + the Multicast DNS responses. + + With a proxy that supported only standard DNS queries, even if it + were to try to provide reliability by assuming an excessively + pessimistic worst-case time (thereby giving a very poor user + experience), there would still be the risk of a slow Multicast DNS + device taking even longer than that worst-case time (e.g., a device + that is not even powered on until ten seconds after the initial query + is received), resulting in incomplete responses. Using update + messages to deliver subsequent asynchronous replies solves this + dilemma: even very late responses are not lost; they are delivered in + subsequent update messages. + + Note that while normal DNS queries are generally received via the + client's configured recursive resolver, LLQ and DNS Push Notification + subscriptions may be received directly from the client. + + There are two factors that determine how unicast responses are + generated: + + The first factor is whether or not the Discovery Proxy already has at + least one record in its cache that answers the question. + + The second factor is whether the client used a normal DNS query, or + established a subscription using LLQ or DNS Push Notifications. + Normal DNS queries are typically used for one-shot operations like + SRV or address record queries. LLQ and DNS Push Notification + subscriptions are typically used for long-lived service browsing PTR + queries. Normal DNS queries and LLQ each have different response + timing depending on the cache state, yielding the first four cases + listed below. DNS Push Notifications, the newer protocol, has + uniform behavior regardless of cache state, yielding the fifth case + listed below. + + * Standard DNS query; no answer in cache: + + Issue an mDNS query on the local link, exactly as a local client + would issue an mDNS query, for the desired record name, type, and + class, including retransmissions, as appropriate, according to the + established mDNS retransmission schedule [RFC6762]. The Discovery + Proxy awaits Multicast DNS responses. + + As soon as any Multicast DNS response packet is received that + contains one or more positive answers to that question (with or + without the Cache Flush bit [RFC6762] set) or a negative answer + (signified via a Multicast DNS NSEC record [RFC6762]), the + Discovery Proxy generates a Unicast DNS response message + containing the corresponding (filtered and translated) answers and + sends it to the remote client. + + If after six seconds no relevant Multicast DNS answers have been + received, cancel the mDNS query and return a negative response to + the remote client. Six seconds is enough time for the underlying + Multicast DNS subsystem to transmit three mDNS queries and allow + some time for responses to arrive. + + (Reasoning: Queries not using LLQ or Push Notifications are + generally queries that expect an answer from only one device, so + the first response is also the only response.) + + DNS TTLs in responses MUST be capped to at most ten seconds. + + * Standard DNS query; at least one answer in cache: + + No local mDNS queries are performed. + + The Discovery Proxy generates a Unicast DNS response message + containing the answer(s) from the cache right away, to minimize + delay. + + (Reasoning: Queries not using LLQ or Push Notifications are + generally queries that expect an answer from only one device. + Given RRSet TTL harmonization, if the proxy has one Multicast DNS + answer in its cache, it can reasonably assume that it has the + whole set.) + + DNS TTLs in responses MUST be capped to at most ten seconds. + + * Long-Lived Query (LLQ); no answer in cache: + + As in the case above with no answer in the cache, plan to perform + mDNS querying for six seconds, returning an LLQ response message + to the remote client as soon as any relevant mDNS response is + received. + + If after six seconds no relevant mDNS answers have been received, + and the client has not cancelled its Long-Lived Query, return a + negative LLQ response message to the remote client. + + (Reasoning: We don't need to rush to send an empty answer.) + + Regardless of whether or not a relevant mDNS response is received + within six seconds, the Long-Lived Query remains active for as + long as the client maintains the LLQ state, and results in the + ongoing transmission of mDNS queries until the Long-Lived Query is + cancelled. If the set of mDNS answers changes, LLQ Event Response + messages are sent. + + DNS TTLs in responses are returned unmodified. + + * Long-Lived Query (LLQ); at least one answer in cache: + + As in the case above with at least one answer in the cache, the + Discovery Proxy generates a unicast LLQ response message + containing the answer(s) from the cache right away, to minimize + delay. + + The Long-Lived Query remains active for as long as the client + maintains the LLQ state, and results in the transmission of mDNS + queries (with appropriate Known Answer lists) to determine if + further answers are available. If the set of mDNS answers + changes, LLQ Event Response messages are sent. + + (Reasoning: We want a user interface that is displayed very + rapidly yet continues to remain accurate even as the network + environment changes.) + + DNS TTLs in responses are returned unmodified. + + * Push Notification Subscription + + The Discovery Proxy acknowledges the subscription request + immediately. + + If one or more answers are already available in the cache, those + answers are then sent in an immediately following DNS PUSH + message. + + The Push Notification subscription remains active until the client + cancels the subscription, and results in the transmission of mDNS + queries (with appropriate Known Answer lists) to determine if + further answers are available. If the set of mDNS answers + changes, further DNS PUSH messages are sent. + + (Reasoning: We want a user interface that is displayed very + rapidly yet continues to remain accurate even as the network + environment changes.) + + DNS TTLs in responses are returned unmodified. + + Where the text above refers to returning "a negative response to the + remote client", it is describing returning a "no error no answer" + negative response, not NXDOMAIN. This is because the Discovery Proxy + cannot know all the Multicast DNS domain names that may exist on a + link at any given time, so any name with no answers may have child + names that do exist, making it an "empty non-terminal" name. + + Note that certain aspects of the behavior described here do not have + to be implemented overtly by the Discovery Proxy; they occur + naturally as a result of using existing Multicast DNS APIs. + + For example, in the first case above (standard DNS query and no + answers in the cache), if a new Multicast DNS query is requested + (either by a local client on the Discovery Proxy device, or by the + Discovery Proxy software on that device on behalf of a remote + client), and there is not already an identical Multicast DNS query + active and there are no matching answers already in the Multicast DNS + cache on the Discovery Proxy device, then this will cause a series of + Multicast DNS query packets to be issued with exponential backoff. + The exponential backoff sequence in some implementations starts at + one second and then doubles for each retransmission (0, 1, 3, 7 + seconds, etc.), and in others, it starts at one second and then + triples for each retransmission (0, 1, 4, 13 seconds, etc.). In + either case, if no response has been received after six seconds, that + is long enough that the underlying Multicast DNS implementation will + have sent three query packets without receiving any response. At + that point, the Discovery Proxy cancels its Multicast DNS query (so + no further Multicast DNS query packets will be sent for this query) + and returns a negative response to the remote client via unicast. + + The six-second delay is chosen to be long enough to give enough time + for devices to respond, yet short enough not to be too onerous for a + human user waiting for a response. For example, using the "dig" DNS + debugging tool, the current default settings result in it waiting a + total of 15 seconds for a reply (three transmissions of the DNS UDP + query packet, with a wait of 5 seconds after each packet), which is + ample time for it to have received a negative reply from a Discovery + Proxy after six seconds. + + The text above states that for a standard DNS query, if at least one + answer is already available in the cache, then a Discovery Proxy + should not issue additional mDNS query packets. This also occurs + naturally as a result of using existing Multicast DNS APIs. If a new + Multicast DNS query is requested (either locally, or by the Discovery + Proxy on behalf of a remote client) for which there are relevant + answers already in the Multicast DNS cache on the Discovery Proxy + device, and after the answers are delivered the Multicast DNS query + is immediately cancelled, then no Multicast DNS query packets will be + generated for this query. + +6. Administrative DNS Records + +6.1. DNS SOA (Start of Authority) Record + + The MNAME field SHOULD contain the host name of the Discovery Proxy + device (i.e., the same domain name as the RDATA of the NS record + delegating the relevant zone(s) to this Discovery Proxy device). + + The RNAME field SHOULD contain the mailbox of the person responsible + for administering this Discovery Proxy device. + + The SERIAL field MUST be zero. + + Zone transfers are undefined for Discovery Proxy zones, and + consequently, the REFRESH, RETRY, and EXPIRE fields have no useful + meaning for Discovery Proxy zones. These fields SHOULD contain + reasonable default values. The RECOMMENDED values are: REFRESH 7200, + RETRY 3600, and EXPIRE 86400. + + The MINIMUM field (used to control the lifetime of negative cache + entries) SHOULD contain the value 10. This value is chosen based on + user-experience considerations (see Section 5.5.1). + + In the event that there are multiple Discovery Proxy devices on a + link for fault tolerance reasons, this will result in clients + receiving inconsistent SOA records (different MNAME and possibly + RNAME) depending on which Discovery Proxy answers their SOA query. + However, since clients generally have no reason to use the MNAME or + RNAME data, this is unlikely to cause any problems. + +6.2. DNS NS Records + + In the event that there are multiple Discovery Proxy devices on a + link for fault tolerance reasons, the parent zone MUST be configured + with NS records giving the names of all the Discovery Proxy devices + on the link. + + Each Discovery Proxy device MUST be configured to answer NS queries + for the zone apex name by giving its own NS record, and the NS + records of its fellow Discovery Proxy devices on the same link, so + that it can return the correct answers for NS queries. + + The target host name in the RDATA of an NS record MUST NOT reference + a name that falls within any zone delegated to a Discovery Proxy. + Apart from the zone apex name, all other host names (names of A and + AAAA DNS records) that fall within a zone delegated to a Discovery + Proxy correspond to local Multicast DNS host names, which logically + belong to the respective Multicast DNS hosts defending those names, + not the Discovery Proxy. Generally speaking, the Discovery Proxy + does not own or control the delegated zone; it is merely a conduit to + the corresponding ".local" namespace, which is controlled by the + Multicast DNS hosts on that link. If an NS record were to reference + a manually determined host name that falls within a delegated zone, + that manually determined host name may inadvertently conflict with a + corresponding ".local" host name that is owned and controlled by some + device on that link. + +6.3. DNS Delegation Records + + Since the Multicast DNS specification [RFC6762] states that there can + be no delegation (subdomains) within a ".local" namespace, this + implies that any name within a zone delegated to a Discovery Proxy + (except for the zone apex name itself) cannot have any answers for + any DNS queries for RRTYPEs SOA, NS, or DS. Consequently: + + * for any query for the zone apex name of a zone delegated to a + Discovery Proxy, the Discovery Proxy MUST generate the appropriate + immediate answers as described above, and + + * for any query for any name below the zone apex, for RRTYPEs SOA, + NS, or DS, the Discovery Proxy MUST generate an immediate negative + answer. + +6.4. DNS SRV Records + + There are certain special DNS records that logically fall within the + delegated Unicast DNS subdomain, but rather than mapping to their + corresponding ".local" namesakes, they actually contain metadata + pertaining to the operation of the delegated Unicast DNS subdomain + itself. They do not exist in the corresponding ".local" namespace of + the local link. For these queries, a Discovery Proxy MUST generate + immediate answers, whether positive or negative, to avoid delays + while clients wait for their query to be answered. + + For example, if a Discovery Proxy implements Long-Lived Queries + [RFC8764], then it MUST positively respond to + "_dns-llq._udp.<zone> SRV" queries, "_dns-llq._tcp.<zone> SRV" + queries, and "_dns-llq-tls._tcp.<zone> SRV" queries as appropriate. + If it does not implement Long-Lived Queries, it MUST return an + immediate negative answer for those queries, instead of passing those + queries through to the local network as Multicast DNS queries and + then waiting unsuccessfully for answers that will not be forthcoming. + + If a Discovery Proxy implements DNS Push Notifications [RFC8765], + then it MUST positively respond to "_dns-push-tls._tcp.<zone>" + queries. Otherwise, it MUST return an immediate negative answer for + those queries. + + A Discovery Proxy MUST return an immediate negative answer for + "_dns-update._udp.<zone> SRV" queries, "_dns-update._tcp.<zone> SRV" + queries, and "_dns-update-tls._tcp.<zone> SRV" queries, since using + DNS Update [RFC2136] to change zones generated dynamically from local + Multicast DNS data is not possible. + +6.5. Domain Enumeration Records + + If the network operator chooses to use address-based unicast Domain + Enumeration queries for client configuration (see Section 5.2.1), and + the network operator also chooses to delegate the enclosing reverse + mapping subdomain to a Discovery Proxy, then that Discovery Proxy + becomes responsible for serving the answers to those address-based + unicast Domain Enumeration queries. + + As with the SRV metadata records described above, a Discovery Proxy + configured with delegated reverse mapping subdomains is responsible + for generating immediate (positive or negative) answers for address- + based unicast Domain Enumeration queries, rather than passing them + though to the underlying Multicast DNS subsystem and then waiting + unsuccessfully for answers that will not be forthcoming. + +7. DNSSEC Considerations + +7.1. Online Signing Only + + The Discovery Proxy acts as the authoritative name server for + designated subdomains, and if DNSSEC is to be used, the Discovery + Proxy needs to possess a copy of the signing keys in order to + generate authoritative signed data from the local Multicast DNS + responses it receives. Offline signing is not applicable to + Discovery Proxy. + +7.2. NSEC and NSEC3 Records + + In DNSSEC, NSEC and NSEC3 records are used to assert the nonexistence + of certain names, also described as "authenticated denial of + existence" [RFC4034] [RFC5155]. + + Since a Discovery Proxy only knows what names exist on the local link + by issuing queries for them, and since it would be impractical to + issue queries for every possible name just to find out which names + exist and which do not, a Discovery Proxy cannot programmatically + synthesize the traditional NSEC and NSEC3 records that assert the + nonexistence of a large range of names. Instead, when generating a + negative response, a Discovery Proxy programmatically synthesizes a + single NSEC record asserting the nonexistence of just the specific + name queried and no others. Since the Discovery Proxy has the zone + signing key, it can do this on demand. Since the NSEC record asserts + the nonexistence of only a single name, zone walking is not a + concern, and NSEC3 is therefore not necessary. + + Note that this applies only to traditional immediate DNS queries, + which may return immediate negative answers when no immediate + positive answer is available. When used with a DNS Push Notification + subscription [RFC8765], there are no negative answers, merely the + absence of answers so far, which may change in the future if answers + become available. + +8. IPv6 Considerations + + An IPv4-only host and an IPv6-only host behave as "ships that pass in + the night". Even if they are on the same Ethernet [IEEE-3], neither + is aware of the other's traffic. For this reason, each link may have + _two_ unrelated ".local." zones: one for IPv4 and one for IPv6. + Since, for practical purposes, a group of IPv4-only hosts and a group + of IPv6-only hosts on the same Ethernet act as if they were on two + entirely separate Ethernet segments, it is unsurprising that their + use of the ".local." zone should occur exactly as it would if they + really were on two entirely separate Ethernet segments. + + It will be desirable to have a mechanism to "stitch" together these + two unrelated ".local." zones so that they appear as one. Such a + mechanism will need to be able to differentiate between a dual-stack + (v4/v6) host participating in both ".local." zones, and two different + hosts: one IPv4-only and the other IPv6-only, which are both trying + to use the same name(s). Such a mechanism will be specified in a + future companion document. + + At present, it is RECOMMENDED that a Discovery Proxy be configured + with a single domain name for both the IPv4 and IPv6 ".local." zones + on the local link, and when a unicast query is received, it should + issue Multicast DNS queries using both IPv4 and IPv6 on the local + link and then combine the results. + +9. Security Considerations + +9.1. Authenticity + + A service proves its presence on a link by its ability to answer + link-local multicast queries on that link. If greater security is + desired, then the Discovery Proxy mechanism should not be used, and + something with stronger security should be used instead such as + authenticated secure DNS Update [RFC2136] [RFC3007]. + +9.2. Privacy + + The Domain Name System is, generally speaking, a global public + database. Records that exist in the Domain Name System name + hierarchy can be queried by name from, in principle, anywhere in the + world. If services on a mobile device (like a laptop computer) are + made visible via the Discovery Proxy mechanism, then when those + services become visible in a domain such as "My House.example.com", + it might indicate to (potentially hostile) observers that the mobile + device is in the owner's home. When those services disappear from + "My House.example.com", that change could be used by observers to + infer when the mobile device (and possibly its owner) may have left + the house. The privacy of this information may be protected using + techniques like firewalls, split-view DNS, and Virtual Private + Networks (VPNs), as are customarily used today to protect the privacy + of corporate DNS information. + + The privacy issue is particularly serious for the IPv4 and IPv6 + reverse zones. If the public delegation of the reverse zones points + to the Discovery Proxy, and the Discovery Proxy is reachable + globally, then it could leak a significant amount of information. + Attackers could discover hosts that otherwise might not be easy to + identify, and learn their host names. Attackers could also discover + the existence of links where hosts frequently come and go. + + The Discovery Proxy could provide sensitive records only to + authenticated users. This is a general DNS problem, not specific to + the Discovery Proxy. Work is underway in the IETF to tackle this + problem [RFC7626]. + +9.3. Denial of Service + + A remote attacker could use a rapid series of unique Unicast DNS + queries to induce a Discovery Proxy to generate a rapid series of + corresponding Multicast DNS queries on one or more of its local + links. Multicast traffic is generally more expensive than unicast + traffic, especially on Wi-Fi links [MCAST], which makes this attack + particularly serious. To limit the damage that can be caused by such + attacks, a Discovery Proxy (or the underlying Multicast DNS subsystem + that it utilizes) MUST implement Multicast DNS query rate limiting + appropriate to the link technology in question. For today's + 802.11b/g/n/ac Wi-Fi links (for which approximately 200 multicast + packets per second is sufficient to consume approximately 100% of the + wireless spectrum), a limit of 20 Multicast DNS query packets per + second is RECOMMENDED. On other link technologies like Gigabit + Ethernet, higher limits may be appropriate. A consequence of this + rate limiting is that a rogue remote client could issue an excessive + number of queries resulting in denial of service to other legitimate + remote clients attempting to use that Discovery Proxy. However, this + is preferable to a rogue remote client being able to inflict even + greater harm on the local network, which could impact the correct + operation of all local clients on that network. + +10. IANA Considerations + + This document has no IANA actions. + +11. References + +11.1. Normative References + + [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", + STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, + <https://www.rfc-editor.org/info/rfc1034>. + + [RFC1035] Mockapetris, P., "Domain names - implementation and + specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, + November 1987, <https://www.rfc-editor.org/info/rfc1035>. + + [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. + J., and E. Lear, "Address Allocation for Private + Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, + February 1996, <https://www.rfc-editor.org/info/rfc1918>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS + NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, + <https://www.rfc-editor.org/info/rfc2308>. + + [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November + 2003, <https://www.rfc-editor.org/info/rfc3629>. + + [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>. + + [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>. + + [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>. + + [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS + Security (DNSSEC) Hashed Authenticated Denial of + Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008, + <https://www.rfc-editor.org/info/rfc5155>. + + [RFC5198] Klensin, J. and M. Padlipsky, "Unicode Format for Network + Interchange", RFC 5198, DOI 10.17487/RFC5198, March 2008, + <https://www.rfc-editor.org/info/rfc5198>. + + [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, + DOI 10.17487/RFC6762, February 2013, + <https://www.rfc-editor.org/info/rfc6762>. + + [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service + Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, + <https://www.rfc-editor.org/info/rfc6763>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC8490] Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., + Lemon, T., and T. Pusateri, "DNS Stateful Operations", + RFC 8490, DOI 10.17487/RFC8490, March 2019, + <https://www.rfc-editor.org/info/rfc8490>. + + [RFC8765] Pusateri, T. and S. Cheshire, "DNS Push Notifications", + RFC 8765, DOI 10.17487/RFC8765, June 2020, + <https://www.rfc-editor.org/info/rfc8765>. + +11.2. Informative References + + [DNS-UL] Cheshire, S. and T. Lemon, "Dynamic DNS Update Leases", + Work in Progress, Internet-Draft, draft-sekar-dns-ul-02, 2 + August 2018, + <https://tools.ietf.org/html/draft-sekar-dns-ul-02>. + + [IEEE-1Q] IEEE, "IEEE Standard for Local and metropolitan area + networks -- Bridges and Bridged Networks", IEEE Std + 802.1Q-2014, DOI 10.1109/IEEESTD.2014.6991462, 2014, + <https://ieeexplore.ieee.org/document/6991462>. + + [IEEE-3] IEEE, "IEEE Standard for Ethernet", + DOI 10.1109/IEEESTD.2018.8457469, IEEE Std 802.3-2018, + December 2008, + <https://ieeexplore.ieee.org/document/8457469>. + + [IEEE-5] IEEE, "Telecommunications and information exchange between + systems - Local and metropolitan area networks - Part 5: + Token ring access method and physical layer + specifications", IEEE Std 802.5-1998, 1998, + <https://standards.ieee.org/standard/802_5-1998.html>. + + [IEEE-11] IEEE, "Information technology - Telecommunications and + information exchange between systems - Local and + metropolitan area networks - Specific requirements - Part + 11: Wireless LAN Medium Access Control (MAC) and Physical + Layer (PHY) Specifications", IEEE Std 802.11-2016, + December 2016, + <https://standards.ieee.org/standard/802_11-2016.html>. + + [MCAST] Perkins, C., McBride, M., Stanley, D., Kumari, W., and J. + Zuniga, "Multicast Considerations over IEEE 802 Wireless + Media", Work in Progress, Internet-Draft, draft-ietf- + mboned-ieee802-mcast-problems-11, 11 December 2019, + <https://tools.ietf.org/html/draft-ietf-mboned-ieee802- + mcast-problems-11>. + + [OHP] "ohybridproxy - an mDNS/DNS hybrid-proxy based on + mDNSResponder", commit 464d6c9, June 2017, + <https://github.com/sbyx/ohybridproxy/>. + + [REG-PROT] Cheshire, S. and T. Lemon, "Service Registration Protocol + for DNS-Based Service Discovery", Work in Progress, + Internet-Draft, draft-sctl-service-registration-02, 15 + July 2018, <https://tools.ietf.org/html/draft-sctl- + service-registration-02>. + + [RELAY] Cheshire, S. and T. Lemon, "Multicast DNS Discovery + Relay", Work in Progress, Internet-Draft, draft-sctl- + dnssd-mdns-relay-04, 21 March 2018, + <https://tools.ietf.org/html/draft-sctl-dnssd-mdns-relay- + 04>. + + [RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor + Extensions", RFC 2132, DOI 10.17487/RFC2132, March 1997, + <https://www.rfc-editor.org/info/rfc2132>. + + [RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound, + "Dynamic Updates in the Domain Name System (DNS UPDATE)", + RFC 2136, DOI 10.17487/RFC2136, April 1997, + <https://www.rfc-editor.org/info/rfc2136>. + + [RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic + Update", RFC 3007, DOI 10.17487/RFC3007, November 2000, + <https://www.rfc-editor.org/info/rfc3007>. + + [RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode + for Internationalized Domain Names in Applications + (IDNA)", RFC 3492, DOI 10.17487/RFC3492, March 2003, + <https://www.rfc-editor.org/info/rfc3492>. + + [RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast + Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005, + <https://www.rfc-editor.org/info/rfc4193>. + + [RFC6760] Cheshire, S. and M. Krochmal, "Requirements for a Protocol + to Replace the AppleTalk Name Binding Protocol (NBP)", + RFC 6760, DOI 10.17487/RFC6760, February 2013, + <https://www.rfc-editor.org/info/rfc6760>. + + [RFC7558] Lynn, K., Cheshire, S., Blanchet, M., and D. Migault, + "Requirements for Scalable DNS-Based Service Discovery + (DNS-SD) / Multicast DNS (mDNS) Extensions", RFC 7558, + DOI 10.17487/RFC7558, July 2015, + <https://www.rfc-editor.org/info/rfc7558>. + + [RFC7626] Bortzmeyer, S., "DNS Privacy Considerations", RFC 7626, + DOI 10.17487/RFC7626, August 2015, + <https://www.rfc-editor.org/info/rfc7626>. + + [RFC7788] Stenberg, M., Barth, S., and P. Pfister, "Home Networking + Control Protocol", RFC 7788, DOI 10.17487/RFC7788, April + 2016, <https://www.rfc-editor.org/info/rfc7788>. + + [RFC8375] Pfister, P. and T. Lemon, "Special-Use Domain + 'home.arpa.'", RFC 8375, DOI 10.17487/RFC8375, May 2018, + <https://www.rfc-editor.org/info/rfc8375>. + + [RFC8764] Cheshire, S. and M. Krochmal, "Apple's DNS Long-Lived + Queries Protocol", RFC 8764, DOI 10.17487/RFC8764, June + 2020, <https://www.rfc-editor.org/info/rfc8764>. + + [ROADMAP] Cheshire, S., "Service Discovery Road Map", Work in + Progress, Internet-Draft, draft-cheshire-dnssd-roadmap-03, + 23 October 2018, <https://tools.ietf.org/html/draft- + cheshire-dnssd-roadmap-03>. + + [ZC] Cheshire, S. and D.H. Steinberg, "Zero Configuration + Networking: The Definitive Guide", O'Reilly Media, Inc., + ISBN 0-596-10100-7, December 2005. + +Appendix A. Implementation Status + + Some aspects of the mechanism specified in this document already + exist in deployed software. Some aspects are new. This section + outlines which aspects already exist and which are new. + +A.1. Already Implemented and Deployed + + Domain enumeration by the client ("b._dns-sd._udp.<zone>" queries) is + already implemented and deployed. + + Performing unicast queries to the indicated discovery domain is + already implemented and deployed. + + These are implemented and deployed in Mac OS X 10.4 Tiger and later + (including all versions of Apple iOS, on all models of iPhones, + iPads, Apple TVs and HomePods), in Bonjour for Windows, and in + Android 4.1 "Jelly Bean" (API Level 16) and later. + + Domain enumeration and unicast querying have been used for several + years at IETF meetings to make terminal room printers discoverable + from outside the terminal room. When an IETF attendee presses + "Cmd-P" on a Mac, or selects AirPrint on an iPad or iPhone, and the + terminal room printers appear, it is because the client is sending + Unicast DNS queries to the IETF DNS servers. A walk-through giving + the details of this particular specific example is given in + Appendix A of the Roadmap document [ROADMAP]. + + The Long-Lived Query mechanism [RFC8764] referred to in this + specification exists and is deployed but was not standardized by the + IETF. The IETF has developed a superior Long-Lived Query mechanism + called DNS Push Notifications [RFC8765], which is built on DNS + Stateful Operations [RFC8490]. DNS Push Notifications is implemented + and deployed in Mac OS X 10.15 and later, and iOS 13 and later. + +A.2. Already Implemented + + A minimal portable Discovery Proxy implementation has been produced + by Markus Stenberg and Steven Barth, which runs on OS X and several + Linux variants including OpenWrt [OHP]. It was demonstrated at the + Berlin IETF in July 2013. + + Tom Pusateri has an implementation that runs on any Unix/Linux + system. It has a RESTful interface for management and an + experimental demo command-line interface (CLI) and web interface. + + Ted Lemon also has produced a portable implementation of Discovery + Proxy, which is available in the mDNSResponder open source code. + +A.3. Partially Implemented + + At the time of writing, existing APIs make multiple domains visible + to client software, but most client user interfaces lump all + discovered services into a single flat list. This is largely a + chicken-and-egg problem. Application writers were naturally + reluctant to spend time writing domain-aware user interface code when + few customers would benefit from it. If Discovery Proxy deployment + becomes common, then application writers will have a reason to + provide a better user experience. Existing applications will work + with the Discovery Proxy but will show all services in a single flat + list. Applications with improved user interfaces will show services + grouped by domain. + +Acknowledgments + + Thanks to Markus Stenberg for helping develop the policy regarding + the four styles of unicast response according to what data is + immediately available in the cache. Thanks to Anders Brandt, Ben + Campbell, Tim Chown, Alissa Cooper, Spencer Dawkins, Ralph Droms, + Joel Halpern, Ray Hunter, Joel Jaeggli, Warren Kumari, Ted Lemon, + Alexey Melnikov, Kathleen Moriarty, Tom Pusateri, Eric Rescorla, Adam + Roach, David Schinazi, Markus Stenberg, Dave Thaler, and Andrew + Yourtchenko for their comments. + +Author's Address + + Stuart Cheshire + Apple Inc. + One Apple Park Way + Cupertino, California 95014 + United States of America + + Phone: +1 (408) 996-1010 + Email: cheshire@apple.com |