mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-28 21:17:54 +00:00
new draft
This commit is contained in:
parent
c61c6db1ce
commit
deea7ce113
@ -1,842 +0,0 @@
|
|||||||
|
|
||||||
DNSEXT Working Group E. Lewis
|
|
||||||
INTERNET DRAFT NeuStar
|
|
||||||
Expiration Date: August 10, 2005 February 2005
|
|
||||||
|
|
||||||
The Role of Wildcard Domains
|
|
||||||
in the Domain Name System
|
|
||||||
|
|
||||||
draft-ietf-dnsext-wcard-clarify-05.txt
|
|
||||||
|
|
||||||
Status of this Memo
|
|
||||||
|
|
||||||
By submitting this Internet-Draft, each author represents that any
|
|
||||||
applicable patent or other IPR claims of which he or she is aware
|
|
||||||
have been or will be disclosed, and any of which he or she becomes
|
|
||||||
aware will be disclosed, in accordance with Section 6 of RFC 3668.
|
|
||||||
|
|
||||||
Internet-Drafts are working documents of the Internet Engineering
|
|
||||||
Task Force (IETF), its areas, and its working groups. Note that
|
|
||||||
other groups may also distribute working documents as Internet-
|
|
||||||
Drafts.
|
|
||||||
|
|
||||||
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."
|
|
||||||
|
|
||||||
The list of current Internet-Drafts can be accessed at
|
|
||||||
http://www.ietf.org/ietf/1id-abstracts.txt
|
|
||||||
|
|
||||||
The list of Internet-Draft Shadow Directories can be accessed at
|
|
||||||
http://www.ietf.org/shadow.html
|
|
||||||
|
|
||||||
This Internet-Draft will expire on August 10, 2005.
|
|
||||||
|
|
||||||
Copyright Notice
|
|
||||||
|
|
||||||
Copyright (C) The Internet Society (2005).
|
|
||||||
|
|
||||||
Abstract
|
|
||||||
|
|
||||||
This is an update to the wildcard definition of RFC 1034. The
|
|
||||||
interaction with wildcards and CNAME is changed, an error
|
|
||||||
condition removed, and the words defining some concepts central to
|
|
||||||
wildcards are changed. The overall goal is not to change wildcards,
|
|
||||||
but to refine the definition of RFC 1034.
|
|
||||||
|
|
||||||
1 Introduction
|
|
||||||
|
|
||||||
In RFC 1034 [RFC1034], sections 4.3.2 and 4.3.3 describe the synthesis
|
|
||||||
of answers from special resource records called wildcards. The definition
|
|
||||||
in RFC 1034 is incomplete and has proven to be confusing. This document
|
|
||||||
describes the wildcard synthesis by adding to the discussion and making
|
|
||||||
limited modifications. Modifications are made to close inconsistencies
|
|
||||||
that have led to interoperability issues. This description does not
|
|
||||||
expand the service intended by the original definition.
|
|
||||||
|
|
||||||
Staying within the spirit and style of the original documents, this
|
|
||||||
document avoids specifying rules for DNS implementations regarding
|
|
||||||
wildcards. The intention is to only describe what is needed for
|
|
||||||
interoperability, not restrict implementation choices. In addition,
|
|
||||||
consideration has been given to minimize any backwards compatibility
|
|
||||||
with implementations that have complied with RFC 1034's definition.
|
|
||||||
|
|
||||||
This document is focused on the concept of wildcards as defined in RFC
|
|
||||||
1034. Nothing is implied regarding alternative approaches, nor are
|
|
||||||
alternatives discussed.
|
|
||||||
|
|
||||||
[Note to the WG - this draft is not complete, it is presented as fodder
|
|
||||||
for the upcoming meeting. Sections 4.2.3, 4.6, 3.7, and 4.8 are
|
|
||||||
particularly incomplete. I wanted to make sure there was something
|
|
||||||
recent in the draft repository before setting out on more travel.
|
|
||||||
|
|
||||||
For 4.2.3, refer to the threads for the most recent discussions...
|
|
||||||
http://ops.ietf.org/lists/namedroppers/namedroppers.2004/msg01601.html
|
|
||||||
http://ops.ietf.org/lists/namedroppers/namedroppers.2004/msg01603.html
|
|
||||||
|
|
||||||
And you might want to check out the minutes from the last IETF meeting
|
|
||||||
as well as http://www.ietf.org/proceedings/03nov/131.htm.]
|
|
||||||
|
|
||||||
1.1 Motivation
|
|
||||||
|
|
||||||
Many DNS implementations have diverged with respect to wildcards in
|
|
||||||
different ways from the original definition, or at from least what
|
|
||||||
had been intended. Although there is clearly a need to clarify the
|
|
||||||
original documents in light of this alone, the impetus for this document
|
|
||||||
lay in the engineering of the DNS security extensions [RFC TBD]. With
|
|
||||||
an unclear definition of wildcards the design of authenticated denial
|
|
||||||
became entangled.
|
|
||||||
|
|
||||||
This document is intended to limit changes, only those based on
|
|
||||||
implementation experience, and to remain as close to the original
|
|
||||||
document as possible. To reinforce this, relevant sections of RFC
|
|
||||||
1034 are repeated verbatim to help compare the old and new text.
|
|
||||||
|
|
||||||
1.2 The Original Definition
|
|
||||||
|
|
||||||
The context of the wildcard concept involves the algorithm by which
|
|
||||||
a name server prepares a response (in RFC 1034's section 4.3.2) and
|
|
||||||
the way in which a resource record (set) is identified as being a
|
|
||||||
source of synthetic data (section 4.3.3).
|
|
||||||
|
|
||||||
The beginning of the discussion ought to start with the definition
|
|
||||||
of the term "wildcard" as it appears in RFC 1034, section 4.3.3.
|
|
||||||
|
|
||||||
# In the previous algorithm, special treatment was given to RRs with owner
|
|
||||||
# names starting with the label "*". Such RRs are called wildcards.
|
|
||||||
# Wildcard RRs can be thought of as instructions for synthesizing RRs.
|
|
||||||
# When the appropriate conditions are met, the name server creates RRs
|
|
||||||
# with an owner name equal to the query name and contents taken from the
|
|
||||||
# wildcard RRs.
|
|
||||||
|
|
||||||
This passage appears after the algorithm in which the term wildcard
|
|
||||||
is first used. In this definition, wildcard refers to resource
|
|
||||||
records. In other usage, wildcard has referred to domain names, and
|
|
||||||
it has been used to describe the operational practice of relying on
|
|
||||||
wildcards to generate answers. It is clear from this that there is
|
|
||||||
a need to define clear and unambiguous terminology in the process of
|
|
||||||
discussing wildcards.
|
|
||||||
|
|
||||||
The mention of the use of wildcards in the preparation of a response
|
|
||||||
is contained in step 3c of RFC 1034's section 4.3.2 entitled "Algorithm."
|
|
||||||
Note that "wildcard" does not appear in the algorithm, instead references
|
|
||||||
are made to the "*" label. The portion of the algorithm relating to
|
|
||||||
wildcards is deconstructed in detail in section 3 of this document,
|
|
||||||
this is the beginning of the passage.
|
|
||||||
|
|
||||||
# c. If at some label, a match is impossible (i.e., the
|
|
||||||
# corresponding label does not exist), look to see if a
|
|
||||||
# the "*" label exists.
|
|
||||||
|
|
||||||
The scope of this document is the RFC 1034 definition of wildcards and
|
|
||||||
the implications of updates to those documents, such as DNSSEC. Alternate
|
|
||||||
schemes for synthesizing answers are not considered. (Note that there
|
|
||||||
is no reference listed. No document is known to describe any alternate
|
|
||||||
schemes, although there has been some mention of them in mailing lists.)
|
|
||||||
|
|
||||||
1.3 This Document
|
|
||||||
|
|
||||||
This document accomplishes these three items.
|
|
||||||
o Defines new terms
|
|
||||||
o Makes minor changes to avoid conflicting concepts
|
|
||||||
o Describe the actions of certain resource records as wildcards
|
|
||||||
|
|
||||||
1.3.1 New Terms
|
|
||||||
|
|
||||||
To help in discussing what resource records are wildcards, two terms
|
|
||||||
will be defined - "asterisk label" and "wild card domain name". These
|
|
||||||
are defined in section 2.1.1.
|
|
||||||
|
|
||||||
To assist in clarifying the role of wildcards in the name server algorithm
|
|
||||||
in RFC 1034, 4.3.2, "source of synthesis" and "closest encloser" are
|
|
||||||
defined. These definitions are in section 3.3.2. "Label match" is
|
|
||||||
defined in section 3.2.
|
|
||||||
|
|
||||||
The introduction of new terms ought not have an impact on any existing
|
|
||||||
implementations. The new terms are used only to make discussions of
|
|
||||||
wildcards clearer.
|
|
||||||
|
|
||||||
1.3.2 Changed Text
|
|
||||||
|
|
||||||
The definition of "existence" is changed, superficially. This
|
|
||||||
change will not be apparent to implementations; it is needed to
|
|
||||||
make descriptions more precise. The change appears in section 2.2.3.
|
|
||||||
|
|
||||||
RFC 1034, section 4.3.3., seems to prohibit having two asterisk
|
|
||||||
labels in a wildcard owner name. With this document the restriction
|
|
||||||
is removed entirely. This change and its implications are in
|
|
||||||
section 2.1.3.
|
|
||||||
|
|
||||||
The actions when a source of synthesis owns a CNAME RR are changed to
|
|
||||||
mirror the actions if an exact match name owns a CNAME RR. This
|
|
||||||
is an addition to the words in RFC 1034, section 4.3.2, step 3,
|
|
||||||
part c. The discussion of this is in section 3.3.3.
|
|
||||||
|
|
||||||
Only the latter change represents an impact to implementations. The
|
|
||||||
definition of existence is not a protocol impact. The change to the
|
|
||||||
restriction on names is unlikely to have an impact, as there was no
|
|
||||||
discussion of how to enforce the restriction.
|
|
||||||
|
|
||||||
1.3.3 Considerations with Special Types
|
|
||||||
|
|
||||||
This document describes semantics of wildcard CNAME RRSets [RFC2181],
|
|
||||||
wildcard NS RRSets, wildcard SOA RRSets, wildcard DNAME RRSets
|
|
||||||
[RFC2672], wildcard DS RRSets [RFC TBD], and empty non-terminal
|
|
||||||
wildcards. Understanding these types in the context of wildcards
|
|
||||||
has been clouded because these types incur special processing if they
|
|
||||||
are the result of an exact match. This discussion is in section 4.
|
|
||||||
|
|
||||||
These discussions do not have an implementation impact, they cover
|
|
||||||
existing knowledge of the types, but to a greater level of detail.
|
|
||||||
|
|
||||||
1.4 Standards Terminology
|
|
||||||
|
|
||||||
This document does not use terms as defined in "Key words for use in
|
|
||||||
RFCs to Indicate Requirement Levels." [RFC2119]
|
|
||||||
|
|
||||||
Quotations of RFC 1034 are denoted by a '#' in the leftmost column.
|
|
||||||
|
|
||||||
2 Wildcard Syntax
|
|
||||||
|
|
||||||
The syntax of a wildcard is the same as any other DNS resource record,
|
|
||||||
across all classes and types. The only significant feature is the
|
|
||||||
owner name.
|
|
||||||
|
|
||||||
Because wildcards are encoded as resource records with special names,
|
|
||||||
they are included in zone transfers and incremental zone transfers.
|
|
||||||
[RFC1995]. This feature has been underappreciated until discussions
|
|
||||||
on alternative approaches to wildcards appeared on mailing lists.
|
|
||||||
|
|
||||||
2.1 Identifying a wildcard
|
|
||||||
|
|
||||||
To provide a more accurate description of "wildcards", the definition
|
|
||||||
has to start with a discussion of the domain names that appear as
|
|
||||||
owners. Two new terms are needed, "Asterisk Label" and "Wild Card
|
|
||||||
Domain Name."
|
|
||||||
|
|
||||||
2.1.1 Wild Card Domain Name and Asterisk Label
|
|
||||||
|
|
||||||
A "wild card domain name" is defined by having its initial
|
|
||||||
(i.e., left-most or least significant) label be, in binary format:
|
|
||||||
|
|
||||||
0000 0001 0010 1010 (binary) = 0x01 0x2a (hexadecimal)
|
|
||||||
|
|
||||||
The first octet is the normal label type and length for a 1 octet
|
|
||||||
long label, the second octet is the ASCII representation [RFC20] for
|
|
||||||
the '*' character.
|
|
||||||
|
|
||||||
A descriptive name of a label equaling that value is an "asterisk
|
|
||||||
label."
|
|
||||||
|
|
||||||
RFC 1034's definition of wildcard would be "a resource record owned
|
|
||||||
by a wild card domain name."
|
|
||||||
|
|
||||||
2.1.2 Asterisks and Other Characters
|
|
||||||
|
|
||||||
No label values other than that in section 2.1.1 are asterisk labels,
|
|
||||||
hence names beginning with other labels are never wild card domain
|
|
||||||
names. Labels such as 'the*' and '**' are not asterisk labels,
|
|
||||||
they do not start wild card domain names.
|
|
||||||
|
|
||||||
2.1.3 Non-terminal Wild Card Domain Names
|
|
||||||
|
|
||||||
In section 4.3.3, the following is stated:
|
|
||||||
|
|
||||||
# .......................... The owner name of the wildcard RRs is of
|
|
||||||
# the form "*.<anydomain>", where <anydomain> is any domain name.
|
|
||||||
# <anydomain> should not contain other * labels......................
|
|
||||||
|
|
||||||
This restriction is lifted because the original documentation of it
|
|
||||||
is incomplete and the restriction does not serve any purpose given
|
|
||||||
years of operational experience.
|
|
||||||
|
|
||||||
Indirectly, the above passage raises questions about wild card domain
|
|
||||||
names having subdomains and possibly being an empty non-terminal. By
|
|
||||||
thinking of domain names such as "*.example.*.example." and
|
|
||||||
"*.*.example." and focusing on the right-most asterisk label in each,
|
|
||||||
the issues become apparent.
|
|
||||||
|
|
||||||
Although those example names have been restricted per RFC 1034, a name
|
|
||||||
such as "example.*.example." illustrates the same problems. The
|
|
||||||
sticky issue of subdomains and empty non-terminals is not removed by
|
|
||||||
the restriction. With that conclusion, the restriction appears to
|
|
||||||
be meaningless, worse yet, it implies that an implementation would have
|
|
||||||
to perform checks that do little more than waste CPU cycles.
|
|
||||||
|
|
||||||
A wild card domain name can have subdomains. There is no need to
|
|
||||||
inspect the subdomains to see if there is another asterisk label in
|
|
||||||
any subdomain.
|
|
||||||
|
|
||||||
A wild card domain name can be an empty non-terminal. (See the upcoming
|
|
||||||
sections on empty non-terminals.) In this case, any lookup encountering
|
|
||||||
it will terminate as would any empty non-terminal match.
|
|
||||||
|
|
||||||
2.2 Existence Rules
|
|
||||||
|
|
||||||
The notion that a domain name 'exists' is mentioned in the definition
|
|
||||||
of wildcards. In section 4.3.3 of RFC 1034:
|
|
||||||
|
|
||||||
# Wildcard RRs do not apply:
|
|
||||||
#
|
|
||||||
...
|
|
||||||
# - When the query name or a name between the wildcard domain and
|
|
||||||
# the query name is know[n] to exist. For example, if a wildcard
|
|
||||||
|
|
||||||
RFC 1034 also refers to non-existence in the process of generating
|
|
||||||
a response that results in a return code of "name error." NXDOMAIN
|
|
||||||
is introduced in RFC 2308, section 2.1 says "In this case the domain
|
|
||||||
... does not exist." The overloading of the term "existence" is
|
|
||||||
confusing.
|
|
||||||
|
|
||||||
For the purposes of this document, a domain name is said to exist if
|
|
||||||
it plays a role in the execution of the algorithms in RFC 1034. This
|
|
||||||
document avoids discussion determining when an authoritative name
|
|
||||||
error has occurred.
|
|
||||||
|
|
||||||
2.2.1 An Example
|
|
||||||
|
|
||||||
To illustrate what is meant by existence consider this complete zone:
|
|
||||||
|
|
||||||
$ORIGIN example.
|
|
||||||
example. 3600 IN SOA <SOA RDATA>
|
|
||||||
example. 3600 NS ns.example.com.
|
|
||||||
example. 3600 NS ns.example.net.
|
|
||||||
*.example. 3600 TXT "this is a wild card"
|
|
||||||
*.example. 3600 MX 10 host1.example.
|
|
||||||
sub.*.example. 3600 TXT "this is not a wild card"
|
|
||||||
host1.example. 3600 A 192.0.4.1
|
|
||||||
_ssh._tcp.host1.example. 3600 SRV <SRV RDATA>
|
|
||||||
_ssh._tcp.host2.example. 3600 SRV <SRV RDATA>
|
|
||||||
subdel.example. 3600 NS ns.example.com.
|
|
||||||
subdel.example. 3600 NS ns.example.net.
|
|
||||||
|
|
||||||
A look at the domain names in a tree structure is helpful:
|
|
||||||
|
|
||||||
|
|
|
||||||
-------------example------------
|
|
||||||
/ / \ \
|
|
||||||
/ / \ \
|
|
||||||
/ / \ \
|
|
||||||
* host1 host2 subdel
|
|
||||||
| | |
|
|
||||||
| | |
|
|
||||||
sub _tcp _tcp
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
_ssh _ssh
|
|
||||||
|
|
||||||
The following queries would be synthesized from one of the wildcards:
|
|
||||||
|
|
||||||
QNAME=host3.example. QTYPE=MX, QCLASS=IN
|
|
||||||
the answer will be a "host3.example. IN MX ..."
|
|
||||||
|
|
||||||
QNAME=host3.example. QTYPE=A, QCLASS=IN
|
|
||||||
the answer will reflect "no error, but no data"
|
|
||||||
because there is no A RR set at '*.example.'
|
|
||||||
|
|
||||||
QNAME=foo.bar.example. QTYPE=TXT, QCLASS=IN
|
|
||||||
the answer will be "foo.bar.example. IN TXT ..."
|
|
||||||
because bar.example. does not exist, but the wildcard does.
|
|
||||||
|
|
||||||
The following queries would not be synthesized from any of the wildcards:
|
|
||||||
|
|
||||||
QNAME=host1.example., QTYPE=MX, QCLASS=IN
|
|
||||||
because host1.example. exists
|
|
||||||
|
|
||||||
QNAME=ghost.*.example., QTYPE=MX, QCLASS=IN
|
|
||||||
because *.example. exists
|
|
||||||
|
|
||||||
QNAME=sub.*.example., QTYPE=MX, QCLASS=IN
|
|
||||||
because sub.*.example. exists
|
|
||||||
|
|
||||||
QNAME=_telnet._tcp.host1.example., QTYPE=SRV, QCLASS=IN
|
|
||||||
because _tcp.host1.example. exists (without data)
|
|
||||||
|
|
||||||
QNAME=host.subdel.example., QTYPE=A, QCLASS=IN
|
|
||||||
because subdel.example. exists (and is a zone cut)
|
|
||||||
|
|
||||||
2.2.2 Empty Non-terminals
|
|
||||||
|
|
||||||
Empty non-terminals [RFC2136, Section 7.16] are domain names that own
|
|
||||||
no resource records but have subdomains that do. In section 2.2.1,
|
|
||||||
"_tcp.host1.example." is an example of a empty non-terminal name.
|
|
||||||
Empty non-terminals are introduced by this text in section 3.1 of RFC
|
|
||||||
1034:
|
|
||||||
|
|
||||||
# The domain name space is a tree structure. Each node and leaf on the
|
|
||||||
# tree corresponds to a resource set (which may be empty). The domain
|
|
||||||
# system makes no distinctions between the uses of the interior nodes and
|
|
||||||
# leaves, and this memo uses the term "node" to refer to both.
|
|
||||||
|
|
||||||
The parenthesized "which may be empty" specifies that empty non-
|
|
||||||
terminals are explicitly recognized, and that empty non-terminals
|
|
||||||
"exist."
|
|
||||||
|
|
||||||
Pedantically reading the above paragraph can lead to an
|
|
||||||
interpretation that all possible domains exist - up to the suggested
|
|
||||||
limit of 255 octets for a domain name [RFC1035]. For example,
|
|
||||||
www.example. may have an A RR, and as far as is practically
|
|
||||||
concerned, is a leaf of the domain tree. But the definition can be
|
|
||||||
taken to mean that sub.www.example. also exists, albeit with no data.
|
|
||||||
By extension, all possible domains exist, from the root on down. As
|
|
||||||
RFC 1034 also defines "an authoritative name error indicating that
|
|
||||||
the name does not exist" in section 4.3.1, this is not the intent of
|
|
||||||
the original document.
|
|
||||||
|
|
||||||
2.2.3 Yet Another Definition of Existence
|
|
||||||
|
|
||||||
RFC1034's wording is fixed by the following paragraph:
|
|
||||||
|
|
||||||
The domain name space is a tree structure. Nodes in the tree either
|
|
||||||
own at least one RRSet and/or have descendants that collectively own at
|
|
||||||
least on RRSet. A node may have no RRSets if it has descendents that
|
|
||||||
do, this node is a empty non-terminal. A node may have its own RRSets
|
|
||||||
and have descendants with RRSets too.
|
|
||||||
|
|
||||||
A node with no descendants is a leaf node. Empty leaf nodes do not
|
|
||||||
exist.
|
|
||||||
|
|
||||||
Note that at a zone boundary, the domain name owns data, including
|
|
||||||
the NS RR set. At the delegating server, the NS RR set is not
|
|
||||||
authoritative, but that is of no consequence here. The domain name
|
|
||||||
owns data, therefore, it exists.
|
|
||||||
|
|
||||||
2.3 When does a Wild Card Domain Name is not Special
|
|
||||||
|
|
||||||
When a wild card domain name appears in a message's query section,
|
|
||||||
no special processing occurs. An asterisk label in a query name
|
|
||||||
only (label) matches an asterisk label in the existing zone tree
|
|
||||||
when the 4.3.2 algorithm is being followed.
|
|
||||||
|
|
||||||
When a wild card domain name appears in the resource data of a
|
|
||||||
record, no special processing occurs. An asterisk label in that
|
|
||||||
context literally means just an asterisk.
|
|
||||||
|
|
||||||
3. Impact of a Wild Card Domain Name On a Response
|
|
||||||
|
|
||||||
The description of how wildcards impact response generation is in
|
|
||||||
RFC 1034, section 4.3.2. That passage contains the algorithm
|
|
||||||
followed by a server in constructing a response. Within that
|
|
||||||
algorithm, step 3, part 'c' defines the behavior of the wild card.
|
|
||||||
|
|
||||||
The algorithm in RFC 1034, section 4.3.2. is not intended to be pseudo
|
|
||||||
code, i.e., its steps are not intended to be followed in strict
|
|
||||||
order. The "algorithm" is a suggestion. As such, in step 3, parts
|
|
||||||
a, b, and c, do not have to be implemented in that order.
|
|
||||||
|
|
||||||
3.1 Step 2
|
|
||||||
|
|
||||||
Step 2 of the RFC 1034's section 4.3.2 reads:
|
|
||||||
|
|
||||||
# 2. Search the available zones for the zone which is the nearest
|
|
||||||
# ancestor to QNAME. If such a zone is found, go to step 3,
|
|
||||||
# otherwise step 4.
|
|
||||||
|
|
||||||
In this step, the most appropriate zone for the response is chosen.
|
|
||||||
The significance of this step is that it means all of step 3 is being
|
|
||||||
performed within one zone. This has significance when considering
|
|
||||||
whether or not an SOA RR can be ever be used for synthesis.
|
|
||||||
|
|
||||||
3.2 Step 3
|
|
||||||
|
|
||||||
Step 3 is dominated by three parts, labelled 'a', 'b', and 'c'. But the
|
|
||||||
beginning of the step is important and needs explanation.
|
|
||||||
|
|
||||||
# 3. Start matching down, label by label, in the zone. The
|
|
||||||
# matching process can terminate several ways:
|
|
||||||
|
|
||||||
The word 'matching' refers to label matching. The concept
|
|
||||||
is based in the view of the zone as the tree of existing names. The
|
|
||||||
query name is considered to be an ordered sequence of labels - as
|
|
||||||
if the name were a path from the root to the owner of the desired
|
|
||||||
data. (Which it is - 3rd paragraph of RFC 1034, section 3.1.)
|
|
||||||
|
|
||||||
The process of label matching a query name ends in exactly one of three
|
|
||||||
choices, the parts 'a', 'b', and 'c'. Either the name is found, the
|
|
||||||
name is below a cut point, or the name is not found.
|
|
||||||
|
|
||||||
Once one of the parts is chosen, the other parts are not considered.
|
|
||||||
(E.g., do not execute part 'c' and then change the execution path to
|
|
||||||
finish in part 'b'.) The process of label matching is also done
|
|
||||||
independent of the query type (QTYPE).
|
|
||||||
|
|
||||||
Parts 'a' and 'b' are not an issue for this clarification as they do not
|
|
||||||
relate to record synthesis. Part 'a' is an exact match that results in
|
|
||||||
an answer, part 'b' is a referral. It is possible, from the description
|
|
||||||
given, that a query might fit into both part a and part b, this is
|
|
||||||
not within the scope of this document.
|
|
||||||
|
|
||||||
3.3 Part 'c'
|
|
||||||
|
|
||||||
The context of part 'c' is that the process of label matching the
|
|
||||||
labels of the query name has resulted in a situation in which there
|
|
||||||
is no corresponding label in the tree. It is as if the lookup has
|
|
||||||
"fallen off the tree."
|
|
||||||
|
|
||||||
# c. If at some label, a match is impossible (i.e., the
|
|
||||||
# corresponding label does not exist), look to see if a
|
|
||||||
# the "*" label exists.
|
|
||||||
|
|
||||||
|
|
||||||
To help describe the process of looking 'to see if a [sic] the "*"
|
|
||||||
label exists' a term has been coined to describe the last label
|
|
||||||
matched. The term is "closest encloser."
|
|
||||||
|
|
||||||
3.3.1 Closest Encloser and the Source of Synthesis
|
|
||||||
|
|
||||||
The closest encloser is the node in the zone's tree of existing
|
|
||||||
domain names that has the most labels matching the query name
|
|
||||||
(consecutively, counting from the root label downward). Each match
|
|
||||||
is a "label match" and the order of the labels is the same.
|
|
||||||
|
|
||||||
The closest encloser is, by definition, an existing name in the zone. The
|
|
||||||
closest encloser might be an empty non-terminal or even be a wild card
|
|
||||||
domain name itself. In no circumstances is the closest encloser
|
|
||||||
the used to synthesize records for the current query.
|
|
||||||
|
|
||||||
The source of synthesis is defined in the context of a query process
|
|
||||||
as that wild card domain name immediately descending from the
|
|
||||||
closest encloser, provided that this wild card domain name exists.
|
|
||||||
"Immediately descending" means that the source of synthesis has a name
|
|
||||||
of the form <asterisk label>.<closest encloser>. A source of synthesis
|
|
||||||
does not guarantee having a RRSet to use for synthesis. The source of
|
|
||||||
synthesis could be an empty non-terminal.
|
|
||||||
|
|
||||||
If the source of synthesis does not exist (not on the domain tree),
|
|
||||||
there will be no wildcard synthesis. There is no search for an alternate.
|
|
||||||
|
|
||||||
The important concept is that for any given lookup process, there
|
|
||||||
is at most one place at which wildcard synthetic records can be
|
|
||||||
obtained. If the source of synthesis does not exist, the lookup
|
|
||||||
terminates, the lookup does not look for other wildcard records.
|
|
||||||
|
|
||||||
3.3.2 Closest Encloser and Source of Synthesis Examples
|
|
||||||
|
|
||||||
To illustrate, using the example zone in section 2.2.1 of this document,
|
|
||||||
the following chart shows QNAMEs and the closest enclosers.
|
|
||||||
|
|
||||||
QNAME Closest Encloser Source of Synthesis
|
|
||||||
host3.example. example. *.example.
|
|
||||||
_telnet._tcp.host1.example. _tcp.host1.example. no source
|
|
||||||
_telnet._tcp.host2.example. host2.example. no source
|
|
||||||
_telnet._tcp.host3.example. example. *.example.
|
|
||||||
_chat._udp.host3.example. example. *.example.
|
|
||||||
foobar.*.example. *.example. no source
|
|
||||||
|
|
||||||
3.3.3 Type Matching
|
|
||||||
|
|
||||||
RFC 1034 concludes part 'c' with this:
|
|
||||||
|
|
||||||
# If the "*" label does not exist, check whether the name
|
|
||||||
# we are looking for is the original QNAME in the query
|
|
||||||
# or a name we have followed due to a CNAME. If the name
|
|
||||||
# is original, set an authoritative name error in the
|
|
||||||
# response and exit. Otherwise just exit.
|
|
||||||
#
|
|
||||||
# If the "*" label does exist, match RRs at that node
|
|
||||||
# against QTYPE. If any match, copy them into the answer
|
|
||||||
# section, but set the owner of the RR to be QNAME, and
|
|
||||||
# not the node with the "*" label. Go to step 6.
|
|
||||||
|
|
||||||
The final paragraph covers the role of the QTYPE in the lookup process.
|
|
||||||
|
|
||||||
Based on implementation feedback and similarities between step 'a' and
|
|
||||||
step 'c' a change to this passage a change has been made.
|
|
||||||
|
|
||||||
The change is to add the following text to step 'c':
|
|
||||||
|
|
||||||
If the data at the source of synthesis is a CNAME, and
|
|
||||||
QTYPE doesn't match CNAME, copy the CNAME RR into the
|
|
||||||
answer section of the response changing the owner name
|
|
||||||
to the QNAME, change QNAME to the canonical name in the
|
|
||||||
CNAME RR, and go back to step 1.
|
|
||||||
|
|
||||||
This is essentially the same text in step a covering the processing of
|
|
||||||
CNAME RRSets.
|
|
||||||
|
|
||||||
4. Considerations with Special Types
|
|
||||||
|
|
||||||
Sections 2 and 3 of this document discuss wildcard synthesis with
|
|
||||||
respect to names in the domain tree and ignore the impact of types.
|
|
||||||
In this section, the implication of wildcards of specific types are
|
|
||||||
discussed. The types covered are those that have proven to be the
|
|
||||||
most difficult to understand. The types are SOA, NS, CNAME, DNAME,
|
|
||||||
SRV, DS, NSEC, RRSIG and "none," i.e., empty non-terminal wild card
|
|
||||||
domain names.
|
|
||||||
|
|
||||||
4.1 SOA RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
A wild card domain name owning an SOA RRSet means that the domain
|
|
||||||
is at the root of the zone (apex). The domain can not be a source of
|
|
||||||
synthesis because that is, by definition, a descendent node (of
|
|
||||||
the closest encloser) and a zone apex is at the top of the zone.
|
|
||||||
|
|
||||||
Although a wild card domain name owning an SOA RRSet can never be a
|
|
||||||
source of synthesis, there is no reason to forbid the ownership of
|
|
||||||
an SOA RRSet.
|
|
||||||
|
|
||||||
E.g., given this zone:
|
|
||||||
$ORIGIN *.example.
|
|
||||||
@ 3600 IN SOA <SOA RDATA>
|
|
||||||
3600 NS ns1.example.com.
|
|
||||||
3600 NS ns1.example.net.
|
|
||||||
www 3600 TXT "the www txt record"
|
|
||||||
|
|
||||||
A query for www.*.example.'s TXT record would still find the "the www txt
|
|
||||||
record" answer. The reason is that the asterisk label only becomes
|
|
||||||
significant when RFC 1034's 4.3.2, step 3 part 'c' in in effect.
|
|
||||||
|
|
||||||
Of course, there would need to be a delegation in the parent zone,
|
|
||||||
"example." for this to work too. This is covered in the next section.
|
|
||||||
|
|
||||||
4.2 NS RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
The semantics of a wild card domain name's ownership of a NS RRSet
|
|
||||||
has been unclear. There are three considerations to cover. One is
|
|
||||||
is that if the query processing lands in part 'a' or part 'b' of
|
|
||||||
RFC 1034's 4.3.2, step 3, the incidence of the wild card domain name
|
|
||||||
owning an NS RRset has no special meaning. Second, synthesized
|
|
||||||
records never appear in the authority section of a response, meaning
|
|
||||||
that referrals are never synthesized. And finally, DNSSEC validators
|
|
||||||
will have to be aware of a quirk in ownership rules.
|
|
||||||
|
|
||||||
4.2.1 NS, *, and answers
|
|
||||||
|
|
||||||
If the NS RRSet in question is at the top of the zone, i.e., the
|
|
||||||
name also owns an SOA RRSet, the QNAME equals the zone name. This
|
|
||||||
would trigger part 'a' of step 3.
|
|
||||||
|
|
||||||
4.2.2 NS, *, and referrals
|
|
||||||
|
|
||||||
If the NS RRset is not at the top of the zone and part 'b' is triggered,
|
|
||||||
this implies that the labels being matched are an asterisk label in
|
|
||||||
the QNAME and the asterisk label owning the NS RRset. In either case,
|
|
||||||
what is copied to the response will have the asterisk label in it - no
|
|
||||||
synthesis, no name substitution.
|
|
||||||
|
|
||||||
E.g., consider the parent zone for the example in section 4.1.
|
|
||||||
$ORIGIN example.
|
|
||||||
@ 3600 IN SOA <SOA RDATA>
|
|
||||||
3600 NS ns0.example.com.
|
|
||||||
3600 NS ns0.example.net.
|
|
||||||
* 3600 NS ns1.example.com.
|
|
||||||
3600 NS ns1.example.net.
|
|
||||||
|
|
||||||
If the query for www.*.example.'s TXT set arrived here, the response
|
|
||||||
would be a referral as in part 'b'.
|
|
||||||
|
|
||||||
Response, non-authoritative, no error rcode
|
|
||||||
ANSWER: (empty)
|
|
||||||
AUTHORITY:
|
|
||||||
* 3600 NS ns1.example.com.
|
|
||||||
3600 NS ns1.example.net.
|
|
||||||
ADDITIIONAL: (empty, or with OPT RR)
|
|
||||||
|
|
||||||
The same response message would be sent to a query for *.example.'s NS
|
|
||||||
set. Note that the NS records in the response are not expanded, simply
|
|
||||||
copied verbatim. (Compare this the case where "*" is "star".)
|
|
||||||
|
|
||||||
There is no synthesis of records in the authority section because part
|
|
||||||
'b' does not specify synthesis. The referral returned would have the
|
|
||||||
wild card domain name in the authority section unchanged.
|
|
||||||
|
|
||||||
4.2.3 NS, *, and synthesis
|
|
||||||
|
|
||||||
If the QNAME is not the same as the wild card domain name nor a
|
|
||||||
subdomain of it, then part 'c' of step 3 has been triggered. Assuming
|
|
||||||
that "a match is impossible" a source of synthesis is sought. If
|
|
||||||
the source of synthesis owns an NS RRset and the QTYPE is NS, then
|
|
||||||
a NS RRset is synthesized and put into the answer section and marked
|
|
||||||
as an authoritative answer. If the QTYPE is not NS, then the NS RRset
|
|
||||||
is ignored, as it would have been if it were an A RR and the QTYPE was
|
|
||||||
AAAA. An NS RRSet at a wild card domain name will not result in
|
|
||||||
the generation of referral messages for non-existent domains because
|
|
||||||
part 'c' does not write anything into the authority section.
|
|
||||||
|
|
||||||
(If we choose this, then we have to have a section 4.2.4 on DNSSEC
|
|
||||||
implications.)
|
|
||||||
|
|
||||||
OR
|
|
||||||
|
|
||||||
If the QNAME is not the same as the wild card domain name nor a
|
|
||||||
subdomain of it, then part 'c' of step 3 has been triggered. Assuming
|
|
||||||
that "a match is impossible" a source of synthesis is sought. If
|
|
||||||
the source of synthesis owns an NS RRset and the QTYPE is NS, then
|
|
||||||
no synthesis happens. A NS RRset is never synthesized. The proper
|
|
||||||
response is, what, no error/no data? Name error?
|
|
||||||
|
|
||||||
OR
|
|
||||||
|
|
||||||
If the QNAME is not the same as the wild card domain name nor a
|
|
||||||
subdomain of it, then part 'c' of step 3 has been triggered. Assuming
|
|
||||||
that "a match is impossible" a source of synthesis is sought. If
|
|
||||||
the source of synthesis owns an NS RRset then no synthesis happens.
|
|
||||||
A cut point is never a source of synthesis. The proper response is,
|
|
||||||
what, no error/no data? Name error?
|
|
||||||
|
|
||||||
4.3 CNAME RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
The issue of a CNAME RRSet owned by wild card domain names has prompted
|
|
||||||
a suggested change to the last paragraph of step 3c of the algorithm
|
|
||||||
in 4.3.2. The changed text appears in section 3.3.3 of this document.
|
|
||||||
|
|
||||||
4.4 DNAME RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
A DNAME RRset at a wild card domain name is effectively the same
|
|
||||||
as a CNAME at a wild card domain name.
|
|
||||||
|
|
||||||
4.5 SRV RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
The definition of the SRV RRset is RFC 2782 [RFC2782]. In the
|
|
||||||
definition of the record, there is some confusion over the term
|
|
||||||
"Name." The definition reads as follows:
|
|
||||||
|
|
||||||
# The format of the SRV RR
|
|
||||||
...
|
|
||||||
# _Service._Proto.Name TTL Class SRV Priority Weight Port Target
|
|
||||||
...
|
|
||||||
# Name
|
|
||||||
# The domain this RR refers to. The SRV RR is unique in that the
|
|
||||||
# name one searches for is not this name; the example near the end
|
|
||||||
# shows this clearly.
|
|
||||||
|
|
||||||
Do not confuse the definition "Name" with a domain name. I.e., once
|
|
||||||
removing the _Service and _Proto labels from the owner name of the
|
|
||||||
SRV RRSet, what remains could be a wild card domain name but this is
|
|
||||||
immaterial to the SRV RRSet.
|
|
||||||
|
|
||||||
E.g., If an SRV record is:
|
|
||||||
_foo._udp.*.example. 10800 IN SRV 0 1 9 old-slow-box.example.
|
|
||||||
|
|
||||||
*.example is a wild card domain name and although it it the Name of
|
|
||||||
the SRV RR, it is not the owner (domain name). The owner domain name
|
|
||||||
is "_foo._udp.*.example." which is not a wild card domain name.
|
|
||||||
|
|
||||||
The confusion is likely based on the mixture of the specification of
|
|
||||||
the SRV RR and the description of a "use case."
|
|
||||||
|
|
||||||
4.6 DS RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
...probably harmless...
|
|
||||||
|
|
||||||
4.7 NSEC RRSet at a Wild Card Domain Name
|
|
||||||
|
|
||||||
...will be present, don't know if it should be synthesized...
|
|
||||||
|
|
||||||
4.8 RRSIG at a Wild Card Domain Name
|
|
||||||
|
|
||||||
...need to cross check with DNSSECbis to see what is said about querying
|
|
||||||
for RRSIG...
|
|
||||||
|
|
||||||
4.9 Empty Non-terminal Wild Card Domain Name
|
|
||||||
|
|
||||||
If a source of synthesis is an empty non-terminal, then the response
|
|
||||||
will be one of no error in the return code and no RRSet in the answer
|
|
||||||
section.
|
|
||||||
|
|
||||||
5. Security Considerations
|
|
||||||
|
|
||||||
This document is refining the specifications to make it more likely
|
|
||||||
that security can be added to DNS. No functional additions are being
|
|
||||||
made, just refining what is considered proper to allow the DNS,
|
|
||||||
security of the DNS, and extending the DNS to be more predictable.
|
|
||||||
|
|
||||||
6. References
|
|
||||||
|
|
||||||
Normative References
|
|
||||||
|
|
||||||
[RFC20] ASCII Format for Network Interchange, V.G. Cerf, Oct-16-1969
|
|
||||||
|
|
||||||
[RFC1034] Domain Names - Concepts and Facilities, P.V. Mockapetris,
|
|
||||||
Nov-01-1987
|
|
||||||
|
|
||||||
[RFC1035] Domain Names - Implementation and Specification, P.V
|
|
||||||
Mockapetris, Nov-01-1987
|
|
||||||
|
|
||||||
[RFC1995] IXFR ... Ohta
|
|
||||||
|
|
||||||
[RFC2119] Key Words for Use in RFCs to Indicate Requirement Levels, S
|
|
||||||
Bradner, March 1997
|
|
||||||
|
|
||||||
[RFC2181] Clarifications to the DNS Specification, R. Elz and R. Bush,
|
|
||||||
July 1997.
|
|
||||||
|
|
||||||
[RFC2782] A DNS RR for specifying the location of services (DNS SRV),
|
|
||||||
A. Gulbrandsen, et.al., February 2000.
|
|
||||||
|
|
||||||
Informative References
|
|
||||||
|
|
||||||
[RFC2136] Dynamic Updates in the Domain Name System (DNS UPDATE), P.
|
|
||||||
Vixie, Ed., S. Thomson, Y. Rekhter, J. Bound, April 1997
|
|
||||||
|
|
||||||
[RFC2535] Domain Name System Security Extensions, D. Eastlake, March 1999
|
|
||||||
|
|
||||||
[RFC2672] Non-Terminal DNS Name Redirection, M. Crawford, August 1999
|
|
||||||
|
|
||||||
7. Others Contributing to This Document
|
|
||||||
|
|
||||||
Others who have been editors of this document: Bob Halley.
|
|
||||||
Others who have directly caused text to appear in the document: Alex
|
|
||||||
Bligh, Robert Elz, Paul Vixie, David Blacka and Olaf Kolkman.
|
|
||||||
Many others have indirect influences on the content.
|
|
||||||
|
|
||||||
8. Editor
|
|
||||||
|
|
||||||
Name: Edward Lewis
|
|
||||||
Affiliation: NeuStar
|
|
||||||
Address: 46000 Center Oak Plaza, Sterling, VA, 20166, US
|
|
||||||
Phone: +1-571-434-5468
|
|
||||||
Email: ed.lewis@neustar.biz
|
|
||||||
|
|
||||||
Comments on this document can be sent to the editor or the mailing
|
|
||||||
list for the DNSEXT WG, namedroppers@ops.ietf.org.
|
|
||||||
|
|
||||||
9. Trailing Boilerplate
|
|
||||||
|
|
||||||
Copyright (C) The Internet Society (2004). This document is subject
|
|
||||||
to the rights, licenses and restrictions contained in BCP 78 and
|
|
||||||
except as set forth therein, the authors retain all their rights.
|
|
||||||
|
|
||||||
This document and the information contained herein are provided on an
|
|
||||||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
|
||||||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY 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 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
Intellectual Property
|
|
||||||
|
|
||||||
The IETF takes no position regarding the validity or scope of any
|
|
||||||
Intellectual Property Rights or other rights that might be claimed to
|
|
||||||
pertain to the implementation or use of the technology described in
|
|
||||||
this document or the extent to which any license under such rights
|
|
||||||
might or might not be available; nor does it represent that it has
|
|
||||||
made any independent effort to identify any such rights. Information
|
|
||||||
on the procedures with respect to rights in RFC documents can be
|
|
||||||
found in BCP 78 and BCP 79.
|
|
||||||
|
|
||||||
Copies of IPR disclosures made to the IETF Secretariat and any
|
|
||||||
assurances of licenses to be made available, or the result of an
|
|
||||||
attempt made to obtain a general license or permission for the use of
|
|
||||||
such proprietary rights by implementers or users of this
|
|
||||||
specification can be obtained from the IETF on-line IPR repository at
|
|
||||||
http://www.ietf.org/ipr. The IETF invites any interested party to
|
|
||||||
bring to its attention any copyrights, patents or patent
|
|
||||||
applications, or other proprietary rights that may cover technology
|
|
||||||
that may be required to implement this standard. Please address the
|
|
||||||
information to the IETF at ietf-ipr@ietf.org.
|
|
||||||
|
|
||||||
Acknowledgement
|
|
||||||
|
|
||||||
Funding for the RFC Editor function is currently provided by the
|
|
||||||
Internet Society.
|
|
||||||
|
|
||||||
Expiration
|
|
||||||
|
|
||||||
This document expires on or about August 10, 2005.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
825
doc/draft/draft-ietf-dnsext-wcard-clarify-06.txt
Normal file
825
doc/draft/draft-ietf-dnsext-wcard-clarify-06.txt
Normal file
@ -0,0 +1,825 @@
|
|||||||
|
DNSEXT Working Group E. Lewis
|
||||||
|
INTERNET DRAFT NeuStar
|
||||||
|
Expiration Date: November 11, 2005 May 11 2005
|
||||||
|
|
||||||
|
The Role of Wildcards
|
||||||
|
in the Domain Name System
|
||||||
|
draft-ietf-dnsext-wcard-clarify-06.txt
|
||||||
|
|
||||||
|
Status of this Memo
|
||||||
|
|
||||||
|
By submitting this Internet-Draft, each author represents that
|
||||||
|
any applicable patent or other IPR claims of which he or she is
|
||||||
|
aware have been or will be disclosed, and any of which he or she
|
||||||
|
becomes aware will be disclosed, in accordance with Section 6 of
|
||||||
|
BCP 79.
|
||||||
|
|
||||||
|
Internet-Drafts are working documents of the Internet Engineering
|
||||||
|
Task Force (IETF), its areas, and its working groups. Note that
|
||||||
|
other groups may also distribute working documents as Internet-
|
||||||
|
Drafts.
|
||||||
|
|
||||||
|
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."
|
||||||
|
|
||||||
|
The list of current Internet-Drafts can be accessed at
|
||||||
|
http://www.ietf.org/ietf/1id-abstracts.txt
|
||||||
|
|
||||||
|
The list of Internet-Draft Shadow Directories can be accessed at
|
||||||
|
http://www.ietf.org/shadow.html
|
||||||
|
|
||||||
|
This Internet-Draft will expire on November 11, 2005.
|
||||||
|
|
||||||
|
Copyright Notice
|
||||||
|
|
||||||
|
Copyright (C) The Internet Society (2005).
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
|
||||||
|
This is an update to the wildcard definition of RFC 1034. The
|
||||||
|
interaction with wildcards and CNAME is changed, an error
|
||||||
|
condition removed, and the words defining some concepts central to
|
||||||
|
wildcards are changed. The overall goal is not to change wildcards,
|
||||||
|
but to refine the definition of RFC 1034.
|
||||||
|
|
||||||
|
1 Introduction
|
||||||
|
|
||||||
|
In RFC 1034 [RFC1034], sections 4.3.2 and 4.3.3 describe the synthesis
|
||||||
|
of answers from special resource records called wildcards. The
|
||||||
|
definition in RFC 1034 is incomplete and has proven to be confusing.
|
||||||
|
This document describes the wildcard synthesis by adding to the
|
||||||
|
discussion and making limited modifications. Modifications are made
|
||||||
|
to close inconsistencies that have led to interoperability issues.
|
||||||
|
This description does not expand the service intended by the original
|
||||||
|
definition.
|
||||||
|
|
||||||
|
Staying within the spirit and style of the original documents, this
|
||||||
|
document avoids specifying rules for DNS implementations regarding
|
||||||
|
wildcards. The intention is to only describe what is needed for
|
||||||
|
interoperability, not restrict implementation choices. In addition,
|
||||||
|
consideration has been given to minimize any backwards compatibility
|
||||||
|
with implementations that have complied with RFC 1034's definition.
|
||||||
|
|
||||||
|
This document is focused on the concept of wildcards as defined in RFC
|
||||||
|
1034. Nothing is implied regarding alternative approaches, nor are
|
||||||
|
alternatives discussed.
|
||||||
|
|
||||||
|
1.1 Motivation
|
||||||
|
|
||||||
|
Many DNS implementations have diverged with respect to wildcards in
|
||||||
|
different ways from the original definition, or at from least what
|
||||||
|
had been intended. Although there is clearly a need to clarify the
|
||||||
|
original documents in light of this alone, the impetus for this
|
||||||
|
document lay in the engineering of the DNS security extensions
|
||||||
|
[RFC4033]. With an unclear definition of wildcards the design of
|
||||||
|
authenticated denial became entangled.
|
||||||
|
|
||||||
|
This document is intended to limit changes, only those based on
|
||||||
|
implementation experience, and to remain as close to the original
|
||||||
|
document as possible. To reinforce this, relevant sections of RFC
|
||||||
|
1034 are repeated verbatim to help compare the old and new text.
|
||||||
|
|
||||||
|
1.2 The Original Definition
|
||||||
|
|
||||||
|
The context of the wildcard concept involves the algorithm by which
|
||||||
|
a name server prepares a response (in RFC 1034's section 4.3.2) and
|
||||||
|
the way in which a resource record (set) is identified as being a
|
||||||
|
source of synthetic data (section 4.3.3).
|
||||||
|
|
||||||
|
The beginning of the discussion ought to start with the definition
|
||||||
|
of the term "wildcard" as it appears in RFC 1034, section 4.3.3.
|
||||||
|
|
||||||
|
# In the previous algorithm, special treatment was given to RRs with
|
||||||
|
# owner names starting with the label "*". Such RRs are called
|
||||||
|
# wildcards. Wildcard RRs can be thought of as instructions for
|
||||||
|
# synthesizing RRs. When the appropriate conditions are met, the name
|
||||||
|
# server creates RRs with an owner name equal to the query name and
|
||||||
|
# contents taken from the wildcard RRs.
|
||||||
|
|
||||||
|
This passage appears after the algorithm in which the term wildcard
|
||||||
|
is first used. In this definition, wildcard refers to resource
|
||||||
|
records. In other usage, wildcard has referred to domain names, and
|
||||||
|
it has been used to describe the operational practice of relying on
|
||||||
|
wildcards to generate answers. It is clear from this that there is
|
||||||
|
a need to define clear and unambiguous terminology in the process of
|
||||||
|
discussing wildcards.
|
||||||
|
|
||||||
|
The mention of the use of wildcards in the preparation of a response
|
||||||
|
is contained in step 3c of RFC 1034's section 4.3.2 entitled
|
||||||
|
"Algorithm." Note that "wildcard" does not appear in the algorithm,
|
||||||
|
instead references are made to the "*" label. The portion of the
|
||||||
|
algorithm relating to wildcards is deconstructed in detail in
|
||||||
|
section 3 of this document, this is the beginning of the passage.
|
||||||
|
|
||||||
|
# c. If at some label, a match is impossible (i.e., the
|
||||||
|
# corresponding label does not exist), look to see if [...]
|
||||||
|
# the "*" label exists.
|
||||||
|
|
||||||
|
The scope of this document is the RFC 1034 definition of wildcards and
|
||||||
|
the implications of updates to those documents, such as DNSSEC.
|
||||||
|
Alternate schemes for synthesizing answers are not considered.
|
||||||
|
(Note that there is no reference listed. No document is known to
|
||||||
|
describe any alternate schemes, although there has been some
|
||||||
|
mention of them in mailing lists.)
|
||||||
|
|
||||||
|
1.3 This Document
|
||||||
|
|
||||||
|
This document accomplishes these three items.
|
||||||
|
o Defines new terms
|
||||||
|
o Makes minor changes to avoid conflicting concepts
|
||||||
|
o Describes the actions of certain resource records as wildcards
|
||||||
|
|
||||||
|
1.3.1 New Terms
|
||||||
|
|
||||||
|
To help in discussing what resource records are wildcards, two terms
|
||||||
|
will be defined - "asterisk label" and "wild card domain name". These
|
||||||
|
are defined in section 2.1.1.
|
||||||
|
|
||||||
|
To assist in clarifying the role of wildcards in the name server
|
||||||
|
algorithm in RFC 1034, 4.3.2, "source of synthesis" and "closest
|
||||||
|
encloser" are defined. These definitions are in section 3.3.2.
|
||||||
|
"Label match" is defined in section 3.2.
|
||||||
|
|
||||||
|
The introduction of new terms ought not have an impact on any existing
|
||||||
|
implementations. The new terms are used only to make discussions of
|
||||||
|
wildcards clearer.
|
||||||
|
|
||||||
|
1.3.2 Changed Text
|
||||||
|
|
||||||
|
The definition of "existence" is changed, superficially. This
|
||||||
|
change will not be apparent to implementations; it is needed to
|
||||||
|
make descriptions more precise. The change appears in section 2.2.3.
|
||||||
|
|
||||||
|
RFC 1034, section 4.3.3., seems to prohibit having two asterisk
|
||||||
|
labels in a wildcard owner name. With this document the restriction
|
||||||
|
is removed entirely. This change and its implications are in
|
||||||
|
section 2.1.3.
|
||||||
|
|
||||||
|
The actions when a source of synthesis owns a CNAME RR are changed to
|
||||||
|
mirror the actions if an exact match name owns a CNAME RR. This
|
||||||
|
is an addition to the words in RFC 1034, section 4.3.2, step 3,
|
||||||
|
part c. The discussion of this is in section 3.3.3.
|
||||||
|
|
||||||
|
Only the latter change represents an impact to implementations. The
|
||||||
|
definition of existence is not a protocol impact. The change to the
|
||||||
|
restriction on names is unlikely to have an impact, as there was no
|
||||||
|
discussion of how to enforce the restriction.
|
||||||
|
|
||||||
|
1.3.3 Considerations with Special Types
|
||||||
|
|
||||||
|
This document describes semantics of wildcard CNAME RRSets [RFC2181],
|
||||||
|
wildcard NS RRSets, wildcard SOA RRSets, wildcard DNAME RRSets
|
||||||
|
[RFC2672], wildcard DS RRSets [RFC TBD], and empty non-terminal
|
||||||
|
wildcards. Understanding these types in the context of wildcards
|
||||||
|
has been clouded because these types incur special processing if they
|
||||||
|
are the result of an exact match. This discussion is in section 4.
|
||||||
|
|
||||||
|
These discussions do not have an implementation impact, they cover
|
||||||
|
existing knowledge of the types, but to a greater level of detail.
|
||||||
|
|
||||||
|
1.4 Standards Terminology
|
||||||
|
|
||||||
|
This document does not use terms as defined in "Key words for use in
|
||||||
|
RFCs to Indicate Requirement Levels." [RFC2119]
|
||||||
|
|
||||||
|
Quotations of RFC 1034 are denoted by a '#' in the leftmost column.
|
||||||
|
|
||||||
|
2 Wildcard Syntax
|
||||||
|
|
||||||
|
The syntax of a wildcard is the same as any other DNS resource record,
|
||||||
|
across all classes and types. The only significant feature is the
|
||||||
|
owner name.
|
||||||
|
|
||||||
|
Because wildcards are encoded as resource records with special names,
|
||||||
|
they are included in zone transfers and incremental zone transfers.
|
||||||
|
[RFC1995]. This feature has been underappreciated until discussions
|
||||||
|
on alternative approaches to wildcards appeared on mailing lists.
|
||||||
|
|
||||||
|
2.1 Identifying a Wildcard
|
||||||
|
|
||||||
|
To provide a more accurate description of "wildcards", the definition
|
||||||
|
has to start with a discussion of the domain names that appear as
|
||||||
|
owners. Two new terms are needed, "Asterisk Label" and "Wild Card
|
||||||
|
Domain Name."
|
||||||
|
|
||||||
|
2.1.1 Wild Card Domain Name and Asterisk Label
|
||||||
|
|
||||||
|
A "wild card domain name" is defined by having its initial
|
||||||
|
(i.e., left-most or least significant) label be, in binary format:
|
||||||
|
|
||||||
|
0000 0001 0010 1010 (binary) = 0x01 0x2a (hexadecimal)
|
||||||
|
|
||||||
|
The first octet is the normal label type and length for a 1 octet
|
||||||
|
long label, the second octet is the ASCII representation [RFC20] for
|
||||||
|
the '*' character.
|
||||||
|
|
||||||
|
A descriptive name of a label equaling that value is an "asterisk
|
||||||
|
label."
|
||||||
|
|
||||||
|
RFC 1034's definition of wildcard would be "a resource record owned
|
||||||
|
by a wild card domain name."
|
||||||
|
|
||||||
|
2.1.2 Asterisks and Other Characters
|
||||||
|
|
||||||
|
No label values other than that in section 2.1.1 are asterisk labels,
|
||||||
|
hence names beginning with other labels are never wild card domain
|
||||||
|
names. Labels such as 'the*' and '**' are not asterisk labels,
|
||||||
|
they do not start wild card domain names.
|
||||||
|
|
||||||
|
2.1.3 Non-terminal Wild Card Domain Names
|
||||||
|
|
||||||
|
In section 4.3.3, the following is stated:
|
||||||
|
|
||||||
|
# .......................... The owner name of the wildcard RRs is of
|
||||||
|
# the form "*.<anydomain>", where <anydomain> is any domain name.
|
||||||
|
# <anydomain> should not contain other * labels......................
|
||||||
|
|
||||||
|
This restriction is lifted because the original documentation of it
|
||||||
|
is incomplete and the restriction does not serve any purpose given
|
||||||
|
years of operational experience.
|
||||||
|
|
||||||
|
Indirectly, the above passage raises questions about wild card domain
|
||||||
|
names having subdomains and possibly being an empty non-terminal. By
|
||||||
|
thinking of domain names such as "*.example.*.example." and
|
||||||
|
"*.*.example." and focusing on the right-most asterisk label in each,
|
||||||
|
the issues become apparent.
|
||||||
|
|
||||||
|
Although those example names have been restricted per RFC 1034, a name
|
||||||
|
such as "example.*.example." illustrates the same problems. The
|
||||||
|
sticky issue of subdomains and empty non-terminals is not removed by
|
||||||
|
the restriction. With that conclusion, the restriction appears to
|
||||||
|
be meaningless, worse yet, it implies that an implementation would
|
||||||
|
have to perform checks that do little more than waste CPU cycles.
|
||||||
|
|
||||||
|
A wild card domain name can have subdomains. There is no need to
|
||||||
|
inspect the subdomains to see if there is another asterisk label in
|
||||||
|
any subdomain.
|
||||||
|
|
||||||
|
A wild card domain name can be an empty non-terminal. (See the
|
||||||
|
upcoming sections on empty non-terminals.) In this case, any
|
||||||
|
lookup encountering it will terminate as would any empty
|
||||||
|
non-terminal match.
|
||||||
|
|
||||||
|
2.2 Existence Rules
|
||||||
|
|
||||||
|
The notion that a domain name 'exists' is mentioned in the definition
|
||||||
|
of wildcards. In section 4.3.3 of RFC 1034:
|
||||||
|
|
||||||
|
# Wildcard RRs do not apply:
|
||||||
|
#
|
||||||
|
...
|
||||||
|
# - When the query name or a name between the wildcard domain and
|
||||||
|
# the query name is know[n] to exist. For example, if a wildcard
|
||||||
|
|
||||||
|
RFC 1034 also refers to non-existence in the process of generating
|
||||||
|
a response that results in a return code of "name error." NXDOMAIN
|
||||||
|
is introduced in RFC 2308, section 2.1 says "In this case the domain
|
||||||
|
... does not exist." The overloading of the term "existence" is
|
||||||
|
confusing.
|
||||||
|
|
||||||
|
For the purposes of this document, a domain name is said to exist if
|
||||||
|
it plays a role in the execution of the algorithms in RFC 1034. This
|
||||||
|
document avoids discussion determining when an authoritative name
|
||||||
|
error has occurred.
|
||||||
|
|
||||||
|
2.2.1 An Example
|
||||||
|
|
||||||
|
To illustrate what is meant by existence consider this complete zone:
|
||||||
|
|
||||||
|
$ORIGIN example.
|
||||||
|
example. 3600 IN SOA <SOA RDATA>
|
||||||
|
example. 3600 NS ns.example.com.
|
||||||
|
example. 3600 NS ns.example.net.
|
||||||
|
*.example. 3600 TXT "this is a wild card"
|
||||||
|
*.example. 3600 MX 10 host1.example.
|
||||||
|
sub.*.example. 3600 TXT "this is not a wild card"
|
||||||
|
host1.example. 3600 A 192.0.4.1
|
||||||
|
_ssh._tcp.host1.example. 3600 SRV <SRV RDATA>
|
||||||
|
_ssh._tcp.host2.example. 3600 SRV <SRV RDATA>
|
||||||
|
subdel.example. 3600 NS ns.example.com.
|
||||||
|
subdel.example. 3600 NS ns.example.net.
|
||||||
|
|
||||||
|
A look at the domain names in a tree structure is helpful:
|
||||||
|
|
||||||
|
|
|
||||||
|
-------------example------------
|
||||||
|
/ / \ \
|
||||||
|
/ / \ \
|
||||||
|
/ / \ \
|
||||||
|
* host1 host2 subdel
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
sub _tcp _tcp
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
_ssh _ssh
|
||||||
|
|
||||||
|
The following queries would be synthesized from one of the wildcards:
|
||||||
|
|
||||||
|
QNAME=host3.example. QTYPE=MX, QCLASS=IN
|
||||||
|
the answer will be a "host3.example. IN MX ..."
|
||||||
|
|
||||||
|
QNAME=host3.example. QTYPE=A, QCLASS=IN
|
||||||
|
the answer will reflect "no error, but no data"
|
||||||
|
because there is no A RR set at '*.example.'
|
||||||
|
|
||||||
|
QNAME=foo.bar.example. QTYPE=TXT, QCLASS=IN
|
||||||
|
the answer will be "foo.bar.example. IN TXT ..."
|
||||||
|
because bar.example. does not exist, but the wildcard does.
|
||||||
|
|
||||||
|
The following queries would not be synthesized from any of the
|
||||||
|
wildcards:
|
||||||
|
|
||||||
|
QNAME=host1.example., QTYPE=MX, QCLASS=IN
|
||||||
|
because host1.example. exists
|
||||||
|
|
||||||
|
QNAME=ghost.*.example., QTYPE=MX, QCLASS=IN
|
||||||
|
because *.example. exists
|
||||||
|
|
||||||
|
QNAME=sub.*.example., QTYPE=MX, QCLASS=IN
|
||||||
|
because sub.*.example. exists
|
||||||
|
|
||||||
|
QNAME=_telnet._tcp.host1.example., QTYPE=SRV, QCLASS=IN
|
||||||
|
because _tcp.host1.example. exists (without data)
|
||||||
|
|
||||||
|
QNAME=host.subdel.example., QTYPE=A, QCLASS=IN
|
||||||
|
because subdel.example. exists (and is a zone cut)
|
||||||
|
|
||||||
|
2.2.2 Empty Non-terminals
|
||||||
|
|
||||||
|
Empty non-terminals [RFC2136, Section 7.16] are domain names that own
|
||||||
|
no resource records but have subdomains that do. In section 2.2.1,
|
||||||
|
"_tcp.host1.example." is an example of a empty non-terminal name.
|
||||||
|
Empty non-terminals are introduced by this text in section 3.1 of RFC
|
||||||
|
1034:
|
||||||
|
|
||||||
|
# The domain name space is a tree structure. Each node and leaf on the
|
||||||
|
# tree corresponds to a resource set (which may be empty). The domain
|
||||||
|
# system makes no distinctions between the uses of the interior nodes
|
||||||
|
# and leaves, and this memo uses the term "node" to refer to both.
|
||||||
|
|
||||||
|
The parenthesized "which may be empty" specifies that empty non-
|
||||||
|
terminals are explicitly recognized, and that empty non-terminals
|
||||||
|
"exist."
|
||||||
|
|
||||||
|
Pedantically reading the above paragraph can lead to an
|
||||||
|
interpretation that all possible domains exist - up to the suggested
|
||||||
|
limit of 255 octets for a domain name [RFC1035]. For example,
|
||||||
|
www.example. may have an A RR, and as far as is practically
|
||||||
|
concerned, is a leaf of the domain tree. But the definition can be
|
||||||
|
taken to mean that sub.www.example. also exists, albeit with no data.
|
||||||
|
By extension, all possible domains exist, from the root on down. As
|
||||||
|
RFC 1034 also defines "an authoritative name error indicating that
|
||||||
|
the name does not exist" in section 4.3.1, this is not the intent of
|
||||||
|
the original document.
|
||||||
|
|
||||||
|
2.2.3 Yet Another Definition of Existence
|
||||||
|
|
||||||
|
RFC1034's wording is fixed by the following paragraph:
|
||||||
|
|
||||||
|
The domain name space is a tree structure. Nodes in the tree either
|
||||||
|
own at least one RRSet and/or have descendants that collectively own
|
||||||
|
at least on RRSet. A node may have no RRSets if it has descendents
|
||||||
|
that do, this node is a empty non-terminal. A node may have its own
|
||||||
|
RRSets and have descendants with RRSets too.
|
||||||
|
|
||||||
|
A node with no descendants is a leaf node. Empty leaf nodes do not
|
||||||
|
exist.
|
||||||
|
|
||||||
|
Note that at a zone boundary, the domain name owns data, including
|
||||||
|
the NS RR set. At the delegating server, the NS RR set is not
|
||||||
|
authoritative, but that is of no consequence here. The domain name
|
||||||
|
owns data, therefore, it exists.
|
||||||
|
|
||||||
|
2.3 When does a Wild Card Domain Name is not Special
|
||||||
|
|
||||||
|
When a wild card domain name appears in a message's query section,
|
||||||
|
no special processing occurs. An asterisk label in a query name
|
||||||
|
only (label) matches an asterisk label in the existing zone tree
|
||||||
|
when the 4.3.2 algorithm is being followed.
|
||||||
|
|
||||||
|
When a wild card domain name appears in the resource data of a
|
||||||
|
record, no special processing occurs. An asterisk label in that
|
||||||
|
context literally means just an asterisk.
|
||||||
|
|
||||||
|
3. Impact of a Wild Card Domain Name On a Response
|
||||||
|
|
||||||
|
The description of how wildcards impact response generation is in
|
||||||
|
RFC 1034, section 4.3.2. That passage contains the algorithm
|
||||||
|
followed by a server in constructing a response. Within that
|
||||||
|
algorithm, step 3, part 'c' defines the behavior of the wild card.
|
||||||
|
|
||||||
|
The algorithm in RFC 1034, section 4.3.2. is not intended to be pseudo
|
||||||
|
code, i.e., its steps are not intended to be followed in strict
|
||||||
|
order. The "algorithm" is a suggestion. As such, in step 3, parts
|
||||||
|
a, b, and c, do not have to be implemented in that order.
|
||||||
|
|
||||||
|
3.1 Step 2
|
||||||
|
|
||||||
|
Step 2 of the RFC 1034's section 4.3.2 reads:
|
||||||
|
|
||||||
|
# 2. Search the available zones for the zone which is the nearest
|
||||||
|
# ancestor to QNAME. If such a zone is found, go to step 3,
|
||||||
|
# otherwise step 4.
|
||||||
|
|
||||||
|
In this step, the most appropriate zone for the response is chosen.
|
||||||
|
The significance of this step is that it means all of step 3 is being
|
||||||
|
performed within one zone. This has significance when considering
|
||||||
|
whether or not an SOA RR can be ever be used for synthesis.
|
||||||
|
|
||||||
|
3.2 Step 3
|
||||||
|
|
||||||
|
Step 3 is dominated by three parts, labelled 'a', 'b', and 'c'. But
|
||||||
|
the beginning of the step is important and needs explanation.
|
||||||
|
|
||||||
|
# 3. Start matching down, label by label, in the zone. The
|
||||||
|
# matching process can terminate several ways:
|
||||||
|
|
||||||
|
The word 'matching' refers to label matching. The concept
|
||||||
|
is based in the view of the zone as the tree of existing names. The
|
||||||
|
query name is considered to be an ordered sequence of labels - as
|
||||||
|
if the name were a path from the root to the owner of the desired
|
||||||
|
data. (Which it is - 3rd paragraph of RFC 1034, section 3.1.)
|
||||||
|
|
||||||
|
The process of label matching a query name ends in exactly one of
|
||||||
|
three choices, the parts 'a', 'b', and 'c'. Either the name is
|
||||||
|
found, the name is below a cut point, or the name is not found.
|
||||||
|
|
||||||
|
Once one of the parts is chosen, the other parts are not considered.
|
||||||
|
(E.g., do not execute part 'c' and then change the execution path to
|
||||||
|
finish in part 'b'.) The process of label matching is also done
|
||||||
|
independent of the query type (QTYPE).
|
||||||
|
|
||||||
|
Parts 'a' and 'b' are not an issue for this clarification as they
|
||||||
|
do not relate to record synthesis. Part 'a' is an exact match that
|
||||||
|
results in an answer, part 'b' is a referral. It is possible, from
|
||||||
|
the description given, that a query might fit into both part a and
|
||||||
|
part b, this is not within the scope of this document.
|
||||||
|
|
||||||
|
3.3 Part 'c'
|
||||||
|
|
||||||
|
The context of part 'c' is that the process of label matching the
|
||||||
|
labels of the query name has resulted in a situation in which there
|
||||||
|
is no corresponding label in the tree. It is as if the lookup has
|
||||||
|
"fallen off the tree."
|
||||||
|
|
||||||
|
# c. If at some label, a match is impossible (i.e., the
|
||||||
|
# corresponding label does not exist), look to see if [...]
|
||||||
|
# the "*" label exists.
|
||||||
|
|
||||||
|
To help describe the process of looking 'to see if [...] the "*"
|
||||||
|
label exists' a term has been coined to describe the last domain
|
||||||
|
(node) matched. The term is "closest encloser."
|
||||||
|
|
||||||
|
3.3.1 Closest Encloser and the Source of Synthesis
|
||||||
|
|
||||||
|
The closest encloser is the node in the zone's tree of existing
|
||||||
|
domain names that has the most labels matching the query name
|
||||||
|
(consecutively, counting from the root label downward). Each match
|
||||||
|
is a "label match" and the order of the labels is the same.
|
||||||
|
|
||||||
|
The closest encloser is, by definition, an existing name in the zone.
|
||||||
|
The closest encloser might be an empty non-terminal or even be a wild
|
||||||
|
card domain name itself. In no circumstances is the closest encloser
|
||||||
|
to be used to synthesize records for the current query.
|
||||||
|
|
||||||
|
The source of synthesis is defined in the context of a query process
|
||||||
|
as that wild card domain name immediately descending from the
|
||||||
|
closest encloser, provided that this wild card domain name exists.
|
||||||
|
"Immediately descending" means that the source of synthesis has a name
|
||||||
|
of the form <asterisk label>.<closest encloser>. A source of
|
||||||
|
synthesis does not guarantee having a RRSet to use for synthesis.
|
||||||
|
The source of synthesis could be an empty non-terminal.
|
||||||
|
|
||||||
|
If the source of synthesis does not exist (not on the domain tree),
|
||||||
|
there will be no wildcard synthesis. There is no search for an
|
||||||
|
alternate.
|
||||||
|
|
||||||
|
The important concept is that for any given lookup process, there
|
||||||
|
is at most one place at which wildcard synthetic records can be
|
||||||
|
obtained. If the source of synthesis does not exist, the lookup
|
||||||
|
terminates, the lookup does not look for other wildcard records.
|
||||||
|
|
||||||
|
3.3.2 Closest Encloser and Source of Synthesis Examples
|
||||||
|
|
||||||
|
To illustrate, using the example zone in section 2.2.1 of this
|
||||||
|
document, the following chart shows QNAMEs and the closest enclosers.
|
||||||
|
|
||||||
|
QNAME Closest Encloser Source of Synthesis
|
||||||
|
host3.example. example. *.example.
|
||||||
|
_telnet._tcp.host1.example. _tcp.host1.example. no source
|
||||||
|
_telnet._tcp.host2.example. host2.example. no source
|
||||||
|
_telnet._tcp.host3.example. example. *.example.
|
||||||
|
_chat._udp.host3.example. example. *.example.
|
||||||
|
foobar.*.example. *.example. no source
|
||||||
|
|
||||||
|
3.3.3 Type Matching
|
||||||
|
|
||||||
|
RFC 1034 concludes part 'c' with this:
|
||||||
|
|
||||||
|
# If the "*" label does not exist, check whether the name
|
||||||
|
# we are looking for is the original QNAME in the query
|
||||||
|
# or a name we have followed due to a CNAME. If the name
|
||||||
|
# is original, set an authoritative name error in the
|
||||||
|
# response and exit. Otherwise just exit.
|
||||||
|
#
|
||||||
|
# If the "*" label does exist, match RRs at that node
|
||||||
|
# against QTYPE. If any match, copy them into the answer
|
||||||
|
# section, but set the owner of the RR to be QNAME, and
|
||||||
|
# not the node with the "*" label. Go to step 6.
|
||||||
|
|
||||||
|
The final paragraph covers the role of the QTYPE in the lookup
|
||||||
|
process.
|
||||||
|
|
||||||
|
Based on implementation feedback and similarities between step 'a' and
|
||||||
|
step 'c' a change to this passage has been made.
|
||||||
|
|
||||||
|
The change is to add the following text to step 'c':
|
||||||
|
|
||||||
|
If the data at the source of synthesis is a CNAME, and
|
||||||
|
QTYPE doesn't match CNAME, copy the CNAME RR into the
|
||||||
|
answer section of the response changing the owner name
|
||||||
|
to the QNAME, change QNAME to the canonical name in the
|
||||||
|
CNAME RR, and go back to step 1.
|
||||||
|
|
||||||
|
This is essentially the same text in step a covering the processing of
|
||||||
|
CNAME RRSets.
|
||||||
|
|
||||||
|
4. Considerations with Special Types
|
||||||
|
|
||||||
|
Sections 2 and 3 of this document discuss wildcard synthesis with
|
||||||
|
respect to names in the domain tree and ignore the impact of types.
|
||||||
|
In this section, the implication of wildcards of specific types are
|
||||||
|
discussed. The types covered are those that have proven to be the
|
||||||
|
most difficult to understand. The types are SOA, NS, CNAME, DNAME,
|
||||||
|
SRV, DS, NSEC, RRSIG and "none," i.e., empty non-terminal wild card
|
||||||
|
domain names.
|
||||||
|
|
||||||
|
4.1 SOA RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
A wild card domain name owning an SOA RRSet means that the domain
|
||||||
|
is at the root of the zone (apex). The domain can not be a source of
|
||||||
|
synthesis because that is, by definition, a descendent node (of
|
||||||
|
the closest encloser) and a zone apex is at the top of the zone.
|
||||||
|
|
||||||
|
Although a wild card domain name owning an SOA RRSet can never be a
|
||||||
|
source of synthesis, there is no reason to forbid the ownership of
|
||||||
|
an SOA RRSet.
|
||||||
|
|
||||||
|
E.g., given this zone:
|
||||||
|
$ORIGIN *.example.
|
||||||
|
@ 3600 IN SOA <SOA RDATA>
|
||||||
|
3600 NS ns1.example.com.
|
||||||
|
3600 NS ns1.example.net.
|
||||||
|
www 3600 TXT "the www txt record"
|
||||||
|
|
||||||
|
A query for www.*.example.'s TXT record would still find the "the www
|
||||||
|
txt record" answer. The reason is that the asterisk label only
|
||||||
|
becomes significant when RFC 1034's 4.3.2, step 3 part 'c' in in
|
||||||
|
effect.
|
||||||
|
|
||||||
|
Of course, there would need to be a delegation in the parent zone,
|
||||||
|
"example." for this to work too. This is covered in the next section.
|
||||||
|
|
||||||
|
4.2 NS RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
With the definition of DNSSEC [RFC4033, RFC4034, RFC4035] now in
|
||||||
|
place, the semantics of a wild card domain name owning an NS RR has
|
||||||
|
come to be poorly defined. The dilemma relates to a conflict
|
||||||
|
between the rules for synthesis in part 'c' and the fact that the
|
||||||
|
resulting synthesis generates a record for which the zone is not
|
||||||
|
authoritative. In a DNSSEC signed zone, the mechanics of signature
|
||||||
|
management (generation and inclusion in a message) become unclear.
|
||||||
|
|
||||||
|
After some lengthy discussions, there has been no clear "best answer"
|
||||||
|
on how to document the semantics of such a situation. Barring such
|
||||||
|
records from the DNS would require definition of rules for that, as
|
||||||
|
well as introducing a restriction on records that were once legal.
|
||||||
|
Allowing such records and amending the process of signature
|
||||||
|
management would entail complicating the DNSSEC definition.
|
||||||
|
|
||||||
|
Combining these observations with thought that a wild card domain name
|
||||||
|
owning an NS record is an operationally uninteresting scenario, i.e.,
|
||||||
|
it won't happen in the normal course of events, accomodating this
|
||||||
|
situation in the specification would also be categorized as
|
||||||
|
"needless complication." Further, expending more effort on this
|
||||||
|
topic has proven to be an exercise in diminishing returns.
|
||||||
|
|
||||||
|
In summary, there is no definition given for wild card domain names
|
||||||
|
owning an NS RRSet. The semantics are left undefined until there
|
||||||
|
is a clear need to have a set defined, and until there is a clear
|
||||||
|
direction to proceed. Operationally, inclusion of wild card NS
|
||||||
|
RRSets in a zone is discouraged, but not barred.
|
||||||
|
|
||||||
|
4.3 CNAME RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
The issue of a CNAME RRSet owned by a wild card domain name has
|
||||||
|
prompted a suggested change to the last paragraph of step 3c of the
|
||||||
|
algorithm in 4.3.2. The changed text appears in section 3.3.3 of
|
||||||
|
this document.
|
||||||
|
|
||||||
|
4.4 DNAME RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
Ownership of a DNAME RRSet by a wild card domain name represents a
|
||||||
|
threat to the coherency of the DNS and is to be avoided or outright
|
||||||
|
rejected. Such a DNAME RRSet represents non-deterministic synthesis
|
||||||
|
of rules fed to different caches. As caches are fed the different
|
||||||
|
rules (in an unpredictable manner) the caches will cease to be
|
||||||
|
coherent. ("As caches are fed" refers to the storage in a cache of
|
||||||
|
records obtained in responses by recursive or iterative servers.)
|
||||||
|
|
||||||
|
For example, assume one cache, responding to a recursive request,
|
||||||
|
obtains the record "a.b.example. DNAME foo.bar.tld." and another
|
||||||
|
cache obtains "b.example. DNAME foo.bar.tld.", both generated from
|
||||||
|
the record "*.example. DNAME foo.bar.tld." by an authoritative server.
|
||||||
|
|
||||||
|
The DNAME specification is not clear on whether DNAME records in a
|
||||||
|
cache are used to rewrite queries. In some interpretations, the
|
||||||
|
rewrite occurs, in some, it is not. Allowing for the occurrence of
|
||||||
|
rewriting, queries for "sub.a.b.example. A" may be rewritten as
|
||||||
|
"sub.foo.bar.tld. A" by the former caching server and may be rewritten
|
||||||
|
as "sub.a.foo.bar.tld. A" by the latter. Coherency is lost, an
|
||||||
|
operational nightmare ensues.
|
||||||
|
|
||||||
|
Another justification for banning or avoiding wildcard DNAME records
|
||||||
|
is the observation that such a record could synthesize a DNAME owned
|
||||||
|
by "sub.foo.bar.example." and "foo.bar.example." There is a
|
||||||
|
restriction in the DNAME definition that no domain exist below a
|
||||||
|
DNAME-owning domain, hence, the wildcard DNAME is not to be permitted.
|
||||||
|
|
||||||
|
4.5 SRV RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
The definition of the SRV RRset is RFC 2782 [RFC2782]. In the
|
||||||
|
definition of the record, there is some confusion over the term
|
||||||
|
"Name." The definition reads as follows:
|
||||||
|
|
||||||
|
# The format of the SRV RR
|
||||||
|
...
|
||||||
|
# _Service._Proto.Name TTL Class SRV Priority Weight Port Target
|
||||||
|
...
|
||||||
|
# Name
|
||||||
|
# The domain this RR refers to. The SRV RR is unique in that the
|
||||||
|
# name one searches for is not this name; the example near the end
|
||||||
|
# shows this clearly.
|
||||||
|
|
||||||
|
Do not confuse the definition "Name" with a domain name. I.e., once
|
||||||
|
removing the _Service and _Proto labels from the owner name of the
|
||||||
|
SRV RRSet, what remains could be a wild card domain name but this is
|
||||||
|
immaterial to the SRV RRSet.
|
||||||
|
|
||||||
|
E.g., If an SRV record is:
|
||||||
|
_foo._udp.*.example. 10800 IN SRV 0 1 9 old-slow-box.example.
|
||||||
|
|
||||||
|
*.example is a wild card domain name and although it it the Name of
|
||||||
|
the SRV RR, it is not the owner (domain name). The owner domain name
|
||||||
|
is "_foo._udp.*.example." which is not a wild card domain name.
|
||||||
|
|
||||||
|
The confusion is likely based on the mixture of the specification of
|
||||||
|
the SRV RR and the description of a "use case."
|
||||||
|
|
||||||
|
4.6 DS RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
A DS RRSet owned by a wild card domain name is meaningless and
|
||||||
|
harmless.
|
||||||
|
|
||||||
|
4.7 NSEC RRSet at a Wild Card Domain Name
|
||||||
|
|
||||||
|
Wild card domain names in DNSSEC signed zones will have an NSEC RRSet.
|
||||||
|
Synthesis of these records will only occur when the query exactly
|
||||||
|
matches the record. Synthesized NSEC RR's will not be harmful as
|
||||||
|
they will never be used in negative caching or to generate a negative
|
||||||
|
response.
|
||||||
|
|
||||||
|
4.8 RRSIG at a Wild Card Domain Name
|
||||||
|
|
||||||
|
RRSIG records will be present at a wild card domain name in a signed
|
||||||
|
zone, and will be synthesized along with data sought in a query.
|
||||||
|
The fact that the owner name is synthesized is not a problem as the
|
||||||
|
label count in the RRSIG will instruct the verifying code to ignore
|
||||||
|
it.
|
||||||
|
|
||||||
|
4.9 Empty Non-terminal Wild Card Domain Name
|
||||||
|
|
||||||
|
If a source of synthesis is an empty non-terminal, then the response
|
||||||
|
will be one of no error in the return code and no RRSet in the answer
|
||||||
|
section.
|
||||||
|
|
||||||
|
5. Security Considerations
|
||||||
|
|
||||||
|
This document is refining the specifications to make it more likely
|
||||||
|
that security can be added to DNS. No functional additions are being
|
||||||
|
made, just refining what is considered proper to allow the DNS,
|
||||||
|
security of the DNS, and extending the DNS to be more predictable.
|
||||||
|
|
||||||
|
6. IANA Considerations
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
7. References
|
||||||
|
|
||||||
|
Normative References
|
||||||
|
|
||||||
|
[RFC20] ASCII Format for Network Interchange, V.G. Cerf, Oct-16-1969
|
||||||
|
|
||||||
|
[RFC1034] Domain Names - Concepts and Facilities, P.V. Mockapetris,
|
||||||
|
Nov-01-1987
|
||||||
|
|
||||||
|
[RFC1035] Domain Names - Implementation and Specification, P.V
|
||||||
|
Mockapetris, Nov-01-1987
|
||||||
|
|
||||||
|
[RFC1995] Incremental Zone Transfer in DNS, M. Ohta, August 1996
|
||||||
|
|
||||||
|
[RFC2119] Key Words for Use in RFCs to Indicate Requirement Levels, S
|
||||||
|
Bradner, March 1997
|
||||||
|
|
||||||
|
[RFC2181] Clarifications to the DNS Specification, R. Elz and R. Bush,
|
||||||
|
July 1997
|
||||||
|
|
||||||
|
[RFC2308] Negative Caching of DNS Queries (DNS NCACHE), M. Andrews,
|
||||||
|
March 1998
|
||||||
|
|
||||||
|
[RFC2782] A DNS RR for specifying the location of services (DNS SRV),
|
||||||
|
A. Gulbrandsen, et.al., February 2000
|
||||||
|
|
||||||
|
[RFC4033] DNS Security Introduction and Requirements, R. Arends,
|
||||||
|
et.al., March 2005
|
||||||
|
|
||||||
|
[RFC4034] Resource Records for the DNS Security Extensions, R. Arends,
|
||||||
|
et.al., March 2005
|
||||||
|
|
||||||
|
[RFC4035] Protocol Modifications for the DNS Security Extensions,
|
||||||
|
R. Arends, et.al., March 2005
|
||||||
|
|
||||||
|
[RFC2672] Non-Terminal DNS Name Redirection, M. Crawford, August 1999
|
||||||
|
|
||||||
|
Informative References
|
||||||
|
|
||||||
|
[RFC2136] Dynamic Updates in the Domain Name System (DNS UPDATE), P.
|
||||||
|
Vixie, Ed., S. Thomson, Y. Rekhter, J. Bound, April 1997
|
||||||
|
|
||||||
|
8. Editor
|
||||||
|
|
||||||
|
Name: Edward Lewis
|
||||||
|
Affiliation: NeuStar
|
||||||
|
Address: 46000 Center Oak Plaza, Sterling, VA, 20166, US
|
||||||
|
Phone: +1-571-434-5468
|
||||||
|
Email: ed.lewis@neustar.biz
|
||||||
|
|
||||||
|
Comments on this document can be sent to the editor or the mailing
|
||||||
|
list for the DNSEXT WG, namedroppers@ops.ietf.org.
|
||||||
|
|
||||||
|
9. Others Contributing to the Document
|
||||||
|
|
||||||
|
This document represents the work of a large working group. The
|
||||||
|
editor merely recorded the collective wisdom of the working group.
|
||||||
|
|
||||||
|
10. Trailing Boilerplate
|
||||||
|
|
||||||
|
Copyright (C) The Internet Society (2005).
|
||||||
|
|
||||||
|
This document is subject to the rights, licenses and restrictions
|
||||||
|
contained in BCP 78, and except as set forth therein, the authors
|
||||||
|
retain all their rights.
|
||||||
|
|
||||||
|
This document and the information contained herein are provided on an
|
||||||
|
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||||||
|
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY 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 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
Intellectual Property
|
||||||
|
|
||||||
|
The IETF takes no position regarding the validity or scope of any
|
||||||
|
Intellectual Property Rights or other rights that might be claimed to
|
||||||
|
pertain to the implementation or use of the technology described in
|
||||||
|
this document or the extent to which any license under such rights
|
||||||
|
might or might not be available; nor does it represent that it has
|
||||||
|
made any independent effort to identify any such rights. Information
|
||||||
|
on the procedures with respect to rights in RFC documents can be
|
||||||
|
found in BCP 78 and BCP 79.
|
||||||
|
|
||||||
|
Copies of IPR disclosures made to the IETF Secretariat and any
|
||||||
|
assurances of licenses to be made available, or the result of an
|
||||||
|
attempt made to obtain a general license or permission for the use of
|
||||||
|
such proprietary rights by implementers or users of this
|
||||||
|
specification can be obtained from the IETF on-line IPR repository at
|
||||||
|
http://www.ietf.org/ipr. The IETF invites any interested party to
|
||||||
|
bring to its attention any copyrights, patents or patent
|
||||||
|
applications, or other proprietary rights that may cover technology
|
||||||
|
that may be required to implement this standard. Please address the
|
||||||
|
information to the IETF at ietf-ipr@ietf.org.
|
||||||
|
|
||||||
|
Acknowledgement
|
||||||
|
|
||||||
|
Funding for the RFC Editor function is currently provided by the
|
||||||
|
Internet Society.
|
||||||
|
|
||||||
|
Expiration
|
||||||
|
|
||||||
|
This document expires on or about November 11, 2005.
|
||||||
|
|
||||||
|
--
|
Loading…
x
Reference in New Issue
Block a user