<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-boucadair-dots-server-discovery-03"
     ipr="trust200902">
  <front>
    <title abbrev="DOTS Server Discovery">Distributed-Denial-of-Service Open
    Threat Signaling (DOTS) Server Discovery</title>

    <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
      <organization>Orange</organization>

      <address>
        <postal>
          <street></street>

          <city>Rennes</city>

          <region></region>

          <code>35000</code>

          <country>France</country>
        </postal>

        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>

    <author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy">
      <organization abbrev="McAfee">McAfee, Inc.</organization>

      <address>
        <postal>
          <street>Embassy Golf Link Business Park</street>

          <city>Bangalore</city>

          <region>Karnataka</region>

          <code>560071</code>

          <country>India</country>
        </postal>

        <email>TirumaleswarReddy_Konda@McAfee.com</email>
      </address>
    </author>

    <author fullname="Prashanth Patil" initials="P." surname="Patil">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street></street>

          <street></street>

          <city></city>

          <country></country>
        </postal>

        <email>praspati@cisco.com</email>
      </address>
    </author>

    <date />

    <abstract>
      <t>It may not be possible for a network to determine the cause for an
      attack, but instead just realize that some resources seem to be under
      attack. To fill that gap, Distributed-Denial-of-Service Open Threat
      Signaling (DOTS) allows a network to inform a DOTS server that it is
      under a potential attack so that appropriate mitigation actions are
      undertaken.</t>

      <t>This document specifies mechanisms to configure nodes with DOTS
      servers.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>In many deployments, it may not be possible for a network to
      determine the cause for a distributed Denial-of-Service (DoS) attack
      <xref target="RFC4732"></xref>, but instead just realize that some
      resources seem to be under attack. To fill that gap, the IETF is
      specifying an architecture, called DDoS Open Threat Signaling (DOTS)
      <xref target="I-D.ietf-dots-architecture"></xref>, in which a DOTS
      client can inform a DOTS server that the network is under a potential
      attack and that appropriate mitigation actions are required. Indeed,
      because the lack of a common method to coordinate a real-time response
      among involved actors and network domains inhibits the effectiveness of
      DDoS attack mitigation, DOTS protocol is meant to carry requests for
      DDoS attack mitigation, thereby reducing the impact of an attack and
      leading to more efficient defensive actions. <xref
      target="I-D.ietf-dots-use-cases"></xref> identifies a set of scenarios
      for DOTS.</t>

      <t>The basic high-level DOTS architecture is illustrated in <xref
      target="arch"></xref> (<xref
      target="I-D.ietf-dots-architecture"></xref>):</t>

      <t><figure align="center" anchor="arch" title="Basic DOTS Architecture">
          <artwork><![CDATA[       +-----------+            +-------------+
       | Mitigator | ~~~~~~~~~~ | DOTS Server |
       +-----------+            +-------------+
                                       |
                                       |
                                       |
       +---------------+        +-------------+
       | Attack Target | ~~~~~~ | DOTS Client |
       +---------------+        +-------------+
]]></artwork>
        </figure></t>

      <t><xref target="I-D.ietf-dots-architecture"></xref> specifies that the
      DOTS client may be provided with a list of DOTS servers; each associated
      with one or more IP addresses. These addresses may or may not be of the
      same address family. The DOTS client establishes one or more DOTS
      sessions by connecting to the provided DOTS server addresses. The logic
      for connecting to one or multiple IP addresses is out of scope of this
      document.</t>

      <t>This document specifies methods for DOTS clients to discover their
      DOTS server(s). The rationale for specifying multiple discovery
      mechanisms is discussed in <xref target="rationale"></xref>.</t>

      <t>Considerations for the selection of DOTS server(s) by multi-homed
      DOTS clients is out of scope; the reader should refer to <xref
      target="I-D.boucadair-dots-multihoming"></xref> for more details.</t>

      <t>Likewise, happy eyeballs considerations for DOTS are out of scope.
      The reader should refer to Section 4 of <xref
      target="I-D.ietf-dots-signal-channel"></xref>.</t>
    </section>

    <section title="Requirements Language">
      <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">RFC 2119</xref>.</t>
    </section>

    <section title="Terminology">
      <t>This document makes use of the following terms:<?rfc subcompact="yes" ?></t>

      <t><list style="symbols">
          <t>DDoS: A distributed Denial-of-Service attack, in which traffic
          originating from multiple sources are directed at a target on a
          network. DDoS attacks are intended to cause a negative impact on the
          availability of servers, services, applications, and/or other
          functionality of an attack target.</t>

          <t>DHCP refers to both DHCPv4 <xref target="RFC2131"></xref> and
          DHCPv6 <xref target="RFC3315"></xref>.</t>

          <t>DHCP client denotes a node that initiates requests to obtain
          configuration parameters from one or more DHCP servers.</t>

          <t>DHCP server refers to a node that responds to requests from DHCP
          clients.</t>

          <t>DOTS client: A DOTS-aware software module responsible for
          requesting attack response coordination with other DOTS-aware
          elements.</t>

          <t>DOTS server: A DOTS-aware software module handling and responding
          to messages from DOTS clients. The DOTS server should enable
          mitigation on behalf of the DOTS client, if requested, by
          communicating the DOTS client's request to the mitigator and
          returning selected mitigator feedback to the requesting DOTS client.
          A DOTS server may also be a mitigator.</t>

          <t>DOTS gateway: A DOTS-aware software module that is logically
          equivalent to a DOTS client back-to-back with a DOTS server.</t>
        </list><?rfc subcompact="no" ?></t>

      <t>Furthermore, the reader should be familiar with other terms defined
      in <xref target="I-D.ietf-dots-architecture"></xref> and <xref
      target="RFC3958"></xref>.</t>
    </section>

    <section anchor="rationale" title="Why Multiple Discovery Mechanisms?">
      <t>It is tempting to specify one single discovery mechanism for DOTS.
      Nevertheless, the analysis of the various use cases sketched in <xref
      target="I-D.ietf-dots-use-cases"></xref> reveals that it is unlikely
      that one single discovery method can be suitable for all the sample
      deployments (<xref target="uc"></xref>). Concretely:<list
          style="symbols">
          <t>Some of the use cases may allow DOTS clients to have direct
          communications with upstream DOTS servers; that is no DOTS gateway
          is involved. Leveraging on existing features that do not require
          specific feature on the node embedding the DOTS client may ease DOTS
          deployment. Typically, the use of Straightforward-Naming Authority
          Pointer (S-NAPTR) lookups <xref target="RFC3958"></xref> allows the
          DOTS server administrators provision the preferred DOTS signal
          channel transport protocol between the DOTS client and the DOTS
          server and allows the DOTS client to discover this preference.</t>

          <t>Resolving a DOTS server domain name offered by the upstream
          transit provider provisioned to a DOTS client into IP address(es)
          require the use of the appropriate DNS resolvers; otherwise,
          resolving those names will fail. The use of protocols such as DHCP
          does allow to associate provisioned DOTS server domain names with a
          list of DNS servers to be used for name resolution.</t>

          <t>The upstream network provider is not the DDoS mitigation provider
          for some of these use cases. The use of anycast is not appropriate
          for this use case, in particular. It is safe to assume that for such
          deployments, the DOTS server(s) domain name is provided during the
          service subscription (i.e., manual/local configuration).</t>

          <t>Multiple DOTS clients may be enabled within a network (e.g.,
          enterprise network). Automatic means to discover DOTS servers in a
          deterministic manner are interesting from an operational
          standpoint.</t>

          <t>Some of the use cases may involve a DOTS gateway that is
          responsible for forking requests received from DOTS clients to
          upstream DOTS servers or for selecting the appropriate DOTS server.
          Particularly, the use of anycast may simplify the operations within
          the enterprise network to discover a DOTS gateway, if the enterprise
          network is single-homed.</t>

          <t>Many use cases discussed in <xref
          target="I-D.ietf-dots-use-cases"></xref> do involve a CPE device.
          Multiple CPEs, connected to distinct network providers may even be
          considered. It is intuitive to leverage on existing mechanisms such
          as discovery using service resolution or DHCP or anycast to
          provision the CPE acting as a DOTS client with the DOTS
          server(s).</t>
        </list></t>

      <texttable align="center" anchor="uc" style="all"
                 title="Summary of DOTS Use Cases">
        <ttcol align="right">Use Case</ttcol>

        <ttcol align="center">Requires a CPE</ttcol>

        <ttcol align="center">The Network Provider is also the DDoS Mitigation
        Provider</ttcol>

        <c>End-customer with single or multiple upstream transit provider(s)
        offering DDoS mitigation services</c>

        <c>Yes (Intelligent DDoS mitigation system (IDMS) acting as a DOTS
        client may be co-located on the CPE)</c>

        <c>Yes</c>

        <c>End-customer with an overlay DDoS mitigation managed security
        service provider (MSSP)</c>

        <c>Yes (DDOS Detector acting as a DOTS client may be co-located on the
        CPE)</c>

        <c>No</c>

        <c>End-customer operating an application or service with an integrated
        DOTS client</c>

        <c>Yes (CPE may act as a DOTS gateway)</c>

        <c>Yes/No</c>

        <c>End-customer operating a CPE network infrastructure device with an
        integrated DOTS client</c>

        <c>Yes (CPE acts as a DOTS client)</c>

        <c>Yes</c>

        <c>Suppression of outbound DDoS traffic originating from a consumer
        broadband access network</c>

        <c>Yes (CPE acts as a DOTS server)</c>

        <c>Yes</c>

        <c>DDoS Orchestration</c>

        <c>No</c>

        <c>N/A</c>
      </texttable>

      <t>Consequently, this document describes the following mechanisms for
      discovery:</t>

      <t><list style="symbols">
          <t>A resolution mechanism based on straightforward Naming Authority
          Pointer (S-NAPTR) resource records in the Domain Name System
          (DNS).</t>

          <t>DNS Service Discovery.</t>

          <t>Discovery using DHCP Options.</t>

          <t>A mechanism based on anycast address for DOTS usage.</t>
        </list></t>
    </section>

    <section anchor="logic" title="Discovery Procedure">
      <t>A key point in the deployment of DOTS is the ability of network
      operators to be able to configure DOTS clients with the correct server
      information consistently. To accomplish this, operators will need a
      consistent set of ways in which DOTS clients can discover this
      information, and a consistent priority among these options. If some
      devices prefer manual configuration over DNS discovery, while others
      prefer DNS discovery over manual configuration, the result will be a
      process of "whack-a-mole", where the operator must find devices that are
      using the wrong DOTS server, determine how to ensure the devices are
      configured properly, and then reconfigure the device through the
      preferred method.</t>

      <t>All DOTS clients MUST support at least one of the four mechanisms
      below to determine a DOTS server list. All DOTS clients SHOULD implement
      all four, or as many as are practical for any specific device, of these
      ways to discover DOTS servers, in order to facilitate the deployment of
      DOTS in large scale environments:</t>

      <t><list style="numbers">
          <t>Explicit configuration:<list style="symbols">
              <t>Local/Manual configuration: A DOTS client, will learn the
              DOTS server(s) by means of local or manual DOTS configuration
              (i.e., DOTS servers configured at the system level).
              Configuration discovered from a DOTS client application is
              considered as local configuration. An implementation may give
              the user an opportunity (e.g., by means of configuration file
              options or menu items) to specify DOTS server(s) for each
              address family. These MAY be specified either as IP addresses or
              the DNS name of a DOTS server. When only DOTS server' IP
              addresses are configured, a reference identifier must also be
              configured for authentication purposes.</t>

              <t>Automatic configuration (e.g., DHCP, an automation system):
              The DOTS client attempts to discover DOTS server(s) names and/or
              addresses from DHCP, as described in <xref
              target="dhcp"></xref>.</t>
            </list></t>

          <t>Service Resolution : The DOTS client attempts to discover DOTS
          server name(s) using service resolution, as specified in <xref
          target="srv"></xref>.</t>

          <t>DNS SD: DNS Service Discovery. The DOTS client attempts to
          discover DOTS server name(s) using DNS service discovery, as
          specified in <xref target="DNSSD"></xref>.</t>

          <t>Anycast : Send DOTS request to establish a DOTS session with the
          assigned DOTS server anycast address for each combination of
          interface and address family.</t>
        </list></t>

      <t>Some of these mechanisms imply the use of DNS to resolve the IP
      address of the DOTS server, while others imply the IP address of the
      relevant DOTS server is obtained directly. Implementation options may
      vary on a per device basis, as some devices may not have DNS
      capabilities and/or proper configuration.</t>

      <t>Clients will prefer information received from the discovery methods
      in the order listed.</t>

      <t>On hosts with more than one interface or address family (IPv4/v6),
      the DOTS server discovery procedure has to be performed for each
      combination of interface and address family. A client MAY choose to
      perform the discovery procedure only for a desired interface/address
      combination if the client does not wish to discover a DOTS server for
      all combinations of interface and address family.</t>

      <t>The above procedure MUST also be followed by a DOTS gateway.</t>
    </section>

    <section anchor="srvr" title="Resolution">
      <t>Once the DOTS client has retrieved client's DNS domain or discovered
      the DOTS server name that needs to be resolved, an S-NAPTR lookup with
      'DOTS' application service and the desired protocol tag is made to
      obtain information necessary to connect to the authoritative DOTS server
      within the given domain.</t>

      <t>This specification defines "DOTS" as an application service tag
      (<xref target="serviceT"></xref>) and "signal.udp" (<xref
      target="suappt"></xref>), "signal.tcp" (<xref target="stappt"></xref>),
      and "data.tcp" (<xref target="dappt"></xref>) as application protocol
      tags.</t>

      <t><figure>
          <artwork><![CDATA[   In the example below, for domain 'example.net', the resolution
   algorithm will result in IP address(es), port, tag and protocol tuples as
   follows:

   example.net.
   IN NAPTR 100 10 "" DOTS:signal.udp "" signal.example.net.
   IN NAPTR 200 10 "" DOTS:signal.tcp "" signal.example.net.
   IN NAPTR 300 10 "" DOTS:data.tcp "" data.example.net.

   signal.example.net.
   IN NAPTR 100 10 S DOTS:signal.udp "" _dots._signal._udp.example.net.
   IN NAPTR 200 10 S DOTS:signal.tcp "" _dots._signal._tcp.example.net.

   data.example.net.
   IN NAPTR 100 10 S DOTS:data.tcp "" _dots._data._tcp.example.net.

   _dots._signal._udp.example.net.
   IN SRV   0 0 5000 a.example.net.

   _dots._signal._tcp.example.net.
   IN SRV   0 0 5001 a.example.net.

   _dots._data._tcp.example.net.
   IN SRV   0 0 5002 a.example.net.

   a.example.net.
   IN AAAA  2001:db8::1

                 +-------+----------+-------------+------+--------+
                 | Order | Protocol | IP address  | Port |   Tag  |
                 +-------+----------+-------------+------+--------+
                 | 1     | UDP      | 2001:db8::1 | 5000 | Signal |
                 | 2     | TCP      | 2001:db8::1 | 5001 | Signal |
                 | 3     | TCP      | 2001:db8::1 | 5002 | Data   |
                 +-------+----------+-------------+------+--------+
]]></artwork>
        </figure></t>

      <t>If no DOTS-specific S-NAPTR records can be retrieved, the discovery
      procedure fails for this domain name (and the corresponding interface
      and IP protocol version). If more domain names are known, the discovery
      procedure MAY perform the corresponding S-NAPTR lookups immediately.
      However, before retrying a lookup that has failed, a DOTS client MUST
      wait a time period that is appropriate for the encountered error (e.g.,
      NXDOMAIN, timeout, etc.).</t>
    </section>

    <section anchor="srv" title="Discovery using Service Resolution">
      <t>This mechanism is performed in two steps:<list style="numbers">
          <t>A DNS domain name is retrieved for each combination of interface
          and address family.</t>

          <t>Retrieved DNS domain names are then used for S-NAPTR lookups.
          Further DNS lookups may be necessary to determine DOTS server IP
          address(es).</t>
        </list></t>

      <section title="Retrieving Domain Name">
        <t>A DOTS client has to determine the domain in which it is located.
        The following section describes the means to obtain the domain name
        from DHCP. Other means of retrieving domain names may be used, which
        are outside the scope of this document, e.g., local configuration.</t>

        <t>Implementations MAY allow the user to specify a default name that
        is used, if no specific name has been configured.</t>

        <section title="DHCP">
          <t>DHCP can be used to determine the domain name related to an
          interface's point of network attachment. Network operators may
          provide the domain name to be used for service discovery within an
          access network using DHCP. Sections 3.2 and 3.3 of <xref
          target="RFC5986"></xref> define DHCP IPv4 and IPv6 access network
          domain name options, OPTION_V4_ACCESS_DOMAIN and
          OPTION_V6_ACCESS_DOMAIN respectively, to identify a domain name that
          is suitable for service discovery within the access network.</t>

          <t>For IPv4, the discovery procedure MUST request the access network
          domain name option in a Parameter Request List option, as described
          in <xref target="RFC2131"></xref>. <xref target="RFC2132"></xref>
          defines the DHCP IPv4 domain name option; while this option is less
          suitable, a client MAY request for it if the access network domain
          name defined in <xref target="RFC5986"></xref> is not available.</t>

          <t>For IPv6, the discovery procedure MUST request for the access
          network domain name option in an Options Request Option (ORO) within
          an Information-request message, as described in <xref
          target="RFC3315"></xref>.</t>

          <t>If neither option can be retrieved the procedure fails for this
          interface. If a result can be retrieved it will be used as an input
          for S-NAPTR resolution discussed in <xref target="srvr"></xref>.</t>
        </section>
      </section>
    </section>

    <section anchor="DNSSD" title="DNS Service Discovery">
      <t>DNS-based Service Discovery (DNS-SD) <xref target="RFC6763"></xref>
      and Multicast DNS (mDNS) <xref target="RFC6762"></xref> provide generic
      solutions for discovering services. DNS-SD/mDNS define a set of naming
      rules for certain DNS record types that they use for advertising and
      discovering services.</t>

      <section title="DNS-SD">
        <t>Section 4.1 of <xref target="RFC6763"></xref> specifies that a
        service instance name in DNS-SD has the following structure:</t>

        <t>&lt;Instance&gt; . &lt;Service&gt; . &lt;Domain&gt;</t>

        <t>The &lt;Domain&gt; portion specifies the DNS sub-domain where the
        service instance is registered. It may be "local.", indicating the
        mDNS local domain, or it may be a conventional domain name such as
        "example.com.".</t>

        <t>The &lt;Service&gt; portion of the DOTS service instance name MUST
        be "_dots._signal._udp" or "_dots._signal._tcp" or
        "_dots._data._tcp".</t>
      </section>

      <section title="mDNS">
        <t>A DOTS client can proactively discover DOTS servers being
        advertised in the site by multicasting a PTR query to one or all of
        the following:</t>

        <t><list style="symbols">
            <t>"_dots._signal._udp.local."</t>

            <t>"_dots._signal._tcp.local."</t>

            <t>"_dots._data._tcp.local."</t>
          </list>A DOTS server can send out gratuitous multicast DNS answer
        packets whenever it starts up, wakes from sleep, or detects a change
        in network configuration. DOTS clients receive these gratuitous
        packets and cache information contained in it.</t>
      </section>
    </section>

    <section anchor="dhcp" title="DHCP Options for DOTS">
      <t>As reported in Section 1.7.2 of <xref target="RFC6125"></xref>:<list
          style="empty">
          <t>"few certification authorities issue server certificates based on
          IP addresses, but preliminary evidence indicates that such
          certificates are a very small percentage (less than 1%) of issued
          certificates".</t>
        </list></t>

      <t>In order to allow for PKIX-based authentication between a DOTS client
      and server while accommodating for the current best practices for
      issuing certificates, this document allows for configuring names to DOTS
      clients. These names can be used for two purposes: to retrieve the list
      of IP addresses of a DOTS server or to be presented as a reference
      identifier for authentication purposes.</t>

      <t>Defining the option to include a list of IP addresses would avoid a
      dependency on an underlying name resolution, but that design requires to
      also supply a name for PKIX-based authentication purposes.</t>

      <section title="DHCPv6 DOTS Options">
        <section title="Format of DOTS Reference Identifier Option">
          <t>The DHCPv6 DOTS option is used to configure a name of the DOTS
          server. The format of this option is shown in <xref
          target="ri_option"></xref>.</t>

          <t><figure anchor="ri_option"
              title="DHCPv6 DOTS Reference Identifier option">
              <artwork><![CDATA[    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     OPTION_V6_DOTS            |         Option-length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                      dots-server-name (FQDN)                  |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
            </figure>The fields of the option shown in <xref
          target="ri_option"></xref> are as follows:<?rfc subcompact="yes" ?></t>

          <t><list style="symbols">
              <t>Option-code: OPTION_V6_DOTS_RI (TBA1, see <xref
              target="iana6"></xref>)</t>

              <t>Option-length: Length of the dots-server-name field in
              octets.</t>

              <t>dots-server-name: A fully qualified domain name of the DOTS
              server. This field is formatted as specified in Section 8 of
              <xref target="RFC3315"></xref>.</t>
            </list></t>

          <t><?rfc subcompact="no" ?>An example of the dots-server-name
          encoding is shown in <xref target="fqdn"></xref>. This example
          conveys the FQDN "dots.example.com.".</t>

          <t><figure anchor="fqdn"
              title="An example of the dots-server-name encoding">
              <artwork><![CDATA[      +------+------+------+------+------+------+------+------+------+
      | 0x04 |   d  |   o  |   t  |  s   | 0x07 |   e  |   x  |   a  |
      +------+------+------+------+------+------+------+------+------+
      |   m  |   p  |   l  |   e  | 0x03 |   c  |   o  |   m  | 0x00 |
      +------+------+------+------+------+------+------+------+------+
]]></artwork>
            </figure></t>

          <t></t>
        </section>

        <section title="Format Format of DOTS Address Option">
          <t>The DHCPv6 DOTS option can be used to configure a list of IPv6
          addresses of a DOTS server. The format of this option is shown in
          <xref target="dhcpv6_option"></xref>.</t>

          <t><figure anchor="dhcpv6_option" title="DHCPv6 DOTS Address option">
              <artwork><![CDATA[    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     OPTION_V6_DOTS            |         Option-length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                    DOTS ipv6-address                          |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                    DOTS ipv6-address                          |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
            </figure>The fields of the option shown in <xref
          target="dhcpv6_option"></xref> are as follows:<?rfc subcompact="yes" ?></t>

          <t><list style="symbols">
              <t>Option-code: OPTION_V6_DOTS_ADDRESS (TBA2, see <xref
              target="iana6"></xref>)</t>

              <t>Option-length: Length of the 'DOTS ipv6-address(es)' field in
              octets. MUST be a multiple of 16.</t>

              <t>DOTS ipv6-address: Includes one or more IPv6 addresses <xref
              target="RFC4291"></xref> of the DOTS server to be used by the
              DOTS client. <vspace blankLines="1" />Note, IPv4-mapped IPv6
              addresses (Section 2.5.5.2 of <xref target="RFC4291"></xref>)
              are allowed to be included in this option.</t>
            </list></t>

          <t><?rfc subcompact="no" ?>To return more than one DOTS servers to
          the requesting DHCPv6 client, the DHCPv6 server returns multiple
          instances of OPTION_V6_DOTS.</t>
        </section>

        <section title="DHCPv6 Client Behavior">
          <t>DHCP clients MAY request options OPTION_V6_DOTS_RI and
          OPTION_V6_DOTS_ADDRESS, as defined in <xref
          target="RFC3315"></xref>, Sections 17.1.1, 18.1.1, 18.1.3, 18.1.4,
          18.1.5, and 22.7. As a convenience to the reader, it is mentioned
          here that the DHCP client includes the requested option codes in the
          Option Request Option.</t>

          <t>If the DHCP client receives more than one instance of
          OPTION_V6_DOTS_RI (resp. OPTION_V6_DOTS_ADDRESS) option, it MUST use
          only the first instance of that option.</t>

          <t>If the DHCP client receives both OPTION_V6_DOTS_RI and
          OPTION_V6_DOTS_ADDRESS, the content of OPTION_V6_DOTS_RI is used as
          reference identifier for authentication purposes (e.g., PKIX <xref
          target="RFC6125"></xref>), while the addresses included in
          OPTION_V6_DOTS_ADDRESS are used to reach the DOTS server. In other
          words, the name conveyed in OPTION_V6_DOTS_RI MUST NOT be passed to
          underlying resolution library in the presence of
          OPTION_V6_DOTS_ADDRESS in a response.</t>

          <t>If the DHCP client receives OPTION_V6_DOTS_RI only, but
          OPTION_V6_DOTS_RI option contains more than one name, as
          distinguished by the presence of multiple root labels, the DHCP
          client MUST use only the first name. Once the name is validated
          (Section 8 of <xref target="RFC3315"></xref>), the name is passed to
          a name resolution library. Moreover, that name is also used as a
          reference identifier for authentication purposes.</t>

          <t>If the DHCP client receives OPTION_V6_DOTS_ADDRESS only, the
          address(es) included in OPTION_V6_DOTS_ADDRESS is used to reach the
          DOTS server. In addition, these addresses can be used as identifiers
          for authentication.</t>
        </section>
      </section>

      <section title="DHCPv4 DOTS Options">
        <section title="Format of DOTS Reference Identifier Option">
          <t>The DHCPv4 DOTS option is used to configure a name of the DOTS
          server. The format of this option is illustrated in <xref
          target="dhcpri_dots"></xref>.</t>

          <t><figure anchor="dhcpri_dots"
              title="DHCPv4 DOTS Reference Identifier option">
              <artwork><![CDATA[
          Code  Length   DOTS server name
         +-----+-----+-----+-----+-----+-----+-----+--
         | TBA |  n  |  s1 |  s2 |  s3 |  s4 | s5  |  ...
         +-----+-----+-----+-----+-----+-----+-----+--

   The values s1, s2, s3, etc. represent the domain name labels in the
   domain name encoding.

]]></artwork>
            </figure></t>

          <t>The fields of the option shown in <xref
          target="dhcpri_dots"></xref> are as follows:<?rfc subcompact="yes" ?><list
              style="symbols">
              <t>Code: OPTION_V4_DOTS_RI (TBA3, see <xref
              target="iana4"></xref>);</t>

              <t>Length: Includes the length of the "DOTS server name" field
              in octets; the maximum length is 255 octets.</t>

              <t>DOTS server name: The domain name of the DOTS server. This
              field is formatted as specified in Section 8 of <xref
              target="RFC3315"></xref>.</t>
            </list></t>

          <t><?rfc subcompact="no" ?></t>
        </section>

        <section title="Format Format of DOTS Address Option">
          <t>The DHCPv4 DOTS option can be used to configure a list of IPv4
          addresses of a DOTS server. The format of this option is illustrated
          in <xref target="dhcp_dots"></xref>.</t>

          <t><figure anchor="dhcp_dots" title="DHCPv4 DOTS Address option">
              <artwork><![CDATA[    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Code         |     Length    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | List-Length   |   List of     |
   +-+-+-+-+-+-+-+-+    DOTS       |
   /        IPv4 Addresses         /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ---
   | List-Length   |   List of     |   |
   +-+-+-+-+-+-+-+-+    DOTS       |   |
   /          IPv4 Addresses       /   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |
   .             ...               . optional
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |
   | List-Length   |   List of     |   |
   +-+-+-+-+-+-+-+-+     DOTS      |   |
   /          IPv4 Addresses       /   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ---

]]></artwork>
            </figure></t>

          <t>The fields of the option shown in <xref
          target="dhcp_dots"></xref> are as follows:<?rfc subcompact="yes" ?><list
              style="symbols">
              <t>Code: OPTION_V4_DOTS_ADDRESS (TBA4, see <xref
              target="iana4"></xref>);</t>

              <t>Length: Length of all included data in octets. The minimum
              length is 5.</t>

              <t>List-Length: Length of the "List of DOTS IPv4 Addresses"
              field in octets; MUST be a multiple of 4.</t>

              <t>List of DOTS IPv4 Addresses: Contains one or more IPv4
              addresses of the DOTS server to be used by the DOTS client. The
              format of this field is shown in <xref
              target="list"></xref>.</t>

              <t>OPTION_V4_DOTS can include multiple lists of DOTS IPv4
              addresses; each list is treated separately as it corresponds to
              a given DOTS server. <vspace blankLines="1" />When several lists
              of DOTS IPv4 addresses are to be included, "List-Length" and
              "DOTS IPv4 Addresses" fields are repeated.</t>
            </list><figure anchor="list"
              title="Format of the List of DOTS IPv4 Addresses">
              <artwork><![CDATA[   0     8     16    24    32    40    48
   +-----+-----+-----+-----+-----+-----+--
   |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 | ...
   +-----+-----+-----+-----+-----+-----+--
        IPv4 Address 1          IPv4 Address 2 ...]]></artwork>

              <postamble>This format assumes that an IPv4 address is encoded
              as a1.a2.a3.a4.</postamble>
            </figure></t>

          <t><?rfc subcompact="no" ?>OPTION_V4_DOTS is a
          concatenation-requiring option. As such, the mechanism specified in
          <xref target="RFC3396"></xref> MUST be used if OPTION_V4_DOTS
          exceeds the maximum DHCPv4 option size of 255 octets.</t>
        </section>

        <section title="DHCPv4 Client Behavior">
          <t>To discover a DOTS server, the DHCPv4 client MUST include both
          OPTION_V4_DOTS_RI and OPTION_V4_DOTS_ADDRESS in a Parameter Request
          List Option <xref target="RFC2132"></xref>.</t>

          <t>If the DHCP client receives more than one instance of
          OPTION_V4_DOTS_RI (resp. OPTION_V4_DOTS_ADDRESS) option, it MUST use
          only the first instance of that option.</t>

          <t>If the DHCP client receives both OPTION_V4_DOTS_RI and
          OPTION_V4_DOTS_ADDRESS, the content of OPTION_V6_DOTS_RI is used as
          reference identifier for authentication purposes, while the
          addresses included in OPTION_V4_DOTS_ADDRESS are used to reach the
          DOTS server. In other words, the name conveyed in OPTION_V4_DOTS_RI
          MUST NOT be passed to underlying resolution library in the presence
          of OPTION_V4_DOTS_ADDRESS in a response.</t>

          <t>If the DHCP client receives OPTION_V4_DOTS_RI only, but
          OPTION_V4_DOTS_RI option contains more than one name, as
          distinguished by the presence of multiple root labels, the DHCP
          client MUST use only the first name. Once the name is validated
          (Section 8 of <xref target="RFC3315"></xref>), the name is passed to
          a name resolution library. Moreover, that name is also used as a
          reference identifier for authentication purposes.</t>

          <t>If the DHCP client receives OPTION_V4_DOTS_ADDRESS only, the
          address(es) included in OPTION_V4_DOTS_ADDRESS is used to reach the
          DOTS server. In addition, these addresses can be used as identifiers
          for authentication.</t>
        </section>
      </section>
    </section>

    <section anchor="anycast" title="Anycast">
      <t>IP anycast can also be used for DOTS service discovery. A packet sent
      to an anycast address is delivered to the 'topologically nearest'
      network interface with the anycast address.</t>

      <t>When a DOTS client requires DOTS services, it attempts to establish a
      signaling session with the assigned anycast address(es) defined in
      Sections <xref format="counter" target="ipv4a"></xref> and <xref
      format="counter" target="ipv6a"></xref>. A DOTS server, that receives a
      DOTS request with an anycast address, SHOULD redirect the DOTS client to
      the appropriate DOTS unicast server(s) using the mechanism described in
      Section 5.5 of <xref target="I-D.ietf-dots-signal-channel"></xref>,
      unless it is configured otherwise. Indeed, a DOTS server SHOULD be
      configurable to maintain all DOTS communications using anycast. DOTS
      redirect is not made mandatory because the use of anycast is not
      problematic for some deployment scenarios such as an enterprise network
      deploying one single DOTS gateway connected to one single network
      provider.</t>

      <t><xref target="I-D.boucadair-dots-multihoming"></xref> identifies a
      set of deployment schemes in which the use of anycast is not
      recommended.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>DOTS-related security considerations are discussed in Section 4 of
      <xref target="I-D.ietf-dots-architecture"></xref> is to be considered.
      DOTS agents must authenticate each other using (D)TLS before a DOTS
      session is considered valid.</t>

      <t>If the DOTS client is explicitly configured with DOTS server(s) then
      the DOTS client can also be explicitly configured with credentials to
      authenticate the DOTS server.</t>

      <t>The CPE device acting as a DOTS client MAY use Bootstrapping Remote
      Secure Key Infrastructures (BRSKI) discussed in <xref
      target="I-D.ietf-anima-bootstrapping-keyinfra"></xref> to automatically
      bootstrap using the vendor installed X.509 certificate, in combination
      with a domain registrar provided by the upstream transit provider and
      vendor's authorizing service. The CPE device authenticates to the
      upstream transit provider using the vendor installed X.509 certificate
      and the upstream transit provider validates the vendor installed
      certificate on the CPE device using the Manufacturer Authorized Signing
      Authority (MASA) service. If authentication is successful then the CPE
      device can request and get a voucher from the MASA service via the
      domain registrar. The voucher is signed by the MASA service and includes
      the upstream transit provider's trust anchor certificate. The CPE device
      validates the signed voucher using the manufacturer installed trust
      anchor associated with the vendor's selected MASA service and stores the
      upstream transit provider's trust anchor certificate. The CPE device
      then uses Enrollment over Secure Transport (EST) <xref
      target="RFC7030"></xref> for certificate enrollment (Section 3.8 in
      <xref target="I-D.ietf-anima-bootstrapping-keyinfra"></xref>). The DOTS
      client on the CPE device can authenticate to the DOTS server using the
      certificate provisioned by the EST server and the DOTS client can
      validate the DOTS server certificate using the upstream transit
      provider's trust anchor certificate it had received in the voucher.</t>

      <section title="DHCP">
        <t>The security considerations in <xref target="RFC2131"></xref> and
        <xref target="RFC3315"></xref> are to be considered.</t>
      </section>

      <section title="Service Resolution">
        <t>The primary attack against the methods described in <xref
        target="srv"></xref> is one that would lead to impersonation of a DOTS
        server. An attacker could attempt to compromise the S-NAPTR
        resolution. The use of mutual authentication makes it difficult to
        redirect a DOTS client to an illegitimate DOTS server.</t>
      </section>

      <section title="DNS Service Discovery">
        <t>Since DNS-SD is just a specification for how to name and use
        records in the existing DNS system, it has no specific additional
        security requirements over and above those that already apply to DNS
        queries and DNS updates. For DNS queries, DNS Security Extensions
        (DNSSEC) <xref target="RFC4033"></xref> SHOULD be used where the
        authenticity of information is important. For DNS updates, secure
        updates <xref target="RFC2136"></xref><xref target="RFC3007"></xref>
        SHOULD generally be used to control which clients have permission to
        update DNS records.</t>

        <t>For mDNS, in addition to what has been described above, a principal
        security threat is a security threat inherent to IP multicast routing
        and any application that runs on it. A rogue system can advertise that
        it is a DOTS server. Discovery of such rogue systems as DOTS servers,
        in itself, is not a security threat if the DOTS client authenticates
        the discovered DOTS servers.</t>
      </section>

      <section title="Anycast">
        <t>Anycast-related security considerations are discussed in <xref
        target="RFC4786"></xref> and <xref target="RFC7094"></xref>.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to allocate the SRV service name of "_dots._signal"
      for DOTS signal channel over UDP or TCP, and the service name of
      "_dots._data" for DOTS data channel over TCP.</t>

      <section anchor="iana6" title="DHCPv6 Option">
        <t>IANA is requested to assign the following new DHCPv6 Option Code in
        the registry maintained in
        http://www.iana.org/assignments/dhcpv6-parameters:</t>

        <texttable style="headers">
          <ttcol align="right">Option Name</ttcol>

          <ttcol>Value</ttcol>

          <c>OPTION_V6_DOTS_RI</c>

          <c>TBA1</c>

          <c>OPTION_V6_DOTS_ADDRESS</c>

          <c>TBA2</c>
        </texttable>
      </section>

      <section anchor="iana4" title="DHCPv4 Option">
        <t>IANA is requested to assign the following new DHCPv4 Option Code in
        the registry maintained in
        http://www.iana.org/assignments/bootp-dhcp-parameters/:</t>

        <texttable style="headers">
          <ttcol align="right">Option Name</ttcol>

          <ttcol>Value</ttcol>

          <ttcol>Data length</ttcol>

          <ttcol>Meaning</ttcol>

          <c>OPTION_V4_DOTS_RI</c>

          <c>TBA3</c>

          <c>Variable; the maximum length is 255 octets.</c>

          <c>Includes the name of the DOTS server.</c>

          <c>OPTION_V4_DOTS_ADDRESS</c>

          <c>TBA4</c>

          <c>Variable; the minimum length is 5.</c>

          <c>Includes one or multiple lists of DOTS IP addresses; each list is
          treated as a separate DOTS server.</c>
        </texttable>

        <t></t>
      </section>

      <section title="Application Service &amp; Application Protocol Tags">
        <t>This document requests IANA to make the following allocations from
        the registry available at:
        https://www.iana.org/assignments/s-naptr-parameters/s-naptr-parameters.xhtml.</t>

        <section anchor="serviceT"
                 title="DOTS Application Service Tag Registration">
          <t><list style="symbols">
              <t>Application Protocol Tag: DOTS</t>

              <t>Intended Usage: See <xref target="srvr"></xref></t>

              <t>Security Considerations: See <xref
              target="Security"></xref></t>

              <t>Contact Information: &lt;one of the authors&gt;</t>
            </list></t>
        </section>

        <section anchor="suappt"
                 title="signal.udp Application Protocol Tag Registration">
          <t><list style="symbols">
              <t>Application Protocol Tag: signal.udp</t>

              <t>Intended Usage: See <xref target="srvr"></xref></t>

              <t>Security Considerations: See <xref
              target="Security"></xref></t>

              <t>Contact Information: &lt;one of the authors&gt;</t>
            </list></t>
        </section>

        <section anchor="stappt"
                 title="signal.tcp Application Protocol Tag Registration">
          <t><list style="symbols">
              <t>Application Protocol Tag: signal.tcp</t>

              <t>Intended Usage: See <xref target="srvr"></xref></t>

              <t>Security Considerations: See <xref
              target="Security"></xref></t>

              <t>Contact Information: &lt;one of the authors&gt;</t>
            </list></t>
        </section>

        <section anchor="dappt"
                 title="data.tcp Application Protocol Tag Registration">
          <t><list style="symbols">
              <t>Application Protocol Tag: data.tcp</t>

              <t>Intended Usage: See <xref target="srvr"></xref></t>

              <t>Security Considerations: See <xref
              target="Security"></xref></t>

              <t>Contact Information: &lt;one of the authors&gt;</t>
            </list></t>
        </section>
      </section>

      <section anchor="ipv4a" title="IPv4 Anycast">
        <t>IANA has assigned a single IPv4 address from the 192.0.0.0/24
        prefix and registered it in the "IANA IPv4 Special-Purpose Address
        Registry" <xref target="RFC6890"></xref>.</t>

        <t><figure>
            <artwork><![CDATA[   +----------------------+-------------------------------------------+
   | Attribute            | Value                                     |
   +----------------------+-------------------------------------------+
   | Address Block        | TBA                                       |
   | Name                 | Distributed-Denial-of-Service Open Threat | 
   |                      | Signaling (DOTS) Anycast                  |
   | RFC                  | <this document>                           |
   | Allocation Date      | <date of approval of this document>       |
   | Termination Date     | N/A                                       |
   | Source               | True                                      |
   | Destination          | True                                      |
   | Forwardable          | True                                      |
   | Global               | True                                      |
   | Reserved-by-Protocol | False                                     |
   +----------------------+-------------------------------------------+]]></artwork>
          </figure></t>
      </section>

      <section anchor="ipv6a" title="IPv6 Anycast">
        <t>IANA has assigned a single IPv6 address from the 2001:0000::/23
        prefix and registered it in the "IANA IPv6 Special-Purpose Address
        Registry" <xref target="RFC6890"></xref>.</t>

        <t><figure>
            <artwork><![CDATA[   +----------------------+-------------------------------------------+
   | Attribute            | Value                                     |
   +----------------------+-------------------------------------------+
   | Address Block        | TBA                                       |
   | Name                 | Distributed-Denial-of-Service Open Threat | 
   |                      | Signaling (DOTS) Anycast                  |
   | RFC                  | <this document>                           |
   | Allocation Date      | <date of approval of this document>       |
   | Termination Date     | N/A                                       |
   | Source               | True                                      |
   | Destination          | True                                      |
   | Forwardable          | True                                      |
   | Global               | True                                      |
   | Reserved-by-Protocol | False                                     |
   +----------------------+-------------------------------------------+]]></artwork>
          </figure></t>
      </section>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Thanks to Brian Carpenter for the review of the BRSKI text.</t>

      <t>Many thanks to Russ White for the review, comments, and text
      contribution.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.3315'?>

      <?rfc include='reference.RFC.6890'?>

      <?rfc include='reference.RFC.5986'?>

      <?rfc include='reference.RFC.3958'?>

      <?rfc include='reference.RFC.2131'?>

      <?rfc include='reference.RFC.2132'?>

      <?rfc include='reference.RFC.6762'?>

      <?rfc include='reference.RFC.6763'?>

      <?rfc include='reference.RFC.3396'?>

      <?rfc include='reference.RFC.4291'?>

      <?rfc include='reference.I-D.ietf-dots-architecture'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.4732'?>

      <?rfc include='reference.RFC.6125'?>

      <?rfc include='reference.RFC.4786'?>

      <?rfc include='reference.RFC.7094'?>

      <?rfc include='reference.RFC.4033'?>

      <?rfc include='reference.RFC.2136'?>

      <?rfc include='reference.RFC.3007'?>

      <?rfc include='reference.RFC.7030'?>

      <?rfc include='reference.I-D.ietf-dots-use-cases'
?>

      <?rfc include='reference.I-D.ietf-dots-signal-channel'?>

      <?rfc include='reference.I-D.ietf-anima-bootstrapping-keyinfra'?>

      <?rfc include='reference.I-D.boucadair-dots-multihoming'?>
    </references>
  </back>
</rfc>
