A catalog zone
MUST follow the usual rules for DNS zones. In particular, SOA and NS record sets
MUST be present and adhere to standard requirements (such as [
RFC 1982]).
Although catalog zones are not intended to be queried via recursive resolution (see
Section 7), at least one NS RR is still required so that a catalog zone is a syntactically correct DNS zone. A single NS RR with a NSDNAME field containing the absolute name "invalid." is
RECOMMENDED [
RFC 2606] [
RFC 6761].
The list of member zones is specified as a collection of member nodes represented by domain names under the owner name "zones" where "zones" is a direct child domain of the catalog zone.
The names of member zones are represented on the RDATA side of a PTR record (instead of being represented as a part of owner names) so that all valid domain names may be represented regardless of their length [
RFC 1035]. This PTR record
MUST be the only record in the PTR RRset with the same name. The presence of more than one record in the RRset indicates a broken catalog zone that
MUST NOT be processed (see
Section 5.1).
For example, if a catalog zone lists three zones ("example.com.", "example.net.", and "example.org."), the member node RRs would appear as follows:
<unique-1>.zones.$CATZ 0 IN PTR example.com.
<unique-2>.zones.$CATZ 0 IN PTR example.net.
<unique-3>.zones.$CATZ 0 IN PTR example.org.
where
<unique-N> is a label that tags each record in the collection and has a unique value. When different
<unique-N> labels hold the same PTR value (i.e., point to the same member zone), the catalog zone is broken and
MUST NOT be processed (see
Section 5.1).
Member node labels carry no informational meaning beyond labeling member zones. A changed label may indicate that the state for a zone needs to be reset (see
Section 5.6).
Having the zones uniquely tagged with the
<unique-N> label ensures that additional RRs can be added below the member node (see
Section 4.2).
The CLASS field of every RR in a catalog zone
MUST be IN (1). The TTL field's value has no meaning in this context and
SHOULD be ignored.
Catalog zone information is stored in the form of "properties".
Properties are identified by their name, which is used as an owner name prefix for one or more record sets underneath a member node (or underneath the catalog zone apex), with RR type(s) as appropriate for the respective property.
Known properties that have the correct RR type but are for some reason invalid (for example, because of an impossible value or because of an illegal number of RRs in the RRset) denote a broken catalog zone, which
MUST NOT be processed (see
Section 5.1).
This document includes a set of initial properties that can be extended via the IANA registry defined and created in
Section 8. Some properties are defined at the global level; others are scoped to apply only to a specific member zone. This document defines a mandatory global property in
Section 4.2.1. The "zones" label from
Section 4.1 can also be seen as a global property and is listed as such in the IANA registry in
Section 8. Member-specific properties are described in
Section 4.3.
Implementers may store additional information in the catalog zone with custom properties; see
Section 4.4. The meaning of such custom properties is determined by the implementation in question.
The catalog zone schema version is specified by an integer value embedded in a TXT RR named
version.$CATZ. All catalog zones
MUST have a TXT RRset named
version.$CATZ with exactly one RR.
Catalog consumers
MUST NOT apply catalog zone processing to:
-
zones without the version property
-
zones with a version property with more than one RR in the RRset
-
zones with a version property without an expected value in the version.$CATZ TXT RR
-
zones with a version property with a schema version value that is not implemented by the consumer (e.g., version "1")
These conditions signify a broken catalog zone, which
MUST NOT be processed (see
Section 5.1).
For this memo, the value of the
version.$CATZ TXT RR
MUST be set to "2"; that is:
version.$CATZ 0 IN TXT "2"
Note that Version 1 was used in an earlier draft version of this memo and reflected the implementation first found in BIND 9.11.
Each member zone
MAY have one or more additional properties that are described in this section. The member properties described in this document are all optional, and implementations
MAY choose to implement all, some, or none of them. Member zone properties are represented by RRsets below the corresponding member node.
The
coo property facilitates controlled migration of a member zone from one catalog to another.
A Change Of Ownership is signaled by the
coo property in the catalog zone currently "owning" the zone. The name of the new catalog is the value of a PTR record in the relevant
coo property in the old catalog. For example, if member "example.com." migrates from catalog zone
$OLDCATZ to catalog zone
$NEWCATZ, this will appear in the
$OLDCATZ catalog zone as follows:
<unique-N>.zones.$OLDCATZ 0 IN PTR example.com.
coo.<unique-N>.zones.$OLDCATZ 0 IN PTR $NEWCATZ
The PTR RRset
MUST consist of a single PTR record. The presence of more than one record in the RRset indicates a broken catalog zone, which
MUST NOT be processed (see
Section 5.1).
When a consumer of a catalog zone
$OLDCATZ receives an update that adds or changes a
coo property for a member zone in
$OLDCATZ, it does
not migrate the member zone immediately. The migration has to wait for an update of
$NEWCATZ in which the member zone is present. Before the actual migration, the consumer
MUST verify that the
coo property pointing to
$NEWCATZ is still present in
$OLDCATZ.
Unless the member node label (i.e.,
<unique-N>) for the member is the same in
$NEWCATZ, all its associated state for a just migrated zone
MUST be reset (see
Section 5.6). Note that the owner of
$OLDCATZ allows for the zone-associated state to be taken over by the owner of
$NEWCATZ by default. To prevent the takeover of the zone-associated state, the owner of
$OLDCATZ must remove this state by updating the associated properties or by performing a zone state reset (see
Section 5.6) before or simultaneous with adding the
coo property (see
Section 7).
The old owner may remove the member zone containing the
coo property from
$OLDCATZ once it has been established that all its consumers have processed the Change of Ownership.
With a
group property, a consumer(s) can be signaled to treat some member zones within the catalog zone differently.
The consumer
MAY apply different configuration options when processing member zones, based on the value of the
group property. A
group property value is stored as the entire RDATA of a TXT record directly below the member node. The exact handling of the
group property value is left to the consumer's implementation and configuration.
The producer
MAY assign a
group property to all, some, or none of the member zones within a catalog zone. The producer
MAY assign more than one
group property to one member zone. This will make it possible to transfer group information for different consumer operators in a single catalog zone. Implementations
MAY facilitate mapping of a specific
group value to a specific configuration configurable
on a per catalog zone basis to allow for producers that publish their catalog zone at multiple consumer operators. Consumer operators
SHOULD namespace their
group values to reduce the risk of having to resolve clashes.
The consumer
MUST ignore
group values it does not understand. When a consumer encounters multiple
group values for a single member zone, it
MAY choose to process all, some, or none of them. This is left to the implementation.
group properties are represented by TXT RRs. The record content has no pre-defined meaning. Their interpretation is purely a matter of agreement between the producer and the consumer(s) of the catalog.
For example, the "foo" group could be agreed to indicate that a zone not be signed with DNSSEC. Conversely, an agreement could define that group names starting with "operator-" indicate in which way a given DNS operator should set up certain aspects of the member zone's DNSSEC configuration.
Assuming that the catalog producer and consumer(s) have established such agreements, consider the following catalog zone (snippet) that signals to a consumer(s) how to treat DNSSEC for the zones "example.net." and "example.com.":
<unique-1>.zones.$CATZ 0 IN PTR example.com.
group.<unique-1>.zones.$CATZ 0 IN TXT "foo"
<unique-2>.zones.$CATZ 0 IN PTR example.net.
group.<unique-2>.zones.$CATZ 0 IN TXT "operator-x-foo"
group.<unique-2>.zones.$CATZ 0 IN TXT "operator-y" "bar"
In this scenario, a consumer(s) shall, by agreement, not sign the member zone "example.com." with DNSSEC. For "example.net.", the consumers, at two different operators, will configure the member zone to be signed with a specific combination of settings. The
group value designated to indicate this combination of settings is prearranged with each operator ("operator-x-foo" vs. "operator-y" "bar").
Implementations and operators of catalog zones may choose to provide their own properties. Custom properties can occur globally or for a specific member zone. To prevent a name clash with future properties, such properties
MUST be represented below the label "ext".
"ext" is not a placeholder. A custom property is named as follows:
; a global custom property:
<property-prefix>.ext.$CATZ
; a member zone custom property:
<property-prefix>.ext.<unique-N>.zones.$CATZ
<property-prefix> may consist of one or more labels.
Implementations
SHOULD namespace their custom properties to limit risk of clashes with other implementations of catalog zones. This can be achieved by using two labels as the
<property-prefix> so that the name of the implementation is included in the prefix:
<some-setting>.<implementation-name>.ext.$CATZ.
Implementations
MAY use such properties on the member zone level to store additional information about member zones (e.g., to flag them for specific treatment).
Further, implementations
MAY use custom properties on the global level to store additional information about the catalog zone itself. While there may be many use cases for this, a plausible one is to store default values for custom properties on the global level, then override them using a property of the same name on the member level (= under the
ext label of the member node) if so desired. A property agreement between producer and consumer should clearly define what semantics apply and whether a property is global, member, or both.
The meaning of the custom properties described in this section is determined by the implementation alone without expectation of interoperability.