HTTP API for Updating DNS Records Cisco Systems
170 West Tasman Drive Mailstop SJC-21/2 San Jose CA 95134 USA +1 408 902-3341 fluffy@cisco.com
Dynamic Network Services, Inc.
tom@dyn-inc.com
Dynamic Network Services, Inc.
jeremy@dyndns.com
This specification defines a simple HTTP based scheme for clients to update DNS records. The draft is being discussed on the apps-discuss@ietf.org list. This documents and the information contained therein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION THEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
There are many circumstances in which an application or device would like to have an easy way to update DNS records. While a number of support DNS based protocols exist for updating records, many of these mechanisms are not available in today's scaled down applications and devices. However, many existing application and devices do support the use of HTTP and HTTP over TLS to update DNS records. The goal of this specification is to create a generic standard for which applications and devices can update DNS records using HTTP over TLS. The need for this protocol exists from the use of DHCP and other dynamic IP addressing systems, where a device receives updates to it IP address, and further, there exists a need for the global DNS to be made aware of such a change. Many residential NAT devices support this type of operation today, but do it using hap-hazard and proprietary methods . The approach described in the specification allows a client to make HTTP over TLS requests to a server to update DNS records, using standard and highly available encryption techniques for security, while providing a generic a flexible interface for updating DNS records
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 RFC 2119.
This section describes the semantics of requests to update DNS records. The specification only covers how tell a DNS system what updates are desired. How the DNS system deal with SOA records or DNSSEC if not effected in any way by this specification.
The client needs to be configured with the base URL for the server, along with a username and password. The request is created by forming an HTTPS POST request to a URL. The HTTPS POST request is formed by starting with the configured base URL, and then appending all the required parameters. The request MUST be done using HTTPS to protect the password. The client MUST ensure the TLS certificate of the server is appropriately signed. The HTTP request SHOULD contain a "User-Agent" header that clearly identifies the version of the software making the request, as this facilitates debugging.
The request MUST include exactly one user, password, domain, and type parameter as defined below. Other parameters are optional and can occur at most once. The values of parameters MUST be appropriately escaped as required to be part of a valid HTTP URL. Open Issue: there is some discussion going on around if it is better to use HTTP basic auth or form style parameters. TODO Resolve this. General Parameters Parameter Name Value user The configured user name for the user making the request. password The configured password for the user making the request base16 encoded as defined in . domain The fully qualified domain name for the record to update. type The ASCII encoded version of they type of DNS record to update. rdata The value that should be stored in the DNS resource record. match The value that matches an existing resource record that is to be updated by this request. A special value of "*" means that all existing records are replaced by the new record in this request. ttl Requested time to live for the DNS records in seconds. If omitted, this will be set to default chosen by the server. Some common values for the type parameter field are shown in the following table. Type Parameters Values Type Name Value A DNS A record . AAAA DNS AAAA record . CNAME DNS CNAME record . NS DNS NS record . PTR DNS PTR record . SRV DNS SRV record . TXT DNS TXT record . HIP DNS HIP record . MX DNS MX record. SPF DNS SPF record.
For many updates, where only one resource record is desired, the match parameter is sent with a value of "*" indicating all existing records are removed and replaced with the new one. Sometimes it is desirable to have multiple records of the same type for the same name. For example, a domain may have multiple MX records. To add a new record, no match value is sent, or the match value is empty, and a new record is appended to the set. To update an existing record, the match parameter is set to the value of the old record that needs to be updated. If the record in the match parameter can not be found, the request returns an 404 error.
If the value of the parameter that would update a record is empty, the record MUST be removed from DNS.
HTTP response codes are used to indicate success and errors as specified in the following table. Response Codes Value Error Condition 200 No error, operation successful 400 The update parameters passed are invalid or would otherwise result in an ambiguous update 401 Bad authentication credentials 403 Trying to update a record for which the given credentials are not authorized. 404 No records were found that match the value in the match parameter of the request. 406 A valid update was passed, however, it was not accepted for reasons of update abuse, whereby excessive numbers of duplicate updates have been sent. 409 A valid update was passed, however, no change was made as the requested change was preexisting 501 The server does not support the specified operation 503 The server is too busy to service the request or is otherwise unavailable and the client should wait at least 5 minutes before trying to update again The body of the response MAY have human readable text that allows a network administrator to learn more about why the request failed.
In the examples below, some of the URLs appear broken across multiple lines. This is because of physical width limitations in this document; such URLs need to be read as single URLs with no embedded white space. All of the examples assume that a user called "me@example.net" with password "no" is allowed to update records in the example.com domain. The base URL for the DNS update service of https://dns.example.org/dns/update is used in the examples. Each example shows the state of the DNS in a precondition before the request, the requests performed using this specification, and then the resulting state of the DNS in the postcondition.
This example shows a basic update where all existing A record values are replaced with a new entry.
This example shows how to create entries where there are multiple records.
This example shows a simple removal of a record.
This example shows how to append a record to a list of existing records.
This example is similar to the previous one, in that an entry is being changed.
This section is non normative. The WADL description for the examples is:
]]>
This document makes no requests of IANA.
The request includes a clear text password and MUST be done over HTTPS or the password may be seen by an attacker and used to hijack the services. If a user publishes the IP of their notebook computer, PDA, or smart phone as the move, it is likely that the IP address can be correlated to locations. By looking at the location over time for a specific user, it may be further possible to correlate that to an actual person. These attacks and implications to privacy are discussed in .
Using HTTP Digest vs URL parameters. Way to set the resource record to the IP address that the server got the request from.
TODO - lots of work is needed here. RFC 2136 and the security for this provided by 3007, and the later DNSSEC RFCs provide a robust system for updating DNS that supports static shared secrets and asymmetric keys. Security working with asymmetric keys not easy but doing with static keys is vulnerable to offline attacks. Hard to do from Java script. Questions, any issues punching through NATs that have DNS ALGs with this? Hard to integrate with fine web security systems like openid. Trivial to implement this most web environments. Questions about deployment success. When were things defined, what is the market choosing? Does it work? Is the problem that we just need a simple open source library that does Dynamic Update?
Thanks to Frank Ellermann, Peter Koch, Stephane Bortzmeyer, Mark Baker, Patrik Faltstrom, and Julian Reschke.
Hypertext Transfer Protocol -- HTTP/1.1 Department of Information and Computer Science
University of California, Irvine Irvine CA 92697-3425 +1(949)824-1715 fielding@ics.uci.edu
World Wide Web Consortium
MIT Laboratory for Computer Science, NE43-356 545 Technology Square Cambridge MA 02139 +1(617)258-8682 jg@w3.org
Compaq Computer Corporation
Western Research Laboratory 250 University Avenue Palo Alto CA 94305 mogul@wrl.dec.com
World Wide Web Consortium
MIT Laboratory for Computer Science, NE43-356 545 Technology Square Cambridge MA 02139 +1(617)258-8682 frystyk@w3.org
Xerox Corporation
MIT Laboratory for Computer Science, NE43-356 3333 Coyote Hill Road Palo Alto CA 94034 masinter@parc.xerox.com
Microsoft Corporation
1 Microsoft Way Redmond WA 98052 paulle@microsoft.com
World Wide Web Consortium
MIT Laboratory for Computer Science, NE43-356 545 Technology Square Cambridge MA 02139 +1(617)258-8682 timbl@w3.org
The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, protocol which can be used for many tasks beyond its use for hypertext, such as name servers and distributed object management systems, through extension of its request methods, error codes and headers . A feature of HTTP is the typing and negotiation of data representation, allowing systems to be built independently of the data being transferred. HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as "HTTP/1.1", and is an update to RFC 2068 .
Key words for use in RFCs to Indicate Requirement Levels Harvard University
1350 Mass. Ave. Cambridge MA 02138 - +1 617 495 3864 sob@harvard.edu
General keyword
HTTP Over TLS This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet. This memo provides information for the Internet community. The Base16, Base32, and Base64 Data Encodings This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS TRACK]
http://www.dyndns.com/developers/specs/syntax.html http://www.telnic.net/developers-resources.html http://articles.slicehost.com/assets/2008/5/27/Slicehost_API.pdfl SliceHost Host Identity Protocol (HIP) Domain Name System (DNS) Extensions This document specifies a new resource record (RR) for the Domain Name System (DNS), and how to use it with the Host Identity Protocol (HIP). This RR allows a HIP node to store in the DNS its Host Identity (HI, the public component of the node public-private key pair), Host Identity Tag (HIT, a truncated hash of its public key), and the Domain Names of its rendezvous servers (RVSs). This memo defines an Experimental Protocol for the Internet community. Using the Domain Name System To Store Arbitrary String Attributes Digital Equipment Corporation
550 King Street LKG2-2/Z7 Littleton MA 01460-1289 US +1 508 486 5922 rosenbaum@lkg.dec.com
While the Domain Name System (DNS),is generally used to store predefined types of information (e.g., addresses of hosts), it is possible to use it to store information that has not been previously classified. This paper describes a simple means to associate arbitrary string information (ASCII text) with attributes that have not been defined by the DNS. It uses DNS TXT resource records to store the information. It requires no change to current DNS implementations.
A DNS RR for specifying the location of services (DNS SRV) Troll Tech
Waldemar Thranes gate 98B Oslo N-0175 NO +47 22 806390 +47 22 806380 arnt@troll.no
Internet Software Consortium
950 Charter Street Redwood City CA 94063 US +1 650 779 7001
Microsoft Corporation
One Microsoft Way Redmond WA 98052 US levone@microsoft.com
This document describes a DNS RR which specifies the location of the server(s) for a specific protocol and domain.
DNS Extensions to Support IP Version 6 This document defines the changes that need to be made to the Domain Name System (DNS) to support hosts running IP version 6 (IPv6). The changes include a resource record type to store an IPv6 address, a domain to support lookups based on an IPv6 address, and updated definitions of existing query types that return Internet addresses as part of additional section processing. The extensions are designed to be compatible with existing applications and, in particular, DNS implementations themselves. [STANDARDS TRACK] Domain names - implementation and specification USC/ISI
4676 Admiralty Way Marina del Rey CA 90291 US +1 213 822 1511
Secure Domain Name System (DNS) Dynamic Update This document proposes a method for performing secure Domain Name System (DNS) dynamic updates. [STANDARDS TRACK] Dynamic Updates in the Domain Name System (DNS UPDATE) Internet Software Consortium
Star Route Box 159A Woodside CA 94062 +1 415 747 0204 paul@vix.com
Bellcore
445 South Street Morristown NJ 07960 +1 201 829 4514 set@thumper.bellcore.com
Cisco Systems
170 West Tasman Drive San Jose CA 95134-1706 +1 914 528 0090 yakov@cisco.com
Digital Equipment Corp.
110 Spitbrook Rd ZK3-3/U14 Nashua NH 03062-2698 +1 603 881 0400 bound@zk3.dec.com
Applications domain name domain name system The Domain Name System was originally designed to support queries of a statically configured database. While the data was expected to change, the frequency of those changes was expected to be fairly low, and all updates were made as external edits to a zone's Master File. Using this specification of the UPDATE opcode, it is possible to add or delete RRs or RRsets from a specified zone. Prerequisites are specified separately from update operations, and can specify a dependency upon either the previous existence or nonexistence of an RRset, or the existence of a single RR. UPDATE is atomic, i.e., all prerequisites must be satisfied or else no update operations will take place. There are no data dependent error conditions defined after the prerequisites have been met.
Domain Name System (DNS) Security Extensions Mapping for the Extensible Provisioning Protocol (EPP) This document describes an Extensible Provisioning Protocol (EPP) extension mapping for the provisioning and management of Domain Name System security extensions (DNSSEC) for domain names stored in a shared central repository. Specified in XML, this mapping extends the EPP domain name mapping to provide additional features required for the provisioning of DNS security extensions. [STANDARDS TRACK] Identity Trail: Covert Surveillance Using DNS Web Application Description Language (WADL)