<?xml version="1.0" ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<rfc ipr="trust200902" category="exp" docName="draft-hunt-dns-server-diagnostics-00">
<?rfc toc="yes"?>         <!-- generate a table of contents -->
<?rfc symrefs="yes"?>     <!-- use anchors instead of numbers for references -->
<?rfc sortrefs="yes" ?>   <!-- alphabetize the references -->
<?rfc compact="yes" ?>    <!-- conserve vertical whitespace -->
<?rfc subcompact="no" ?>  <!-- but keep a blank line between list items -->
 <front>
        <title abbrev="dns-server-diagnostics">The DNS Extended Server Diagnostics (ESD) Option</title>

            <author initials="E." surname="Hunt" fullname="Evan Hunt">
            <organization>ISC</organization>

            <address>
                <postal>
                    <street>950 Charter St</street>
                    <street></street>
                    <city>Redwood City</city> <region>CA</region>
                    <code>94063</code>
                    <country>USA</country>
                </postal>
                <email>each@isc.org</email>
            </address>
        </author>

        <date month="July" year="2013"/>

        <area>General</area>
        <keyword>DNS</keyword>
        <keyword>EDNS(0)</keyword>
        <keyword>ESD</keyword>
        <keyword>Diagnostic</keyword>
        <abstract>
            <t>
                The widespread adoption of DNSSEC implies more frequent
                DNSSEC failures. Unfortunately, DNSSEC's failure mode is
                largely opaque to the client: when validation fails, the
                only signal that the clients of a validating resolver
                receive is an empty response with a SERVFAIL response code.
                This note proposes a protocol extension to allow SERVFAIL
                responses to include additional diagnostic information,
                giving the client greater insight into what went wrong and
                a better chance of delivering useful problem reports to DNS
                operators.
            </t>
        </abstract>
</front>

<middle>
<!-- This document was prepared using Pandoc2rfc -->
<!-- https://github.com/miekg/pandoc2rfc -->

  
<section title="Introduction" anchor="introduction">
  
  <t>
    DNSSEC's failure mode is largely opaque to the client: when
    validation fails, the only signal of this that a resolver's clients
    receive is a SERVFAIL response code.
  </t>
  <t>
    With no information provided to explain the exact cause of a
    SERVFAIL response, there is no straightforward way for an end user
    to determine whether a failure occurred due to a broken local
    resolver, a zone misconfiguration such as expired signatures, or a
    spoofing attack. This makes it difficult to address complaints and
    problem reports to the right people, slowing the correction of
    DNSSEC errors while increasing the support burden on validating
    resolver operators.
  </t>
  <t>
    This note proposes a protocol extension allowing a name server, upon
    request from a client, to accompany SERVFAIL responses with detailed
    diagnostic information indicating what specifically caused the
    failure. In the typical use case for this mechanism, a validating
    caching name server would be able to convey specific failure
    information to a non-validating stub resolver or other client.
  </t>
  <section title="Reserved Words" anchor="reserved-words">
    
    <t>
      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
      <xref target="RFC2119"/>.
    </t>
  </section>
</section>
<section title="Protocol" anchor="protocol">
  
  <t>
    A DNS client such as a non-validating stub resolver may use an
    EDNS(0) <xref target="RFC2671"/> option, ESD, to solicit
    extended diagnostic information from a DNS server. The ESD option
    payload includes a 16-bit "flags" field and a 16-bit
    diagnostic code; additional payload data may be included in the
    response.
  </t>
  <t>
    One bit in the "flags" field is defined as
    "human-readable": if this bit is set in the solicitation,
    it indicates a desire for the server to return human-readable text,
    in addition to machine-readable diagnostic data; this text can be
    displayed or sent to a logging facility such as syslog
    <xref target="RFC5424"/>. All other payload data MUST be left
    empty in the solicitation.
  </t>
  <t>
    The response payload, in addition to the flags field and the
    diagnostic code, may also include a supplemental data field whose
    content and schema are dependent on the diagnostic code being
    returned. If the "human-readable" flag is set in the
    response, then the response also includes human-readable text in a
    counted string, i.e., a single length octet followed by that number
    of characters, as in the TXT RDATA format
    <xref target="RFC1035"/>.
  </t>
  <section title="Client Behavior" anchor="client-behavior">
    
    <t>
      A stub resolver or other DNS client requests extended diagnostic
      data by sending an ESD option
      (<xref target="the-esd-option"/>) in an EDNS(0) OPT
      pseudo-RR in the query message. The requestor MAY set the
      "human-readable" bit in the flags field of the request
      payload. The requestor MUST NOT include any other payload data in
      the ESD option.
    </t>
    <t>
      The requestor MUST ignore any ESD option included in a response
      that does not have response code SERVFAIL.
    </t>
  </section>
  <section title="Server Behavior" anchor="server-behavior">
    
    <t>
      A resolver or other name server which encounters a server failure
      while answering a query that included an ESD option MAY add an ESD
      option to the SERVFAIL response. If the query did not include an
      ESD option, then the response MUST NOT include one. The server
      MUST NOT include an ESD option in any non-SERVFAIL response.
    </t>
  </section>
  <section title="The ESD Option" anchor="the-esd-option">
    
    <t>
      The OPTION-CODE for the ESD option is [TBD].
    </t>
    <t>
      The format for the OPTION-DATA portion of an ESD option is shown
      below:
    </t>
    <figure><artwork>
                     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 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            FLAGS            |H|           DIAGCODE            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\                  HRTEXT (optional, resonse only)              \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\                 SUPPDATA (optional, response only)            \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork></figure>
    <t>
      in which the fields are defined as follows:
    </t>
    <t><list style="hanging" hangIndent="10">
      <t hangText="FLAGS">
          
            A 16-bit field. Bit 15 (H) is defined to mean
            "human-readable"; when set in the solicitation,
            this bit signals a desire for human-readable text to be
            included in the response; when set in the response, it
            signals that such text has been included. All other bits in
            the field MUST be set to zero.
          
        </t>
      <t hangText="DIAGCODE">
          
            A 16-bit diagnostic code
            (<xref target="esd-diagnostic-codes"/>) indicating
            the reason for the SERVFAIL response. In the solicitation
            payload, this field MUST be set to zero.
          
        </t>
      <t hangText="HRTEXT">
          
            An counted string, containing human-readable text suitable
            for logging. The first octet defines the length of the
            following text; if the first octet contains 0, the string is
            emty. This is intended as an opaque string to be passed
            through to a logging mechanism; content and encoding are
            outside the scope of the protocol. This field MUST NOT be
            included in a solicitation payload.
          
        </t>
      <t hangText="SUPPDATA">
          
            Optional supplementary data about the cause of the server
            failure. The presence or absence, content, and schema of
            this field are entirely dependent on the diagnostic code
            being returned in the DIAGCODE field
            (<xref target="esd-diagnostic-codes"/>). This field
            MUST NOT be included in a solicitation payload.
          
        </t>
    </list></t>
  </section>
  <section title="ESD Diagnostic Codes" anchor="esd-diagnostic-codes">
    
    <t>
      Diagnostic codes are grouped in five general categories: Internal
      server error conditions (diagnostic codes 1-255), general DNS
      failures (256-511), policy-dependent security errors (512-767),
      temporary security errors (768-1023), and fatal security errors
      (1024-1279). Space has been reserved in the namespace for
      additional categories and codes. All diagnostic codes are
      optional; there is no requiremnt to impelement all of them.
    </t>
    <t>
      The DIAGCODE field MUST be set to zero (No Error) in ESD
      solicitations.
    </t>
    <section title="Internal Server Errors" anchor="internal-server-errors">
      
      <t>
        These diagnostic codes indicate a system failure in the
        responding server.
      </t>
      <section title="Internal Error, Not Otherwise Specified" anchor="internal-error-not-otherwise-specified">
        
        <t>
          Diagnostic code 1 indicates an unspecified internal server
          error unrelated to DNSSEC. A server MAY return this code in
          place of any other internal server error, at the discretion of
          the implementor or operator, if information about the internal
          state of the server is regarded as security sensitive. This
          code has no supplemental data.
        </t>
      </section>
      <section title="Out of Memory" anchor="out-of-memory">
        
        <t>
          Diagnostic code 2 indicates that the server was not able to
          dynamically allocate memory. This code has no supplemental
          data.
        </t>
      </section>
      <section title="Resource Unavailable" anchor="resource-unavailable">
        
        <t>
          Diagnostic code 3 indicates that a needed resource was not
          available. This code has no supplemental data.
        </t>
      </section>
      <section title="Zone Not Loaded" anchor="zone-not-loaded">
        
        <t>
          Diagnostic code 4: The server has been configured to be
          authoritative for a zone which is an ancestor of the query
          name, but was unable to load it. The supplemental data
          contains the name of the zone the server was unable to load,
          in DNS wire format.
        </t>
      </section>
      <section title="Invalid Zone" anchor="invalid-zone">
        
        <t>
          Diagnostic code 5: The server has been configured to be
          authoritative for a zone which is an ancestor of the query
          name, but the zone contents are invalid; for example, there is
          no SOA RR or NS RRset at the zone apex. The supplemental data
          contains the name of the zone in DNS wire format.
        </t>
      </section>
      <section title="Configuration Error" anchor="configuration-error">
        
        <t>
          Diagnostic code 6: The server could not be initialized, e.g.,
          as a result of an error in loading or parsing the
          configuration file. This code has no supplemental data.
        </t>
      </section>
      <section title="Timeout" anchor="timeout">
        
        <t>
          Diagnostic code 7: Query processing timed out. This code has
          no supplemental data.
        </t>
      </section>
      <section title="Shutting Down" anchor="shutting-down">
        
        <t>
          Diagnostic code 8: The server is shutting down. This code has
          no supplemental data.
        </t>
      </section>
    </section>
    <section title="General DNS Errors" anchor="general-dns-errors">
      
      <t>
        These codes describe failure conditions due to bad or
        inconsistent data in the DNS not specifically related to DNSSEC.
      </t>
      <section title="Lame Delegation" anchor="lame-delegation">
        
        <t>
          Diagnostic code 256: The name servers which have been
          delegated responsibility for a zone cannot be reached or are
          not performing name service for that zone. The supplemental
          data contains the zone apex name of the faulty zone.
        </t>
      </section>
      <section title="Name Expansion Failure" anchor="name-expansion-failure">
        
        <t>
          Diagnostic code 257: A CNAME <xref target="RFC1034"/>
          or DNAME <xref target="RFC6672"/> record fails sanity
          checks after name expansion. The supplemental data contains
          the name and RR type (CNAME or DNAME) of the faulty record, in
          the following format:
        </t>
        <figure><artwork>
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            RRTYPE             |             NAME              \ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork></figure>
      </section>
      <section title="Protocol Not Supported" anchor="protocol-not-supported">
        
        <t>
          Diagnostic code 258: Processing this query requires a protocol
          extension that is not supported. This code has no supplemental
          data.
        </t>
      </section>
    </section>
    <section title="Policy-Dependent Security Errors" anchor="policy-dependent-security-errors">
      
      <t>
        These are errors returned due to locally-configured policy
        constraints on DNSSEC processing or other security
        considerations.
      </t>
      <section title="Key Too Large" anchor="key-too-large">
        
        <t>
          Diagnostic code 512: Local policy disallows a DNSKEY being
          used to validate a record on the grounds that it is too large.
          The supplemental data specifies the owner name (in DNS wire
          format) and key tag of the problematic DNSKEY, using the
          following format:
        </t>
        <figure><artwork>
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             TAG               |             NAME              \ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork></figure>
      </section>
      <section title="Key Too Small" anchor="key-too-small">
        
        <t>
          Diagnostic code 513: Local policy disallows a DNSKEY being
          used to validate a record on the grounds that it is too small.
          The supplemental data contains the nam5 and tag of the
          problematic key, in the format specified in
          <xref target="key-too-large"/>.
        </t>
      </section>
      <section title="Key Not Authorized" anchor="key-not-authorized">
        
        <t>
          Diagnostic code 514: Local policy does not authorize a key to
          be used for validation. The supplemental data contains the
          name and tag of the problematic key, in the format specified
          in <xref target="key-too-large"/>.
        </t>
      </section>
      <section title="Key Algorithm Refused" anchor="key-algorithm-refused">
        
        <t>
          Diagnostic code 515: Local policy prohibits validation using a
          given signing algorithm. The supplemental data contains a
          16-bit unsigned integer indicating which algorithm has been
          disallowed.
        </t>
      </section>
      <section title="Unauthorized Signer" anchor="unauthorized-signer">
        
        <t>
          Diagnostic code 516: Local policy disallows accepting
          signatures created by this signer. The supplemental data
          contains the name of the signer that has been disallowed.
        </t>
      </section>
      <section title="No Trust Anchor" anchor="no-trust-anchor">
        
        <t>
          Diagnostic code 517: There is no trust anchor for the chain of
          trust needed to validate this data, but local policy requires
          validation. This code has no supplemental data.
        </t>
      </section>
      <section title="Too Many Links" anchor="too-many-links">
        
        <t>
          Diagnostic code 518: The chain of trust is longer than local
          policy permits. This code has no supplemental data.
        </t>
      </section>
      <section title="Response Blocked" anchor="response-blocked">
        
        <t>
          Diagnostic code 519: The response to this query has been
          blocked by local policy. This code has no supplemental data.
        </t>
      </section>
    </section>
    <section title="Temporary Security Errors" anchor="temporary-security-errors">
      
      <t>
        These are error conditions occurring from DNSSEC processing
        which are time-dependent: i.e., problems due to signature
        validity interval or key expiry.
      </t>
      <section title="Signature Expired" anchor="signature-expired">
        
        <t>
          Diagnostic code 768: An RRSIG is past its useful lifetime. The
          supplemental data contains the name and covering RR type of
          the failed RRSIG, in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Signature Not Yet Active" anchor="signature-not-yet-active">
        
        <t>
          Diagnostic code 769: An RRSIG has not yet begun its useful
          lifetime. The supplemental data contains the name and covering
          RR type of the invalid RRSIG, in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Trust Anchor Expired" anchor="trust-anchor-expired">
        
        <t>
          Diagnostic code 770: A trust anchor can no longer be used. The
          supplemental data contains the name of the expired trust
          anchor in wire format.
        </t>
      </section>
    </section>
    <section title="Fatal Security Errors" anchor="fatal-security-errors">
      
      <t>
        These error conditions due to DNSSEC processing are always
        fatal, regardless of time or local policy.
      </t>
      <section title="Bogus Data" anchor="bogus-data">
        
        <t>
          Diagnostic code 1024: Cryptographic validation failed. The
          supplemental data contains the name and RR type of data which
          failed to validate, in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Signature Missing" anchor="signature-missing">
        
        <t>
          Diagnostic code 1025: There was no RRSIG found for an RRset,
          but one should have been present. The supplemental data
          contains the name and RR type of the data that should have
          been signed, in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="DNSKEY Missing" anchor="dnskey-missing">
        
        <t>
          Diagnostic code 1026: No DNSKEY was found, but one should have
          been present. The supplemental data contains the zone apex
          name at which the DNSKEY should have been found, in wire
          format.
        </t>
      </section>
      <section title="Key Tag Mismatch" anchor="key-tag-mismatch">
        
        <t>
          Diagnostic code 1027: RRSIG records have been found for an
          RRset which is to be validated, but none of them has a key tag
          matching a valid DNSKEY. The supplemental data contains the
          name and covering RR type for the faulty RRSIG, in the format
          specified in <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="DS Missing" anchor="ds-missing">
        
        <t>
          Diagnostic code 1028: No DS record was found, but there should
          have been one present. The supplemental data contains the name
          at which the DS record should have been found.
        </t>
      </section>
      <section title="Next-Secure Record Missing" anchor="next-secure-record-missing">
        
        <t>
          Diagnostic code 1029: No NSEC <xref target="RFC4034"/>
          or NSEC3 <xref target="RFC5155"/> record was found, but
          there should have been one present. The supplemental data
          contains the name and RR type (NSEC or NSEC3) of the record
          that was expected, in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Overreaching Next-Secure Record" anchor="overreaching-next-secure-record">
        
        <t>
          Diagnostic code 1030: The "next owner" name in an
          NSEC or NSEC3 record goes beyond another record which is known
          to exist. The supplemental data contains the name and RR type
          (NSEC or NSEC3) of the invalid record, in the format specified
          in <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Next-Secure Record Pointing Backward" anchor="next-secure-record-pointing-backward">
        
        <t>
          Diagnostic code 1031: The ordering of records in the NSEC or
          NSEC3 chain does not follow canonical ordering rules. The
          supplemental data contains the name and RR type (NSEC or
          NSEC3) of the invalid record, in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Irrelevant Proof" anchor="irrelevant-proof">
        
        <t>
          Diagnostic code 1032: A proof of non-existence was provided
          for a record whose non-existence did not need to be proven.
          This code has no supplemental data.
        </t>
      </section>
      <section title="Incomplete Proof" anchor="incomplete-proof">
        
        <t>
          Diagnostic code 1033: Proof of non-existence is incomplete.
          The supplemental data contains the name and RR type of the
          data whose non-existence needed to be proven, in the format
          specified in <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Wrong RRSIG Owner" anchor="wrong-rrsig-owner">
        
        <t>
          Diagnostic code 1034: The RRSIG being used for verification is
          incorrect for the RR in question. The supplemental data
          contains the name and covering RR type of the invalid RRSIG,
          in the format specified in
          <xref target="name-expansion-failure"/>.
        </t>
      </section>
      <section title="Unknown DNSKEY Protocol" anchor="unknown-dnskey-protocol">
        
        <t>
          Diagnostic code 1035: The DNSKEY protocol value is not set to
          3. The supplemental data contains the name and tag of the
          faulty key, in the format specified in
          <xref target="key-too-large"/>.
        </t>
      </section>
      <section title="DS/DNSKEY Mismatch" anchor="dsdnskey-mismatch">
        
        <t>
          Diagnostic code 1036: A mismatch was found between the DNSKEY
          in a zone and the DS record in the parent. The supplemental
          data contains the name and tag of the DNSKEY that should have
          been found, in the format specified in
          <xref target="key-too-large"/>.
        </t>
      </section>
      <section title="Unknown Algorithm" anchor="unknown-algorithm">
        
        <t>
          Diagnostic code 1037: An algorithm specified in a DNSKEY, DS,
          RRSIG, NSEC3 or NSEC3PARAM record is not recognized by the
          server. The supplemental data contains the name and RR type of
          the record that referenced the invalid algorithm.
        </t>
      </section>
      <section title="Algorithm Not Supported" anchor="algorithm-not-supported">
        
        <t>
          Diagnostic code 1038: An algorithm specified in a DNSKEY, DS,
          RRSIG, NSEC3 or NSEC3PARAM record is recognized by the server
          but is not implemented. The supplemental data contains the
          name and RR type of the record that referenced the unsupported
          algorithm.
        </t>
      </section>
      <section title="Not a Zone Key" anchor="not-a-zone-key">
        
        <t>
          Diagnostic code 1039: The key that is used to verify
          signatures on zone data does not have the "Zone Key"
          flag <xref target="RFC4034"/> set. The supplemental
          data contains the name and tag of the faulty key, in the
          format specified in <xref target="key-too-large"/>.
        </t>
      </section>
      <section title="Key Revoked" anchor="key-revoked">
        
        <t>
          Diagnostic code 1040: A key that is required to complete a
          chain of trust has its REVOKED bit
          <xref target="RFC5011"/> set. The supplemental data
          contains the name and tag of the revoked key, in the format
          specified in <xref target="key-too-large"/>.
        </t>
      </section>
    </section>
  </section>
</section>
<section title="Security Considerations" anchor="security-considerations">
  
  <t>
    An ESD option response contains channel diagnostic data, to be used
    for logging, troubleshooting, and debugging; it falls outside the
    scope of DNSSEC per se. Ensuring integrity of the response requires
    the use of a channel security mechanism such as TSIG
    <xref target="RFC2845"/> or SIG(0)
    <xref target="RFC2931"/>. In the absence of any such
    mechanism, ESD responses MUST NOT be used by clients to make policy
    decisions with respect to DNSSEC validation, as this could allow an
    attacker to force a security downgrade or denial of service by
    forging SERVFAIL messages containing particular ESD responses.
  </t>
  <t>
    Some of the data in an ESD option response may be security
    sensitive, particularly those responses which increase the
    transparency of the current state of a running resolver. In the case
    of SERVFAIL responses due to authoritative server misconfiguration
    or other non-local conditions, this is generally not a concern, as
    the data which caused the failure are readily available in the DNS
    and can be obtained by other means. However, information about
    server failures due to local problems such as out-of-memory
    conditions may be of tactical use to an attacker. Implementors may
    wish to provide a mechanism for operators to disable certain types
    of diagnostic response while allowing others.
  </t>
</section>
<section title="IANA Considerations" anchor="iana-considerations">
  
  <t>
    IANA is requested to make the assignments in this section.
  </t>
  <section title="ESD Option Code" anchor="esd-option-code">
    
    <t>
      This document requests the allocation of an EDNS(0) option code
      for the ESD option, whose value is [TBD].
    </t>
  </section>
  <section title="Diagnostic Codes" anchor="diagnostic-codes">
    
    <t>
      This document requests the creation of a new registry of ESD
      diagnostic codes. The registry policy is "Specification
      Required" <xref target="RFC5226"/>. The initial
      entries in the registry are:
    </t>
    <texttable>
      
        
        
        
        
          
            <ttcol align="left">
              Value
            </ttcol>
            <ttcol align="left">
              Description
            </ttcol>
            <ttcol align="left">
              Reference
            </ttcol>
          
        
        
          
            <c>
              0
            </c>
            <c>
              No Error
            </c>
            <c>
            </c>
          
          
            <c>
              1
            </c>
            <c>
              Internal Error
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              2
            </c>
            <c>
              Out of Memory
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              3
            </c>
            <c>
              Resource Unavailable
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              4
            </c>
            <c>
              Zone Not Loaded
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              5
            </c>
            <c>
              Invalid Zone
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              6
            </c>
            <c>
              Configuration Error
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              7
            </c>
            <c>
              Timeout
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              8
            </c>
            <c>
              Shutting Down
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              9-255
            </c>
            <c>
              Unassigned
            </c>
            <c>
            </c>
          
          
            <c>
              256
            </c>
            <c>
              Lame Delegation
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              257
            </c>
            <c>
              Name Expansion Failure
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              258
            </c>
            <c>
              Protocol Not Supported
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              259-511
            </c>
            <c>
              Unassigned
            </c>
            <c>
            </c>
          
          
            <c>
              512
            </c>
            <c>
              Key Too Large
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              513
            </c>
            <c>
              Key Too Small
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              514
            </c>
            <c>
              Key Not Authorized
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              515
            </c>
            <c>
              Algorithm Refused
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              516
            </c>
            <c>
              Unauthorized Signer
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              517
            </c>
            <c>
              No Trust Anchor
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              518
            </c>
            <c>
              Too Many Links
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              519
            </c>
            <c>
              Response Blocked
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              520-767
            </c>
            <c>
              Unassigned
            </c>
            <c>
            </c>
          
          
            <c>
              768
            </c>
            <c>
              Signature Expired
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              769
            </c>
            <c>
              Signature Not Yet Active
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              770
            </c>
            <c>
              Trust Anchor Expired
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              771-1023
            </c>
            <c>
              Unassigned
            </c>
            <c>
            </c>
          
          
            <c>
              1024
            </c>
            <c>
              Bogus Data
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1025
            </c>
            <c>
              Signature Missing
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1026
            </c>
            <c>
              DNSKEY Missing
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1027
            </c>
            <c>
              Key Tag Mismatch
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1028
            </c>
            <c>
              DS Missing
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1029
            </c>
            <c>
              Next-Secure Record Missing
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1030
            </c>
            <c>
              Overreaching Next-Secure Record
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1031
            </c>
            <c>
              Next-Secure Record Pointing Backward
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1032
            </c>
            <c>
              Irrelevant Proof
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1033
            </c>
            <c>
              Incomplete Proof
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1034
            </c>
            <c>
              Wrong RRSIG Owner
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1035
            </c>
            <c>
              Unknown DNSKEY Protocol
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1036
            </c>
            <c>
              DS/DNSKEY Mismatch
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1037
            </c>
            <c>
              Unknown Algorithm
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1038
            </c>
            <c>
              Algorithm Not Supported
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1039
            </c>
            <c>
              Not a Zone Key
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1040
            </c>
            <c>
              Key Revoked
            </c>
            <c>
              [This]
            </c>
          
          
            <c>
              1041-65535
            </c>
            <c>
              Unassigned
            </c>
            <c>
            </c>
          
        
      
    </texttable>
  </section>
</section>
<section title="Acknowledgments" anchor="acknowledgments">
  
  <t>
    Thanks to Wes Hardaker, Jakob Schlyter, Sam Weiler and Francis
    Dupont for assistance in categorizing SERVFAIL error types, and Paul
    Vixie for design input.
  </t>
</section>

</middle>

<back>
    <references title="Normative References">
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC1034'>

<front>
<title abbrev='Domain Concepts and Facilities'>Domain names - concepts and facilities</title>
<author initials='P.' surname='Mockapetris' fullname='P. Mockapetris'>
<organization>Information Sciences Institute (ISI)</organization></author>
<date year='1987' day='1' month='November' /></front>

<seriesInfo name='STD' value='13' />
<seriesInfo name='RFC' value='1034' />
<format type='TXT' octets='129180' target='http://www.rfc-editor.org/rfc/rfc1034.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC1035'>

<front>
<title abbrev='Domain Implementation and Specification'>Domain names - implementation and specification</title>
<author initials='P.' surname='Mockapetris' fullname='P. Mockapetris'>
<organization>USC/ISI</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90291</code>
<country>US</country></postal>
<phone>+1 213 822 1511</phone></address></author>
<date year='1987' day='1' month='November' /></front>

<seriesInfo name='STD' value='13' />
<seriesInfo name='RFC' value='1035' />
<format type='TXT' octets='125626' target='http://www.rfc-editor.org/rfc/rfc1035.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date year='1997' month='March' />
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      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
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
<format type='TXT' octets='4723' target='http://www.rfc-editor.org/rfc/rfc2119.txt' />
<format type='HTML' octets='17491' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5777' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC2671'>

<front>
<title>Extension Mechanisms for DNS (EDNS0)</title>
<author initials='P.' surname='Vixie' fullname='Paul Vixie'>
<organization>Internet Software Consortium</organization>
<address>
<postal>
<street>950 Charter Street</street>
<city>Redwood City</city>
<region>CA</region>
<code>94063</code>
<country>US</country></postal>
<phone>+1 650 779 7001</phone>
<email>vixie@isc.org</email></address></author>
<date year='1999' month='August' />
<abstract>
<t>The Domain Name System's wire protocol includes a number of fixed fields whose range has been or soon will be exhausted and does not allow clients to advertise their capabilities to servers. This document describes backward compatible mechanisms for allowing the protocol to grow.</t></abstract></front>

<seriesInfo name='RFC' value='2671' />
<format type='TXT' octets='15257' target='http://www.rfc-editor.org/rfc/rfc2671.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC2845'>

<front>
<title>Secret Key Transaction Authentication for DNS (TSIG)</title>
<author initials='P.' surname='Vixie' fullname='P. Vixie'>
<organization /></author>
<author initials='O.' surname='Gudmundsson' fullname='O. Gudmundsson'>
<organization /></author>
<author initials='D.' surname='Eastlake' fullname='D. Eastlake'>
<organization /></author>
<author initials='B.' surname='Wellington' fullname='B. Wellington'>
<organization /></author>
<date year='2000' month='May' />
<abstract>
<t>This protocol allows for transaction level authentication using shared secrets and one way hashing.  It can be used to authenticate dynamic updates as coming from an approved client, or to authenticate responses as coming from an approved recursive name server. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='2845' />
<format type='TXT' octets='32272' target='http://www.rfc-editor.org/rfc/rfc2845.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC2931'>

<front>
<title>DNS Request and Transaction Signatures ( SIG(0)s)</title>
<author initials='D.' surname='Eastlake' fullname='D. Eastlake'>
<organization /></author>
<date year='2000' month='September' />
<abstract>
<t>This document describes the minor but non-interoperable changes in Request and Transaction signature resource records ( SIG(0)s ) that implementation experience has deemed necessary. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='2931' />
<format type='TXT' octets='19073' target='http://www.rfc-editor.org/rfc/rfc2931.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC4034'>

<front>
<title>Resource Records for the DNS Security Extensions</title>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='R.' surname='Austein' fullname='R. Austein'>
<organization /></author>
<author initials='M.' surname='Larson' fullname='M. Larson'>
<organization /></author>
<author initials='D.' surname='Massey' fullname='D. Massey'>
<organization /></author>
<author initials='S.' surname='Rose' fullname='S. Rose'>
<organization /></author>
<date year='2005' month='March' />
<abstract>
<t>This document is part of a family of documents that describe the DNS Security Extensions (DNSSEC). The DNS Security Extensions are a collection of resource records and protocol modifications that provide source authentication for the DNS. This document defines the public key (DNSKEY), delegation signer (DS), resource record digital signature (RRSIG), and authenticated denial of existence (NSEC) resource records. The purpose and format of each resource record is described in detail, and an example of each resource record is given.&lt;/t>&lt;t> This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4034' />
<format type='TXT' octets='63879' target='http://www.rfc-editor.org/rfc/rfc4034.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC5011'>

<front>
<title>Automated Updates of DNS Security (DNSSEC) Trust Anchors</title>
<author initials='M.' surname='StJohns' fullname='M. StJohns'>
<organization /></author>
<date year='2007' month='September' />
<abstract>
<t>This document describes a means for automated, authenticated, and authorized updating of DNSSEC "trust anchors". The method provides protection against N-1 key compromises of N keys in the trust point key set. Based on the trust established by the presence of a current anchor, other anchors may be added at the same place in the hierarchy, and, ultimately, supplant the existing anchor(s).&lt;/t>&lt;t> This mechanism will require changes to resolver management behavior (but not resolver resolution behavior), and the addition of a single flag bit to the DNSKEY record. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5011' />
<format type='TXT' octets='30138' target='http://www.rfc-editor.org/rfc/rfc5011.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC5155'>

<front>
<title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existence</title>
<author initials='B.' surname='Laurie' fullname='B. Laurie'>
<organization /></author>
<author initials='G.' surname='Sisson' fullname='G. Sisson'>
<organization /></author>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='D.' surname='Blacka' fullname='D. Blacka'>
<organization /></author>
<date year='2008' month='March' />
<abstract>
<t>The Domain Name System Security (DNSSEC) Extensions introduced the NSEC resource record (RR) for authenticated denial of existence.  This document introduces an alternative resource record, NSEC3, which similarly provides authenticated denial of existence.  However, it also provides measures against zone enumeration and permits gradual expansion of delegation-centric zones. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5155' />
<format type='TXT' octets='112338' target='http://www.rfc-editor.org/rfc/rfc5155.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC5226'>

<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author initials='T.' surname='Narten' fullname='T. Narten'>
<organization /></author>
<author initials='H.' surname='Alvestrand' fullname='H. Alvestrand'>
<organization /></author>
<date year='2008' month='May' />
<abstract>
<t>Many protocols make use of identifiers consisting of constants and other well-known values. Even after a protocol has been defined and deployment has begun, new values may need to be assigned (e.g., for a new option type in DHCP, or a new encryption or authentication transform for IPsec). To ensure that such quantities have consistent values and interpretations across all implementations, their assignment must be administered by a central authority. For IETF protocols, that role is provided by the Internet Assigned Numbers Authority (IANA).&lt;/t>&lt;t> In order for IANA to manage a given namespace prudently, it needs guidelines describing the conditions under which new values can be assigned or when modifications to existing values can be made. If IANA is expected to play a role in the management of a namespace, IANA must be given clear and concise instructions describing that role. This document discusses issues that should be considered in formulating a policy for assigning values to a namespace and provides guidelines for authors on the specific text that must be included in documents that place demands on IANA.&lt;/t>&lt;t> This document obsoletes RFC 2434. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract></front>

<seriesInfo name='BCP' value='26' />
<seriesInfo name='RFC' value='5226' />
<format type='TXT' octets='66160' target='http://www.rfc-editor.org/rfc/rfc5226.txt' />
</reference>
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC6672'>

<front>
<title>DNAME Redirection in the DNS</title>
<author initials='S.' surname='Rose' fullname='S. Rose'>
<organization /></author>
<author initials='W.' surname='Wijngaards' fullname='W. Wijngaards'>
<organization /></author>
<date year='2012' month='June' />
<abstract>
<t>The DNAME record provides redirection for a subtree of the domain name tree in the DNS.  That is, all names that end with a particular suffix are redirected to another part of the DNS.  This document obsoletes the original specification in RFC 2672 as well as updates the document on representing IPv6 addresses in DNS (RFC 3363). [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6672' />
<format type='TXT' octets='45704' target='http://www.rfc-editor.org/rfc/rfc6672.txt' />
</reference>
    </references>
    <references title="Informative References">
<?xml version='1.0' encoding='UTF-8'?>

<reference anchor='RFC5424'>

<front>
<title>The Syslog Protocol</title>
<author initials='R.' surname='Gerhards' fullname='R. Gerhards'>
<organization /></author>
<date year='2009' month='March' />
<abstract>
<t>This document describes the syslog protocol, which is used to convey event notification messages. This protocol utilizes a layered architecture, which allows the use of any number of transport protocols for transmission of syslog messages. It also provides a message format that allows vendor-specific extensions to be provided in a structured way.&lt;/t>&lt;t> This document has been written with the original design goals for traditional syslog in mind. The need for a new layered specification has arisen because standardization efforts for reliable and secure syslog extensions suffer from the lack of a Standards-Track and transport-independent RFC. Without this document, each other standard needs to define its own syslog packet format and transport mechanism, which over time will introduce subtle compatibility issues. This document tries to provide a foundation that syslog extensions can build on. This layered architecture approach also provides a solid basis that allows code to be written once for each syslog feature rather than once for each transport. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5424' />
<format type='TXT' octets='85162' target='http://www.rfc-editor.org/rfc/rfc5424.txt' />
</reference>
    </references>
</back>
</rfc>
