dnsop B. Dickson Internet-Draft Intended status: Standards Track October 15, 2014 Expires: April 18, 2015 System to transport DNS over HTTP using JSON draft-dickson-dnsop-spartacus-system-00 Abstract This is the SPARTACUS DNS gateway system. It is designed to facilitate the transport of DNS messages opaquely, across problematic sections of the Internet. It uses JSON encoding, and HTTP(S) as the protocol for transport. The main criteria of SPARTACUS is that it preserve DNS messages verbatim, and that only properly formatted DNS messages are passed. There are two modes (so far) defined: DNS forwarder (dns clients point to a local gateway, which forwards to a remote gateway for sending to a DNS resolver); and transparent proxy (DNS packets are intercepted, passed to a local gateway, which sends them to the remote gateway, with original destination IP address etc. encoded, and used by the remote gateway as the destination). DNS messages are NAT-friendly, so changes to IP or UDP headers do not impact them. Thus, SPARTACUS does not interfere with TSIG, SIG(0), or Eastlake Cookies. This document describes the system, the components, and behavior, with examples. Author's Note Intended Status: Proposed Standard. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Dickson Expires April 18, 2015 [Page 1] Internet-Draft DNS Gateway System October 2014 Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on April 18, 2015. Copyright Notice Copyright (c) 2014 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 (http://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 . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Problem Statement . . . . . . . . . . . . . . . . . . . . 3 1.2. Rationale . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3. Related Work . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1. Comparison . . . . . . . . . . . . . . . . . . . . . 5 2. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 6 3. System Overview . . . . . . . . . . . . . . . . . . . . . . . 6 3.1. System Elements . . . . . . . . . . . . . . . . . . . . . 7 3.1.1. Node Types . . . . . . . . . . . . . . . . . . . . . 7 3.2. System Modes . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1. Details on DNS Forwarder mode . . . . . . . . . . . . 8 3.2.2. Details on Transparent Proxy mode . . . . . . . . . . 9 3.3. Interoperability . . . . . . . . . . . . . . . . . . . . 11 3.3.1. In-scope and out-of-scope . . . . . . . . . . . . . . 11 4. Interactions and Behavior . . . . . . . . . . . . . . . . . . 12 4.1. DNS Gateway Encodings . . . . . . . . . . . . . . . . . . 13 4.2. UDP Packet Loss . . . . . . . . . . . . . . . . . . . . . 13 4.3. Malformed UDP response . . . . . . . . . . . . . . . . . 13 4.4. DNSSEC Validation Failure . . . . . . . . . . . . . . . . 14 5. Client-Server Selection and Topology Examples . . . . . . . . 14 5.1. Mixed Traffic Walk-Through . . . . . . . . . . . . . . . 16 6. Security Considerations . . . . . . . . . . . . . . . . . . . 16 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 17 Dickson Expires April 18, 2015 [Page 2] Internet-Draft DNS Gateway System October 2014 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 9.1. Normative References . . . . . . . . . . . . . . . . . . 17 9.2. Informative References . . . . . . . . . . . . . . . . . 18 Appendix A. DNS Message Encoding Examples . . . . . . . . . . . 18 A.1. Simple Query/Answer, No EDNS or DNS Server . . . . . . . 19 A.2. Simple Query/Answer, EDNS, no DNS Server . . . . . . . . 21 A.3. Simple Query/Answer, no EDNS, with DNS Server . . . . . . 24 A.4. Simple Query/Answer, with EDNS and DNS Server . . . . . . 28 Appendix B. Server Gateway HTML code . . . . . . . . . . . . . . 32 Appendix C. Server Gateway HTTP POST Handler Pseudo-code . . . . 32 Appendix D. Client Gateway Pseudo-code . . . . . . . . . . . . . 33 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 34 1. Introduction DNS (The Domain Name System) has been deployed since the 1980's [RFC1033][RFC1034][RFC1035]. Since that time, some of the original Resource Record types have been made officially obsolete [RFC3425]. Some elements have been clarified [RFC2181][RFC2308]. New Resource Records have been added [RFC2136][RFC2845][RFC2930][RFC6891]. New definitions of bits in the header have arisen, in part due to DNSSEC's AD and CD bits [RFC4033][RFC4034][RFC4035][RFC5155]. This has resulted in now-outdated implementations of stateful devices (e.g. devices doing either NAT or packet inspection) interfering with end-to-end communication between DNS speakers. Old devices or implementations reject DNS packets that include these newer capabilities, features, or format changes. At the same time, there has arisen a variety of other devices and systems whose deliberate function is to block, capture, or modify DNS traffic, for profit or for ideological reasons. Examples include hotel wifi systems, ISPs, and state actors. Owing to the stateless nature of DNS over UDP, it is not possible to distinguish between deliberate and accidental sources of DNS interference. 1.1. Problem Statement There is a need to provide ways of supporting incremental deployment of new DNS features, in such a way as to prevent deliberate and/or accidental interference in the communication between DNS speakers. For example, DNS speakers could communicate over protected channels and with data integrity validation via DNSSEC. The foremost limitation is that the communication be over any other port/protocol combination than UDP port 53. Ideally, the choice should be an Dickson Expires April 18, 2015 [Page 3] Internet-Draft DNS Gateway System October 2014 encoding that is compatible with whatever port/protocol combination is selected (versus overloading the port/protocol with incompatible payloads). There is a further need for the communications channel(s) to be standardized, and to not introduce further interoperability problems at the DNS protocol level. Independent implementations need to interoperate completely, to avoid merely pushing the compatibility problem around. In order to solve these problems (individually and/or collectively), the SPARTACUS system has been developed. 1.2. Rationale SPARTACUS (Secure, Private Aparatus for Resolution Transported Across Constraining and/or Unmaintained Systems), is a system for encoding and decoding DNS messages (the DNS payload of UDP or TCP packet streams). The SPARTACUS system consists of bidirectional DNS gateways for transporting DNS over HTTP(S) using a JSON encoding scheme. This is intended to create "bridges" between DNS speakers; perhaps a better analogy would be "ferries", as there is no requirement for a tightly bound relationship between individual Client nodes and Server nodes. Standardizing the JSON encoding used by SPARTACUS, is intended to ensure a greater likelihood of compatible, interoprable implementations. The goal is to transport DNS messages from any Client implementation to any Server implementation. Each gateway must be liberal in what it accepts (any valid DNS message conforming to the relevant RFCs, regardless of DNS implementation) and conservative in what it sends (all packets must parse correctly as DNS messages). In order to ensure forward compatibility, unknown Types and (in the case of OPT) sub-types, MUST be accepted and transported. DNS messages MUST traverse the encode/decode process unaltered. The round-trip is designed to, and MUST be implemented to, preserve the entire DNS message's fidelity. This means a 1:1 binary match between input, encoding, decoding, and output. The lengths MUST match, and messages MUST be identical, bit for bit. A secondary objective of the encoding in JSON is the use of the same names for data elements and structures as in the DNS RFCs. The idea Dickson Expires April 18, 2015 [Page 4] Internet-Draft DNS Gateway System October 2014 is to provide human-readable JSON encodings, for easier diagnostics during development, and when investigating operational issues. 1.3. Related Work A variety of other work exists, and provided inspiration for the SPARTACUS work. This includes web/JSON DNS portals, for providing DNS query responses in JSON format, often with a "looking glass" functionality. FIXME format this list appropriately and decorate with words. END FIXME o Multi-location DNS Looking Glass - Tool for performing DNS queries via RESTful interface in multiple locations, returning results in JSON format o DNS Looking Glass - Tool for performing DNS queries via RESTful interface, returning results in JSON format o DNS JSON - Source code project from circa 2009, partially developed but incomplete/abandoned o DNSSEC-trigger[trigger] - embedded control function in NLnetlabs' Unbound resolver, for attempting DNS queries over TCP port 80 when DNSSEC problems are encountered o Various other web-based DNS lookup tools 1.3.1. Comparison There has been at least one previous effort to develop code for a DNS-JSON encoding, which appears to have been abandoned after one-way encoding was done, circa 2009. The project focused on presenting results to DNS queries in JSON format, with an intention to create a client gateway, which never materialized. The project can be found in two places ([JPF_jsondns] and [jsondns.org]). One major difference is that DNS query response status is converted to HTTP error codes, rather than being embedded in the JSON answer. This makes it unsuitable for bidirectional use. Only a few DNS type codes were implemented. Another DNS JSON tool [fileformat.info], similarly focuses only on answers, with a limited number of type codes. Yet another tool for looking up DNS via HTTP with JSON responses is the "dnsrest" [restdns.net]. It too focuses only on answer values, and is similarly not able to fully produce results that can be turned back into DNS answer packets. Dickson Expires April 18, 2015 [Page 5] Internet-Draft DNS Gateway System October 2014 The "DNS Looking Glass" [bortzmeyer.org], is primarily designed for returning DNS answer data. As such, it lacks encoding suitable for a bidirectional scheme. It is primarily focused on XML output, with JSON output organized around DNS resolution meta-data, plus answer data in a generic schema. (The schema itself is described in [draft-bortzmeyer-dns-json].) The "Multilocation DNS Looking Glass" [dns-lg.com], uses a RESTful query mechanism of "node/qname/qtypename" to request the looking glass (LG) to perform a DNS lookup for the qname and qtype, and returns the response in a JSON format. The JSON format is generic, encapsulating all types as string data in presentation format, with a generic label of "rdata". This does not facilitate decoding easily, as the JSON scheme provides no information for parsing the rdata field. The type (qtype for the query, or type for answer/authority/ additional) is in string (symbolic) form, and the elements are objects and thus in unordered lists. The JSON scheme is fine for one-way encoding for human readability, but not suitable for two-way conversion back into DNS. DNSSEC-trigger[trigger] can only be used in environments that use NLnetlabs' Unbound resolver, or where Unbound can be deployed as a replacement for existing recursive resolvers and/or stub resolvers. A variety of other web lookup tools exist, predominantly producing DNS validation (zone structure and hierarchy), maps, meta-data, or literal output from the 'dig' tool, in formats as varied as the purposes of the tools. Dig output, while being reasonably deterministic, is not sufficiently well-formed as to facilitate "screen scraping" as a parsing method. 2. Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. 3. System Overview The SPARTACUS system is designed to improve the reliability and security of the DNS system, by providing the means to transport DNS traffic across segments of the Internet. The goal is to bypass problem areas which interfere with DNS communications, regardless of root cause of the interference. Some familiarity with the DNS protocol is assumed. Dickson Expires April 18, 2015 [Page 6] Internet-Draft DNS Gateway System October 2014 3.1. System Elements The particular system elements used will differ, based on the mode of operation of the Client. Clients may request the use of particular resolvers via additional intra-element signalling. 3.1.1. Node Types Base node types are the following: o Standalone SPARTACUS Client forwarder o Transparent SPARTACUS proxy Client o Standalone SPARTACUS Server o Apache module-based SPARTACUS Server o Stub resolver o External recursive resolver o Client-side recursive resolver o External authority server Future node types are expected to include: o Browser-integrated SPARTACUS client and stub resolver o Mobile-device SPARTACUS client and stub resolver (with exposed getdns API) o SMTP-integrated SPARTACUS client and stub resolver 3.2. System Modes The system has two modes of operation: o DNS Forwarder - an opaque mode of operation, the Client/Server pair act collectively as a single DNS forwarder. o Transparent Proxy - In this mode, regular DNS traffic is diverted by unspecified means to the SPARTACUS Client. Additional intra-element signalling facilitates Clients requesting particular resolvers' (recursive or authoritative) use. Dickson Expires April 18, 2015 [Page 7] Internet-Draft DNS Gateway System October 2014 3.2.1. Details on DNS Forwarder mode The Server is configured to use a particular DNS recursive resolver, with the optional ability to support Client-requested resolver(s) via in-band signaling. If present, the Client-requested resolver IP address is passed as an EDNS OPT value. The Server, if it is configured to honor requested resolvers, uses this IP address instead of the default. Example: Problem caused by firewalls that do not support DNSSEC: +------+ +--------------+ +----------+ | | | | Blocked | | | Stub +--> | Old Firewall +----+X+---> | Resolver | | | | (no DNSSEC) | Packets | | +------+ +--------------+ +----------+ Figure 1 Example: How the stub client sees the SPARTACUS Client/Server pair, in the opaque forwarder configuration: +------+ +----------------------------------+ +----------+ | | | | | | | Stub +--> | Forwarder +----> | Resolver | | | | with DNSSEC | | | | | <--+ | <----+ | +------+ +----------------------------------+ +----------+ Figure 2 Example: How the Client/Server pair actually operates: +------+ +--------+ +--------+ +----------+ | | | | | | | | | Stub +---> | Client +-------------> | Server +----> | Resolver | | | DNS | | JSON/HTTP(S) | | DNS | | | | <---+ | <-------------+ | <----+ | +------+ +--------+ +--------+ +----------+ Figure 3 Dickson Expires April 18, 2015 [Page 8] Internet-Draft DNS Gateway System October 2014 Example: How the Client/Server bypass the old firewall: +------+ +--------+ +--------------+ +--------+ +----------+ | | | | | Old Firewall | | | | | | Stub +-> | Client +------------------> | Server +-> | Resolver | | | | | | (bypassed) | | | | | | | <-+ | <------------------+ | <-+ | +------+ +--------+ +--------------+ +--------+ +----------+ Figure 4 3.2.2. Details on Transparent Proxy mode Transparent Proxy mode supports transport of stub to recursive traffic (all with the same destination IP address). Transparent Proxy mode also supports use by a recursive resolver, to handle recursive-to-authoritative traffic (with different destination IP addresses per query). From the perspective of the DNS client (stub or recursive), it appears that the DNS query packet went to some IP address, and the reply came back directly. +----------+ +--------------+ | +------------------------------------> | | | Stub | | Recursive | | src=SR | DNS UDP/53 SR<->RR | dst=RR | | | | | | | <------------------------------------+ | +----------+ +--------------+ Figure 5 Dickson Expires April 18, 2015 [Page 9] Internet-Draft DNS Gateway System October 2014 +-----------+ | +-----------------------------------> +--------------+ | | | Authority #1 | | | <-----------------------------------+ dst=AR_1 | | | +--------------+ | +-----------------------------------> +--------------+ | Recursive | | Authority #2 | | src=RR | <-----------------------------------+ dst=AR_2 | | | +--------------+ | | ... | +-----------------------------------> +--------------+ | | | Authority #N | | | <-----------------------------------+ dst=AR_N | +-----------+ +--------------+ DNS UDP/53 RR<->AR_N (N=1,2,...) Figure 6 In both use cases, the original IP destination is encoded as an EDNS OPT value, and the DNS message (encoded as JSON) is sent to the SPARTACUS Server. The Server sends the DNS message to the original IP destination, with the SPARTACUS Server's IP address as the source. The resulting answer DNS message is sent to the Client, which changes the reply source IP address to the original destination IP address. +-----------+ +-------+ +---------+ +---------------+ | | | | | | | | | +----------> | Trans.| | Server +-> | Authoritative | | | | Proxy | | Gateway | | Resolver #1 | | | <----------+ TP | | SG | <-+ AR_1 | | | +-----+-+ +------+--+ +---------------+ | | DNS UDP/53 | | DNS UDP/53 | Recursive | RR <-> AR_1 ^ v ^ | SG <-> AR_1 | Resolver | | | | | RR | +---+-----+ | | | | | Client +----+ | TCP/80 (or /443) | | | Gateway | | JSON (EDNS: dst=AR_1) | | | CG | <-----+ CG <-> SG +-----------+ +---------+ Figure 7 The only practical difference is that some intermediate devices see JSON/HTTP(S) instead of DNS/UDP traffic. For some of those devices, this is in fact the purpose of SPARTACUS - preventing those devices from inspecting the DNS traffic in a problematic manner. Dickson Expires April 18, 2015 [Page 10] Internet-Draft DNS Gateway System October 2014 3.3. Interoperability The purpose of this document is to ensure that independent implementations of Client(s) and Server(s) can interoperate, so long as each is permitted to interoprate with the other. It is not required that Servers be operated in a completely "open" manner. However, the more open Servers there are, the greater the benefit. Like any web-based service, care should be given towards managing available resources on a Server. In all likelihood, this resource management may be most effectively handled via the web server's own service management system. 3.3.1. In-scope and out-of-scope The following items are out-of-scope, from an interoperability standpoint. This means that individual implementations may make independent design decisions, without impacting interoperability. o Choice(s) of default resolver (on Server) o Server-side DNS retry and time-out values o How Client(s) select Servers The following items are in-scope, from an interoperability standpoint. o JSON encoding o How to signal non-support of requested resolver(s) o How to signal "no response" (timeout) on Server-resolver traffic o Signalling/encoding of default,requested, and actually-used resolvers o Stripping of EDNS OPT private values o Stripping of synthesized EDNS OPT record The following items are optional, from an interoperability standpoint. o Whether and how to do edns-client-subnet (on Client) Dickson Expires April 18, 2015 [Page 11] Internet-Draft DNS Gateway System October 2014 o Whether to use TLS (HTTPS) on Client-Server traffic o Whether to honor requested resolvers (on Server) o Whether to support Transparent Proxy mode (on the Client) o Whether to do DNSSEC validation o Whether to do PKI validation of SSL certificates (if HTTPS is used and CA-issued certs used) o Whether to do DANE validation of SSL certificates (if HTTPS is used and TLSA records exist) o Whether IPv4 or IPv6 is supported 4. Interactions and Behavior The Client Gateway needs to make informed decisions about Server Gateways to use. Client Gateways may use pre-configured (static) gateways, or may employ any number of strategies for selection of Server Gateways. In order to enble Client-controlled Server Selection, each Server Gateway needs to advise the Client about default and actual DNS Servers used. The Client optionally requests DNS Server(s) that the Server should use. If present, the Server includes that in the response. The SPARTACUS client/server interaction occurs over TCP rather than UDP. As such, other than TCP-based failures (RST aka "reset" for example), every query MUST get a response (owing to the HTTP POST standards). Since the Server Gateway is performing DNS resolution using UDP transport, it is possible that network packet loss may occur, resulting in unanswered queries. Also, there are reasons other than network-based packet loss that can result in unanswered queries. DNS resolvers must attempt to infer what causes queries to not be answered. It is also possible that various other failure modes could occur, which need to be handled on the basis of the nature of the failure. Each of these is addressed in separate sections below. Dickson Expires April 18, 2015 [Page 12] Internet-Draft DNS Gateway System October 2014 4.1. DNS Gateway Encodings The three DNS Server values (default, requested, actual) are communicated via EDNS OPT type-length-value (TLV) tuples, using three distinct types. Pre-standard experimental values are presently being used. IANA will need to assign permanent OPT Type values for these three type codes. In order to ensure that the EDNS OPT record is only returned to the original DNS client if it existing in the query, it is necessary to identify cases where the DNS Server value encoding resulted in a "new" OPT record, rather than being added to an existing record. In such cases, an additional OPT TLV type is required, and is added to the OPT record. A fourth OPT Type value needs to be assigned by IANA for this purpose. The new OPT codes are used to enable the Client and Server to maintain all communication details inside the DNS message itself. This simplifies the design, implementation, and operation of Clients and Servers, and ensures forward/backward compatibility. OPT codes specific to the Client-Server communication MUST be removed prior to forwarding of DNS messages to DNS Clients and Servers. If the EDNS OPT RR is synthesized (added to the DNS message), it MUST be removed. 4.2. UDP Packet Loss In cases where the Server Gateway did not get a response from the DNS Server, it needs to signal this back to the client. It needs to do this so that the proper Client state is established. This prevents time-out based (undefined) behavior on the Client from being triggered. The Server needs to "pass along" packet loss status to the Client to trigger well-defined Client behavior. The mechanism is to use a Private EDNS OPT type/length/value (TLV), with the original Question echoed back (to associate with the Query). When receiving this TLV, the Client will treat this as a lost UDP packet, and MUST NOT send back any UDP packet. The UDP client is responsible for handling this lost UDP packet, per the DNS protocol. 4.3. Malformed UDP response The malformed UDP packet may not be legitimate. To be conservative, this condition is signaled back to the client, and the (actual) received UDP packet is rejected/dropped. This is treated by the DNS client as a lost UDP packet. Dickson Expires April 18, 2015 [Page 13] Internet-Draft DNS Gateway System October 2014 4.4. DNSSEC Validation Failure If DNSSEC validation fails, the presumption needs to be made that the failure is deliberate. The DNSSEC standards call for "SRVFAIL" responses, so that is what a compliant implementation MUST return to the UDP client. If the Client and/or Server does DNSSEC Validation, it MUST correctly implement Validation signalling via the AD and CD bits. In other words, it MUST return the answer regardless of Validation if the CD bit is set, and it MUST set the AD bit if Validation succeeds, regardless of the presence and/or state of EDNS bit DO. 5. Client-Server Selection and Topology Examples +-----------+ | | +--> | Server +--+ +-----------+ | | Gateway 1 | | | Client | | +-----------+ | +-----------+ | Gateway +--+ +-----------+ +--> | | | | | | | Recursive | | Selects +-----> | Server +-----> | DNS | | Random | | Gateway 2 | | Server | | Server +--+ +-----------+ +--> | | | Gateway | | +-----------+ | +-----------+ +-----------+ | | | | +--> | Server +--+ | Gateway 3 | +-----------+ Figure 8 Figure 8 shows the same Recursive DNS Server being used, via multiple Server Gateways. There are several benefits to doing this; they include distributing load among multiple Server Gateways, and reducing the amount of DNS traffic going via any single Server Gateway. This limits the impact of the compromise of any single Server Gateway, or of any single Server Certificate compromise. Dickson Expires April 18, 2015 [Page 14] Internet-Draft DNS Gateway System October 2014 +--------+ | | +-----> | Server | +-----------+ | | GW 1 | +-----------+ | Client | +---+----+ +------+-+ +--------+ | | | Gateway | | | | | | | | | | | Server | <--+ +---> | Server +--> | | | Selects | | GW 2 | | | GW 4 | | DNS | | Random | +--------+ +-+------+ +--------+ | Server | | Server | | | | | | Gateway | | Server | | | | +------------> | GW 3 | | | +-----------+ +--------+ +-----------+ Figure 9 Figure 9 illustrates a path where more than one Server Gateway is traversed during resolution. The objective here is to disassociate the IDENTITY of the client from the CONTENT of the query/answer. The association is only made directly on the first Server Gateway (and only with respect to the Client Gateway). The actual association of the source UDP client is only done on the Client Gateway itself, which may or may not provide further privacy. Since there is more than one Server-Server hop, this significantly reduces the ability to infer associations between Query/Response and Client Gateways. It should be noted that this looks very much like TOR (The Onion Router), applied to JSON-encoded UDP DNS traffic. There is a proposal for DNS privacy enhancements that applies a similar techique, directly on UDP-based DNS queries/answers. FIXME add xref here to reference to the appropriate Internet Draft. END FIXME +---------------+ +--------+ +--------+ +------------+ +----------+ | Client | | WWW/GW | | WWW/GW | | | | | | Gateway | | Server | | Server | | Web Server | | | | | | GW 3 | | GW 4 | | | | | | Selects | +--------+ +--------+ +----------+ | | DNS | | Among | | Gateway | | | Server | | Most Recent | DNS traffic mingled | Server | | | | | Web Server | with web traffic | Module +---> | | | Gateways +---------------------> | GW 2 | | | | +---------------+ (or encrypted) +----------+-+ +----------+ Figure 10 Figure 10 illustrates one query/response when the client is attempting to use something similar to steganography to preserve privacy. In this context, the privacy against passive monitoring is Dickson Expires April 18, 2015 [Page 15] Internet-Draft DNS Gateway System October 2014 achieved by using un-blocked web servers which are also Server Gateways. A MitM adversary cannot easily block this traffic without blocking the entire site, or by inspecting every flow to/from the site. A passive observer would similarly need to inspect all flows to find the embedded, encoded DNS traffic. The DNS traffic would be nearly indistinguishable from regular HTTP traffic. Note that the use of TLS to protect the Client-Server traffic would make it impossible to distinguish the DNS traffic from the other web trafficin this situation. Combining this "tag-along" with TLS provides both strong privacy and strong security. 5.1. Mixed Traffic Walk-Through Suppose a client were to visit web sites "a" through "j" sequentially, i.e. a,b,c,d,e,f,g,h,i,j. Suppose some of those were also Server Gateways, represented by upper case (vs lower case for web sites without Server Gateway capabilities). Thus the sequence would be A,b,C,D,e,f,g,H,I,j. If the Client Gateway chose a Server Gateway randomly from among the last four web sites visited, the sequence of events after visiting A through D, would look like: o Select Server from set {A,C,D}, look up "e". Visit "e". o Select Server from set {C,D}, look up "f". Visit "f". o Select Server from set {C,D}, look up "g". Visit "g". o Select Server from set {D}, look up "h". Visit "h". o Select Server from set {D,H}, look up "i". Visit "i". o Select Server from set {H,I}, look up "j". Visit "j". An observer close to the Client would see traffic within a given time window, only to the same set of Web servers. An observer close to any of the Web servers would only see traffic from a given client, for a small interval of time after the first visit. 6. Security Considerations (None per se.) Need to list considerations etc. 7. IANA Considerations This document will eventually contain IANA-specific material. Dickson Expires April 18, 2015 [Page 16] Internet-Draft DNS Gateway System October 2014 8. Acknowledgements To be added later. 9. References 9.1. Normative References [RFC1033] Lottor, M., "Domain administrators operations guide", RFC 1033, November 1987. [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", STD 13, RFC 1034, November 1987. [RFC1035] Mockapetris, P., "Domain names - implementation and specification", STD 13, RFC 1035, November 1987. [RFC2136] Vixie, P., Thomson, S., Rekhter, Y., and J. Bound, "Dynamic Updates in the Domain Name System (DNS UPDATE)", RFC 2136, April 1997. [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS Specification", RFC 2181, July 1997. [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS NCACHE)", RFC 2308, March 1998. [RFC2845] Vixie, P., Gudmundsson, O., Eastlake, D., and B. Wellington, "Secret Key Transaction Authentication for DNS (TSIG)", RFC 2845, May 2000. [RFC2930] Eastlake, D., "Secret Key Establishment for DNS (TKEY RR)", RFC 2930, September 2000. [RFC3425] Lawrence, D., "Obsoleting IQUERY", RFC 3425, November 2002. [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, "DNS Security Introduction and Requirements", RFC 4033, March 2005. [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, "Resource Records for the DNS Security Extensions", RFC 4034, March 2005. [RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, "Protocol Modifications for the DNS Security Extensions", RFC 4035, March 2005. Dickson Expires April 18, 2015 [Page 17] Internet-Draft DNS Gateway System October 2014 [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS Security (DNSSEC) Hashed Authenticated Denial of Existence", RFC 5155, March 2008. [RFC6891] Damas, J., Graff, M., and P. Vixie, "Extension Mechanisms for DNS (EDNS(0))", STD 75, RFC 6891, April 2013. 9.2. Informative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [JPF_jsondns] "DNS over HTTP", . [jsondns.org] Franusic, J., "Query DNS via REST", . [fileformat.info] Marcuse, A., "DNS in client-side JavaScript", . [restdns.net] "REST-DNS", . [bortzmeyer.org] Bortzmeyer, S., "DNS Looking Glass", . [draft-bortzmeyer-dns-json] Bortzmeyer, S., "DNS in JSON", . [dns-lg.com] Cambus, F., "Multilocation DNS Looking Glass", . [trigger] NLnet Labs, "Dnssec-Trigger", . Appendix A. DNS Message Encoding Examples The entire encoding of pairs of DNS messages follows. For each pair,the first is the query, and the second is the response. Dickson Expires April 18, 2015 [Page 18] Internet-Draft DNS Gateway System October 2014 A.1. Simple Query/Answer, No EDNS or DNS Server Query encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 26, "DICTIONARY" : [ "example", "com", "" ], "DSIZE2" : 26, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : false, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : false, "Z" : false, "AD" : false, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 0, "NSCOUNT" : 0, "ARCOUNT" : 0 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ] ] Response encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 33, "DICTIONARY" : [ Dickson Expires April 18, 2015 [Page 19] Internet-Draft DNS Gateway System October 2014 "example", "com", "", "@0" ], "DSIZE2" : 33, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : true, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : true, "Z" : false, "AD" : false, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 1, "NSCOUNT" : 0, "ARCOUNT" : 0 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Answer" : [ "RR" : [ "NAME" : [ "example.com." : 0 ], "TYPE" : [ "A" : 1 ], "CLASS" : [ "IN" : 1 ], "TTL" : 5218, "RDLENGTH" : 4, "RDATA" : [ "A" : [ "Address" : "93.184.216.119" ] ] ] ] ] Dickson Expires April 18, 2015 [Page 20] Internet-Draft DNS Gateway System October 2014 A.2. Simple Query/Answer, EDNS, no DNS Server Query encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 31, "DICTIONARY" : [ "example", "com", "", "" ], "DSIZE2" : 31, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : false, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : false, "Z" : false, "AD" : false, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 0, "NSCOUNT" : 0, "ARCOUNT" : 1 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Additional" : [ "RR" : [ "NAME" : [ "." : 3 ], "TYPE" : [ "OPT" : 41 ], "Field3" : [ "UDPSIZEFIELD" : [ "UDPSIZE" : 1500 Dickson Expires April 18, 2015 [Page 21] Internet-Draft DNS Gateway System October 2014 ] ], "Field4" : [ "Extended_RCode_Flags" : [ "ERCFlagbits" : [ "RCode" : 0, "Version" : 0, "DO" : false, "Resv" : 0 ] ] ], "RDLENGTH" : 0, "RDATA" : [ "OPT (RFC 6891)" : [ "TLV_LIST" : [ ] ] ] ] ] ] Response encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 38, "DICTIONARY" : [ "example", "com", "", "@0", "" ], "DSIZE2" : 38, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : true, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : true, "Z" : false, Dickson Expires April 18, 2015 [Page 22] Internet-Draft DNS Gateway System October 2014 "AD" : false, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 1, "NSCOUNT" : 0, "ARCOUNT" : 1 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Answer" : [ "RR" : [ "NAME" : [ "example.com." : 0 ], "TYPE" : [ "A" : 1 ], "CLASS" : [ "IN" : 1 ], "TTL" : 4865, "RDLENGTH" : 4, "RDATA" : [ "A" : [ "Address" : "93.184.216.119" ] ] ] ], "Additional" : [ "RR" : [ "NAME" : [ "." : 4 ], "TYPE" : [ "OPT" : 41 ], "Field3" : [ "UDPSIZEFIELD" : [ "UDPSIZE" : 4000 ] ], "Field4" : [ "Extended_RCode_Flags" : [ "ERCFlagbits" : [ "RCode" : 0, "Version" : 0, "DO" : false, "Resv" : 0 Dickson Expires April 18, 2015 [Page 23] Internet-Draft DNS Gateway System October 2014 ] ] ], "RDLENGTH" : 0, "RDATA" : [ "OPT (RFC 6891)" : [ "TLV_LIST" : [ ] ] ] ] ] ] A.3. Simple Query/Answer, no EDNS, with DNS Server Query encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 31, "DICTIONARY" : [ "example", "com", "", "" ], "DSIZE2" : 31, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : false, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : false, "Z" : false, "AD" : false, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 0, "NSCOUNT" : 0, "ARCOUNT" : 1 Dickson Expires April 18, 2015 [Page 24] Internet-Draft DNS Gateway System October 2014 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Additional" : [ "RR" : [ "NAME" : [ "." : 3 ], "TYPE" : [ "OPT" : 41 ], "Field3" : [ "UDPSIZEFIELD" : [ "UDPSIZE" : 1500 ] ], "Field4" : [ "Extended_RCode_Flags" : [ "ERCFlagbits" : [ "RCode" : 0, "Version" : 0, "DO" : false, "Resv" : 0 ] ] ], "RDLENGTH" : 19, "RDATA" : [ "OPT (RFC 6891)" : [ "TLV_LIST" : [ "TLV" : [ "TYPE" : [ "PrivateType65500" : 65500 ], "Len" : 13, "Data" : [ "PrivateType65500" : [ "GW_NAME" : [ "10:10" , "198.41.1.1" ] ] ] ], "TLV" : [ "TYPE" : [ "PrivateType65510" : 65510 ], "Len" : 0, "Data" : [ ] ], Dickson Expires April 18, 2015 [Page 25] Internet-Draft DNS Gateway System October 2014 ] ] ] ] ] ] Response encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 38, "DICTIONARY" : [ "example", "com", "", "@0", "" ], "DSIZE2" : 38, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : true, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : true, "Z" : false, "AD" : true, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 1, "NSCOUNT" : 0, "ARCOUNT" : 1 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Answer" : [ Dickson Expires April 18, 2015 [Page 26] Internet-Draft DNS Gateway System October 2014 "RR" : [ "NAME" : [ "example.com." : 0 ], "TYPE" : [ "A" : 1 ], "CLASS" : [ "IN" : 1 ], "TTL" : 4084, "RDLENGTH" : 4, "RDATA" : [ "A" : [ "Address" : "93.184.216.119" ] ] ] ], "Additional" : [ "RR" : [ "NAME" : [ "." : 4 ], "TYPE" : [ "OPT" : 41 ], "Field3" : [ "UDPSIZEFIELD" : [ "UDPSIZE" : 512 ] ], "Field4" : [ "Extended_RCode_Flags" : [ "ERCFlagbits" : [ "RCode" : 0, "Version" : 0, "DO" : false, "Resv" : 0 ] ] ], "RDLENGTH" : 19, "RDATA" : [ "OPT (RFC 6891)" : [ "TLV_LIST" : [ "TLV" : [ "TYPE" : [ "PrivateType65500" : 65500 ], "Len" : 13, "Data" : [ "PrivateType65500" : [ "GW_NAME" : [ "10:10" , "198.41.1.1" ] ] ] ], "TLV" : [ Dickson Expires April 18, 2015 [Page 27] Internet-Draft DNS Gateway System October 2014 "TYPE" : [ "PrivateType65510" : 65510 ], "Len" : 0, "Data" : [ ] ], ] ] ] ] ] ] A.4. Simple Query/Answer, with EDNS and DNS Server Query encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 31, "DICTIONARY" : [ "example", "com", "", "" ], "DSIZE2" : 31, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : false, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : false, "Z" : false, "AD" : false, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 0, "NSCOUNT" : 0, "ARCOUNT" : 1 ], "Question" : [ Dickson Expires April 18, 2015 [Page 28] Internet-Draft DNS Gateway System October 2014 "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Additional" : [ "RR" : [ "NAME" : [ "." : 3 ], "TYPE" : [ "OPT" : 41 ], "Field3" : [ "UDPSIZEFIELD" : [ "UDPSIZE" : 1500 ] ], "Field4" : [ "Extended_RCode_Flags" : [ "ERCFlagbits" : [ "RCode" : 0, "Version" : 0, "DO" : false, "Resv" : 0 ] ] ], "RDLENGTH" : 15, "RDATA" : [ "OPT (RFC 6891)" : [ "TLV_LIST" : [ "TLV" : [ "TYPE" : [ "PrivateType65500" : 65500 ], "Len" : 13, "Data" : [ "PrivateType65500" : [ "GW_NAME" : [ "10:10" , "198.41.1.1" ] ] ] ], ] ] ] ] ] ] Dickson Expires April 18, 2015 [Page 29] Internet-Draft DNS Gateway System October 2014 Response encoded in JSON: "PACKET (RFC 1035)" : [ "ROLE" : "client", "DSIZE" : 38, "DICTIONARY" : [ "example", "com", "", "@0", "" ], "DSIZE2" : 38, "Header" : [ "ID" : 42, "HFlags" : [ "QR" : true, "Opcode" : [ "Query" : 0 ], "AA" : false, "TC" : false, "RD" : true, "RA" : true, "Z" : false, "AD" : true, "CD" : false, "RCODE" : [ "NoError (RFC 1035)" : 0 ] ], "QDCOUNT" : 1, "ANCOUNT" : 1, "NSCOUNT" : 0, "ARCOUNT" : 1 ], "Question" : [ "QUESTION (RFC 1035)" : [ "QNAME" : [ "example.com." : 0 ], "QTYPE" : [ "A" : 1 ], "QCLASS" : [ "IN" : 1 ] ] ], "Answer" : [ "RR" : [ "NAME" : [ "example.com." : 0 ], "TYPE" : [ "A" : 1 ], "CLASS" : [ "IN" : 1 ], "TTL" : 4084, "RDLENGTH" : 4, "RDATA" : [ Dickson Expires April 18, 2015 [Page 30] Internet-Draft DNS Gateway System October 2014 "A" : [ "Address" : "93.184.216.119" ] ] ] ], "Additional" : [ "RR" : [ "NAME" : [ "." : 4 ], "TYPE" : [ "OPT" : 41 ], "Field3" : [ "UDPSIZEFIELD" : [ "UDPSIZE" : 512 ] ], "Field4" : [ "Extended_RCode_Flags" : [ "ERCFlagbits" : [ "RCode" : 0, "Version" : 0, "DO" : false, "Resv" : 0 ] ] ], "RDLENGTH" : 15, "RDATA" : [ "OPT (RFC 6891)" : [ "TLV_LIST" : [ "TLV" : [ "TYPE" : [ "PrivateType65500" : 65500 ], "Len" : 13, "Data" : [ "PrivateType65500" : [ "GW_NAME" : [ "10:10" , "198.41.1.1" ] ] ] ], ] ] ] ] ] ] Dickson Expires April 18, 2015 [Page 31] Internet-Draft DNS Gateway System October 2014 Appendix B. Server Gateway HTML code The entire HTML document needed on the Server for the Client to send/ receive JSON-encoded DNS messages follows:

The "action" target needs to exist and be executable, and ideally be performance-optimized (e.g. via use of mod_perl). Appendix C. Server Gateway HTTP POST Handler Pseudo-code The following pseudo-code illustrates the high-level behavior of the HTML handler for the Server. The handler is passed the contents of the TEXTAREA, which will be the JSON-encoded DNS message. Dickson Expires April 18, 2015 [Page 32] Internet-Draft DNS Gateway System October 2014 // initialize parser etc. // set up socket for UDP query/response to default Resolver // set up socket for UDP query/response to client-supplied Resolver // extract JSON-encoded DNS message from HTTP POST variable 'query' // save original Query-ID, assign new Query-ID (to avoid collisions) // decode DNS message (into DNS wire format) // if DNS message has OPT Resource Record // if OPT has Client-supplied Resolver option // extract Resolver value // delete Resolver option from OPT // endif // if OPT was synthesized by Client // delete OPT Resource Record // endif // send DNS message to Client-specified Resolver // else // send DNS message to default Resolver // endif // wait for response or timeout // if timeout && retry-count < max-retry-count // resend DNS message // elsif timeout && retry-count >= max-retry-count // send "retry-count-exceeded" via OPT (synthesized if necessary) // else // set DNS answer's Query-ID value to original Query-ID // encode DNS answer // send JSON-encoded answer to Client // endif Appendix D. Client Gateway Pseudo-code The following pseudo-code illustrates the high-level behavior of the Client. The Client in this example is pre-configured with a single Server Gateway's address. Dickson Expires April 18, 2015 [Page 33] Internet-Draft DNS Gateway System October 2014 // initialize parser etc. // set up socket for UDP query/response (Listener) // set up HTTP connection to Server Gateway // do an HTTP "GET" to the predefined URL of the Server HTML code // extract HTML elements needed: handler, variable name // loop forever: // listen for DNS query packet // fork (to handle this packet) // if child // save old DNS Query-ID, set new Query-ID // if Use-Supplied-Resolver // if exits OPT // add client-supplied-resolver to OPT // else // synthesize OPT and add client-supplied-resolver // endif // endif // encode DNS message (into JSON) // write HTTP POST onto socket // wait for HTTP response // extract JSON-encoded answer from HTTP // decode DNS answer (from JSON) // if OPT // if OPT.option is error condition // drop answer and continue loop forever: // elsif OPT synthesized // delete OPT // elsif OPT.option SPARTACUS-specific value // delete option // endif // endif // set answer.Query-ID to saved value // send answer to sender // end-of-loop Author's Address Brian Dickson 12047B 36th Ave NE Seattle, wA 98125 Email: brian.peter.dickson@gmail.com Dickson Expires April 18, 2015 [Page 34]