Hi DNSOP,I have prepared v09 of the BULK-RR draft for discussion (full text
below). It is currently on github (https://github.com/ioneyez/bulk- rr) and
will be officially submitted once the system has reopened.As usual, we are open
to q/a and comments.Thanks,John--DNSOP Working Group
J. WoodworthInternet-Draft
D. BallewUpdates: 2308, 4033, 4034, 4035 (if
CenturyLink, Inc. approved) S.
Bindinganaveli RaghavanIntended status: Informational Hughes
Network SystemsExpires: January 21, 2020 D.
Lawrence
Oracle July 20, 2019
BULK DNS Resource Records
draft-woodworth-bulk-rr-09Abstract The BULK DNS resource record type defines
a method of pattern-based creation of DNS resource records based on numeric
substrings of query names. The intent of BULK is to simplify generic
assignments in a memory-efficient way that can be easily shared between the
primary and secondary nameservers for a zone.Ed note Text inside square
brackets ([]) is additional background information, answers to frequently
asked questions, general musings, etc. They will be removed before
publication. This document is being collaborated on in GitHub at
<https://github.com/ioneyez/bulk- rr>. The most recent version of the
document, open issues, etc should all be available here. The authors
gratefully accept pull requests.Status of This Memo This Internet-Draft is
submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force
(IETF). Note that other groups may also distribute working documents as
Internet-Drafts. The list of current Internet- Drafts is at
https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft
documents valid for a maximum of six months and may be updated, replaced, or
obsoleted by other documents at any time. It is inappropriate to use
Internet-Drafts as reference material or to cite them other than as "work in
progress." This Internet-Draft will expire on January 21, 2020.Woodworth, et
al. Expires January 21, 2020 [Page 1]Internet-Draft
BULK RR July 2019Copyright Notice Copyright
(c) 2019 IETF Trust and the persons identified as the document authors. All
rights reserved. This document is subject to BCP 78 and the IETF Trust's
Legal Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of publication
of this document. Please review these documents carefully, as they describe
your rights and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text as
described in Section 4.e of the Trust Legal Provisions and are provided
without warranty as described in the Simplified BSD License.Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Background and Terminology . . . . . . . . . . . . . . . 4 2. The
BULK Resource Record . . . . . . . . . . . . . . . . . . 4 2.1. BULK
RDATA Wire Format . . . . . . . . . . . . . . . . . 4 2.2. The BULK RR
Presentation Format . . . . . . . . . . . . . 6 3. BULK Replacement . . .
. . . . . . . . . . . . . . . . . . . 7 3.1. Matching the Domain Name
Pattern . . . . . . . . . . . . 7 3.2. Record Generation using
Replacement Pattern . . . . . . . 7 3.2.1. Delimiters . . . . . . . .
. . . . . . . . . . . . . 8 3.2.2. Delimiter intervals . . . . . . . .
. . . . . . . . . 8 3.2.3. Padding length . . . . . . . . . . . . . .
. . . . . 9 3.2.4. Final processing . . . . . . . . . . . . . . . . .
. 9 4. Known Limitations . . . . . . . . . . . . . . . . . . . . . . 9
4.1. Unsupported Nameservers . . . . . . . . . . . . . . . . . 10 5.
Security Considerations . . . . . . . . . . . . . . . . . . . 10 5.1.
DNSSEC Signature Strategies . . . . . . . . . . . . . . . 10 5.1.1.
On-the-fly Signatures . . . . . . . . . . . . . . . . 10 5.1.2.
Alternative Signature Scheme . . . . . . . . . . . . 11 5.1.3.
Non-DNSSEC Zone Support Only . . . . . . . . . . . . 11 5.2. DDOS Attack
Vectors and Mitigation . . . . . . . . . . . 11 5.3. Implications of
Large-Scale DNS Records . . . . . . . . . 11 6. Privacy Considerations . .
. . . . . . . . . . . . . . . . . 12 7. IANA Considerations . . . . . . . .
. . . . . . . . . . . . . 12 8. Acknowledgments . . . . . . . . . . . . . .
. . . . . . . . . 12 9. References . . . . . . . . . . . . . . . . . . . .
. . . . . 12 9.1. Normative References . . . . . . . . . . . . . . . . .
. 12 9.2. Informative References . . . . . . . . . . . . . . . . . 13
Appendix A. BULK Examples . . . . . . . . . . . . . . . . . . . 14 A.1.
Example 1 . . . . . . . . . . . . . . . . . . . . . . . . 14 A.2. Example
2 . . . . . . . . . . . . . . . . . . . . . . . . 14 A.3. Example 3 . . .
. . . . . . . . . . . . . . . . . . . . . 15Woodworth, et al. Expires
January 21, 2020 [Page 2]Internet-Draft BULK
RR July 2019 A.4. Example 4 . . . . . . . . . . . .
. . . . . . . . . . . . 15 A.5. Example 5 . . . . . . . . . . . . . . . .
. . . . . . . . 15 Authors' Addresses . . . . . . . . . . . . . . . . . . .
. . . . 161. Introduction The BULK DNS resource record defines a
pattern-based method for on- the-fly resource record generation. It is
essentially an enhanced wildcard mechanism, constraining generated resource
record owner names to those that match a pattern of variable numeric
substrings. It is also akin to the $GENERATE master file directive [bind-arm]
without being limited to numeric values and without creating all possible
records in the zone data. For example, consider the following record:
example.com. 86400 IN BULK A (
pool-A-[0-255]-[0-255].example.com. 10.55.${1}.${2}
) It will answer requests for pool-A-0-0.example.com through
pool- A-255-255.example.com with the IPv4 addresses 10.55.0.0 through
10.55.255.255. Much larger record sets can be defined while minimizing the
associated requirements for server memory and zone transfer network
bandwidth. This record addresses a number of real-world operational problems
that authoritative DNS service providers experience. For example, operators
who host many large reverse lookup zones, even for only IPv4 space in
in-addr.arpa, would benefit from the disk space, memory size, and zone
transfer efficiencies that are gained by encapsulating a simple
record-generating algorithm versus enumerating all of the individual records
to cover the same space. Production zones of tens of thousands of
pattern-generated records currently exist, that could be reduced to just one
BULK RR. These zones can look deceptively small on the primary nameserver
and balloon to 100MB or more when expanded, BULK also allows administrators
to more easily deal with singletons, records in the pattern space that are an
exception to the normal data generation rules. Whereas a mechanism like
$GENERATE may need to be adjusted to account for these individual records,
the processing rules for BULK have explicit records more naturally override
the dynamically generated ones. This collision problem is not just
aWoodworth, et al. Expires January 21, 2020 [Page 3]
Internet-Draft BULK RR July 2019
theoretical concern, but a real source of support calls for providers.
Pattern-generated records are also not only for the reverse DNS space.
Forward zones also occasionally have entries that follow patterns that would
be well-addressed by the BULK RR.1.1. Background and Terminology The reader
is assumed to be familiar with the basic DNS and DNSSEC concepts described in
[RFC1034], [RFC1035], [RFC4033], [RFC4034], and [RFC4035]; subsequent RFCs
that update them in [RFC2181] and [RFC2308]; and DNS terms in [RFC7719].
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119] when, and only when,
they appear in all capitals, as shown here.2. The BULK Resource Record The
BULK resource record enables an authoritative nameserver to generate RRs for
other types based upon the query received. The Type value for the BULK RR
type is TBD. The BULK RR is class-independent.2.1. BULK RDATA Wire Format
The RDATA for a BULK RR is as follows: 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
Match Type | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Domain Name Pattern / /
/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
/ /
Replacement Pattern / /
/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Match Type
identifies the type of the RRset to be generated by this BULK record. It is
two octets corresponding to an RR TYPE code as specified in [RFC1035],
Section 3.2.1.Woodworth, et al. Expires January 21, 2020
[Page 4]Internet-Draft BULK RR July
2019 Domain Name Pattern consists of a pattern encoded as a wire-format
fully qualified domain name. The full name is used so that numeric
substrings above the zone cut can be captured in addition to those in the
zone. It needs no length indicator for the entire field because the root
label marks its end. Special characters are interpreted as per the following
Augmented Backus-Naur Form (ABNF) notation from [RFC5234]. match =
1*(range / string) range = "[" [decnum "-" decnum] "]" /
"<" [hexnum "-" hexnum] ">" ; create references
for substitution ; limit of 32 references
; [] is syntactic sugar for 0-255 ; <> is
syntactic sugar for 00-ff string = 1*(ctext / quoted-char) decnum
= 1*decdigit ; constrained to 65535 maximum.
hexnum = 1*hexdigit ; constrained to ffff
maximum. octet = %x00-FF decdigit = %x30-39
; 0-9 hexdigit = decdigit / 0x41-0x46 / 0x61-66
; 0-9, A-F, a-f ctext = <any octet excepting "">
quoted-char = "" octet ; to allow special characters
as literals Interpretation of the Domain Name Pattern is described in detail
in the "BULK Replacement" section. Note that quoted-char must be stored in
the wire format to preserve its semantics when the BULK RR is interpreted by
nameservers. The limit of 32 references is meant to simplify implementation
details. It is largely but not entirely arbitrary, as it could capture every
individual character of the text representation of a full IPv6
address.Woodworth, et al. Expires January 21, 2020 [Page
5]Internet-Draft BULK RR July 2019
Replacement Pattern describes how the answer RRset MUST be generated for the
matching query. It needs no length indicator because its end can be derived
from the RDATA length minus Match Type and Domain Name Pattern lengths. It
uses the following additional ABNF elements: replace = 1*(reference /
string) reference = "$" "{" (positions / "*") [options] "}" positions
= (position / posrange) 0*("," (position / posrange)) posrange =
position "-" position position = 1*decnum options =
delimiter [interval [padding]] delimiter = "|" 0*(ctext | quoted-char)
; "|" to use "|" as delimiter
; "\" to use "" as delimiter interval = "|" *2decdigit padding
= "|" *2decdigit [ Is the formatting complexity beyond simple ${1}, ${2},
etc, really worth it? I definitely see how it could make for shorter
replacement patterns, but does it enhance their clarity and usability, adding
a feature someone really wants? ] The Replacement Pattern MUST end in the
root label if it is intended to represent a fully qualified domain name.2.2.
The BULK RR Presentation Format Match Type is represented as an RR type
mnemonic or with [RFC3597]'s generic TYPE mechanism. Domain Name Pattern is
represented as a fully qualified domain name as per [RFC1035] Section 5.1
rules for encoding whitespace and other special characters. Replacement
Pattern is represented by the standard <character-string> text rules for
master files as per [RFC1035] section 5.1.Woodworth, et al. Expires
January 21, 2020 [Page 6]Internet-Draft BULK
RR July 2019 It is suggested that lines longer than 80
characters be wrapped with parenthetical line continuation, per [RFC1035]
Section 5.1, starting after Match Type and ending after Replacement
Pattern.3. BULK Replacement When a BULK-aware authoritative nameserver
receives a query for which it does not have a matching name or a covering
wildcard, it MUST then look for BULK RRs at the zone apex, selecting all BULK
RRs with a Match Type that matches the query type and a Domain Name Pattern
that matches the query name. Note that query type ANY will select all
Match Types, and all query types match a CNAME or DNAME Match Type. One or
more answer RRs will be generated per the replacement rules below. Examples
are provided in an appendix. By only triggering the BULK algorithm when the
query name does not exist, administrators are given the flexibility to
explicitly override the behaviour of specific names that would otherwise
match the BULK record's Domain Name Pattern. This is unlike BIND's
$GENERATE directive, which adds the generated RRs to any existing names.3.1.
Matching the Domain Name Pattern A query name matches the Domain Name Pattern
if the characters that appear outside the numeric ranges match exactly and
those within numeric ranges have values that fall within the range. Numeric
matches MUST be of the appropriate decimal or hexadecimal type as specified
by the delimiters in the pattern. For example, if a range is given as
[0-255], then FF does not match even though its value as a hexadecimal number
is within the range. Leading zeros in the numeric part(s) of the qname MUST
be ignored; for example, 001.example.com, 01.example.com and 1.example.com
would all match [].example.com. When a query name matches a Domain Name
Pattern, the value in each numeric range is stored for use by the Replacement
Pattern, with reference numbers starting at 1 and counting from the left.
For example, matching the query name host-24-156 against
host-[0-255]-[0-255] assigns 24 to ${1} and 156 to ${2}.3.2. Record Generation
using Replacement Pattern The Replacement Pattern generates the record data
by replacing the ${...} references with data captured from the query name,
and copying all other characters literally.Woodworth, et al. Expires
January 21, 2020 [Page 7]Internet-Draft BULK
RR July 2019 The simplest form of reference uses only
the reference number between the braces, "{" and "}". The value of the
reference is simply copied directly from the matching position of the query
name. The next form of reference notation uses the asterisk, "*". With
${*}, all captured values in order of ascending position, delimited by its
default delimiter (described below), are placed in the answer. The
commercial-at, "@" symbol captures in the same way only in order of
descending position. Numeric range references, such as ${1-4}, replaces all
values captured by those references, in order, delimited by the default
delimiter described below. To reverse the order in which they are copied,
reverse the upper and lower values, such as ${4-1}. This is useful for
generating PTR records from query names in which the address is encoded in
network order. Similar to range references, separating positions by commas
creates sets for replacement. For example, ${1,4} would be replaced by the
first and fourth captured values, delimited its default delimiter. This
notation may be combined with the numeric range form, such as
${3,2,1,8-4}.3.2.1. Delimiters A reference can specify a delimiter to use by
following a vertical bar, "|", with zero or more characters. Zero
characters, such as in ${1-3|}, means no delimiter is used, while other
characters up to an unescaped vertical bar or closing brace are copied
between position values in the replacement. The default delimiter is the
hyphen, "-".3.2.2. Delimiter intervals A second vertical bar in the
reference options introduces a delimiter interval. The default behavior of a
multi-position reference is to combine each captured value specified with a
delimiter between each. With a delimiter interval the delimiters are only
added between every Nth value. For example, ${*|-|4} adds a hyphen between
every group of four captured positions. This can be a handy feature in the
IPv6 reverse namespace where every nibble is captured as a separate value
and generated hostnames include sets of 4 nibbles. An empty or 0 value for
the delimiter interval MUST be interpreted as the default value of
1.Woodworth, et al. Expires January 21, 2020 [Page 8]
Internet-Draft BULK RR July 20193.2.3.
Padding length The fourth and final reference option determines the field
width of the copied value. Shorter values MUST be padded with leading zeroes
("0") and longer values MUST be truncated to the width. The default
behavior, and that of an explicit empty padding length, is that the captured
query name substring is copied exactly. A width of zero "0" is a signal to
"unpad", and any leading zeros MUST be removed. [ Unnecessary complexity? ]
If a delimiter interval greater than 1 is used, captured values between the
intervals will be concatenated and the padding or unpadding applied as a unit
and not individually. An example of this would be ${*||4|4} which would
combine each range of 4 captured values and pad or truncate them to a width
of 4 characters. [ If this is kept, the element/feature should probably be
renamed from "padding" since it is just as likely to truncate. ]3.2.4. Final
processing The string that results from all replacements is converted to the
appropriate RDATA format for the record type. If the conversion fails, the
SERVFAIL rcode MUST be set on the response, representing a misconfiguration
that the server was unable to perform. [ The EDNS extended-error code would
be useful here. ] The TTL of each RR generated by a BULK RR is the TTL of the
corresponding BULK record itself. [ BULK should probably have its own TTL
field because using that of the record itself feels like bad design. On the
other hand, if BULK is never meant to be queried for directly and only
appears in authoritative data, its own TTL is pretty useless normally. ]
The class for the RRSet is the class of the BULK RR. If the generated record
type is one that uses domain names in its resource record data, such as
CNAME, a relative domain names MUST be fully qualified with the origin domain
of the BULK RR.4. Known Limitations This section defines known limitations
of the BULK resource type.Woodworth, et al. Expires January 21, 2020
[Page 9]Internet-Draft BULK RR
July 20194.1. Unsupported Nameservers Authoritative nameservers that do
not understand the semantics of the new record type will not be able to
deliver the intended answers even when the type appears in their zone data
This significantly affects the interoperability of primary versus secondary
authorities that are not all running the same software. Adding new RRs which
affect handling by authoritative servers, or being unable to add them, is an
issue that needs to be explored more thoroughly within dnsop.5. Security
Considerations Two known security considerations exist for the BULK resource
record, DNSSEC and DDOS attack vectors.5.1. DNSSEC Signature Strategies
DNSSEC was designed to provide validation for DNS resource records, requiring
each tuple of owner, class, and type to have its own signature. This
essentially defeats the purpose of providing large generated blocks of RRs in
a single RR as each generated RR would require its own legitimate RRSIG
record. In the following sections several options are discussed to address
this issue. Of the options, on-the-fly provides the most secure solution and
NPN [npn-draft] provides the most flexible.5.1.1. On-the-fly Signatures A
significant design goal of DNSSEC was to be able to do offline cryptographic
signing of zone contents, keeping the key material more secure. On-the-fly
processing requires authoritative nameservers to sign generated records as
they are created. Not all authoritative nameserver implementations offer
on-the-fly signatures, and even with those that do not all operators will
want to keep signing keys online. This solution would either require all
implementations to support on-the-fly signing or be ignored by
implementations which can not or will not comply. One possibly mitigation
for addressing the risk of keeping the zone signing key online would be to
continue to keep the key for signing positive answers offline and introduce a
second key for online signing of negative answers. No changes to validating
resolvers is required to support this solution.Woodworth, et al.
Expires January 21, 2020 [Page 10]Internet-Draft
BULK RR July 20195.1.2. Alternative Signature Scheme
Previous versions of this draft proposed a new signature scheme using a
Numeric Pattern Normalization (NPN) RR. It was a method to support offline
signatures for BULK records, with the drawback that is required updates to
DNSSEC-aware resolvers. That mechanism is not specific to BULK and has been
removed from the current draft. If there is further interest in pursuing it,
it can be reopened as a separate draft.5.1.3. Non-DNSSEC Zone Support Only
As a final option zones which wish to remain entirely without DNSSEC support
may serve such zones without either of the above solutions and records
generated based on BULK RRs will require zero support from recursive
resolvers.5.2. DDOS Attack Vectors and Mitigation As an additional defense
against Distributed Denial Of Service (DDOS) attacks against recursive
(resolving) nameservers it is highly recommended shorter TTLs be used for
BULK RRs than others. While disabling caching with a zero TTL is not
recommended, as this would only result in a shift of the attack target, a
balance will need to be found. While this document uses 24 hours (86400
seconds) in its examples, values between 300 to 900 seconds are likely more
appropriate and is RECOMMENDED. What is ultimately deemed appropriate may
differ from zone to zone and administrator to administrator. [ I am unclear
how this helps DDOS mitigation against anyone at all, and suspect this
section should be removed.. ]5.3. Implications of Large-Scale DNS Records
The production of such large-scale records in the wild may have some
unintended side-effects. These side-effects could be of concern or add
unexpected complications to DNS based security offerings or forensic and
anti-spam measures. While outside the scope of this document, implementers
of technology relying on DNS resource records for critical decision making
must take into consideration how the existence of such a volume of records
might impact their technology. Solutions to the magnitude problem for BULK
generated RRs are expected be similar if not identical to that of existing
wildcard records, the core difference being the resultant RDATA will be
unique for each requested Domain Name within its scope.Woodworth, et al.
Expires January 21, 2020 [Page 11]Internet-Draft
BULK RR July 2019 The authors of this document are
confident that by careful consideration, negative_side-effects produced by
implementing the features described in this document can be eliminated from
any such service or product.6. Privacy Considerations The BULK record does
not introduce any new privacy concerns to DNS data.7. IANA Considerations
IANA is requested to assign numbers for the BULK RR.8. Acknowledgments This
document was created as an extension to the DNS infrastructure. As such, many
people over the years have contributed to its creation and the authors are
appreciative to each of them even if not thanked or identified individually.
A special thanks is extended for the kindness, wisdom and technical advice
of Robert Whelton (CenturyLink, Inc.) and Gary O'Brien (Secure64 Software
Corp).9. References9.1. Normative References [RFC1034] Mockapetris, P.,
"Domain names - concepts and facilities", STD 13, RFC 1034, DOI
10.17487/RFC1034, November 1987,
<https://www.rfc-editor.org/info/rfc1034>. [RFC1035] Mockapetris, P.,
"Domain names - implementation and specification", STD 13, RFC
1035, DOI 10.17487/RFC1035, November 1987,
<https://www.rfc-editor.org/info/rfc1035>. [RFC2119] Bradner, S., "Key words
for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. [RFC2181] Elz, R. and R. Bush,
"Clarifications to the DNS Specification", RFC 2181, DOI
10.17487/RFC2181, July 1997,
<https://www.rfc-editor.org/info/rfc2181>.Woodworth, et al. Expires
January 21, 2020 [Page 12]Internet-Draft BULK
RR July 2019 [RFC2308] Andrews, M., "Negative Caching
of DNS Queries (DNS NCACHE)", RFC 2308, DOI 10.17487/RFC2308,
March 1998, <https://www.rfc-editor.org/info/rfc2308>. [RFC2317]
Eidnes, H., de Groot, G., and P. Vixie, "Classless IN- ADDR.ARPA
delegation", BCP 20, RFC 2317, DOI 10.17487/RFC2317, March 1998,
<https://www.rfc-editor.org/info/rfc2317>. [RFC3597] Gustafsson,
A., "Handling of Unknown DNS Resource Record (RR) Types", RFC
3597, DOI 10.17487/RFC3597, September 2003,
<https://www.rfc-editor.org/info/rfc3597>. [RFC4033] Arends, R., Austein,
R., Larson, M., Massey, D., and S. Rose, "DNS Security
Introduction and Requirements", RFC 4033, DOI 10.17487/RFC4033,
March 2005, <https://www.rfc-editor.org/info/rfc4033>. [RFC4034]
Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose,
"Resource Records for the DNS Security Extensions", RFC 4034, DOI
10.17487/RFC4034, March 2005,
<https://www.rfc-editor.org/info/rfc4034>. [RFC4035] Arends, R., Austein,
R., Larson, M., Massey, D., and S. Rose, "Protocol Modifications
for the DNS Security Extensions", RFC 4035, DOI 10.17487/RFC4035,
March 2005, <https://www.rfc-editor.org/info/rfc4035>. [RFC5234]
Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234, DOI 10.17487/RFC5234,
January 2008, <https://www.rfc-editor.org/info/rfc5234>.9.2.
Informative References [bind-arm] Internet Systems Consortium,
"BIND 9 Configuration Reference", 2016,
<https://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/ Bv9ARM.html>.
[npn-draft] Internet Systems Consortium, "Numeric Pattern
Normalization (NPN)", 2019,
<https://github.com/ioneyez/npn>.Woodworth, et al. Expires January 21,
2020 [Page 13]Internet-Draft BULK RR
July 2019 [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara,
"DNS Terminology", RFC 7719, DOI 10.17487/RFC7719, December
2015, <https://www.rfc-editor.org/info/rfc7719>.Appendix A. BULK
ExamplesA.1. Example 1 $ORIGIN 2.10.in-addr.arpa. @ 86400 IN BULK PTR (
[0-255].[0-255].[0-255].[0-255].in-addr.arpa.
pool-${4-1}.example.com. ) A query received for the PTR of
4.3.2.10.in-addr.arpa will create the references ${1} through ${4} with the
first four labels of the query name. The ${4-1} reference in the replacement
pattern will then substitute them in reverse with the default delimiter of
hyphen between every character and no special field width modifications.
The TTL of the BULK RR is used for the generated record, making the response:
4.3.2.10.in-addr.arpa 86400 IN PTR pool-10-2-3-4.example.com.A.2. Example 2
$ORIGIN 2.10.in-addr.arpa. @ 86400 IN BULK PTR (
[0-255].[0-255].[0-255].[0-255].in-addr.arpa.
pool-${2,1|||3}.example.com. ) Example 2 is similar to Example 1,
except that it modifies the replacement pattern. The empty option after the
first vertical bar causes no delimiters to be inserted, while the second
empty option that would keep the delimiter interval as 1. The latter is
relevant because the final value, padding of 3, is applied over each
delimiter interval even when no delimiter is used. Not all captures from the
substring are required to be used in the response. The result is that a
query for the PTR of 4.3.2.10.in-addr.arpa generates this response:
4.3.2.10.in-addr.arpa 86400 IN PTR pool-003004.example.com. [ Admittedly you
can't do this very effectively without the field width complexity. Is this
sort of name common? Does it needWoodworth, et al. Expires January 21,
2020 [Page 14]Internet-Draft BULK RR
July 2019 support? Admittedly $GENERATE had the feature, but is
that reason enough? ] [ Change this to a hex matching example? ]A.3.
Example 3 $ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. @ 86400 IN BULK
PTR ( <>.<>.<>.<>.<>.<>.<>.<>.<>.<>.<>.<>.<>.<>.<>.<>
poolAA-${16-8|-|4}.example.com. ) This example introduces IPv6
where 16 individual nibbles are captured and the last 8 are combined into 2
blocks of 4, separated by a hyphen. A query for the IP of
2001:db8::dead:beef results in a PTR RR with the value of
poolAA-dead-beef.example.com.A.4. Example 4 $ORIGIN example.com. @ 86400
IN BULK AAAA ( poolAA-<0-ffff>-<0-ffff>.example.com.
${@|.|1}.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. ) This example
performs the reverse of example 3, where a query of
poolAA-dead-beef.example.com captures "dead" and "beef", reversing the
nibbles and using a dot (.) as the delimiter to form a valid AAAA record.A.5.
Example 5 This example contains a classless IPv4 delegation on the /22 CIDR
boundary as defined by [RFC2317]. The network for this example is
"10.2.0/22" delegated to a nameserver "ns1.sub.example.com.". RRs for this
example are defined as: $ORIGIN 2.10.in-addr.arpa. @ 7200 IN BULK CNAME
[0-255].[0-3] ${*|.}.0-3 0-3 86400 IN NS ns1.sub.example.com. A query for
the PTR of 25.2.2.10.in-addr.arpa is received and the BULK record with the
CNAME Match Type matches all query types. 25 and 2 are captured as
references, and joined in the answer by the period (".") character as a
delimiter, with ".0-3" then appendedWoodworth, et al. Expires January 21,
2020 [Page 15]Internet-Draft BULK RR
July 2019 literally and fully qualified by the origin domain.
The final synthesized record is: 25.2.2.10.in-addr.arpa 7200 IN CNAME
25.2.0-3.2.10.in-addr.arpa. [ Without $* and options complexity, the pattern
to get the same result is just ${1}.{$2}.0-3 which is not really
significantly onerous to enter, and slightly less arcane looking to
comprehend. ]Authors' Addresses John Woodworth CenturyLink, Inc. 4250 N
Fairfax Dr Arlington VA 22203 USA Email: [email protected]
Dean Ballew CenturyLink, Inc. 2355 Dulles Corner Blvd, Ste 200 300
Herndon VA 20171 USA Email: [email protected] Shashwath
Bindinganaveli Raghavan Hughes Network Systems 11717 Exploration Lane
Germantown MD 20876 USA Email: [email protected]
David C Lawrence Oracle Email: [email protected], et al. Expires
January 21, 2020 [Page 16]_______________________________________________
DNSOP mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/dnsop