RFC 7477 PROPOSED STANDARD DNS · DELEGATION · AUTOMATION

CSYNC: Child-to-Parent Synchronization in DNS

Lets a child DNS zone ask its parent to update the delegation records it holds.

On rfc-editor.org ↗
PUBLISHED
March 2015
AUTHORS
W. Hardaker
STREAM
IETF
UPDATED BY
RFC 9975 — CDS/CSYNC consistency
CSYNC RECORD TYPE
62
FLAGS FIELD SIZE
16 bits
IMMEDIATE FLAG
Bit 0
SOAMINIMUM FLAG
Bit 1
SERIAL INCREMENT LIMIT WITH SOAMINIMUM
2^16
EXAMPLE RECORD
example.com. 3600 IN CSYNC 66 3 A NS AAAA
DOI
10.17487/RFC7477
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                       W. Hardaker
Request for Comments: 7477                                 Parsons, Inc.
Category: Standards Track                                     March 2015
ISSN: 2070-1721


                 Child-to-Parent Synchronization in DNS

Abstract

   This document specifies how a child zone in the DNS can publish a
   record to indicate to a parental agent that the parental agent may
   copy and process certain records from the child zone.  The existence
   of the record and any change in its value can be monitored by a
   parental agent and acted on depending on local policy.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 5741.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   http://www.rfc-editor.org/info/rfc7477.

Copyright Notice

   Copyright (c) 2015 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
   (http://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 ....................................................2
      1.1. Terminology Used in This Document ..........................3
   2. Definition of the CSYNC RRType ..................................3
      2.1. The CSYNC Resource Record Format ...........................4
           2.1.1. The CSYNC Resource Record Wire Format ...............4
           2.1.2. The CSYNC Presentation Format .......................6
           2.1.3. CSYNC RR Example ....................................6
   3. CSYNC Data Processing ...........................................6
      3.1. Processing Procedure .......................................7
      3.2. CSYNC Record Types .........................................8
           3.2.1. The NS type .........................................8
           3.2.2. The A and AAAA Types ................................9
   4. Operational Considerations ......................................9
      4.1. Error Reporting ...........................................10
      4.2. Child Nameserver Selection ................................10
      4.3. Out-of-Bailiwick NS Records ...............................10
      4.4. Documented Parental Agent Type Support ....................11
      4.5. Removal of the CSYNC Records ..............................11
      4.6. Parent/Child/Grandchild Glue Synchronization ..............12
   5. Security Considerations ........................................12
   6. IANA Considerations ............................................12
   7. References .....................................................13
      7.1. Normative References ......................................13
      7.2. Informative References ....................................14
   Acknowledgments ...................................................15
   Author's Address ..................................................15

1.  Introduction

   This document specifies how a child zone in the DNS ([RFC1034]
   [RFC1035]) can publish a record to indicate to a parental agent (see
   Section 1.1 for a definition of "parental agent") that it can copy
   and process certain records from the child zone.  The existence of
   the record and any change in its value can be monitored by a parental
   agent and acted on depending on local policy.

   Currently, some resource records (RRs) in a parent zone are typically
   expected to be in sync with the source data in the child's zone.  The
   most common records that should match are the nameserver (NS) records
   and any necessary associated address records (A and AAAA), also known
   as "glue records".  These records are referred to as "delegation
   records".

   It has been challenging for operators of child DNS zones to update
   their delegation records within the parent's set in a timely fashion.
   These difficulties may stem from operator laziness as well as from
   the complexities of maintaining a large number of DNS zones.  Having
   an automated mechanism for signaling updates will greatly ease the
   child zone operator's maintenance burden and improve the robustness
   of the DNS as a whole.

   This document introduces a new Resource Record Type (RRType) named
   "CSYNC" that indicates which delegation records published by a child
   DNS operator should be processed by a parental agent and used to
   update the parent zone's DNS data.

   This specification was not designed to synchronize DNSSEC security
   records, such as DS RRsets.  For a solution to this problem, see the
   complementary solution [RFC7344], which is designed to maintain
   security delegation information.  In addition, this specification
   does not address how to perform bootstrapping operations, including
   to get the required initial DNSSEC-secured operating environment in
   place.

1.1.  Terminology Used in This Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

   Terminology describing relationships between the interacting roles
   involved in this document are defined in the following list:

   Child:  The entity on record that has the delegation of the domain
      from the parent

   Parent:  The domain in which the child is registered

   Child DNS operator:  The entity that maintains and publishes the zone
      information for the child DNS

   Parental agent:  The entity that the child has relationship with, to
      change its delegation information

2.  Definition of the CSYNC RRType

   The CSYNC RRType contains, in its RDATA component, these parts: an
   SOA serial number, a set of flags, and a simple bit-list indicating
   the DNS RRTypes in the child that should be processed by the parental
   agent in order to modify the DNS delegation records within the
   parent's zone for the child DNS operator.  Child DNS operators
   wanting a parental agent to perform the synchronization steps
   outlined in this document MUST publish a CSYNC record at the apex of
   the child zone.  Parental agent implementations MAY choose to query
   child zones for this record and process DNS record data as indicated
   by the Type Bit Map field in the RDATA of the CSYNC record.  How the
   data is processed is described in Section 3.

   Parental agents MUST process the entire set of child data indicated
   by the Type Bit Map field (i.e., all record types indicated along
   with all of the necessary records to support processing of that type)
   or else parental agents MUST NOT make any changes to parental records
   at all.  Errors due to unsupported Type Bit Map bits, or otherwise
   nonpunishable data, SHALL result in no change to the parent zone's
   delegation information for the child.  Parental agents MUST ignore a
   child's CSYNC RDATA set if multiple CSYNC resource records are found;
   only a single CSYNC record should ever be present.

   The parental agent MUST perform DNSSEC validation ([RFC4033]
   [RFC4034] [RFC4035]), of the CSYNC RRType data and MUST perform
   DNSSEC validation of any data to be copied from the child to the
   parent.  Parents MUST NOT process any data from any of these records
   if any of the validation results indicate anything other than
   "Secure" [RFC4034] or if any the required data cannot be successfully
   retrieved.

2.1.  The CSYNC Resource Record Format

2.1.1.  The CSYNC Resource Record Wire Format

   The CSYNC RDATA consists of the following fields:

                          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
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                          SOA Serial                           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Flags                   |            Type Bit Map       /
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     /                     Type Bit Map (continued)                  /
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.1.1.1.  The SOA Serial Field

   The SOA Serial field contains a copy of the 32-bit SOA serial number
   from the child zone.  If the soaminimum flag is set, parental agents
   querying children's authoritative servers MUST NOT act on data from
   zones advertising an SOA serial number less than this value.  See
   [RFC1982] for properly implementing "less than" logic.  If the
   soaminimum flag is not set, parental agents MUST ignore the value in
   the SOA Serial field.  Clients can set the field to any value if the
   soaminimum flag is unset, such as the number zero.

   Note that a child zone's current SOA serial number may be greater
   than the number indicated by the CSYNC record.  A child SHOULD update
   the SOA Serial field in the CSYNC record every time the data being
   referenced by the CSYNC record is changed (e.g., an NS record or
   associated address record is changed).  A child MAY choose to update
   the SOA Serial field to always match the current SOA Serial field.

   Parental agents MAY cache SOA serial numbers from data they use and
   refuse to process data from zones older than the last instance from
   which they pulled data.

   Although Section 3.2 of [RFC1982] describes how to properly implement
   a less-than comparison operation with SOA serial numbers that may
   wrap beyond the 32-bit value in both the SOA record and the CSYNC
   record, it is important that a child using the soaminimum flag must
   not increment its SOA serial number value more than 2^16 within the
   period of time that a parent might wait between polling the child for
   the CSYNC record.

2.1.1.2.  The Flags Field

   The Flags field contains 16 bits of boolean flags that define
   operations that affect the processing of the CSYNC record.  The flags
   defined in this document are as follows:

      0x00 0x01: "immediate"

      0x00 0x02: "soaminimum"

   The definitions for how the flags are to be used can be found in
   Section 3.

   The remaining flags are reserved for use by future specifications.
   Undefined flags MUST be set to 0 by CSYNC publishers.  Parental
   agents MUST NOT process a CSYNC record if it contains a 1 value for a
   flag that is unknown to or unsupported by the parental agent.

2.1.1.2.1.  The Type Bit Map Field

   The Type Bit Map field indicates the record types to be processed by
   the parental agent, according to the procedures in Section 3.  The
   Type Bit Map field is encoded in the same way as the Type Bit Map
   field of the NSEC record, described in [RFC4034], Section 4.1.2.  If
   a bit has been set that a parental agent implementation does not
   understand, the parental agent MUST NOT act upon the record.
   Specifically, a parental agent must not simply copy the data, and it
   must understand the semantics associated with a bit in the Type Bit
   Map field that has been set to 1.

2.1.2.  The CSYNC Presentation Format

   The CSYNC presentation format is as follows:

      The SOA Serial field is represented as an integer.

      The Flags field is represented as an integer.

      The Type Bit Map field is represented as a sequence of RRType
      mnemonics.  When the mnemonic is not known, the TYPE
      representation described in [RFC3597], Section 5, MUST be used.
      Implementations that support parsing of presentation format
      records SHOULD be able to read and understand these TYPE
      representations as well.

2.1.3.  CSYNC RR Example

   The following CSYNC RR shows an example entry for "example.com" that
   indicates the NS, A, and AAAA bits are set and should be processed by
   the parental agent for example.com.  The parental agent should pull
   data only from a zone using a minimum SOA serial number of 66 (0x42
   in hexadecimal).

   example.com. 3600 IN CSYNC 66 3 A NS AAAA

   The RDATA component of the example CSYNC RR would be encoded on the
   wire as follows:

    0x00 0x00 0x00 0x42             (SOA Serial)
    0x00 0x03                       (Flags = immediate | soaminimum)
    0x00 0x04 0x60 0x00 0x00 0x08   (Type Bit Map)

3.  CSYNC Data Processing

   The CSYNC record and associated data must be processed as an "all or
   nothing" operation set.  If a parental agent fails to successfully
   query for any of the required records, the whole operation MUST be
   aborted.  (Note that a query resulting in "no records exist" as
   proven by NSEC or NSEC3 is to be considered successful).

   Parental agents MAY:

      Process the CSYNC record immediately if the "immediate" flag is
      set.  If the "immediate" flag is not set, the parental agent MUST
      NOT act until the zone administrator approves the operation
      through an out-of-band mechanism (such as through pushing a button
      via a web interface).

      Choose not to process the CSYNC record immediately, even if the
      "immediate" flag is set.  That is, a parental agent might require
      the child zone administrator approve the operation through an out-
      of-band mechanism (such as through pushing a button via a web
      interface).

   Note: how the approval is done out of band is outside the scope of
   this document and is implementation specific to parental agents.

3.1.  Processing Procedure

   The following shows a sequence of steps that SHOULD be used when
   collecting and processing CSYNC records from a child zone.  Because
   DNS queries are not allowed to contain more than one "question" at a
   time, a sequence of requests is needed.  When processing a CSYNC
   transaction request, all DNS queries should be sent to a single
   authoritative name server for the child zone.  To ensure a single
   host is being addressed, DNS over TCP SHOULD be used to avoid
   conversing with multiple nodes at an anycast address.

   1.  Query for the child zone's SOA record

   2.  Query for the child zone's CSYNC record

   3.  Query for the child zone's data records, as required by the CSYNC
       record's Type Bit Map field

       *  Note: if any of the resulting records being queried are not
          authoritative within the child zone but rather in a grandchild
          or deeper, SOA record queries must be made for the
          grandchildren.  This will require the parental agent to
          determine where the child/grandchild zone cuts occur.  Because
          of the additional operational complexity, parental agents MAY
          choose not to support this protocol with children making use
          of records that are authoritative in the grandchildren.

   4.  Query for the collected SOA records again, starting with the
       deepest and ending with the SOA of the child's.

   If the SOA records from the first, middle, and last steps for a given
   zone have different serial numbers (for example, because the zone was
   edited and republished during the interval between steps 1 and 4),
   then the CSYNC record obtained in the second set SHOULD NOT be
   processed (rapidly changing child zones may need special
   consideration or processing).  The operation MAY be restarted or
   retried in the future.

   If the soaminimum flag is set and the SOA serial numbers are equal
   but less than the CSYNC record's SOA Serial field [RFC1982], the
   record MUST NOT be processed.  If state is being kept by the parental
   agent and the SOA serial number is less than the last time a CSYNC
   record was processed, this CSYNC record SHOULD NOT be processed.
   Similarly, if state is being kept by the parental agent and the SOA
   Serial field of the CSYNC record is less than the SOA Serial field of
   the CSYNC record from last time, then this CSYNC record SHOULD NOT be
   processed.

   If a failure of any kind occurs while trying to obtain any of the
   required data, or if DNSSEC fails to validate all of the data
   returned for these queries as "secure", then this CSYNC record MUST
   NOT be processed.

   See the "Operational Consideration" section (Section 4) for
   additional guidance about processing.

3.2.  CSYNC Record Types

   This document defines how the following record types may be processed
   if the CSYNC Type Bit Map field indicates they are to be processed.

3.2.1.  The NS type

   The NS type flag indicates that the NS records from the child zone
   should be copied into the parent's delegation information records for
   the child.

   NS records found within the child's zone should be copied verbatim
   (with the exception of the Time to Live (TTL) field, for which the
   parent MAY want to select a different value) and the result published
   within the parent zone should be a set of NS records that match
   exactly.  If the child has published a new NS record within their
   set, this record should be added to the parent zone.  Similarly, if
   NS records in the parent's delegation records for the child contain
   records that have been removed in the child's NS set, then they
   should be removed in the parent's set as well.

   Parental agents MAY refuse to perform NS updates if the replacement
   records fail to meet NS record policies required by the parent zone
   (e.g., "every child zone must have at least two NS records").
   Parental agents MUST NOT perform NS updates if there are no NS
   records returned in a query, as verified by DNSSEC denial-of-
   existence protection.  This situation should never happen unless the
   child nameservers are misconfigured.

   Note that it is permissible for a child's nameserver to return a
   CSYNC record that removes the queried nameserver itself from the
   future NS or address set.

3.2.2.  The A and AAAA Types

   The A and AAAA type flags indicates that the A and AAAA address glue
   records for in-bailiwick NS records within the child zone should be
   copied verbatim (with the exception of the TTL field, for which the
   parent MAY want to select a different value) into the parent's
   delegation information.

   Queries should be sent by the parental agent to determine the A and
   AAAA record addresses for each NS record within a NS set for the
   child that are in bailiwick.

   Note: only the matching types should be queried.  For example, if the
   AAAA bit has not been set, then the AAAA records (if any) in the
   parent's delegation should remain as is.  If a given address type is
   set and the child's zone contains no data for that type (as proven by
   appropriate NSEC or NSEC3 records), then the result in the parent's
   delegation records for the child should be an empty set.  However, if
   the end result of processing would leave no glue records present in
   the parent zone for any of the of the in-bailiwick NS records, then
   the parent MUST NOT update the glue address records.  That is, if the
   result of the processing would leave no in-bailiwick A or AAAA
   records when there are in-bailiwick NS records, then processing of
   the address records cannot happen as it would leave the parent/child
   relationship without any address linkage.

   The procedure for querying for A and AAAA records MUST occur after
   the procedure, if required, for querying for NS records as defined in
   Section 3.2.1.  This ensures that the right set of NS records is used
   as provided by the current NS set of the child.  That is, for CSYNC
   records that have the NS bit set, the NS set used should be the one
   pulled from the child while processing the CSYNC record.  For CSYNC
   records without the NS bit set, the existing NS records within the
   parent should be used to determine which A and/or AAAA records to
   update.

4.  Operational Considerations

   There are a number of important operational aspects to consider when
   deploying a CSYNC RRType.

4.1.  Error Reporting

   There is no inline mechanism for a parental agent to report errors to
   operators of child zones.  Thus, the only error reporting mechanisms
   must be out of band, such as through a web console or over email.
   Parental agents should, at a minimum, at least log errors encountered
   when processing CSYNC records.  Child operators utilizing the
   "immediate" flag that fail to see an update within the parental
   agent's specified operational window should access the parental
   agent's error logging interface to determine why an update failed to
   be processed.

4.2.  Child Nameserver Selection

   Parental agents will need to poll child nameservers in search of
   CSYNC records and related data records.

   Parental agents MAY perform best-possible verification by querying
   all NS records for available data to determine which has the most
   recent SOA and CSYNC version (in an ideal world, they would all be
   equal, but this is not possible in practice due to synchronization
   delays and transfer failures).

   Parental agents may offer a configuration interface to allow child
   operators to specify which nameserver should be considered the master
   to send data queries, too.  Note that this master could be a
   different nameserver than the publicly listed nameservers in the NS
   set (i.e., it may be a "hidden master").

   Parental agents with a large number of clients may choose to offer a
   programmatic interface to let their children indicate that new CSYNC
   records and data are available for polling rather than polling every
   child on a frequent basis.

   Children that wish to phase out a nameserver will need to publish the
   CSYNC record to remove the nameserver and then wait for the parental
   agent to process the published record before turning off the service.
   This is required because the child cannot control which nameserver in
   the existing NS set the parental agent may choose to query when
   performing CSYNC processing.

4.3.  Out-of-Bailiwick NS Records

   When a zone contains NS records where the domain name pointed at does
   not fall within the zone itself, there is no way for the parent to
   safely update the associated glue records.  Thus, the child DNS
   operator MAY indicate that the NS records should be synchronized, and
   MAY set any glue record flags (A, AAAA) as well, but the parent will
   only update those glue records that are below the child's delegation
   point.

   Children deploying NS records pointing to domain names within their
   own children (the "grandchildren") SHOULD ensure the grandchildren's
   associated glue records are properly set before publishing the CSYNC
   record.  That is, it is imperative that proper communication and
   synchronization exist between the child and the grandchild.

4.4.  Documented Parental Agent Type Support

   Parental agents that support processing CSYNC records SHOULD publicly
   document the following minimum processing characteristics:

      The fact that they support CSYNC processing

      The Type Bit Map bits they support

      The frequency with which they poll clients (which may also be
      configurable by the client)

      If they support the "immediate" flag

      If they poll a child's single nameserver, a configured list of
      nameservers, or all of the advertised nameservers when querying
      records

      If they support SOA serial number caching to avoid issues with
      regression and/or replay

      Where errors for CSYNC processing are published

      If they support sending queries to a "hidden master"

4.5.  Removal of the CSYNC Records

   Children MAY remove the CSYNC record upon noticing that the parent
   zone has published the required records, thus eliminating the need
   for the parent to continually query for the CSYNC record and all
   corresponding records.  By removing the CSYNC record from the child
   zone, the parental agent will only need to perform the query for the
   CSYNC record and can stop processing when it finds it missing.  This
   will reduce resource usage by both the child and the parental agent.

4.6.  Parent/Child/Grandchild Glue Synchronization

   When a child needs to publish a CSYNC record that synchronizes NS and
   A/AAAA glue records and the NS record is actually pointing to a child
   of the child (a grandchild of the parent), then it is critical that
   the glue records in the child point to the proper real addresses
   records published by the grandchild.  It is assumed that if a child
   is using a grandchild's nameserver that they must be in careful
   synchronization.  Specifically, this specification requires this to
   be the case.

5.  Security Considerations

   This specification requires the use of DNSSEC in order to determine
   that the data being updated was unmodified by third parties.
   Parental agents implementing CSYNC processing MUST ensure all DNS
   transactions are validated by DNSSEC as "secure".  Clients deploying
   CSYNC MUST ensure their zones are signed, current and properly linked
   to the parent zone with a DS record that points to an appropriate
   DNSKEY of the child's zone.

   This specification does not address how to perform bootstrapping
   operations to get the required initial DNSSEC-secured operating
   environment in place.  Additionally, this specification was not
   designed to synchronize DNSSEC security records, such as DS pointers,
   or the CSYNC record itself.  Thus, implementations of this protocol
   MUST NOT use it to synchronize DS records, DNSKEY materials, CDS
   records, CDNSKEY records, or CSYNC records.  Similarly, future
   documents extending this protocol MUST NOT offer the ability to
   synchronize DS, DNSKEY materials, CDS records, CDNSKEY records, or
   CSYNC records.  For such a solution, please see the complimentary
   solution [RFC7344] for maintaining security delegation information.

   To ensure that an older CSYNC record making use of the soaminimum
   flag cannot be replayed to revert values, the SOA serial number MUST
   NOT be incremented by more than 2^16 during the lifetime of the
   signature window of the associated RRSIGs signing the SOA and CSYNC
   records.  Note that this is independent of whether or not the
   increment causes the 2^32 bit serial number field to wrap.

6.  IANA Considerations

   This document defines a new DNS Resource Record Type, named "CSYNC".
   The IANA has assigned a code point from the "Resource Record (RR)
   TYPEs" sub-registry of the "Domain Name System (DNS) Parameters"
   registry (http://www.iana.org/assignments/dns-parameters) for this
   record.

     TYPE    Value    Meaning                           Reference
     -----   ------   --------------------------        -----------
     CSYNC   62       Child-to-Parent Synchronization   [RFC7477]

   The IANA has created and maintains a sub-registry (the "Child
   Synchronization (CSYNC) Flags" registry) of the "Domain Name System
   (DNS) Parameters" registry.  The initial values for this registry are
   below.

   A "Standards Action" [RFC5226] is required for the assignment of new
   flag value.

   This registry holds a set of single-bit "Flags" for use in the CSYNC
   record within the 16-bit Flags field.  Thus, a maximum of 16 flags
   may be defined.

   The initial assignments in this registry are:

     Bit      Flag        Description               Reference
     ----     ------      -------------             -----------
     Bit 0    immediate   Immediately process this  [RFC7477],
                          CSYNC record.             Section 3

     Bit 1    soaminimum  Require a SOA serial      [RFC7477],
                          number greater than the   Section 2.1.1.1
                          one specified.

7.  References

7.1.  Normative References

   [RFC1982]  Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982,
              August 1996, <http://www.rfc-editor.org/info/rfc1982>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC3597]  Gustafsson, A., "Handling of Unknown DNS Resource Record
              (RR) Types", RFC 3597, September 2003,
              <http://www.rfc-editor.org/info/rfc3597>.

   [RFC4034]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "Resource Records for the DNS Security Extensions",
              RFC 4034, March 2005,
              <http://www.rfc-editor.org/info/rfc4034>.

7.2.  Informative References

   [RFC1034]  Mockapetris, P., "Domain names - concepts and facilities",
              STD 13, RFC 1034, November 1987,
              <http://www.rfc-editor.org/info/rfc1034>.

   [RFC1035]  Mockapetris, P., "Domain names - implementation and
              specification", STD 13, RFC 1035, November 1987,
              <http://www.rfc-editor.org/info/rfc1035>.

   [RFC4033]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "DNS Security Introduction and Requirements", RFC
              4033, March 2005,
              <http://www.rfc-editor.org/info/rfc4033>.

   [RFC4035]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "Protocol Modifications for the DNS Security
              Extensions", RFC 4035, March 2005,
              <http://www.rfc-editor.org/info/rfc4035>.

   [RFC5226]  Narten, T. and H. Alvestrand, "Guidelines for Writing an
              IANA Considerations Section in RFCs", BCP 26, RFC 5226,
              May 2008, <http://www.rfc-editor.org/info/rfc5226>.

   [RFC7344]  Kumari, W., Gudmundsson, O., and G. Barwood, "Automating
              DNSSEC Delegation Trust Maintenance", RFC 7344, September
              2014, <http://www.rfc-editor.org/info/rfc7344>.

Acknowledgments

   A thank you goes out to Warren Kumari and Olafur Gudmundsson, whose
   work on the CDS record type helped inspire the work in this document,
   as well as the definition for the "parental agent" definition and
   significant contributions to the text.  A thank you also goes out to
   Ed Lewis, with whom the author held many conversations about the
   issues surrounding parent/child relationships and synchronization.
   Much of the work in this document is derived from the careful
   existing analysis of these three esteemed colleagues.  Thank you to
   the following people who have contributed text or detailed reviews to
   the document (in no particular order): Matthijs Mekking, Petr Spacek,
   JINMEI Tatuya, Pete Resnick, Joel Jaeggli, Brian Haberman, Warren
   Kumari, Adrian Farrel, Alia Atlas, Barry Leiba, Richard Barnes,
   Stephen Farrell, and Ted Lemon.  Lastly, the DNSOP WG chairs Tim
   Wicinski and Suzanne Woolf have been a tremendous help in getting
   this document moving forward to publication.

   A special thanks goes to Roy Arends, for taking the "bite out of that
   hamburger" challenge while discussing this document.

   A similar project, independently designed and developed, was
   conducted by ep.net called "Child Activated DNS Refresh".

Author's Address

   Wes Hardaker
   Parsons, Inc.
   P.O. Box 382
   Davis, CA  95617
   US

   Phone: +1 530 792 1913
   EMail: ietf@hardakers.net

ISO Plain Language

On this page
PROBLEMThe nameserver records and address records a parent zone holds for a child zone are expected to match the child's own data, but updating them promptly has always been a manual and error-prone chore.
MECHANISMThe document defines a new CSYNC record, published at the apex of the child zone, that lists which record types the parent should copy and carries flags controlling when and how the copy happens.
WHY IT MATTERSIt is a Proposed Standard from March 2015, updated by RFC 9975, and it gives parent zones a standard, DNSSEC-validated way to take delegation data straight from the child.

§1Keeping Delegations in Step

Some resource records in a parent zone are typically expected to be in sync with the source data in the child's zone. The most common records that should match are the nameserver records and any necessary associated address records, also known as glue records. These records are referred to as delegation records.

It has been challenging for operators of child DNS zones to update their delegation records within the parent's set in a timely fashion. Those difficulties may stem from operator laziness as well as from the complexities of maintaining a large number of DNS zones. An automated mechanism for signalling updates greatly eases the child's maintenance burden and improves the robustness of the DNS as a whole.

The document introduces a new resource record type named CSYNC, which indicates which delegation records published by a child DNS operator should be processed by a parental agent and used to update the parent zone's DNS data. The specification was not designed to synchronise DNSSEC security records such as DS RRsets; for that problem the complementary solution in RFC 7344 is intended. Nor does it address how to perform bootstrapping operations, including getting the initial DNSSEC-secured operating environment in place.

The roles are defined at the outset. The child is the entity on record that has the delegation of the domain from the parent, and the parent is the domain in which the child is registered. The child DNS operator maintains and publishes the zone information for the child DNS. The parental agent is the entity that the child has a relationship with, in order to change its delegation information.

A delegated domain keeps its nameserver list in two places: in the child's own zone and in the parent's. Until now the second copy was updated by hand, and it often went stale.

§2The CSYNC Record and Its Fields

The CSYNC record type carries three parts in its RDATA component: an SOA serial number, a set of flags, and a simple bit list indicating which DNS record types in the child should be processed by the parental agent in order to modify the delegation records in the parent's zone. A child DNS operator who wants a parental agent to perform these steps MUST publish a CSYNC record at the apex of the child zone. Parental agent implementations MAY choose to query child zones for this record and process the record data as indicated by the Type Bit Map field.

Parental agents MUST process the entire set of child data indicated by the Type Bit Map field, that is, all the record types indicated along with all the necessary records to support processing of that type, or else they MUST NOT make any changes to the parental records at all. Errors due to unsupported Type Bit Map bits, or otherwise unusable data, result in no change to the parent zone's delegation information for the child. A parental agent MUST ignore a child's CSYNC RDATA if multiple CSYNC records are found; only a single CSYNC record should ever be present.

The parental agent MUST perform DNSSEC validation of the CSYNC data and MUST perform DNSSEC validation of any data to be copied from the child to the parent. The parent MUST NOT process any data from these records if any validation result indicates anything other than Secure, or if any required data cannot be retrieved successfully.

The record holds three things: a version number, some flags, and a list of which kinds of records the parent should take. The parent either takes all of them or takes none.

THE CSYNC FLAGS REGISTRY
  • 0IMMEDIATE — Process this CSYNC record immediately rather than waiting for approval.
  • 1SOAMINIMUM — Require the zone's SOA serial number to be greater than the one specified.

§2.1.1The Wire Format

The RDATA of a CSYNC record has an SOA Serial field of 32 bits, a Flags field of 16 bits, and a Type Bit Map field that may continue over further 32-bit words. The Type Bit Map is encoded in the same way as the Type Bit Map field of the NSEC record, as described in Section 4.1.2 of RFC 4034. If a bit has been set that a parental agent implementation does not understand, the parental agent MUST NOT act upon the record: it must not simply copy the data, and it must understand the semantics associated with any bit that is set to one.

The SOA Serial field holds a copy of the 32-bit SOA serial number from the child zone. If the soaminimum flag is set, parental agents querying children's authoritative servers MUST NOT act on data from zones advertising an SOA serial number less than this value, using the proper less-than logic of RFC 1982. If the flag is not set, parental agents MUST ignore the value, and clients can set it to anything, such as zero. A child SHOULD update the SOA Serial field every time the data referenced by the CSYNC record changes, and MAY choose to keep it equal to the current SOA serial number. A child using the soaminimum flag must not increment its SOA serial number by more than 2^16 within the period a parent might wait between polling.

The Flags field holds 16 boolean flags. Two are defined here: bit 0 is immediate, and bit 1 is soaminimum. The remaining flags are reserved for future specifications, and undefined flags MUST be set to zero by publishers. A parental agent MUST NOT process a CSYNC record that contains a one in a flag it does not know or does not support. In the presentation format the SOA Serial and Flags fields are integers, and the Type Bit Map is written as a sequence of record type mnemonics, with the TYPE representation of RFC 3597 used when a mnemonic is not known.

The record is a version number, two flag bits, and a bitmap of record types. A parent that meets an unknown flag or an unknown bitmap bit refuses to act at all.

THE CSYNC RECORD DATA (RFC 7477, SECTION 2.1.1.1)
CSYNC RDATA
FieldNameSizeValueDescription
SOA-SERIALSOA Serial4 bytes0x00000042A copy of the child zone's 32-bit SOA serial number.
FLAGSFlags2 bytes0x0003Bit 0 is immediate, bit 1 is soaminimum. The rest are reserved.
TYPE-BIT-MAPType Bit Map2 bytesFirst part of the bitmap of record types to process.
TYPE-BIT-MAP-CONTType Bit Map (continued)4 bytesThe bitmap continues in further 32-bit words.
THE EXAMPLE CSYNC RECORD AND ITS WIRE FORM (RFC 7477, SECTION 2.1.3)
Example CSYNC record
example.com. 3600 IN CSYNC 66 3 A NS AAAA

0x00 0x00 0x00 0x42             (SOA Serial)
0x00 0x03                       (Flags = immediate | soaminimum)
0x00 0x04 0x60 0x00 0x00 0x08   (Type Bit Map)

§3How the Parental Agent Processes a Record

The CSYNC record and its associated data must be processed as an all-or-nothing operation. If a parental agent fails to query successfully for any of the required records, the whole operation MUST be aborted, and a query resulting in no records existing, as proven by NSEC or NSEC3, counts as successful.

The parental agent MAY process the record immediately if the immediate flag is set. If that flag is not set, the parental agent MUST NOT act until the zone administrator approves the operation through an out-of-band mechanism, such as pushing a button in a web interface. It may also choose not to process the record immediately even when the flag is set, for instance if it requires approval out of band. How that approval is done is outside the scope of the document and specific to the parental agent.

The processing sequence has four steps. First, query for the child zone's SOA record. Second, query for the child zone's CSYNC record. Third, query for the child's data records as required by the CSYNC record's Type Bit Map field. If any of the records being queried are not authoritative within the child zone but in a grandchild or deeper, SOA queries must also be made for the grandchildren, which means the agent has to work out where the zone cuts occur; because of that extra complexity, parental agents MAY choose not to support the protocol with children that use records authoritative in grandchildren. Fourth, query for the collected SOA records again, starting with the deepest and ending with the child's own SOA.

If the SOA records from the first, middle and last steps for a given zone have different serial numbers, for example because the zone was edited and republished in between, the CSYNC record obtained SHOULD NOT be processed, and the operation MAY be restarted or retried later. If the soaminimum flag is set and the serial numbers are equal but less than the CSYNC record's SOA Serial field, the record MUST NOT be processed. If the agent keeps state and the serial number is less than the last time a CSYNC record was processed, or the CSYNC record's SOA Serial field is less than that of the last one, the record SHOULD NOT be processed. If any failure occurs while obtaining the required data, or DNSSEC fails to validate all of the returned data as secure, the record MUST NOT be processed.

The parent reads the child's version number, fetches the records named in the bitmap, then reads the version number again. If anything changed in between, or if a single query fails, nothing is updated.

ILLUSTRATIVE: THE FOUR QUERIES OF A CSYNC PROCESSING RUN
Parental agentChild zone server
  1. QUERY SOAStep 1: note the child's serial number.
  2. QUERY CSYNCStep 2: read the record and its bitmap.
  3. QUERY DATA RECORDSStep 3: fetch the records named in the bitmap.
  4. QUERY SOA AGAINStep 4: check that nothing changed in the meantime.

§3.2Which Records Get Copied

The NS type flag means the NS records from the child zone should be copied into the parent's delegation information for the child. NS records found in the child's zone should be copied verbatim, with the exception of the TTL, for which the parent may want a different value, and the set published in the parent should match exactly. If the child has published a new NS record within its set, that record should be added to the parent zone, and if the parent's delegation records contain records removed from the child's NS set, they should be removed from the parent's set as well. Parental agents MAY refuse to perform NS updates if the replacement records fail to meet the NS record policies required by the parent zone, such as requiring every child zone to have at least two NS records. They MUST NOT perform NS updates if no NS records are returned in a query, as verified by DNSSEC denial-of-existence protection, a situation that should never happen unless the child nameservers are misconfigured. It is permissible for a child's nameserver to return a CSYNC record that removes the queried nameserver itself from the future NS or address set.

The A and AAAA type flags mean the address glue records for in-bailiwick NS records within the child zone should be copied verbatim, again with the exception of the TTL, into the parent's delegation information. Queries should be sent to determine the addresses for each NS record in the child's NS set that is in bailiwick. Only matching types should be queried: if the AAAA bit is not set, the AAAA records in the parent's delegation should remain as they are. If a given address type is set and the child's zone contains no data for that type, as proven by NSEC or NSEC3, the result in the parent should be an empty set. However, if the result of processing would leave no glue records present in the parent zone for any of the in-bailiwick NS records, the parent MUST NOT update the glue address records, because that would leave the parent and child relationship without any address linkage.

The procedure for querying A and AAAA records MUST occur after the NS procedure, so that the right set of NS records is used: for a CSYNC record with the NS bit set, the NS set used is the one pulled from the child while processing; for a record without the NS bit set, the existing NS records in the parent are used to decide which address records to update.

Only the nameserver list and the addresses of servers inside the child's own domain are copied. The parent never ends up with an empty address list for a delegation that has servers.

§4Running It in Practice

There is no inline mechanism for a parental agent to report errors to the operators of child zones, so error reporting must be out of band, such as through a web console or over email. Parental agents should at least log the errors they encounter. A child operator using the immediate flag who fails to see an update within the agent's operational window should look at the agent's error log to find out why.

Parental agents poll child nameservers for CSYNC records and related data. They MAY perform best-possible verification by querying all the NS records for available data to determine which has the most recent SOA and CSYNC version, since in practice they will not all be equal because of synchronisation delays and transfer failures. An agent may offer a configuration interface allowing child operators to specify which nameserver should be treated as the master to send data queries to, which could be a hidden master rather than one of the publicly listed nameservers. Agents with many clients may offer a programmatic interface so that children can indicate that new CSYNC records are available rather than being polled constantly.

A child wishing to phase out a nameserver needs to publish the CSYNC record that removes it and then wait for the parental agent to process the published record before turning off the service, because the child cannot control which nameserver in the existing NS set the agent may choose to query.

When a zone contains NS records whose domain name falls outside the zone itself, there is no way for the parent to safely update the associated glue records. The child DNS operator MAY indicate that the NS records should be synchronized and MAY set the address flags as well, but the parent will only update those glue records that are below the child's delegation point. Children deploying NS records pointing to names inside their own children should ensure the grandchildren's glue records are properly set before publishing the CSYNC record.

Parental agents that support CSYNC processing SHOULD publicly document that they support it, which Type Bit Map bits they support, the frequency with which they poll clients and whether that is configurable, whether they support the immediate flag, whether they poll a single nameserver, a configured list or all the advertised nameservers, whether they support SOA serial number caching, where errors are published, and whether they support sending queries to a hidden master. Children MAY remove the CSYNC record once they notice the parent has published the required records, which removes the need for the parent to keep querying for the CSYNC record and all the corresponding records.

Failures are reported out of band, in logs. The parent has to be polled, and the child has to wait for the parent to catch up before turning a server off.

§5Security Considerations

The specification requires the use of DNSSEC in order to determine that the data being updated was not modified by third parties. Parental agents implementing CSYNC processing MUST ensure all DNS transactions are validated by DNSSEC as secure. Clients deploying CSYNC MUST ensure their zones are signed, current and properly linked to the parent zone with a DS record pointing at an appropriate DNSKEY of the child's zone.

The specification does not address how to bootstrap the initial DNSSEC-secured operating environment, and it was not designed to synchronise DNSSEC security records such as DS pointers, or the CSYNC record itself. Implementations of this protocol MUST NOT use it to synchronise DS records, DNSKEY material, CDS records, CDNSKEY records or CSYNC records, and future documents extending the protocol MUST NOT offer the ability to do so. For that, the complementary solution in RFC 7344 maintains security delegation information.

To ensure that an older CSYNC record using the soaminimum flag cannot be replayed to revert values, the SOA serial number MUST NOT be incremented by more than 2^16 during the lifetime of the signature window of the associated RRSIGs signing the SOA and CSYNC records. This holds regardless of whether the increment causes the 32-bit serial number field to wrap.

Everything has to be signed, so the parent can tell the child did not change its mind halfway through, and the protocol deliberately cannot be used to move the signed delegation records themselves.

§6IANA Registrations

The document defines a new DNS resource record type named CSYNC, and IANA has assigned the code point 62 in the Resource Record TYPEs sub-registry of the Domain Name System Parameters registry for it.

A sub-registry called the Child Synchronization (CSYNC) Flags registry has been created and is maintained by IANA. It holds a set of single-bit flags for use in the CSYNC record within the 16-bit Flags field, so a maximum of 16 flags may be defined. The initial assignments are bit 0, immediate, which asks for the CSYNC record to be processed immediately, and bit 1, soaminimum, which requires a SOA serial number greater than the one specified. A Standards Action is required for the assignment of any new flag value.

The record type gets the number 62, and the two flags are numbered 0 and 1 with room for fourteen more.

§9References