<?xml version="1.0" encoding="UTF-8"?>
<rfc version="3"
     submissionType="IETF"
     category="std"
     consensus="true"
     ipr="trust200902"
     docName="draft-liu-add-ppp-edns-negotiation-03"
     xml:lang="en">

  <front>
    <title abbrev="PPP Encrypted DNS">PPP IPCP Extensions for Encrypted DNS Server Negotiation</title>

    <author fullname="Dongjie Liu" initials="D." surname="Liu">
      <organization>Jinan University</organization>
      <address>
        <email>dongjieliu8917@gmail.com</email>
      </address>
    </author>
    <author fullname="Zhiwei Yan" initials="Z." surname="Yan">
      <organization>CNNIC</organization>
      <address>
        <email>yanzhiwei@cnnic.cn</email>
      </address>
    </author>
    
    <author fullname="Guanggang Geng" initials="G." surname="Geng">
      <organization>Jinan University</organization>
      <address>
        <email>guanggang.geng@gmail.com</email>
      </address>
    </author>
    

    <date day="17" month="September" year="2026"/>
    <area>Internet</area>
    <workgroup>ADD Working Group</workgroup>
    <keyword>PPP</keyword>
    <keyword>IPCP</keyword>
    <keyword>encrypted DNS</keyword>
    <keyword>DNS over TLS</keyword>
    <keyword>DNS over HTTPS</keyword>
    <keyword>DNS over QUIC</keyword>

    <abstract>
      <t>
        This document defines extensions to the Point-to-Point Protocol (PPP)
        Internet Protocol Control Protocol (IPCP) for negotiating encrypted DNS
        resolver configurations. Two IPCP Configuration Options are defined for
        primary and secondary encrypted DNS resolvers. Each option carries an
        Authentication Domain Name (ADN), an explicit list of resolver IP
        addresses, and Service Parameters (SvcParams) using the wire format
        defined by RFC 9460. The design supports DNS over TLS (DoT), DNS over
        HTTPS (DoH), and DNS over QUIC (DoQ), while maintaining coexistence with
        the plaintext DNS configuration mechanism defined by RFC 1877.
      </t>
    </abstract>
  </front>

  <middle>
    <section>
      <name>Introduction</name>
      <t>
        The Point-to-Point Protocol (PPP) <xref target="RFC1661"/> includes the
        Internet Protocol Control Protocol (IPCP), which is used to configure
        IPv4 parameters for a PPP peer. RFC 1877 <xref target="RFC1877"/>
        defines an IPCP extension for communicating DNS name server addresses,
        but those addresses identify plaintext DNS resolvers and do not provide
        information needed to configure encrypted DNS transports.
      </t>
      <t>
        This document defines two IPCP Configuration Options for encrypted DNS:
        one for a primary resolver and one for a secondary resolver. Each option
        is a complete resolver configuration and contains an Authentication
        Domain Name (ADN), an explicit address list, and Service Parameters
        (SvcParams). The SvcParams use the encoding specified by RFC 9460
        <xref target="RFC9460"/> so that existing Service Binding parameter
        definitions can be reused without defining a new parameter registry.
      </t>
      <t>
        The design supports DNS over TLS (DoT) <xref target="RFC7858"/>, DNS
        over HTTPS (DoH) <xref target="RFC8484"/>, and DNS over QUIC (DoQ)
        <xref target="RFC9250"/>. It does not define a new encrypted-DNS
        transport protocol or a new representation for ALPN, port, or DoH path
        parameters.
      </t>
      <t>
        The encrypted DNS options coexist with RFC 1877. When both encrypted
        DNS and plaintext DNS configuration are available, the encrypted DNS
        configuration takes precedence. If the encrypted DNS service cannot be
        used, the client MAY fall back to plaintext DNS configuration
        obtained through RFC 1877, subject to local policy and the
        requirements of RFC 1877.
      </t>
    </section>

    <section>
      <name>Conventions and Terminology</name>
      <t>
        The key words <bcp14>MUST</bcp14>, <bcp14>MUST NOT</bcp14>,
        <bcp14>REQUIRED</bcp14>, <bcp14>SHALL</bcp14>, <bcp14>SHALL NOT</bcp14>,
        <bcp14>SHOULD</bcp14>, <bcp14>SHOULD NOT</bcp14>,
        <bcp14>RECOMMENDED</bcp14>, <bcp14>NOT RECOMMENDED</bcp14>,
        <bcp14>MAY</bcp14>, and <bcp14>OPTIONAL</bcp14> in this document are to
        be interpreted as described in BCP 14 <xref target="RFC2119"/>
        <xref target="RFC8174"/>.
      </t>
      <t>
        <strong>ADN</strong> means Authentication Domain Name, encoded as a DNS
        wire-format domain name and used for TLS server identity validation.
      </t>
      <t>
        <strong>Resolver Configuration</strong> means one complete Option 133 or Option 134
        option containing an ADN, an address list, and SvcParams.
      </t>
    </section>

    <section>
      <name>Protocol Model</name>
      <t>
        This document defines exactly two encrypted DNS IPCP Configuration
        Options:
      </t>
      <ul>
        <li><t>Option 133: Primary Encrypted DNS Server.</t></li>
        <li><t>Option 134: Secondary Encrypted DNS Server.</t></li>
      </ul>
      <t>
        Option 133 is the Primary Encrypted DNS Server Option, and Option 134 is the
        Secondary Encrypted DNS Server Option. IANA is requested to assign these
        values from the PPP IPCP Configuration Option Types registry.
      </t>
      <t>
        Each Option 133 or Option 134 independently contains all information required
        to configure one encrypted DNS resolver. There is no independent
        configuration option for encryption parameters.
      </t>
      <t>
        A client <bcp14>MUST NOT</bcp14> treat multiple instances of the same
        Option 133 or Option 134 as an ordered list or apply a "last received wins"
        rule. Duplicate instances are invalid. Processing of malformed or
        duplicate Configuration Options follows the general IPCP rules in
        RFC 1661 <xref target="RFC1661"/>.
      </t>
      <t>
        The primary and secondary roles do not define an IPCP renegotiation
        procedure. Selection and failover between the two successfully
        negotiated resolver configurations are local client policy.
      </t>
    </section>

    <section>
      <name>Option Format</name>
      <t>
        Both Option 133 and Option 134 use the same option format. The only difference
        is the Configuration Option Type.
      </t>

      <figure anchor="fig-option-format">
        <name>Encrypted DNS Configuration Option Format</name>
        <artwork><![CDATA[
  0                   1                   2                   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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Type      |    Length     |      ADN Length              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                         ADN ...                               |
 ~                                                               ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Address List  | Address List |          SvcParams ...         |
 |    Length     |    ...       |                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~                     SvcParams ...                             ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
      </figure>

      <t>
        The fields are:
      </t>
      <ul>
        <li><t><strong>Type:</strong> One of the two IANA-assigned IPCP Configuration Option Types.</t></li>
        <li><t><strong>Length:</strong> The total length of the Configuration Option, including Type and Length.</t></li>
        <li><t><strong>ADN Length:</strong> One octet indicating the length of the ADN field in octets.</t></li>
        <li><t><strong>ADN:</strong> The DNS wire-format Authentication Domain Name.</t></li>
        <li><t><strong>Address List Length:</strong> One octet indicating the length of the Address List field in octets.</t></li>
        <li><t><strong>Address List:</strong> A sequence of address-family identifiers and IP addresses.</t></li>
        <li><t><strong>SvcParams Length:</strong> One octet indicating the length of the SvcParams field in octets.</t></li>
        <li><t><strong>SvcParams:</strong> Service Parameters encoded using the wire format defined by RFC 9460.</t></li>
      </ul>
      <t>
        The complete option, including all nested fields, <bcp14>MUST</bcp14>
        fit within the PPP MRU. This document does not define fragmentation of
        an individual Configuration Option. An implementation
        <bcp14>MUST NOT</bcp14> silently truncate an option.
      </t>
    </section>

    <section>
      <name>Primary Encrypted DNS Server Option (133)</name>
      <t>
        Option 133 identifies the primary encrypted DNS resolver configuration.
      </t>
      <t>
        An Option 133 <bcp14>MUST</bcp14> contain an ADN field, an Address List
        field, and a SvcParams field, each preceded by its corresponding length
        field. A client may use an empty Address List as a discovery probe as
        described in <xref target="ipcp-negotiation"/>.
      </t>
    </section>

    <section>
      <name>Secondary Encrypted DNS Server Option (134)</name>
      <t>
        Option 134 identifies the secondary encrypted DNS resolver configuration.
      </t>
      <t>
        Option 134 has exactly the same field structure and validation requirements as
        Option 133. The distinction between primary and secondary is determined by the
        Configuration Option Type, not by a field inside the option.
      </t>
    </section>

    <section>
      <name>Length Fields</name>
      <t>
        ADN Length, Address List Length, and SvcParams Length are each one
        octet. The outer PPP Configuration Option Length field is also one
        octet, as defined by IPCP. Consequently, the complete option cannot
        exceed 255 octets.
      </t>
      <t>
        A receiver <bcp14>MUST</bcp14> verify that every inner length is no
        greater than the number of octets remaining in the outer Configuration
        Option. A receiver <bcp14>MUST</bcp14> reject or otherwise process as
        malformed any option whose inner lengths cause parsing to extend beyond
        the outer option boundary.
      </t>
      <t>
        This document does not define larger inner length fields. Any future
        extension requiring subfields larger than 255 octets would require a
        revision or a new option format.
      </t>
    </section>

    <section anchor="adn-encoding">
      <name>ADN Encoding</name>
      <t>
        The ADN is encoded using the DNS wire-format domain-name representation
        defined by RFC 1034 and RFC 1035 <xref target="RFC1034"/>
        <xref target="RFC1035"/>.
      </t>
      <t>
        The ADN <bcp14>MUST</bcp14> terminate with the root label. It
        <bcp14>MUST</bcp14> contain at least one non-root label and
        <bcp14>MUST NOT</bcp14> contain DNS compression pointers. The encoded
        ADN, including the terminating root label, <bcp14>MUST NOT</bcp14>
        exceed 255 octets.
      </t>
      <t>
        A client that uses an ADN of zero length is making a configuration
        request or probe and is not presenting a resolver identity. A server
        response that supplies a usable resolver configuration
        <bcp14>SHOULD</bcp14> contain a valid non-empty ADN.
      </t>
    </section>

    <section>
      <name>Address List</name>
      <t>
        The Address List consists of zero or more address entries. Each entry
        begins with a one-octet address-family identifier (AF), followed by the
        address associated with that AF.
      </t>

      <table anchor="af-address-family">
        <name>Address-Family Values</name>
        <thead>
          <tr>
            <th>AF</th>
            <th>Address</th>
            <th>Length</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>1</td>
            <td>IPv4</td>
            <td>4 octets</td>
          </tr>
          <tr>
            <td>2</td>
            <td>IPv6</td>
            <td>16 octets</td>
          </tr>
        </tbody>
      </table>

      <t>
        Address List Length counts both the one-octet AF field and the address
        octets for every entry. For example, an IPv4 entry consumes 5 octets
        and an IPv6 entry consumes 17 octets. IPv4 and IPv6 entries
        <bcp14>MAY</bcp14> be mixed in one list.
      </t>
      <t>
        Address-family values other than 1 and 2 are not defined by this
        document. A receiver <bcp14>MUST</bcp14> treat an entry with an
        unsupported AF as invalid rather than guessing its length.
      </t>
      <t>
        Address List Length equal to zero <bcp14>MAY</bcp14> be used in a client
        Configure-Request as a discovery probe. Such a probe <bcp14>MAY</bcp14>
        contain non-zero SvcParams. A Configure-Ack containing no resolver
        addresses is <bcp14>NOT RECOMMENDED</bcp14> unless another trusted
        resolver discovery or bootstrap mechanism is available.
      </t>
    </section>

    <section>
      <name>SvcParams</name>
      <t>
        The SvcParams field reuses the SvcParam wire format defined by
        RFC 9460 <xref target="RFC9460"/>. This document does not define a new
        SvcParam encoding or registry.
      </t>
      <t>
        SvcParam keys <bcp14>MUST</bcp14> appear in strictly increasing
        numerical order. Duplicate keys are invalid. Processing of individual
        SvcParams, including handling of unknown optional parameters, follows
        the rules of RFC 9460.
      </t>
      <t>
        The <tt>alpn</tt>, <tt>port</tt>,
        and <tt>dohpath</tt> parameters, when applicable,
        use their RFC 9460 definitions. The ALPN identifiers are defined by
        RFC 7301 <xref target="RFC7301"/>, and the DoH path template follows
        RFC 9461 <xref target="RFC9461"/>.
      </t>
      <t>
        The <tt>ipv4hint</tt> and
        <tt>ipv6hint</tt> parameters <bcp14>MUST NOT</bcp14>
        be included in a resolver configuration defined by this document,
        because the resolver IP addresses are explicitly carried in the
        Address List.
      </t>
      <t>
        SvcParams Length equal to zero means that the SvcParams field contains
        zero octets. It does not denote a separate encoding of an empty
        SvcParam set. When SvcParams Length is zero, the local default encrypted
        DNS transport is DoT.
      </t>
      <t>
        If a resolver configuration contains a required encrypted-DNS transport
        parameter that an implementation cannot understand or safely apply,
        that resolver configuration <bcp14>MUST NOT</bcp14> be activated.
      </t>
      <t>
        If a <tt>port</tt> SvcParam is present, its value
        <bcp14>MUST NOT</bcp14> be zero. The default ports for the encrypted DNS
        transports are used only when the corresponding protocol specification
        defines such a default and the port parameter is absent.
      </t>
    </section>

    <section anchor="wire-format-validation">
      <name>Wire-Format Validation</name>
      <t>
        A receiver <bcp14>MUST</bcp14> perform the following validation before
        activating a resolver configuration:
      </t>
      <ol>
        <li><t>The outer Configuration Option Length is consistent with the number of octets received.</t></li>
        <li><t>All inner length fields remain within the outer option boundary.</t></li>
        <li><t>The ADN satisfies the DNS wire-format requirements in <xref target="adn-encoding"/>.</t></li>
        <li><t>The Address List contains complete AF/address entries and uses only AF values defined by this document.</t></li>
        <li><t>SvcParam keys are strictly increasing and contain no duplicates.</t></li>
        <li><t>Any <tt>port</tt> SvcParam has a non-zero value.</t></li>
        <li><t>The encrypted DNS transport indicated by the configuration is supported by the implementation.</t></li>
        <li><t>TLS identity validation can be performed using the ADN as specified in <xref target="tls-authentication"/>.</t></li>
      </ol>
    </section>

    <section anchor="ipcp-negotiation">
      <name>IPCP Negotiation</name>
      <t>
        The negotiation follows the Configure-Request, Configure-Ack,
        Configure-Nak, and Configure-Reject procedures defined by RFC 1661
        <xref target="RFC1661"/>.
      </t>

      <section>
        <name>Client Configure-Request</name>
        <t>
          A client <bcp14>MAY</bcp14> include Option 133 and/or Option 134 in a
          Configure-Request. To probe for encrypted DNS configuration without
          supplying a resolver address, the client may use an empty Address
          List. The client <bcp14>MAY</bcp14> include non-zero SvcParams in
          such a request to indicate requested transport capabilities or
          parameters.
        </t>
        <t>
          A client <bcp14>MUST NOT</bcp14> assume that an empty Address List in
          a Configure-Ack constitutes a usable resolver configuration unless an
          independent trusted discovery or bootstrap mechanism exists.
        </t>
      </section>

      <section>
        <name>Server Response</name>
        <t>
          For a recognizable option whose value is unacceptable but for which
          an acceptable replacement can be constructed, the peer may use
          Configure-Nak as specified by RFC 1661. A Configure-Nak
          <bcp14>MUST NOT</bcp14> contain a malformed Option 133 or Option 134.
        </t>
        <t>
          If an option is unrecognized or cannot be negotiated, Configure-Reject
          is used according to RFC 1661. If an option is malformed and no valid
          replacement can be represented, the implementation follows the
          general malformed packet processing rules rather than constructing an
          invalid Configure-Nak.
        </t>
      </section>

      <section>
        <name>Duplicate Options</name>
        <t>
          A Configure-Request containing more than one Option 133 instance or more
          than one Option 134 instance is invalid. An implementation
          <bcp14>MUST NOT</bcp14> apply a "last received wins" rule to duplicate
          resolver options.
        </t>
      </section>
    </section>

    <section anchor="primary-secondary">
      <name>Primary and Secondary Resolver Selection</name>
      <t>
        Option 133 identifies the primary resolver and Option 134 identifies the secondary
        resolver. Both may be negotiated independently.
      </t>
      <t>
        Failover from the primary resolver to the secondary resolver is local
        client policy. A client <bcp14>MAY</bcp14> try the secondary resolver
        after connectivity-level failures of the primary resolver, subject to
        local policy. Such failover does not require IPCP renegotiation.
      </t>
      <t>
        Authentication failure of the primary resolver
        <bcp14>MUST NOT</bcp14> automatically trigger failover to the secondary
        resolver merely to bypass authentication failure. A client
        <bcp14>MAY</bcp14> use the secondary resolver when independently
        configured or trusted according to local policy.
      </t>
      <t>
        This document defines exactly two encrypted DNS resolver
        configurations. Negotiation and selection of more than two encrypted
        DNS resolvers are outside the scope of this document.
      </t>
    </section>

    <section anchor="rfc1877-coexistence">
      <name>Coexistence with RFC 1877</name>
      <t>
        When an encrypted DNS resolver configuration is successfully negotiated,
        the client <bcp14>SHOULD</bcp14> prefer the encrypted DNS service for DNS resolution.
      </t>
      <t>
        If the client cannot establish or use the negotiated encrypted DNS
        service, the client <bcp14>MAY</bcp14> use plaintext DNS configuration
        obtained through RFC 1877 <xref target="RFC1877"/>, subject to local
        policy and the requirements of RFC 1877.
      </t>
      <t>
        The IPCP Configuration Options defined in this document do not
        negotiate an operating mode. The presence of an encrypted DNS
        configuration does not prohibit the use of RFC 1877 plaintext DNS
        when the encrypted DNS service is unavailable.
      </t>
      <t>
        Failure of the encrypted DNS service does not require IPCP
        renegotiation.
      </t>
    </section>

    <section anchor="encrypted-dns-use">
      <name>Encrypted DNS Transport Use</name>
      <t>
        The protocol identifier and SvcParams determine which encrypted DNS
        transport is used. Implementations supporting DoT use RFC 7858
        <xref target="RFC7858"/>. Implementations supporting DoH use RFC 8484
        <xref target="RFC8484"/> together with RFC 9461
        <xref target="RFC9461"/> when the DoH path is specified. Implementations
        supporting DoQ use RFC 9250 <xref target="RFC9250"/>.
      </t>
      <t>
        When SvcParams Length is zero, DoT is the local default. A deployment
        requiring another transport <bcp14>SHOULD</bcp14> provide the necessary
        SvcParams explicitly.
      </t>
    </section>

    <section anchor="transport-mappings">
      <name>Transport Mappings</name>
      <t>
        This document reuses existing protocol-specific parameter definitions
        rather than defining new ALPN, path, or port TLVs.
      </t>
      <ul>
        <li>
          <t>
            DoT uses the transport defined by RFC 7858 and the corresponding
            TLS service parameters.
          </t>
        </li>
        <li>
          <t>
            DoH uses RFC 8484 and the <tt>dohpath</tt>
            parameter defined by RFC 9461 when a non-default path is required.
          </t>
        </li>
        <li>
          <t>
            DoQ uses RFC 9250 and its applicable ALPN identifier.
          </t>
        </li>
      </ul>
      <t>
        ALPN values are encoded using the SvcParam representation specified by
        RFC 9460 and are not encoded as comma-separated strings or as a new
        IPCP-specific TLV.
      </t>
    </section>

    <section anchor="tls-authentication">
      <name>TLS Authentication</name>
      <t>
        The IP addresses in the Address List are network locators. They are not
        TLS identities. When establishing an encrypted DNS connection, the
        client <bcp14>MUST</bcp14> validate the server identity using the ADN
        and the applicable TLS certificate identity rules in RFC 9525
        <xref target="RFC9525"/>.
      </t>
      <t>
        An implementation <bcp14>MUST NOT</bcp14> treat possession of an IP
        address from an IPCP option as sufficient evidence of the resolver's
        TLS identity.
      </t>
      <t>
        If certificate validation against the ADN fails, the corresponding
        resolver configuration <bcp14>MUST NOT</bcp14> be treated as an
        authenticated encrypted DNS resolver.
      </t>
    </section>

    <section>
      <name>Security Considerations</name>
      <t>
        The IPCP Configuration Options defined in this document provide
        encrypted DNS resolver configuration. Receipt of an IPCP option
        does not by itself authenticate the DNS service or prove that the
        option was supplied by a trusted network operator.
      </t>
      <t>
        When establishing an encrypted DNS connection, the client
        <bcp14>MUST</bcp14> authenticate the resolver according to the
        applicable encrypted DNS transport specification. In particular,
        the Address List identifies network locations and the ADN identifies
        the DNS service for purposes of TLS server identity validation.
        An IP address received in an IPCP option <bcp14>MUST NOT</bcp14> be
        treated as sufficient evidence of the resolver's identity.
      </t>
      <t>
        The IPCP options defined by this document do not provide
        cryptographic protection for the configuration itself. Deployments
        that require protection of PPP control traffic should use an
        appropriate PPP security mechanism when available.
      </t>
      <t>
        When the encrypted DNS service cannot be established or used,
        the behavior defined in this document permits the client to use
        plaintext DNS configuration obtained through RFC 1877
        <xref target="RFC1877"/>. Such fallback does not provide the
        confidentiality and integrity properties of encrypted DNS.
      </t>
      <t>
        PPP does not require applications to use the resolver configuration
        negotiated by this protocol. Implementations may apply local
        resolver-selection policy, provided that such policy is consistent
        with the requirements of this document.
      </t>
    </section>

    <section>
      <name>IANA Considerations</name>
      <t>
        IANA is requested to assign the following values from the
        "PPP IPCP Configuration Option Types" registry:
      </t>
      <ul>
        <li><t>133 — Primary Encrypted DNS Server.</t></li>
        <li><t>134 — Secondary Encrypted DNS Server.</t></li>
      </ul>
      <t>
        The allocation is subject to the policy defined by RFC 3818
        <xref target="RFC3818"/>.
      </t>
      <t>
        This document does not create a new SvcParam registry or a new
        address-family registry. The AF values 1 and 2 used in this document
        are local field values corresponding to IPv4 and IPv6. Additional AF
        values would require a revision of this document.
      </t>
    </section>

    <section>
      <name>Examples</name>
      <section>
        <name>Basic DoT Configuration</name>
        <figure>
          <name>Basic DoT Negotiation</name>
          <artwork><![CDATA[
Client: Configure-Request
  Option 133:
    Address List Length: 0
    SvcParams Length: 0

Server: Configure-Nak
  Option 133:
    ADN: dot.example.com.
    Address List:
      AF=1, Address=192.0.2.53
    SvcParams Length: 0

Client: Configure-Request
  Option 133:
    ADN: dot.example.com.
    Address List:
      AF=1, Address=192.0.2.53
    SvcParams Length: 0

Server: Configure-Ack
  Option 133:
    ADN: dot.example.com.
    Address List:
      AF=1, Address=192.0.2.53
    SvcParams Length: 0
]]></artwork>
        </figure>
      </section>

      <section>
        <name>DoH with Custom Path</name>
        <figure>
          <name>DoH Negotiation with SvcParams</name>
          <artwork><![CDATA[
Client: Configure-Request
  Option 133:
    Address List Length: 0
    SvcParams:
      dohpath=/dns-query

Server: Configure-Nak
  Option 133:
    ADN: doh.example.com.
    Address List:
      AF=2, Address=2001:db8::53
    SvcParams:
      alpn=h2
      dohpath=/dns-query

Client: Configure-Request
  Option 133:
    ADN: doh.example.com.
    Address List:
      AF=2, Address=2001:db8::53
    SvcParams:
      alpn=h2
      dohpath=/dns-query

Server: Configure-Ack
  Option 133:
    ADN: doh.example.com.
    Address List:
      AF=2, Address=2001:db8::53
    SvcParams:
      alpn=h2
      dohpath=/dns-query
]]></artwork>
        </figure>
      </section>

      <section>
        <name>Dual-Stack Resolver Address List</name>
        <figure>
          <name>Mixed IPv4 and IPv6 Addresses</name>
          <artwork><![CDATA[
Option 133:
  ADN: dns.example.com.
  Address List:
    AF=1, Address=192.0.2.53
    AF=2, Address=2001:db8::53
  SvcParams Length: 0
]]></artwork>
        </figure>
      </section>
    </section>

    <section>
      <name>Implementation Considerations</name>
      <t>
        Implementations should validate all nested lengths before attempting to
        parse an ADN, Address List, or SvcParams field. In particular, an
        implementation should not use an inner length to read beyond the
        enclosing PPP Configuration Option.
      </t>
      <t>
        Implementations should preserve the distinction between a missing
        SvcParams field, a zero-length SvcParams field, and an SvcParams field
        containing encoded parameters. Under the format defined here, a
        zero-length SvcParams field selects the local DoT default.
      </t>
      <t>
        Implementations should reject duplicate SvcParam keys and should not
        silently reinterpret an unsupported address-family value.
      </t>
      <t>
        Implementations should keep resolver selection and failover decisions
        separate from IPCP option parsing. In particular, authentication
        failure should not be converted into an automatic secondary-resolver
        bypass.
      </t>
    </section>

    <section>
      <name>Future Work</name>
      <t>
        This document intentionally limits encrypted DNS negotiation to two
        complete resolver configurations and one-octet inner length fields.
        Future work could define a new option format if larger configurations
        or more than two resolver configurations are required.
      </t>
    </section>
  </middle>

  <back>
    <references>
      <name>Normative References</name>

      <reference anchor="RFC1661">
        <front>
          <title>The Point-to-Point Protocol (PPP)</title>
          <author initials="W." surname="Simpson" fullname="William A. Simpson"/>
          <date year="1994" month="July"/>
        </front>
        <seriesInfo name="RFC" value="1661"/>
      </reference>
<reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="Scott Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="RFC" value="2119"/>
      </reference>

      <reference anchor="RFC3818">
        <front>
          <title>IANA Considerations for the Point-to-Point Protocol (PPP)</title>
          <author initials="V." surname="Schryver" fullname="Vern Schryver"/>
          <date year="2004" month="June"/>
        </front>
        <seriesInfo name="RFC" value="3818"/>
      </reference>

      <reference anchor="RFC7301">
        <front>
          <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
          <author initials="S." surname="Friedl" fullname="Simon Friedl"/>
          <author initials="A." surname="Popov" fullname="Andrei Popov"/>
          <author initials="A." surname="Langley" fullname="Adam Langley"/>
          <author initials="E." surname="Stephan" fullname="Emile Stephan"/>
          <date year="2014" month="July"/>
        </front>
        <seriesInfo name="RFC" value="7301"/>
      </reference>

      <reference anchor="RFC7858">
        <front>
          <title>Specification for DNS over TLS</title>
          <author initials="Z." surname="Hu" fullname="Z. Hu"/>
          <author initials="L." surname="Zhu" fullname="L. Zhu"/>
          <author initials="J." surname="Heidemann" fullname="J. Heidemann"/>
          <author initials="A." surname="Mankin" fullname="A. Mankin"/>
          <author initials="D." surname="Wessels" fullname="D. Wessels"/>
          <author initials="P." surname="Hoffman" fullname="P. Hoffman"/>
          <date year="2016" month="May"/>
        </front>
        <seriesInfo name="RFC" value="7858"/>
      </reference>

      <reference anchor="RFC8484">
        <front>
          <title>DNS Queries over HTTPS</title>
          <author initials="P." surname="Hoffman" fullname="Paul Hoffman"/>
          <author initials="P." surname="McManus" fullname="Patrick McManus"/>
          <date year="2018" month="October"/>
        </front>
        <seriesInfo name="RFC" value="8484"/>
      </reference>

      <reference anchor="RFC9250">
        <front>
          <title>DNS over Dedicated QUIC</title>
          <author initials="C." surname="Huitema" fullname="Christian Huitema"/>
          <author initials="S." surname="Dickinson" fullname="Sara Dickinson"/>
          <author initials="A." surname="Mankin" fullname="Allison Mankin"/>
          <date year="2022" month="May"/>
        </front>
        <seriesInfo name="RFC" value="9250"/>
      </reference>

      <reference anchor="RFC9460">
        <front>
          <title>Service Binding Mapping</title>
          <author initials="B." surname="Schwartz" fullname="Ben Schwartz"/>
          <author initials="M." surname="Bishop" fullname="Matt Bishop"/>
          <author initials="E." surname="Nygren" fullname="Erik Nygren"/>
          <date year="2023" month="November"/>
        </front>
        <seriesInfo name="RFC" value="9460"/>
      </reference>

      <reference anchor="RFC9461">
        <front>
          <title>Service Binding Mapping for HTTP</title>
          <author initials="B." surname="Schwartz" fullname="Ben Schwartz"/>
          <date year="2023" month="November"/>
        </front>
        <seriesInfo name="RFC" value="9461"/>
      </reference>

      <reference anchor="RFC9525">
        <front>
          <title>Service Identity in TLS</title>
          <author initials="P." surname="Saint-Andre" fullname="Peter Saint-Andre"/>
          <author initials="R." surname="Salz" fullname="Richard Salz"/>
          <date year="2024" month="December"/>
        </front>
        <seriesInfo name="RFC" value="9525"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>

      <reference anchor="RFC1877">
        <front>
          <title>PPP Internet Protocol Control Protocol Extensions for Name Server Addresses</title>
          <author initials="S." surname="Cobb" fullname="Stephen Cobb"/>
          <date year="1995" month="December"/>
        </front>
        <seriesInfo name="RFC" value="1877"/>
      </reference>

      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="Barry Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8174"/>
      </reference>

      <reference anchor="RFC1034">
        <front>
          <title>Domain Names - Concepts and Facilities</title>
          <author initials="P." surname="Mockapetris" fullname="Paul Mockapetris"/>
          <date year="1987" month="November"/>
        </front>
        <seriesInfo name="RFC" value="1034"/>
      </reference>

      <reference anchor="RFC1035">
        <front>
          <title>Domain Names - Implementation and Specification</title>
          <author initials="P." surname="Mockapetris" fullname="Paul Mockapetris"/>
          <date year="1987" month="November"/>
        </front>
        <seriesInfo name="RFC" value="1035"/>
      </reference>
    </references>

    <section numbered="false">
      <name>Acknowledgments</name>
      <t>
        The authors would like to thank Dan Wing from Cisco for useful input.
        This work is supported by the National Key Research and Development
        Program of China (No. 2022YFB3103000).
      </t>
    </section>
  </back>
</rfc>
