| rfc9432.original | rfc9432.txt | |||
|---|---|---|---|---|
| DNSOP Working Group P. van Dijk | Internet Engineering Task Force (IETF) P. van Dijk | |||
| Internet-Draft PowerDNS | Request for Comments: 9432 PowerDNS | |||
| Intended status: Standards Track L. Peltan | Category: Standards Track L. Peltan | |||
| Expires: 11 August 2023 CZ.NIC | ISSN: 2070-1721 CZ.NIC | |||
| O. Sury | O. Sury | |||
| Internet Systems Consortium | Internet Systems Consortium | |||
| W. Toorop | W. Toorop | |||
| NLnet Labs | NLnet Labs | |||
| C.R. Monshouwer | C.R. Monshouwer | |||
| P. Thomassen | P. Thomassen | |||
| deSEC, SSE - Secure Systems Engineering | deSEC, SSE - Secure Systems Engineering | |||
| A. Sargsyan | A. Sargsyan | |||
| Internet Systems Consortium | Internet Systems Consortium | |||
| 7 February 2023 | July 2023 | |||
| DNS Catalog Zones | DNS Catalog Zones | |||
| draft-ietf-dnsop-dns-catalog-zones-09 | ||||
| Abstract | Abstract | |||
| This document describes a method for automatic DNS zone provisioning | This document describes a method for automatic DNS zone provisioning | |||
| among DNS primary and secondary nameservers by storing and | among DNS primary and secondary name servers by storing and | |||
| transferring the catalog of zones to be provisioned as one or more | transferring the catalog of zones to be provisioned as one or more | |||
| regular DNS zones. | regular DNS zones. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| 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 | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 11 August 2023. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9432. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology | |||
| 3. Description . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Description | |||
| 4. Catalog Zone Structure . . . . . . . . . . . . . . . . . . . 4 | 4. Catalog Zone Structure | |||
| 4.1. Member Zones . . . . . . . . . . . . . . . . . . . . . . 4 | 4.1. Member Zones | |||
| 4.2. Properties . . . . . . . . . . . . . . . . . . . . . . . 5 | 4.2. Properties | |||
| 4.2.1. Schema Version (version property) . . . . . . . . . . 6 | 4.2.1. Schema Version (version property) | |||
| 4.3. Member Zone Properties . . . . . . . . . . . . . . . . . 7 | 4.3. Member Zone Properties | |||
| 4.3.1. Change of Ownership (coo property) . . . . . . . . . 7 | 4.3.1. Change of Ownership (coo property) | |||
| 4.3.2. Groups (group property) . . . . . . . . . . . . . . . 8 | 4.3.2. Groups (group property) | |||
| 4.4. Custom Properties (*.ext properties) . . . . . . . . . . 9 | 4.4. Custom Properties (*.ext properties) | |||
| 5. Nameserver Behavior . . . . . . . . . . . . . . . . . . . . . 10 | 5. Name Server Behavior | |||
| 5.1. General Requirements . . . . . . . . . . . . . . . . . . 10 | 5.1. General Requirements | |||
| 5.2. Member zone name clash . . . . . . . . . . . . . . . . . 11 | 5.2. Member Zone Name Clash | |||
| 5.3. Member zone removal . . . . . . . . . . . . . . . . . . . 11 | 5.3. Member Zone Removal | |||
| 5.4. Member node name change . . . . . . . . . . . . . . . . . 11 | 5.4. Member Node Name Change | |||
| 5.5. Migrating member zones between catalogs . . . . . . . . . 11 | 5.5. Migrating Member Zones between Catalogs | |||
| 5.6. Zone-associated state reset . . . . . . . . . . . . . . . 12 | 5.6. Zone-Associated State Reset | |||
| 6. Implementation and Operational Notes . . . . . . . . . . . . 12 | 6. Implementation and Operational Notes | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 7. Security Considerations | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | 8. IANA Considerations | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 15 | 9. References | |||
| 10. Normative References . . . . . . . . . . . . . . . . . . . . 16 | 9.1. Normative References | |||
| 11. Informative References . . . . . . . . . . . . . . . . . . . 17 | 9.2. Informative References | |||
| Appendix A. Catalog Zone Example . . . . . . . . . . . . . . . . 17 | Appendix A. Catalog Zone Example | |||
| Appendix B. Implementation Status . . . . . . . . . . . . . . . 18 | Acknowledgements | |||
| Appendix C. Change History . . . . . . . . . . . . . . . . . . . 19 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 1. Introduction | 1. Introduction | |||
| The content of a DNS zone is synchronized among its primary and | The content of a DNS zone is synchronized among its primary and | |||
| secondary nameservers using AXFR and IXFR. However, the list of | secondary name servers using Authoritative Transfer (AXFR) and | |||
| zones served by the primary (called a catalog in [RFC1035]) is not | Incremental Zone Transfer (IXFR). However, the list of zones served | |||
| automatically synchronized with the secondaries. To add or remove a | by the primary (called a "catalog" in [RFC1035]) is not automatically | |||
| zone, the administrator of a DNS nameserver farm not only has to add | synchronized with the secondaries. To add or remove a zone, the | |||
| or remove the zone from the primary, they must also add/remove | administrator of a DNS name server farm has to not only add or remove | |||
| configuration for the zone from all secondaries. This can be both | the zone from the primary but must also add or remove configuration | |||
| inconvenient and error-prone; in addition, the steps required are | for the zone from all secondaries. This can be both inconvenient and | |||
| dependent on the nameserver implementation. | error-prone. In addition, the steps required are dependent on the | |||
| name server implementation. | ||||
| This document describes a method in which the list of zones is | This document describes a method in which the list of zones is | |||
| represented as a regular DNS zone (called a "catalog zone" here), and | represented as a regular DNS zone (called a "catalog zone" here) and | |||
| transferred using DNS zone transfers. When entries are added to or | transferred using DNS zone transfers. When entries are added to or | |||
| removed from the catalog zone, it is distributed to the secondary | removed from the catalog zone, it is distributed to the secondary | |||
| nameservers just like any other zone. Secondary nameservers can then | name servers just like any other zone. Secondary name servers can | |||
| add/remove/modify the zones they serve in accordance with the changes | then add, remove, or modify the zones they serve in accordance with | |||
| to the catalog zone. Other use-cases of nameserver remote | the changes to the catalog zone. Other use cases of name server | |||
| configuration by catalog zones are possible, where the catalog | remote configuration by catalog zones are possible where the catalog | |||
| consumer might not be a secondary. | consumer might not be a secondary. | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119][RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| Catalog zone: A DNS zone containing a DNS catalog, that is, a list | Catalog zone: A DNS zone containing a DNS catalog, which is a list | |||
| of DNS zones and associated properties. | of DNS zones and associated properties. | |||
| Member zone: A DNS zone whose configuration is published inside a | Member zone: A DNS zone whose configuration is published inside a | |||
| catalog zone. | catalog zone. | |||
| Member node: A DNS name in the Catalog zone representing a Member | Member node: A DNS name in the catalog zone representing a member | |||
| zone. | zone. | |||
| $CATZ: Used in examples as a placeholder to represent the domain | $CATZ: Used in examples as a placeholder to represent the domain | |||
| name of the catalog zone itself. $OLDCATZ and $NEWCATZ are used to | name of the catalog zone itself. $OLDCATZ and $NEWCATZ are used to | |||
| discuss migration of a member zone from one catalog zone $OLDCATZ | discuss migration of a member zone from one catalog zone | |||
| to another catalog zone $NEWCATZ. | ($OLDCATZ) to another catalog zone ($NEWCATZ). | |||
| Catalog producer: An entity that generates and is responsible for | Catalog producer: An entity that generates and is responsible for | |||
| the contents of the catalog zone. | the contents of the catalog zone. | |||
| Catalog consumer: An entity that extracts information from the | Catalog consumer: An entity that extracts information from the | |||
| catalog zone (such as a DNS server that configures itself | catalog zone (such as a DNS server that configures itself | |||
| according to the catalog zone's contents). | according to the catalog zone's contents). | |||
| This document makes use of terminology that is specific to the DNS, | This document makes use of terminology for transfer mechanisms (AXFR | |||
| such as for transfer mechanisms (AXFR, IXFR), for record types (SOA, | and IXFR), record types (SOA, NS, and PTR), and other technical terms | |||
| NS, PTR), and other technical terms (such as RDATA). Since these | (such as RDATA) that are specific to the DNS. Since these terms have | |||
| terms have specific meanings in the DNS they are not expanded at | specific meanings in the DNS, they are not expanded upon first use in | |||
| first use in this document. For definitions of those and other | this document. For definitions of these and other terms, see | |||
| terms, see [RFC8499]. | [RFC8499]. | |||
| 3. Description | 3. Description | |||
| A catalog zone is a DNS zone whose contents are specially crafted. | A catalog zone is a DNS zone whose contents are specially crafted. | |||
| Its resource records (RR) primarily constitute a list of PTR records | Its resource records (RRs) primarily constitute a list of PTR records | |||
| referencing other DNS zones (so-called "member zones"). The catalog | referencing other DNS zones (so-called "member zones"). The catalog | |||
| zone may contain other records indicating additional metadata (so- | zone may contain other records indicating additional metadata (so- | |||
| called "properties") associated with these member zones. | called "properties") associated with these member zones. | |||
| Catalog consumers MUST ignore any RRs in the catalog zone for which | Catalog consumers MUST ignore any RRs in the catalog zone for which | |||
| no processing is specified or which are otherwise not supported by | no processing is specified or which are otherwise not supported by | |||
| the implementation. | the implementation. | |||
| Authoritative servers may be pre-configured with multiple catalog | Authoritative servers may be pre-configured with multiple catalog | |||
| zones, each associated with a different set of configurations. | zones, each associated with a different set of configurations. | |||
| Although the contents of a catalog zone are interpreted and acted | Although the contents of a catalog zone are interpreted and acted | |||
| upon by nameservers, a catalog zone is a regular DNS zone and so must | upon by name servers, a catalog zone is a regular DNS zone and must | |||
| adhere to the standards for DNS zones. | adhere to the standards for DNS zones. | |||
| A catalog zone is primarily intended for the management of a farm of | A catalog zone is primarily intended for the management of a farm of | |||
| authoritative nameservers, and should not be expected to be | authoritative name servers and should not be expected to be | |||
| accessible from any recursive nameserver. | accessible from any recursive name server. | |||
| 4. Catalog Zone Structure | 4. Catalog Zone Structure | |||
| A catalog zone MUST follow the usual rules for DNS zones. In | A catalog zone MUST follow the usual rules for DNS zones. In | |||
| particular, SOA and NS record sets MUST be present and adhere to | particular, SOA and NS record sets MUST be present and adhere to | |||
| standard requirements (such as [RFC1982]). | standard requirements (such as [RFC1982]). | |||
| Although catalog zones are not intended to be queried via recursive | Although catalog zones are not intended to be queried via recursive | |||
| resolution (see Section 7), at least one NS RR is still required so | 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 | that a catalog zone is a syntactically correct DNS zone. A single NS | |||
| RR with a NSDNAME field containing the absolute name "invalid." is | RR with a NSDNAME field containing the absolute name "invalid." is | |||
| RECOMMENDED [RFC2606][RFC6761]. | RECOMMENDED [RFC2606] [RFC6761]. | |||
| 4.1. Member Zones | 4.1. Member Zones | |||
| The list of member zones is specified as a collection of member | The list of member zones is specified as a collection of member nodes | |||
| nodes, represented by domain names under the owner name "zones" where | represented by domain names under the owner name "zones" where | |||
| "zones" is a direct child domain of the catalog zone. | "zones" is a direct child domain of the catalog zone. | |||
| The names of member zones are represented on the RDATA side (instead | The names of member zones are represented on the RDATA side of a PTR | |||
| of as a part of owner names) of a PTR record, so that all valid | record (instead of being represented as a part of owner names) so | |||
| domain names may be represented regardless of their length [RFC1035]. | that all valid domain names may be represented regardless of their | |||
| This PTR record MUST be the only record in the PTR RRset with the | length [RFC1035]. This PTR record MUST be the only record in the PTR | |||
| same name. The presence of more than one record in the RRset | RRset with the same name. The presence of more than one record in | |||
| indicates a broken catalog zone which MUST NOT be processed (see | the RRset indicates a broken catalog zone that MUST NOT be processed | |||
| Section 5.1). | (see Section 5.1). | |||
| For example, if a catalog zone lists three zones "example.com.", | For example, if a catalog zone lists three zones ("example.com.", | |||
| "example.net." and "example.org.", the member node RRs would appear | "example.net.", and "example.org."), the member node RRs would appear | |||
| as follows: | as follows: | |||
| <unique-1>.zones.$CATZ 0 IN PTR example.com. | <unique-1>.zones.$CATZ 0 IN PTR example.com. | |||
| <unique-2>.zones.$CATZ 0 IN PTR example.net. | <unique-2>.zones.$CATZ 0 IN PTR example.net. | |||
| <unique-3>.zones.$CATZ 0 IN PTR example.org. | <unique-3>.zones.$CATZ 0 IN PTR example.org. | |||
| where <unique-N> is a label that tags each record in the collection. | where <unique-N> is a label that tags each record in the collection | |||
| <unique-N> has a unique value in the collection. When different | and has a unique value. When different <unique-N> labels hold the | |||
| <unique-N> labels hold the same PTR value (i.e., point to the same | same PTR value (i.e., point to the same member zone), the catalog | |||
| member zone), the catalog zone is broken and MUST NOT be processed | zone is broken and MUST NOT be processed (see Section 5.1). | |||
| (see Section 5.1). | ||||
| Member node labels carry no informational meaning beyond labeling | Member node labels carry no informational meaning beyond labeling | |||
| member zones. A changed label may indicate that the state for a zone | member zones. A changed label may indicate that the state for a zone | |||
| needs to be reset (see Section 5.6). | needs to be reset (see Section 5.6). | |||
| Having the zones uniquely tagged with the <unique-N> label ensures | Having the zones uniquely tagged with the <unique-N> label ensures | |||
| that additional RRs can be added below the member node (see | that additional RRs can be added below the member node (see | |||
| Section 4.2). | Section 4.2). | |||
| The CLASS field of every RR in a catalog zone MUST be IN (1). The | The CLASS field of every RR in a catalog zone MUST be IN (1). The | |||
| skipping to change at page 5, line 48 ¶ | skipping to change at line 228 ¶ | |||
| 4.2. Properties | 4.2. Properties | |||
| Catalog zone information is stored in the form of "properties". | Catalog zone information is stored in the form of "properties". | |||
| Properties are identified by their name, which is used as an owner | 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 | 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 | underneath the catalog zone apex), with RR type(s) as appropriate for | |||
| the respective property. | the respective property. | |||
| Known properties with the correct RR type, but which are for some | Known properties that have the correct RR type but are for some | |||
| reason invalid (for example because of an impossible value or because | reason invalid (for example, because of an impossible value or | |||
| of an illegal number of RRs in the RRset), denote a broken catalog | because of an illegal number of RRs in the RRset) denote a broken | |||
| zone which MUST NOT be processed (see Section 5.1). | catalog zone, which MUST NOT be processed (see Section 5.1). | |||
| This document includes a set of initial properties which can be | This document includes a set of initial properties that can be | |||
| extended via the IANA registry defined and created in Section 8. | extended via the IANA registry defined and created in Section 8. | |||
| Some properties are defined at the global level; others are scoped to | Some properties are defined at the global level; others are scoped to | |||
| apply only to a specific member zone. This document defines a | apply only to a specific member zone. This document defines a | |||
| mandatory global property in Section 4.2.1. The "zones" label from | 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 | 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 | such in the IANA registry in Section 8. Member-specific properties | |||
| are described in Section 4.3. | are described in Section 4.3. | |||
| Implementers may store additional information in the catalog zone | Implementers may store additional information in the catalog zone | |||
| with Custom properties, see Section 4.4. The meaning of such custom | with custom properties; see Section 4.4. The meaning of such custom | |||
| properties is determined by the implementation in question. | properties is determined by the implementation in question. | |||
| 4.2.1. Schema Version (version property) | 4.2.1. Schema Version (version property) | |||
| The catalog zone schema version is specified by an integer value | The catalog zone schema version is specified by an integer value | |||
| embedded in a TXT RR named version.$CATZ. All catalog zones MUST | embedded in a TXT RR named version.$CATZ. All catalog zones MUST | |||
| have a TXT RRset named version.$CATZ with exactly one RR. | have a TXT RRset named version.$CATZ with exactly one RR. | |||
| Catalog consumers MUST NOT apply catalog zone processing to | Catalog consumers MUST NOT apply catalog zone processing to: | |||
| * zones without the version property | * zones without the version property | |||
| * zones with a version property with more than one RR in the RRset | * zones with a version property with more than one RR in the RRset | |||
| * zones with a version property without an expected value in the | * zones with a version property without an expected value in the | |||
| version.$CATZ TXT RR | version.$CATZ TXT RR | |||
| * zones with a version property with a schema version value which is | * zones with a version property with a schema version value that is | |||
| not implemented by the consumer (e.g. version "1") | not implemented by the consumer (e.g., version "1") | |||
| These conditions signify a broken catalog zone which MUST NOT be | These conditions signify a broken catalog zone, which MUST NOT be | |||
| processed (see Section 5.1). | processed (see Section 5.1). | |||
| For this memo, the value of the version.$CATZ TXT RR MUST be set to | For this memo, the value of the version.$CATZ TXT RR MUST be set to | |||
| "2", i.e.: | "2"; that is: | |||
| version.$CATZ 0 IN TXT "2" | version.$CATZ 0 IN TXT "2" | |||
| NB: Version 1 was used in a draft version of this memo and reflected | Note that Version 1 was used in an earlier draft version of this memo | |||
| the implementation first found in BIND 9.11. | and reflected the implementation first found in BIND 9.11. | |||
| 4.3. Member Zone Properties | 4.3. Member Zone Properties | |||
| Each member zone MAY have one or more additional properties, | Each member zone MAY have one or more additional properties that are | |||
| described in this chapter. The member properties described in this | described in this section. The member properties described in this | |||
| document are all optional and implementations MAY choose to implement | document are all optional, and implementations MAY choose to | |||
| all, some or none of them. Member zone properties are represented by | implement all, some, or none of them. Member zone properties are | |||
| RRsets below the corresponding member node. | represented by RRsets below the corresponding member node. | |||
| 4.3.1. Change of Ownership (coo property) | 4.3.1. Change of Ownership (coo property) | |||
| The coo property facilitates controlled migration of a member zone | The coo property facilitates controlled migration of a member zone | |||
| from one catalog to another. | from one catalog to another. | |||
| A Change Of Ownership is signaled by the coo property in the catalog | 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 | 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 | value of a PTR record in the relevant coo property in the old | |||
| catalog. For example if member "example.com." will migrate from | catalog. For example, if member "example.com." migrates from catalog | |||
| catalog zone $OLDCATZ to catalog zone $NEWCATZ, this appears in the | zone $OLDCATZ to catalog zone $NEWCATZ, this will appear in the | |||
| $OLDCATZ catalog zone as follows: | $OLDCATZ catalog zone as follows: | |||
| <unique-N>.zones.$OLDCATZ 0 IN PTR example.com. | <unique-N>.zones.$OLDCATZ 0 IN PTR example.com. | |||
| coo.<unique-N>.zones.$OLDCATZ 0 IN PTR $NEWCATZ | coo.<unique-N>.zones.$OLDCATZ 0 IN PTR $NEWCATZ | |||
| The PTR RRset MUST consist of a single PTR record. The presence of | 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 | more than one record in the RRset indicates a broken catalog zone, | |||
| which MUST NOT be processed (see Section 5.1). | which MUST NOT be processed (see Section 5.1). | |||
| When a consumer of a catalog zone $OLDCATZ receives an update which | 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 | 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 | _not_ migrate the member zone immediately. The migration has to wait | |||
| for an update of $NEWCATZ. in which the member zone is present. The | for an update of $NEWCATZ in which the member zone is present. | |||
| consumer MUST verify, before the actual migration, that coo property | Before the actual migration, the consumer MUST verify that the coo | |||
| pointing to $NEWCATZ is still present in $OLDCATZ. | property pointing to $NEWCATZ is still present in $OLDCATZ. | |||
| Unless the member node label (i.e., <unique-N>) for the member is the | 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 | 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 | 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 | allows for the zone-associated state to be taken over by the owner of | |||
| $NEWCATZ by default. To prevent the takeover of state, the owner of | $NEWCATZ by default. To prevent the takeover of the zone-associated | |||
| $OLDCATZ must remove this state by updating the associated properties | state, the owner of $OLDCATZ must remove this state by updating the | |||
| or by performing a zone state reset (see Section 5.6) before or | associated properties or by performing a zone state reset (see | |||
| simultaneous with adding the coo property. (see also Section 7) | 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 | The old owner may remove the member zone containing the coo property | |||
| from $OLDCATZ once it has been established that all its consumers | from $OLDCATZ once it has been established that all its consumers | |||
| have processed the Change of Ownership. | have processed the Change of Ownership. | |||
| 4.3.2. Groups (group property) | 4.3.2. Groups (group property) | |||
| With a group property, consumer(s) can be signaled to treat some | With a group property, a consumer(s) can be signaled to treat some | |||
| member zones within the catalog zone differently. | member zones within the catalog zone differently. | |||
| The consumer MAY apply different configuration options when | The consumer MAY apply different configuration options when | |||
| processing member zones, based on the value of the group property. A | 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 | group property value is stored as the entire RDATA of a TXT record | |||
| directly below the member node. The exact handling of the group | directly below the member node. The exact handling of the group | |||
| property value is left to the consumer's implementation and | property value is left to the consumer's implementation and | |||
| configuration. | configuration. | |||
| The producer MAY assign a group property to all, some, or none of the | 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 | member zones within a catalog zone. The producer MAY assign more | |||
| than one group property to one member zone. This will make it | than one group property to one member zone. This will make it | |||
| possible to transfer group information for different consumer | possible to transfer group information for different consumer | |||
| operators in a single catalog zone. Implementations MAY facilitate | operators in a single catalog zone. Implementations MAY facilitate | |||
| mapping of a specific group value to specific configuration | mapping of a specific group value to a specific configuration | |||
| configurable _on a per catalog zone basis_ to allow for producers | configurable _on a per catalog zone basis_ to allow for producers | |||
| that publish their catalog zone at multiple consumer operators. | that publish their catalog zone at multiple consumer operators. | |||
| Consumer operators SHOULD namespace their group values to reduce the | Consumer operators SHOULD namespace their group values to reduce the | |||
| risk of having to resolve clashes. | risk of having to resolve clashes. | |||
| The consumer MUST ignore group values it does not understand. When a | The consumer MUST ignore group values it does not understand. When a | |||
| consumer encounters multiple group values for a single member zone, | 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 | it MAY choose to process all, some, or none of them. This is left to | |||
| the implementation. | the implementation. | |||
| 4.3.2.1. Example | 4.3.2.1. Example | |||
| Group properties are represented by TXT resource records. The record | group properties are represented by TXT RRs. The record content has | |||
| content has no pre-defined meaning. Their interpretation is purely a | no pre-defined meaning. Their interpretation is purely a matter of | |||
| matter of agreement between the producer and the consumer(s) of the | agreement between the producer and the consumer(s) of the catalog. | |||
| catalog. | ||||
| For example, the "foo" group could be agreed to indicate that a zone | For example, the "foo" group could be agreed to indicate that a zone | |||
| not be signed with DNSSEC. Conversely, an agreement could define | not be signed with DNSSEC. Conversely, an agreement could define | |||
| that group names starting with "operator-" indicate in which way a | that group names starting with "operator-" indicate in which way a | |||
| given DNS operator should set up certain aspects of the member zone's | given DNS operator should set up certain aspects of the member zone's | |||
| DNSSEC configuration. | DNSSEC configuration. | |||
| Assuming that the catalog producer and consumer(s) have established | Assuming that the catalog producer and consumer(s) have established | |||
| such agreements, consider the following catalog zone (snippet) which | such agreements, consider the following catalog zone (snippet) that | |||
| signals to consumer(s) how to treat DNSSEC for the zones | signals to a consumer(s) how to treat DNSSEC for the zones | |||
| "example.net." and "example.com.": | "example.net." and "example.com.": | |||
| <unique-1>.zones.$CATZ 0 IN PTR example.com. | <unique-1>.zones.$CATZ 0 IN PTR example.com. | |||
| group.<unique-1>.zones.$CATZ 0 IN TXT "foo" | group.<unique-1>.zones.$CATZ 0 IN TXT "foo" | |||
| <unique-2>.zones.$CATZ 0 IN PTR example.net. | <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-x-foo" | |||
| group.<unique-2>.zones.$CATZ 0 IN TXT "operator-y" "bar" | group.<unique-2>.zones.$CATZ 0 IN TXT "operator-y" "bar" | |||
| In this scenario, consumer(s) shall, by agreement, not sign the | In this scenario, a consumer(s) shall, by agreement, not sign the | |||
| member zone "example.com." with DNSSEC. For "example.net.", the | member zone "example.com." with DNSSEC. For "example.net.", the | |||
| consumers, at two different operators, will configure the member zone | consumers, at two different operators, will configure the member zone | |||
| to be signed with a specific combination of settings. The group | to be signed with a specific combination of settings. The group | |||
| value that indicates that depends on what has been agreed with each | value designated to indicate this combination of settings is | |||
| operator ("operator-x-foo" vs. "operator-y" "bar"). | prearranged with each operator ("operator-x-foo" vs. "operator-y" | |||
| "bar"). | ||||
| 4.4. Custom Properties (*.ext properties) | 4.4. Custom Properties (*.ext properties) | |||
| Implementations and operators of catalog zones may choose to provide | Implementations and operators of catalog zones may choose to provide | |||
| their own properties. Custom properties can occur both globally, or | their own properties. Custom properties can occur globally or for a | |||
| for a specific member zone. To prevent a name clash with future | specific member zone. To prevent a name clash with future | |||
| properties, such properties MUST be represented below the label | properties, such properties MUST be represented below the label | |||
| "ext". | "ext". | |||
| "ext" is not a placeholder. A custom property is named as follows: | "ext" is not a placeholder. A custom property is named as follows: | |||
| ; a global custom property: | ; a global custom property: | |||
| <property-prefix>.ext.$CATZ | <property-prefix>.ext.$CATZ | |||
| ; a member zone custom property: | ; a member zone custom property: | |||
| <property-prefix>.ext.<unique-N>.zones.$CATZ | <property-prefix>.ext.<unique-N>.zones.$CATZ | |||
| <property-prefix> may consist of one or more labels. | <property-prefix> may consist of one or more labels. | |||
| Implementations SHOULD namespace their custom properties to limit | Implementations SHOULD namespace their custom properties to limit | |||
| risk of clashes with other implementations of catalog zones. This | risk of clashes with other implementations of catalog zones. This | |||
| can be achieved by using two labels as the <property-prefix>, so that | can be achieved by using two labels as the <property-prefix> so that | |||
| the name of the implementation is included in the prefix: <some- | the name of the implementation is included in the prefix: <some- | |||
| setting>.<implementation-name>.ext.$CATZ. | setting>.<implementation-name>.ext.$CATZ. | |||
| Implementations MAY use such properties on the member zone level to | Implementations MAY use such properties on the member zone level to | |||
| store additional information about member zones, for example to flag | store additional information about member zones (e.g., to flag them | |||
| them for specific treatment. | for specific treatment). | |||
| Further, implementations MAY use custom properties on the global | Further, implementations MAY use custom properties on the global | |||
| level to store additional information about the catalog zone itself. | level to store additional information about the catalog zone itself. | |||
| While there may be many use cases for this, a plausible one is to | 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 | store default values for custom properties on the global level, then | |||
| overriding them using a property of the same name on the member level | 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 | (= under the ext label of the member node) if so desired. A property | |||
| agreement between producer and consumer should clearly define what | agreement between producer and consumer should clearly define what | |||
| semantics apply, and whether a property is global, member, or both. | semantics apply and whether a property is global, member, or both. | |||
| The meaning of the custom properties described in this section is | The meaning of the custom properties described in this section is | |||
| determined by the implementation alone, without expectation of | determined by the implementation alone without expectation of | |||
| interoperability. | interoperability. | |||
| 5. Nameserver Behavior | 5. Name Server Behavior | |||
| 5.1. General Requirements | 5.1. General Requirements | |||
| As it is a regular DNS zone, a catalog zone can be transferred using | As it is a regular DNS zone, a catalog zone can be transferred using | |||
| DNS zone transfers among nameservers. | DNS zone transfers among name servers. | |||
| Catalog updates should be automatic, i.e., when a nameserver that | Catalog updates should be automatic; i.e., when a name server that | |||
| supports catalog zones completes a zone transfer for a catalog zone, | supports catalog zones completes a zone transfer for a catalog zone, | |||
| it SHOULD apply changes to the catalog within the running nameserver | it SHOULD apply changes to the catalog within the running name server | |||
| automatically without any manual intervention. | automatically without any manual intervention. | |||
| Nameservers MAY allow loading and transfer of broken zones with | Name servers MAY allow loading and transfer of broken zones with | |||
| incorrect catalog zone syntax (as they are treated as regular zones). | incorrect catalog zone syntax (as they are treated as regular zones). | |||
| The reason a catalog zone is considered broken SHOULD be communicated | The reason a catalog zone is considered broken SHOULD be communicated | |||
| clearly to the operator (e.g. through a log message). | clearly to the operator (e.g., through a log message). | |||
| When a previously correct catalog zone becomes a broken catalog zone, | When a previously correct catalog zone becomes a broken catalog zone, | |||
| because of an update through an incremental transfer or otherwise, it | it loses its catalog meaning because of an update through an | |||
| loses its catalog meaning. No special processing occurs. Member | incremental transfer or otherwise. No special processing occurs. | |||
| zones previously configured by this catalog MUST NOT be removed or | Member zones previously configured by this catalog MUST NOT be | |||
| reconfigured in any way. | removed or reconfigured in any way. | |||
| If a name server restarts with a broken catalog zone, the broken | If a name server restarts with a broken catalog zone, the broken | |||
| catalog SHOULD NOT prevent the name server from starting up and | catalog SHOULD NOT prevent the name server from starting up and | |||
| serving the member zones in the last valid version of the catalog | serving the member zones in the last valid version of the catalog | |||
| zone. | zone. | |||
| Processing of a broken catalog SHALL start (or resume) when the | Processing of a broken catalog SHALL start (or resume) when the | |||
| catalog turns into a correct catalog zone, for example by an | catalog turns into a correct catalog zone, e.g., by an additional | |||
| additional update (through zone transfer or updates) fixing the | update (through zone transfer or updates) fixing the catalog zone. | |||
| catalog zone. | ||||
| Similarly, when a catalog zone expires, it loses its catalog meaning | Similarly, when a catalog zone expires, it loses its catalog meaning | |||
| and MUST no longer be processed as such. No special processing | and MUST no longer be processed as such. No special processing | |||
| occurs until the zone becomes fresh again. | occurs until the zone becomes fresh again. | |||
| 5.2. Member zone name clash | 5.2. Member Zone Name Clash | |||
| If there is a clash between an existing zone's name (either from an | If there is a clash between an existing zone's name (from either an | |||
| existing member zone or otherwise configured zone) and an incoming | existing member zone or an otherwise configured zone) and an incoming | |||
| member zone's name (via transfer or update), the new instance of the | member zone's name (via transfer or update), the new instance of the | |||
| zone MUST be ignored and an error SHOULD be logged. | zone MUST be ignored and an error SHOULD be logged. | |||
| A clash between an existing member zone's name and an incoming member | A clash between an existing member zone's name and an incoming member | |||
| zone's name (via transfer or update), may be an attempt to migrate a | zone's name (via transfer or update) may be an attempt to migrate a | |||
| zone to a different catalog, but should not be treated as one except | zone to a different catalog, but it should not be treated as one | |||
| as described in Section 4.3.1. | except as described in Section 4.3.1. | |||
| 5.3. Member zone removal | 5.3. Member Zone Removal | |||
| When a member zone is removed from a specific catalog zone, a | When a member zone is removed from a specific catalog zone, a | |||
| consumer MUST NOT remove the zone and associated state data if the | consumer MUST NOT remove the zone and associated state data if the | |||
| zone was not configured from that specific catalog zone. Only when | zone was not configured from that specific catalog zone. The zone | |||
| the zone was configured from a specific catalog zone, and the zone is | and associated state (such as zone data and DNSSEC keys) MUST be | |||
| removed as a member from that specific catalog zone, the zone and | removed from the consumer when and only when the zone was configured | |||
| associated state (such as zone data and DNSSEC keys) MUST be removed | initially from the same catalog. Consumer operators may consider | |||
| from the consumer. Consumer operators may consider to temporarily | temporarily archiving associated state to facilitate mistake | |||
| archive associated state to facilitate mistake recovery. | recovery. | |||
| 5.4. Member node name change | 5.4. Member Node Name Change | |||
| When via a single update or transfer, the member node's label value | When the member node's label value (<unique-N>) changes via a single | |||
| (<unique-N>) changes, catalog consumers MUST process this as a member | update or transfer, catalog consumers MUST process this as a member | |||
| zone removal including all the zone's associated state (as described | zone removal, including the removal of all the zone's associated | |||
| in Section 5.3), immediately followed by processing the member as a | state (as described in Section 5.3), and then immediately process the | |||
| newly to be configured zone in the same catalog. | member as a newly added zone to be configured in the same catalog. | |||
| 5.5. Migrating member zones between catalogs | 5.5. Migrating Member Zones between Catalogs | |||
| If all consumers of the catalog zones involved support the coo | If all consumers of the catalog zones involved support the coo | |||
| property, it is RECOMMENDED to perform migration of a member zone by | property, it is RECOMMENDED to perform migration of a member zone by | |||
| following the procedure described in Section 4.3.1. Otherwise, a | following the procedure described in Section 4.3.1. Otherwise, the | |||
| migration of a member zone from a catalog zone $OLDCATZ to a catalog | migration of a member zone from a catalog zone $OLDCATZ to a catalog | |||
| zone $NEWCATZ has to be done by: first removing the member zone from | zone $NEWCATZ has to be done by first removing the member zone from | |||
| $OLDCATZ; second adding the member zone to $NEWCATZ. | $OLDCATZ and then adding the member zone to $NEWCATZ. | |||
| If in the process of a migration some consumers of the involved | If in the process of a migration some consumers of the involved | |||
| catalog zones did not catch the removal of the member zone from | catalog zones did not catch the removal of the member zone from | |||
| $OLDCATZ yet (because of a lost packet or downtime or otherwise), but | $OLDCATZ yet (because of a lost packet or downtime or otherwise) but | |||
| did already see the update of $NEWCATZ, they may consider the update | already saw the update of $NEWCATZ containing the addition of that | |||
| adding the member zone in $NEWCATZ to be a name clash (see | member zone, they may consider this update to be a name clash (see | |||
| Section 5.2) and as a consequence the member is not migrated to | Section 5.2) and, as a consequence, the member is not migrated to | |||
| $NEWCATZ. This possibility needs to be anticipated with a member | $NEWCATZ. This possibility needs to be anticipated with a member | |||
| zone migration. Recovery from such a situation is out of the scope | zone migration. Recovery from such a situation is out of the scope | |||
| of this document. It may for example entail a manually forced | of this document. For example, it may entail a manually forced | |||
| retransfer of $NEWCATZ to consumers after they have been detected to | retransfer of $NEWCATZ to consumers after they have been detected to | |||
| have received and processed the removal of the member zone from | have received and processed the removal of the member zone from | |||
| $OLDCATZ. | $OLDCATZ. | |||
| 5.6. Zone-associated state reset | 5.6. Zone-Associated State Reset | |||
| It may be desirable to reset state (such as zone data and DNSSEC | It may be desirable to reset state (such as zone data and DNSSEC | |||
| keys) associated with a member zone. | keys) associated with a member zone. | |||
| A zone state reset may be performed by a change of the member node's | A zone state reset may be performed by a change of the member node's | |||
| name (see Section 5.4). | name (see Section 5.4). | |||
| 6. Implementation and Operational Notes | 6. Implementation and Operational Notes | |||
| Although any valid domain name can be used for the catalog name | Although any valid domain name can be used for the catalog name | |||
| $CATZ, a catalog producer MUST NOT use names that are not under the | $CATZ, a catalog producer MUST NOT use names that are not under the | |||
| control of the catalog producer (with the exception of reserved | control of the catalog producer (with the exception of reserved | |||
| names). It is RECOMMENDED to use either a domain name owned by the | names). It is RECOMMENDED to use either a domain name owned by the | |||
| catalog producer, or to use a name under a suitable name such as | catalog producer or a domain name under a suitable name such as | |||
| "invalid." [RFC6761]. | "invalid." [RFC6761]. | |||
| Catalog zones on secondary nameservers would have to be set up | Catalog zones on secondary name servers would have to be set up | |||
| manually, perhaps as static configuration, similar to how ordinary | manually, perhaps as static configuration, similar to how ordinary | |||
| DNS zones are configured when catalog zones or another automatic | DNS zones are configured when catalog zones or another automatic | |||
| configuration mechanism are not in place. The secondary additionally | configuration mechanism are not in place. Additionally, the | |||
| needs to be configured as a catalog consumer for the catalog zone to | secondary needs to be configured as a catalog consumer for the | |||
| enable processing of the member zones in the catalog, such as | catalog zone to enable processing of the member zones in the catalog, | |||
| automatic synchronization of the member zones for secondary service. | such as automatic synchronization of the member zones for secondary | |||
| service. | ||||
| Operators of catalog consumers should note that secondary name | Operators of catalog consumers should note that secondary name | |||
| servers may receive DNS NOTIFY messages [RFC1996] for zones before | servers may receive DNS NOTIFY messages [RFC1996] for zones before | |||
| they are seen as newly added member zones to the catalog from which | they are seen as newly added member zones to the catalog from which | |||
| that secondary is provisioned. | that secondary is provisioned. | |||
| Although they are regular DNS zones, catalog zones contain only | Although they are regular DNS zones, catalog zones only contain | |||
| information for the management of a set of authoritative nameservers. | information for the management of a set of authoritative name | |||
| To prevent unintended exposure to other parties, operators SHOULD | servers. To prevent unintended exposure to other parties, operators | |||
| limit the systems able to query these zones. | SHOULD limit the systems able to query these zones. | |||
| Querying/serving catalog zone contents may be inconvenient via DNS | Querying/serving catalog zone contents may be inconvenient via DNS | |||
| due to the nature of their representation. An administrator may | due to the nature of their representation. Therefore, an | |||
| therefore want to use a different method for looking at data inside | administrator may want to use a different method for looking at data | |||
| the catalog zone. Typical queries might include dumping the list of | inside the catalog zone. Typical queries might include dumping the | |||
| member zones, dumping a member zone's effective configuration, | list of member zones, dumping a member zone's effective | |||
| querying a specific property value of a member zone, etc. Because of | configuration, querying a specific property value of a member zone, | |||
| the structure of catalog zones, it may not be possible to perform | etc. Because of the structure of catalog zones, it may not be | |||
| these queries intuitively, or in some cases, at all, using DNS QUERY. | possible to perform these queries intuitively, or in some cases at | |||
| For example, it is not possible to enumerate the contents of a | all, using DNS QUERY. For example, it is not possible to enumerate | |||
| multivalued property (such as the list of member zones) with a single | the contents of a multivalued property (such as the list of member | |||
| QUERY. Implementations are therefore advised to provide a tool that | zones) with a single QUERY. Implementations are therefore advised to | |||
| uses either the output of AXFR or an out-of-band method to perform | provide a tool that uses either the output of AXFR or an out-of-band | |||
| queries on catalog zones. | method to perform queries on catalog zones. | |||
| Great power comes with great responsibility: Catalog zones simplify | Great power comes with great responsibility. Catalog zones simplify | |||
| zone provisioning by orchestrating zones on secondary name servers | zone provisioning by orchestrating zones on secondary name servers | |||
| from a single data source - the catalog. Hence, the catalog producer | from a single data source: the catalog. Hence, the catalog producer | |||
| has great power and changes must be treated carefully. For example | has great power and changes must be treated carefully. For example, | |||
| if the catalog is generated by some script and this script for | if the catalog is generated by some script and this script generates | |||
| whatever reason generates an empty catalog, millions of member zones | an empty catalog, millions of member zones may get deleted from their | |||
| may get deleted from their secondaries within seconds and all the | secondaries within seconds, and all the affected domains may be | |||
| affected domains may be offline in a blink of an eye. | offline in a blink of an eye. | |||
| 7. Security Considerations | 7. Security Considerations | |||
| As catalog zones are transmitted using DNS zone transfers, it is | As catalog zones are transmitted using DNS zone transfers, it is | |||
| RECOMMENDED that catalog zone transfers are protected from unexpected | RECOMMENDED that catalog zone transfers be protected from unexpected | |||
| modifications by way of authentication, for example by using TSIG | modifications by way of authentication, e.g., by using a Transaction | |||
| [RFC8945], or Strict or Mutual TLS authentication with DNS Zone | Signature (TSIG) [RFC8945] or Strict or Mutual TLS authentication | |||
| transfer over TLS or QUIC [RFC9103]. | with DNS zone transfer over TLS or QUIC [RFC9103]. | |||
| Use of DNS UPDATE [RFC2136] to modify the content of catalog zones | Use of DNS UPDATE [RFC2136] to modify the content of catalog zones | |||
| SHOULD similarly be authenticated. | SHOULD similarly be authenticated. | |||
| Zone transfers of member zones SHOULD similarly be authenticated. | Zone transfers of member zones SHOULD similarly be authenticated. | |||
| TSIG shared secrets used for member zones SHOULD NOT be mentioned in | TSIG shared secrets used for member zones SHOULD NOT be mentioned in | |||
| the catalog zone data. However, key identifiers may be shared within | the catalog zone data. However, key identifiers may be shared within | |||
| catalog zones. | catalog zones. | |||
| Catalog zones reveal the zones served by their consumers, including | Catalog zones reveal the zones served by their consumers, including | |||
| their properties. To prevent unintentional exposure of catalog zone | their properties. To prevent unintentional exposure of catalog zone | |||
| contents, it is RECOMMENDED to limit the systems able to query them | contents, it is RECOMMENDED to limit the systems able to query them | |||
| and to conduct catalog zone transfers confidentially [RFC9103]. | and to conduct catalog zone transfers confidentially [RFC9103]. | |||
| As with regular zones, primary and secondary nameservers for a | As with regular zones, primary and secondary name servers for a | |||
| catalog zone may be operated by different administrators. The | catalog zone may be operated by different administrators. The | |||
| secondary nameservers may be configured as a catalog consumer to | secondary name servers may be configured as a catalog consumer to | |||
| synchronize catalog zones from the primary, but the primary's | synchronize catalog zones from the primary, but the primary's | |||
| administrators may not have any administrative access to the | administrators may not have any administrative access to the | |||
| secondaries. | secondaries. | |||
| Administrative control over what zones are served from the configured | Administrative control over what zones are served from the configured | |||
| name servers shifts completely from the server operator (consumer) to | name servers shifts completely from the server operator (consumer) to | |||
| the "owner" (producer) of the catalog zone content. To prevent | the "owner" (producer) of the catalog zone content. To prevent | |||
| unintended provisioning of zones, consumer(s) SHOULD scope the set of | unintended provisioning of zones, a consumer(s) SHOULD scope the set | |||
| admissible member zones by any means deemed suitable (such as | of admissible member zones by any means deemed suitable (such as | |||
| statically, via regular expressions, or dynamically, by verifying | statically via regular expressions, or dynamically by verifying | |||
| against another database before accepting a member zone). | against another database before accepting a member zone). | |||
| With migration of member zones between catalogs using the coo | With migration of member zones between catalogs using the coo | |||
| property, it is possible for the owner of the target catalog (i.e., | property, it is possible for the owner of the target catalog (i.e., | |||
| $NEWCATZ) to take over all its associated state with the zone from | $NEWCATZ) to take over all its associated state with the zone from | |||
| the original owner (i.e., $OLDCATZ) by maintaining the same member | the original owner (i.e., $OLDCATZ) by maintaining the same member | |||
| node label (i.e., <unique-N>). To prevent the takeover of the zone | node label (i.e., <unique-N>). To prevent the takeover of the zone- | |||
| associated state, the original owner has to enforce a zone state | associated state, the original owner has to enforce a zone state | |||
| reset by changing the member node label (see Section 5.6) before or | reset by changing the member node label (see Section 5.6) before or | |||
| simultaneously with adding the coo property. | simultaneously with adding the coo property. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| IANA is requested to create a registry on the "Domain Name System | IANA has created the "DNS Catalog Zones Properties" registry under | |||
| (DNS) Parameters" IANA web page as follows: | the "Domain Name System (DNS) Parameters" registry as follows: | |||
| Registry Name: DNS Catalog Zones Properties | Registry Name: DNS Catalog Zones Properties | |||
| Assignment Policy: Expert Review, except for property prefixes | Assignment Policy: Expert Review, except for property prefixes | |||
| ending in the label "ext", which are for Private Use. | ending in the label "ext", which are for Private Use [RFC8126]. | |||
| Reference: [this document] | Reference: RFC 9432 | |||
| Note: This registry does not apply to Catalog Zones version "1", but | Note: This registry applies to Catalog Zones schema version "2" as | |||
| applies to Catalog Zones version "2" as specified in [this | specified in RFC 9432. | |||
| document]. | ||||
| +=================+======================+===========+===========+ | +=================+======================+===========+===========+ | |||
| | Property prefix | Description | Status | Reference | | | Property Prefix | Description | Status | Reference | | |||
| +=================+======================+===========+===========+ | +=================+======================+===========+===========+ | |||
| | zones | List of member zones | Standards | [this | | | zones | List of member zones | Standards | RFC 9432 | | |||
| | | | Track | document] | | | | | Track | | | |||
| +-----------------+----------------------+-----------+-----------+ | +-----------------+----------------------+-----------+-----------+ | |||
| | version | Schema version | Standards | [this | | | version | Schema version | Standards | RFC 9432 | | |||
| | | | Track | document] | | | | | Track | | | |||
| +-----------------+----------------------+-----------+-----------+ | +-----------------+----------------------+-----------+-----------+ | |||
| | coo | Change of Ownership | Standards | [this | | | coo | Change of Ownership | Standards | RFC 9432 | | |||
| | | | Track | document] | | | | | Track | | | |||
| +-----------------+----------------------+-----------+-----------+ | +-----------------+----------------------+-----------+-----------+ | |||
| | group | Group | Standards | [this | | | group | Group | Standards | RFC 9432 | | |||
| | | | Track | document] | | | | | Track | | | |||
| +-----------------+----------------------+-----------+-----------+ | +-----------------+----------------------+-----------+-----------+ | |||
| | *.ext | Custom properties | Private | [this | | | *.ext | Custom properties | Private | RFC 9432 | | |||
| | | | Use | document] | | | | | Use | | | |||
| +-----------------+----------------------+-----------+-----------+ | +-----------------+----------------------+-----------+-----------+ | |||
| Table 1 | Table 1: DNS Catalog Zones Properties Registry | |||
| The meanings of the fields are as follows: | The meanings of the fields are as follows: | |||
| Property prefix: One or more domain name labels | Property prefix: One or more domain name labels. | |||
| Description: A human readable short description or name for the | Description: A human-readable short description or name for the | |||
| property | property. | |||
| Status: IETF Document status or "External" if not documented in an | Status: IETF Stream RFC status or "External" if not documented in an | |||
| IETF document. | IETF Stream RFC. | |||
| Reference: A stable reference to the document in which this property | Reference: A stable reference to the document in which this property | |||
| is defined. | is defined. | |||
| 9. Acknowledgements | 9. References | |||
| Our deepest thanks and appreciation go to Stephen Morris, Ray Bellis | ||||
| and Witold Krecicki who initiated this draft and did the bulk of the | ||||
| work. | ||||
| Catalog zones originated as the chosen method among various proposals | ||||
| that were evaluated at ISC for easy zone management. The chosen | ||||
| method of storing the catalog as a regular DNS zone was proposed by | ||||
| Stephen Morris. | ||||
| The initial authors discovered that Paul Vixie's earlier [Metazones] | ||||
| proposal implemented a similar approach and reviewed it. Catalog | ||||
| zones borrow some syntax ideas from Metazones, as both share this | ||||
| scheme of representing the catalog as a regular DNS zone. | ||||
| Thanks to Leo Vandewoestijne. Leo's presentation in the DNS devroom | ||||
| at the FOSDEM'20 [FOSDEM20] was one of the motivations to take up and | ||||
| continue the effort of standardizing catalog zones. | ||||
| Thanks to Joe Abley, David Blacka, Brian Conry, Klaus Darilion, Brian | ||||
| Dickson, Tony Finch, Evan Hunt, Shane Kerr, Warren Kumari, Patrik | ||||
| Lundin, Matthijs Mekking, Victoria Risk, Josh Soref, Petr Spacek, | ||||
| Michael StJohns, Carsten Strotmann and Tim Wicinski for reviewing | ||||
| draft proposals and offering comments and suggestions. | ||||
| 10. Normative References | 9.1. Normative References | |||
| [RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
| specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
| November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
| [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | |||
| DOI 10.17487/RFC1982, August 1996, | DOI 10.17487/RFC1982, August 1996, | |||
| <https://www.rfc-editor.org/info/rfc1982>. | <https://www.rfc-editor.org/info/rfc1982>. | |||
| [RFC1996] Vixie, P., "A Mechanism for Prompt Notification of Zone | [RFC1996] Vixie, P., "A Mechanism for Prompt Notification of Zone | |||
| skipping to change at page 17, line 24 ¶ | skipping to change at line 718 ¶ | |||
| Gudmundsson, O., and B. Wellington, "Secret Key | Gudmundsson, O., and B. Wellington, "Secret Key | |||
| Transaction Authentication for DNS (TSIG)", STD 93, | Transaction Authentication for DNS (TSIG)", STD 93, | |||
| RFC 8945, DOI 10.17487/RFC8945, November 2020, | RFC 8945, DOI 10.17487/RFC8945, November 2020, | |||
| <https://www.rfc-editor.org/info/rfc8945>. | <https://www.rfc-editor.org/info/rfc8945>. | |||
| [RFC9103] Toorop, W., Dickinson, S., Sahib, S., Aras, P., and A. | [RFC9103] Toorop, W., Dickinson, S., Sahib, S., Aras, P., and A. | |||
| Mankin, "DNS Zone Transfer over TLS", RFC 9103, | Mankin, "DNS Zone Transfer over TLS", RFC 9103, | |||
| DOI 10.17487/RFC9103, August 2021, | DOI 10.17487/RFC9103, August 2021, | |||
| <https://www.rfc-editor.org/info/rfc9103>. | <https://www.rfc-editor.org/info/rfc9103>. | |||
| 11. Informative References | 9.2. Informative References | |||
| [FOSDEM20] Vandewoestijne, L., "Extending Catalog zones - another | [FOSDEM20] Vandewoestijne, L., "Extending Catalog zones - another | |||
| approach in automating maintenance", 2020, | approach in automating maintenance", February 2020, | |||
| <https://archive.fosdem.org/2020/schedule/event/ | <https://archive.fosdem.org/2020/schedule/event/ | |||
| dns_catz/>. | dns_catz/>. | |||
| [Metazones] | [Metazones] | |||
| Vixie, P., "Federated Domain Name Service Using DNS | Vixie, P., "Federated Domain Name Service Using DNS | |||
| Metazones", 2005, | Metazones", DOI 10.1093/ietcom/e89-b.4.1144, April 2006, | |||
| <http://family.redbarn.org/~vixie/mz.pdf>. | <https://www.semanticscholar.org/paper/Federated-Domain- | |||
| Name-Service-Using-DNS-Metazones-Vixie/ | ||||
| dc12b0116332f5c236b05c71bbe20499f3c6c4b6>. | ||||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
| Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8126>. | ||||
| Appendix A. Catalog Zone Example | Appendix A. Catalog Zone Example | |||
| The following is a full example of a catalog zone containing three | The following is a full example of a catalog zone containing three | |||
| member zones with various properties: | member zones with various properties: | |||
| catalog.invalid. 0 SOA invalid. ( | catalog.invalid. 0 SOA invalid. ( | |||
| invalid. 1625079950 3600 600 2147483646 0 ) | invalid. 1625079950 3600 600 2147483646 0 ) | |||
| catalog.invalid. 0 NS invalid. | catalog.invalid. 0 NS invalid. | |||
| example.vendor.ext.catalog.invalid. 0 CNAME example.net. | example.vendor.ext.catalog.invalid. 0 CNAME example.net. | |||
| skipping to change at page 18, line 22 ¶ | skipping to change at line 759 ¶ | |||
| group.nvxxezj.zones.catalog.invalid. 0 TXT ( | group.nvxxezj.zones.catalog.invalid. 0 TXT ( | |||
| "operator-x-foo" ) | "operator-x-foo" ) | |||
| nfwxa33.zones.catalog.invalid. 0 PTR example.org. | nfwxa33.zones.catalog.invalid. 0 PTR example.org. | |||
| coo.nfwxa33.zones.catalog.invalid. 0 PTR ( | coo.nfwxa33.zones.catalog.invalid. 0 PTR ( | |||
| newcatz.invalid. ) | newcatz.invalid. ) | |||
| group.nfwxa33.zones.catalog.invalid. 0 TXT ( | group.nfwxa33.zones.catalog.invalid. 0 TXT ( | |||
| "operator-y-bar" ) | "operator-y-bar" ) | |||
| metrics.vendor.ext.nfwxa33.zones.catalog.invalid. 0 CNAME ( | metrics.vendor.ext.nfwxa33.zones.catalog.invalid. 0 CNAME ( | |||
| collector.example.net. ) | collector.example.net. ) | |||
| Appendix B. Implementation Status | Acknowledgements | |||
| *Note to the RFC Editor*: please remove this entire appendix before | ||||
| publication. | ||||
| In the following implementation status descriptions, "DNS Catalog | ||||
| Zones" refers to DNS Catalog Zones version 2 as described in this | ||||
| document. Version 1 of catalog zones was initially developed by ISC | ||||
| for BIND, but never standardized in the IETF. Support for version 1 | ||||
| catalog zones is explicitly mentioned per implementation. Support | ||||
| for the coo and group properties are also explicitly mentioned per | ||||
| implementation. | ||||
| * Knot DNS 3.1 (released August 2, 2021) supports both producing and | ||||
| consuming of catalog zones, including the group property. | ||||
| * PowerDNS from version 4.7 (released October 3, 2022) supports both | ||||
| producing and consuming of catalog zones version 2 and consuming | ||||
| of catalog zones version 1. PowerDNS does support the coo | ||||
| property, and the group property on the producing side. | ||||
| * Proof of concept python scripts (https://github.com/IETF- | ||||
| Hackathon/NSDCatZ) that can be used for both generating and | ||||
| consuming DNS Catalog Zones with NSD have been developed during | ||||
| the hackathon at the IETF-109. | ||||
| * BIND 9.18.3+ supports version 2 catalog zones as described in this | ||||
| document including the coo property, as well as version 1 catalog | ||||
| zones. | ||||
| Interoperability between the above implementations has been tested | ||||
| during the hackathon at the IETF-109. | ||||
| Appendix C. Change History | ||||
| *Note to the RFC Editor*: please remove this entire appendix before | ||||
| publication. | ||||
| * draft-muks-dnsop-dns-catalog-zones-00 | ||||
| | Initial public draft. | ||||
| * draft-muks-dnsop-dns-catalog-zones-01 | ||||
| | Added Witold, Ray as authors. Fixed typos, consistency issues. | ||||
| | Fixed references. Updated Area. Removed newly introduced custom | ||||
| | RR TYPEs. Changed schema version to 1. Changed TSIG requirement | ||||
| | from MUST to SHOULD. Removed restrictive language about use of | ||||
| | DNS QUERY. When zones are introduced into a catalog zone, a | ||||
| | primary SHOULD first make the new zones available for transfers | ||||
| | first (instead of MUST). Updated examples, esp. use IPv6 in | ||||
| | examples per Fred Baker. Add catalog zone example. | ||||
| * draft-muks-dnsop-dns-catalog-zones-02 | ||||
| | Addressed some review comments by Patrik Lundin. | ||||
| * draft-muks-dnsop-dns-catalog-zones-03 | ||||
| | Revision bump. | ||||
| * draft-muks-dnsop-dns-catalog-zones-04 | ||||
| | Reordering of sections into more logical order. Separation of | ||||
| | multi-valued properties into their own category. | ||||
| * draft-toorop-dnsop-dns-catalog-zones-00 | ||||
| | New authors to pickup the editor pen on this draft | ||||
| | | ||||
| | Remove data type definitions for zone properties Removing | ||||
| | configuration of member zones through zone properties altogether | ||||
| | | ||||
| | Remove Open issues and discussion Appendix, which was about zone | ||||
| | options (including primary/secondary relationships) only. | ||||
| * draft-toorop-dnsop-dns-catalog-zones-01 | ||||
| | Added a new section "The Serial Property", introducing a new | ||||
| | mechanism which can help with disseminating zones from the primary | ||||
| | to the secondary nameservers in a timely fashion more reliably. | ||||
| | | ||||
| | Three different ways to provide a "serial" property with a member | ||||
| | zone are offered to or the workgroup for discussion. | ||||
| | | ||||
| | Added a new section "Implementation Status", listing production | ||||
| | ready, upcoming and Proof of Concept implementations, and | ||||
| | reporting on interoperability of the different implementations. | ||||
| * draft-toorop-dnsop-dns-catalog-zones-02 | ||||
| | Adding the coo property for zone migration in a controlled fashion | ||||
| | | ||||
| | Adding the group property for reconfigure settings of member zones | ||||
| | in an atomic update | ||||
| | | ||||
| | Adding the epoch property to reset zone associated state in a | ||||
| | controlled fashion | ||||
| * draft-toorop-dnsop-dns-catalog-zones-03 | ||||
| | Big cleanup! | ||||
| | | ||||
| | Introducing the terms catalog consumer and catalog producer | ||||
| | | ||||
| | Reorganized topics to create a more coherent whole | ||||
| | | ||||
| | Properties all have consistent format now | ||||
| | | ||||
| | Try to assume the least possible from implementations w.r.t.: | ||||
| | | ||||
| | 1) Predictability of the <unique-N> IDs of member zones | ||||
| | | ||||
| | 2) Whether or not fallback catalog zones can be found for a member | ||||
| | | ||||
| | 3) Whether or not a catalog consumer can maintain state | ||||
| * draft-toorop-dnsop-dns-catalog-zones-04 | ||||
| | Move Implementation status to appendix | ||||
| | | ||||
| | Miscellaneous textual improvements | ||||
| | | ||||
| | coo property points to $NEWCATZ (and not zones.$NEWCATZ) | ||||
| | | ||||
| | Remove suggestion to increase serial and remove member zone from | ||||
| | $OLDCATZ after migration | ||||
| | | ||||
| | More consistent usage of the terms catalog consumer and catalog | ||||
| | producer throughout the document | ||||
| | | ||||
| | Better (safer) description of resetting refresh timers of member | ||||
| | zones with the serial property | ||||
| | | ||||
| | Removing a member MUST remove zone associated state | ||||
| | | ||||
| | Make authentication requirements a bit less prescriptive in | ||||
| | security considerations | ||||
| | | ||||
| | Updated implementation status for KnotDNS | ||||
| | | ||||
| | Describe member node name changes and update "Zone associated | ||||
| | state reset" to use that as the mechanism for it. | ||||
| | | ||||
| | Add Peter Thomassen as co-author | ||||
| | | ||||
| | Complete removal of the epoch property. We consider consumer | ||||
| | optimizations with predictable member node labels (for example | ||||
| | based on a hash) out of the scope of this document. | ||||
| | | ||||
| | Miscellaneous editorial improvements | ||||
| * draft-toorop-dnsop-dns-catalog-zones-05 | ||||
| | Add Kees Monshouwer as co-author | ||||
| | | ||||
| | Removed the "serial" property | ||||
| | | ||||
| | Allow custom properties on the global level | ||||
| * draft-toorop-dnsop-dns-catalog-zones-06 | ||||
| | Move administrative control explanation to Security Considerations | ||||
| | | ||||
| | Move comment on query methods to Implementation Notes | ||||
| | | ||||
| | Clarify what happens on expiry | ||||
| | | ||||
| | Clarify catalog consumer behavior when MUST condition is violated | ||||
| | | ||||
| | Better text on ordering of operations for Change of Ownership | ||||
| | | ||||
| | Suggest to namespace custom properties | ||||
| | | ||||
| | Clarify how to handle property record with wrong type | ||||
| | | ||||
| | Cover the case of multiple different <unique-N>'s having the same | ||||
| | value | ||||
| | | ||||
| | Recommendations for naming catalog zones | ||||
| | | ||||
| | Add and operational note about notifies for not yet existing zones | ||||
| | | ||||
| | Add text about name server restarts with broken zones | ||||
| | | ||||
| | Great power comes with great responsibility (Thanks Klaus!) | ||||
| | | ||||
| | Mention the new BIND implementation | ||||
| | | ||||
| | All invalid properties cause a broken catalog zone, including | ||||
| | invalid group and version properties. | ||||
| | | ||||
| | Add Aram Sargsyan as author (he did the BIND9 implementation) | ||||
| | | ||||
| | group properties can have more than one value | ||||
| * draft-toorop-dnsop-dns-catalog-zones-07 | ||||
| | Some spelling fixes from Tim Wicinski and Josh Soref | Our deepest thanks and appreciation go to Stephen Morris, Ray Bellis, | |||
| | | and Witold Krecicki who initiated this document and did the bulk of | |||
| | Replace SHOULDs with MUSTs for ignoring things that are | the work. | |||
| | meaningless to a catalog consumer (Thanks Michael StJohns) | ||||
| | | ||||
| | Update the list of people to thank in the Acknowledgements section | ||||
| | | ||||
| | Mention PowerDNS support of catalog zones from version 4.7.0 | ||||
| | onwards | ||||
| * draft-toorop-dnsop-dns-catalog-zones-08 | Catalog zones originated as the chosen method among various proposals | |||
| that were evaluated at Internet Systems Consortium (ISC) for easy | ||||
| zone management. The chosen method of storing the catalog as a | ||||
| regular DNS zone was proposed by Stephen Morris. | ||||
| | Address AD Review comments (editorial only) | The initial authors discovered that Paul Vixie's earlier [Metazones] | |||
| | | proposal implemented a similar approach, and they reviewed it. | |||
| | When DoT is mentioned, also mention now-standardized DoQ | Catalog zones borrow some syntax ideas from [Metazones], as both | |||
| share this scheme of representing the catalog as a regular DNS zone. | ||||
| * draft-toorop-dnsop-dns-catalog-zones-08 | Thanks to Leo Vandewoestijne. Leo's presentation in the DNS devroom | |||
| at FOSDEM'20 [FOSDEM20] was one of the motivations to take up and | ||||
| continue the effort of standardizing catalog zones. | ||||
| | Editorial nits from David Blacka, Lars Eggert, Russ Housley, Erik | Thanks to Joe Abley, David Blacka, Brian Conry, Klaus Darilion, Brian | |||
| | Kline, É (U+00C9)ric Vyncke and Paul Wouters | Dickson, Tony Finch, Evan Hunt, Shane Kerr, Warren Kumari, Patrik | |||
| | | Lundin, Matthijs Mekking, Victoria Risk, Josh Soref, Petr Spacek, | |||
| | Addes a Catalog Zone Exampla | Michael StJohns, Carsten Strotmann, and Tim Wicinski for reviewing | |||
| | | earlier draft versions and offering comments and suggestions. | |||
| | Mention that the document uses DNS specific terminology and | ||||
| | reference RFC8499 | ||||
| | | ||||
| | Added IANA Considerations sections, with a registry for Catalog | ||||
| | Zones properties | ||||
| | | ||||
| | Updated Implementation status also with respect to Catalog zones | ||||
| | version "1" support | ||||
| | | ||||
| | Updates to Rename "group properties" to "group property values" or | ||||
| | "group values" to reduce confusion about who will determine those | ||||
| | values (operators and not implementations) | ||||
| | | ||||
| | Change example group values in non descriptive names | ||||
| | | ||||
| | Add some more clarifications on that and how group values are | ||||
| | determined in producer/consumer agreements | ||||
| | | ||||
| | Stronger checking suggestion (SHOULD instead of MAY) in accepting | ||||
| | member zones by consumers in the Security section | ||||
| | | ||||
| | Added mistake recovery text to the Member zone removal section | ||||
| | | ||||
| | Replace vague language ("meaningless") with more precise wording | ||||
| | | ||||
| | Catalog consumers that know only version "2" MUST not process | ||||
| | version "1" catalog zones and consider it broken. | ||||
| | | ||||
| | The entire RDATA of a group property is it's value | ||||
| Authors' Addresses | Authors' Addresses | |||
| Peter van Dijk | Peter van Dijk | |||
| PowerDNS | PowerDNS | |||
| Den Haag | Den Haag | |||
| Netherlands | Netherlands | |||
| Email: peter.van.dijk@powerdns.com | Email: peter.van.dijk@powerdns.com | |||
| Libor Peltan | Libor Peltan | |||
| CZ.NIC | CZ.NIC | |||
| Czechia | Czech Republic | |||
| Email: libor.peltan@nic.cz | Email: libor.peltan@nic.cz | |||
| Ondrej Sury | Ondrej Sury | |||
| Internet Systems Consortium | Internet Systems Consortium | |||
| Czechia | Czech Republic | |||
| Email: ondrej@isc.org | Email: ondrej@isc.org | |||
| Willem Toorop | Willem Toorop | |||
| NLnet Labs | NLnet Labs | |||
| Science Park 400 | Science Park 400 | |||
| 1098 XH Amsterdam | 1098 XH Amsterdam | |||
| Netherlands | Netherlands | |||
| Email: willem@nlnetlabs.nl | Email: willem@nlnetlabs.nl | |||
| Kees Monshouwer | Kees Monshouwer | |||
| End of changes. 112 change blocks. | ||||
| 531 lines changed or deleted | 286 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||