<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced.
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC2136 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2136.xml">
<!ENTITY RFC4701 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4701.xml">
<!ENTITY RFC3315 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3315.xml">
<!ENTITY RFC3633 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3633.xml">
<!ENTITY RFC4703 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4703.xml">
<!ENTITY RFC4704 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4704.xml">
<!ENTITY RFC3736 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3736.xml">
<!ENTITY RFC5007 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5007.xml">
<!ENTITY RFC5460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5460.xml">
<!ENTITY RFC5970 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5970.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
<!ENTITY I-D.ietf-dhc-dhcpv6-failover-requirements SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dhc-dhcpv6-failover-requirements.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds
     might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-ietf-dhc-dhcpv6-redundancy-consider-03"
     ipr="trust200902">
  <front>
    <title abbrev="DHCPv6 Redundancy Considerations">DHCPv6 Redundancy
    Deployment Considerations</title>

    <author fullname="John Jason Brzozowski" initials="J.B."
            surname="Brzozowski">
      <organization>Comcast Cable Communications</organization>
      <address>
        <postal>
          <street>1306 Goshen Parkway</street>
          <city>West Chester</city>
          <region>PA</region>
          <code>19380</code>
          <country>USA</country>
        </postal>
        <phone>+1-609-377-6594</phone>
        <email>john_brzozowski@cable.comcast.com</email>
      </address>
    </author>

    <author fullname="Jean-Francois Tremblay" initials="J.F."
            surname="Tremblay">
      <organization>Videotron Ltd.</organization>
      <address>
        <postal>
          <street>612 Saint-Jacques</street>
          <city>Montreal</city>
          <region>Quebec</region>
          <code>H3C 4M8</code>
          <country>Canada</country>
        </postal>
        <email>jf@jftremblay.com</email>
      </address>
    </author>

    <author fullname="Jack Chen" initials="J.C." surname="Chen">
      <organization>Time Warner Cable</organization>
      <address>
        <postal>
          <street>13820 Sunrise Valley Drive</street>
          <city>Herndon</city>
          <region>VA</region>
          <code>20171</code>
          <country>USA</country>
        </postal>
        <email>jack.chen@twcable.com</email>
      </address>
    </author>

    <author fullname="Tomasz Mrugalski" initials="T.M." surname="Mrugalski">
      <organization abbrev="ISC">Internet Systems Consortium,
      Inc.</organization>

      <address>
        <postal>
          <street>950 Charter St.</street>
          <city>Redwood City</city>
          <region>CA</region>
          <code>94063</code>
          <country>USA</country>
        </postal>

        <phone>+1 650 423 1345</phone>

        <email>tomasz.mrugalski@gmail.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date/>

    <!-- If the month and year are both specified and are the current
	 ones, xml2rfc will fill in the current day for you. If only
	 the current year is specified, xml2rfc will fill in the
	 current day and month for you. If the year is not the current
	 one, it is necessary to specify at least a month (xml2rfc
	 assumes day="1" if not specified for the purpose of
	 calculating the expiry date).  With drafts it is normally
	 sufficient to specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>Internet</area>

    <workgroup>Dynamic Host Configuration (DHC)</workgroup>

    <!-- WG name at the upperleft corner of the doc, IETF is fine for
	 individual submissions.  If this element is not present, the
	 default is "Network Working Group", which is used by the RFC
	 Editor as a nod to the history of the IETF. -->

    <keyword>DHCPv6</keyword>
    <keyword>Redundancy</keyword>
    <keyword>Deployment Considerations</keyword>

    <!-- Keywords will be incorporated into HTML output files in a
	 meta tag but they have no effect on text or nroff output. If
	 you submit your draft to the RFC Editor, the keywords will be
	 used for the search engine. -->

    <abstract>
      <t>This document provides information for those wishing to use DHCPv6 to
      support their deployment of IPv6. In particular, it discusses the
      provision of semi-redundant DHCPv6 services.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>Redundancy and high availability for many components of IPv6
      infrastructure are desirable and, in some deployments, mandatory.
      Unfortunately, for DHCPv6 there is currently no standards-based failover
      or redundancy protocol. An interim solution is to provide semi-redundant
      services: this document specifies an architecture by which this can be
      achieved.</t>
    </section>

    <section anchor="assumptions" title="Scope and Assumptions">
      <t>DHCPv6 redundancy may be useful in a wide range of scenarios.
      Although the architecture suggested in this document is able to be used
      in a wide range of networks, just two deployment environments are
      discussed here: service provider and enterprise network. All other
      scenarios may be generalized to one of these two cases.</t>

      <t>In the rest of the document, the following assumptions are made with
      regards to the existing DHCPv6 infrastructure, regardless of the
      environment being considered: <list style="numbers">
          <t>At least two DHCPv6 servers provide a service to the same
          clients. (The architecture does not limit the number of servers, and
          more may be provided if required.)</t>

          <t>The existing DHCPv6 servers will not directly communicate or
          interact with one another in the assignment of IPv6 addresses and
          provision of configuration information to requesting clients.</t>

          <t>DHCPv6 clients are instructed to run stateful DHCPv6 to request
          at least one IPv6 address. Configuration information and other
          options (such as a delegated IPv6 prefix) may also be requested as
          part of the stateful DHCPv6 operation.</t>

          <!-- Customer gateways and service providers equipement
	       support IPv4 and IPv6 simultaneously.  </t> IPv4 is not
	       relevant, removed after jjmb comment. -->

          <t>Clients participating in DHCPv6 configuration have to properly
          handle the preference option, including the processing of ADVERTISE
          messages, as required by <xref target="RFC3315"/>.</t>

          <t>A DHCPv6 server failure does not imply a failure of any other
          network service or protocol (e.g. TFTP servers). The redundancy of
          any additional services configured by means of DHCPv6 are outside
          the scope of this document. (For example, a single DHCPv6 server may
          configure multiple TFTP servers, with preference for each TFTP
          server, as specified in <xref target="RFC5970"/>.)</t>
        </list></t>

      <t>While the techniques described in this document provide some aspects
      of redundancy, it should be noted that complete redundancy will not be
      available until a DHCPv6 failover protocol is standardized. The
      requirements for such protocol are described in <xref
      target="I-D.ietf-dhc-dhcpv6-failover-requirements"/>.</t>

      <section title="Applicability to Prefix Delegation">
        <t>The same approaches discussed in this document can potentially be
        applied to prefix delegation <xref target="RFC3633"/>. One obvious
        drawback of using split prefix model for PD is that use of resources is
        doubled. It should be noted that such applicability remains theoretical
        and was not investigated thoroughly during work on this document. As
        such, the applicability of presented mechanisms to the prefix delegation
        is outside of scope of this document.</t>
      </section>
    </section>

    <section title="Service Provider Deployment">
      <t>The service provider model represents cases where the network and
      end-user devices may be administered by separate entities.</t>

      <t>The DHCPv6 clients include cable modems, customer gateways or home
      routers, and end-user devices: these are collectively referred to as
      Customer Premises Equipment (CPE). In some cases hosts may be configured
      directly using the service provider DHCPv6 infrastructure; in others,
      configuration may be via an intermediate router which is being
      configured by the provider DHCPv6 infrastructure. Either way, the
      service provider DHCPv6 infrastructure may be semi-redundant.</t>

      <t>In discussing this environment, additional assumptions to those
      listed in <xref target="assumptions"/> have been made: <!-- [tm: We should cover PD here.]
[jft: Should we consider that? I think so]
[jjmb: this model may be used with PD however it will quickly be outgrown once
 PD deployments increase in quantity]  --> <list style="numbers">
          <t>The service provider edge routers and access routers (CMTS for
          cable or DSLAM/BRAS for DSL for example) are IPv6 enabled when
          required.</t>

          <t>CPE devices are instructed to perform stateful DHCPv6 to request
          at least one IPv6 address, delegated prefix, and/or configuration
          information. CPE devices may also be instructed to use stateless
          DHCPv6 <xref target="RFC3736"/> to acquire configuration information
          only, a situation that assumes the IPv6 address and prefix
          information has been acquired using other means.</t>

          <!-- [jjmb: there is not a strict requirement for SLAAC on the WAN interface.
 Any CPE will leverage the router advertisement as an indicator of how to
 acquire its IPv6 address(es), prefixes, and configuration information.]-->

          <t>The primary application of this architecture is for native IPv6
          services. (Use and applicability to transition mechanisms is out of
          scope for this document.)</t>

          <t>The CPE devices must implement a stateful DHCPv6 client <xref
          target="RFC3315"/>. Support for DHCPv6 prefix delegation <xref
          target="RFC3633"/> or stateless DHCPv6 <xref target="RFC3736"/> may
          also be implemented.</t>
        </list></t>
    </section>

    <section title="Enterprise Deployment">
      <t>The enterprise deployment environment covers cases where end-user
      devices are direct consumers of the configuration without any
      intermediate devices (as was the case with home routers used in the
      service provider environment). Although enterprise IPv6 environments
      quite often use or require DHCPv6 relay agents, the relays do not
      influence or process the configuration in any way and merely act as a
      transport mechanism.</t>

      <t>The additional assumptions made for this model beyond those listed in
      <xref target="assumptions"/> are: <list style="numbers">
          <t>DHCPv6 clients are hosts and are considered end nodes i.e. they
          consume provided configuration and not use it to provision other
          devices. Examples of such clients include desktop computers,
          laptops, printers, other typical office equipment and some mobile
          devices.</t>

          <t>The DHCPv6 clients generally do not require the assignment of an
          IPv6 prefix delegation and as such they typically do not support
          DHCPv6 prefix delegation <xref target="RFC3633"/>.</t>
        </list></t>
    </section>

    <section title="Protocol Requirements">
      <t>Implementation of the architecture for semi-redundant DHCPv6 services
      using existing protocols places require the component DHCPv6 clients,
      relays, and servers to have certain capabilities. The following sections
      describe the requirements of such devices.</t>

      <section title="DHCPv6 Servers">
        <t>This interim architecture requires the DHCPv6 servers that are
        <xref target="RFC3315"/> compliant and support the necessary options.
        Essential to the architecture is support for stateful DHCPv6 and the
        DHCPv6 preference option <xref target="RFC3315"/>. For deployment
        scenarios where IPv6 prefix delegation is needed, DHCPv6 servers must
        support DHCPv6 prefix delegation as defined by <xref
        target="RFC3633"/>. Furthermore, the DHCPv6 servers must support <xref
        target="RFC3736"/> if stateless DHCPv6 is used.</t>
      </section>

      <section title="DHCPv6 Relays">
        <t>DHCPv6 relay agents must be <xref target="RFC3315"/> compliant and
        must support the ability to relay DHCPv6 messages to more than one
        destination.</t>

        <!--[jjmb] the items below are valid but are out of scope for this document
DHCPv6 relays compliant to <xref target="RFC3315"></xref> compliant.
DHCPv6 relays must also support snooping of DHCPv6-PD and install a static route for
each delegated prefix with the DHCPv6 client address as next-hop. The relay MAY
remove the static route for the delegated prefix after the expiration of the client
lease. (JFT: more to say here?)-->
      </section>

      <section title="DHCPv6 Clients">
        <t>DHCPv6 clients are required to be compliant with <xref
        target="RFC3315"/> and support the necessary options required to
        support the solution depending on the mode of operations and desired
        behaviour: <list style="symbols">
            <t>If prefix delegation is required, DHCPv6 clients must support
            DHCPv6 prefix delegation as defined in <xref
            target="RFC3633"/>.</t>

            <t>Clients must support the acquisition of at least one IPv6
            address and configuration information using stateful DHCPv6 as
            specified by <xref target="RFC3315"/>.</t>

            <t>Stateless DHCPv6 <xref target="RFC3736"/> may also be
            supported.</t>

            <t>DHCPv6 clients must recognize and adhere to the processing of
            the advertised DHCPv6 preference options sent by the DHCPv6
            servers.</t>
          </list></t>
      </section>
    </section>

    <section title="Deployment Models">
      <!--[jjmb] need to make reference to Rapid Commit and how it fits
	  into these models-->

      <t>At the time of writing, a standards-based DHCPv6 redundancy protocol
      is not available. In the interim solution presented here, existing
      DHCPv6 server implementations are used as-is to provide best effort,
      semi-redundant DHCPv6 services. The behavior of these services will, in
      part, be governed by the configuration of each of the servers. Various
      aspects of the DHCPv6 protocol <xref target="RFC3315"/> are used to
      yield the desired behaviour, although there is no inter-server or
      inter-process communication to coordinate DHCPv6 events and/or
      activities.</t>

      <t>The solution does not impact on DHCPv4, so DHCP services for both
      IPv4 and IPv6 may operate simultaneously on the same physical server(s)
      or may operate on different ones.</t>

      <t>This section defines three semi-redundant models. Although /64
      prefixes are used throughout the following sections as examples, other
      prefix lengths may be used as well.</t>

      <section anchor="split-prefixes" title="Split Prefixes">
        <t>In the split prefixes model, each DHCPv6 server is configured with
        a unique, non-overlapping pool derived from the /64 prefix deployed
        for use within an IPv6 network. For example, distributing an allocated
        /64 such as 2001:db8:1:0001::/64 between two servers would require
        that it be split into two /65 pools, 2001:db8:1:0001:0000::/65 and
        2001:db8:1:0001:8000::/65.</t>

        <!-- JFT: does this work in CNR and for DNS? How is the reverse done?
	    [jjmb: yes this works with CNR 7.x, ISC and at least one other
	    implementation. I never tried it with Dibbler, perhaps Tomasz can
	    verify. What are you asking about the reverse? Are you asking about
	    DNS? If yes, DNS can use a /64, this is what I am doing today with
	    no issue.]
	    [jjmb: we should also add an example of the use of the same prefix
	    and range ie a /64 prefix with the same /64 prefix used on two or
	    more DHCP servers. This also works and has been tested.]
	    [tm: you can configure DNS to accept update for the whole /64 zone
	    and allow both DHCPv6 servers to do the update? Is this reasonable
	    approach? As Dibbler is not tied to any specific DNS server
	    implementation, it just tries to do the reverse update.] -->

        <t>Both DHCPv6 servers are simultaneously active and operational, and
        each allocates IPv6 addresses from the corresponding pools per device
        class. The address allocation is governed largely through the use of
        the DHCPv6 preference option, so the server with the higher preference
        value is always preferred. Additional proprietary mechanisms can be
        used to further enforce the favouring of one DHCP server over another.
        An example of such a scenario is presented in <xref
        target="example-1"/>.</t>

        <t>It is important to note that, over time, it is possible that
        bindings will be unevenly distributed amongst the DHCPv6 servers and
        no one server will be authoritative for all of them.</t>

        <t>As defined in <xref target="RFC3315"/>, a DHCPv6 ADVERTISE message
        with a preference option of 255 is an indicator to a DHCPv6 client to
        immediately begin a client-initiated message exchange by transmitting
        a REQUEST message to the server that sent the ADVERTISE.
        Alternatively, a DHCPv6 ADVERTISE message with no preference option
        (or one with a value less than 255) is an indicator to the client that
        it must wait for subsequent ADVERTISE messages before choosing the
        server to which is responds, as described in Section 17.1.2 of <xref
        target="RFC3315"/>.</t>

        <t>In the event of a DHCPv6 server failure it is desirable (but not
        essential) for a server other than the server that originally
        responded to be able to rebind the client's lease. Given the proposed
        architecture, the remaining active DHCPv6 server will have a different
        address pool configured, making it technically incorrect for the same
        to rebind the client in its current state. Ultimately, the rebinding
        will fail and the client will acquire a new binding from the pool
        configured in the active server.</t>

        <t>To reduce the possibility that a client or some other element on
        the network will experience a disruption in service or access to
        relevant binding data, shorter values for T1, T2, valid, and preferred
        lifetimes can be used. The values for the last three can be adjusted
        or configured to minimize service disruption. Ideally, setting them
        equal (or nealy equal) can be used to trigger a DHCPv6 client to
        reacquire the IPv6 address, prefix, and or configuration information
        almost immediately after the rebinding fails. It is important to note
        however, that shorter values will create an additional load on the
        DHCPv6 servers.</t>

        <t>While using a split prefix configuration model the dynamic updates
        to DNS <xref target="RFC2136"/> can be coordinated to ensure that the
        DNS is properly updated with the current binding information.
        Challenges arise with regards to the update of the PTR resource record
        for IPv6 addresses since the DNS information may need to be
        overwritten in a failure condition. The use of a split prefixes
        enables the differentiation of bindings and binding timing to
        determine which represents the current state. This becomes
        particularly important when DHCPv6 Leasequery <xref target="RFC5007"/>
        and/or DHCPv6 Bulk Leasequery <xref target="RFC5460"/> are used to
        determine lease or binding state.</t>

        <t>Finally, a benefit of this scheme is that the use of separate pools
        per DHCPv6 server makes failure conditions more obvious and
        detectable.</t>

        <!--[jjmb I think we should propose/suggest values for T1, T2, PL,
	       and VL.]-->

        <figure align="center" anchor="example-1">
          <artwork align="center"><![CDATA[
+----------+                 +-----------+
| Client 1 +-\            +--+ Server 1  |
+----------+  \           |  +-----------+
               \          |
                \         |
                 \        |
+----------+      \       |  +-----------+
| Client 2 +--------------+--| Server 2  |
+----------+      /       |  +-----------+
      .          /        .
      .         /         .
      .        /          .
+----------+  /           .  +-----------+
| Client N +-/            .--| n+1 Server|
+----------+                 +-----------+

Server 1
========
Prefix = 2001:db8:1:0:0::/64
Pool = 2001:db8:1:0:0::/65
Preference = 255

Server 2
========
Prefix = 2001:db8:1:0:0::/64
Pool = 2001:db8:1:0:8000::/65
Preference = 0

Server n+1
==========
Prefix, pool, and preference would
vary based on prefix definition

]]></artwork>

          <postamble>Split prefixes approach.</postamble>
        </figure>
      </section>

      <section title="Multiple Unique Prefixes">
        <t>In the multiple prefix model, each DHCPv6 server is configured with
        a unique, non-overlapping prefix. A /64 pool equal to the prefix is
        configured on each server. For example, the 2001:db8:1:0000::/64 pool
        would be assigned to a single DHCPv6 server for allocation to clients
        equal to its parent prefix 2001:db8:1:0000::/64. The second DHCPv6
        server could use 2001:db8:1:0001:::/64 as both pool and prefix. This
        would be repeated for each active DHCP server. An example of this
        scenario is presented in <xref target="example-2"/>.</t>

        <t>The major difference between the split prefixes approach and the
        multiple unique prefixes one is that the latter does not require
        prefixes to be adjacent. In fact, the split prefixes approach can be
        considered a special case of the multiple unique prefixes
        approach.</t>

        <t>This approach uses a unique prefix and ultimately pool per DHCPv6
        server with the corresponding prefixes configured for use in the
        network. The corresponding network infrastructure must in turn be
        configured to use multiple prefixes on the interface(s) facing the
        DHCPv6 clients. The configuration is similar on all the servers, but a
        different prefix and a different preference is used for each DHCPv6
        server.</t>

        <t>This approach drastically increases the rate of consumption of IPv6
        prefixes and also yields operational and management challenges related
        to the underlying network since a significantly higher number of
        prefixes need to be configured and routed. It also does not provide a
        clean migration path to the desired solution using a standards-based
        DHCPv6 redundancy or failover protocol (which of course, has yet to be
        specified).</t>

        <t>The use of multiple unique prefixes provides benefits related to
        dynamic updates to DNS similar to those referred to in <xref
        target="split-prefixes"/>. The use of multiple unique prefixes enables
        the differentiation of bindings and binding timing to determine which
        represents the current state. This becomes particularly important when
        DHCPv6 Leasequery <xref target="RFC5007"/> and/or DHCPv6 Bulk
        Leasequery <xref target="RFC5460"/> are used to determine lease or
        binding state. The use of separate prefixes and pools per DHCPv6
        server makes failure conditions more obvious and detectable.</t>

        <figure align="center" anchor="example-2">
          <artwork align="center"><![CDATA[
+----------+                 +-----------+
| Client 1 +-\            +--+ Server 1  |
+----------+  \           |  +-----------+
               \          |
                \         |
                 \        |
+----------+      \       |  +-----------+
| Client 2 +--------------+--| Server 2  |
+----------+      /       |  +-----------+
      .          /        .
      .         /         .
      .        /          .
+----------+  /           .  +-----------+
| Client N +-/            .--| n+1 Server|
+----------+                 +-----------+

Server 1
========
Prefix = 2001:db8:1:0000::/64
Pool = 2001:db8:1:0000::/64
Preference = 255

Server 2
========
Prefix = 2001:db8:1:1000::/64
Pool = 2001:db8:1:1000::/64
Preference = 0

Server 3
========
Prefix = 2001:db8:1:2000::/64
Pool = 2001:db8:1:2000::/64
Preference = [0..255)
]]></artwork>

          <postamble>Multiple unique prefix approach.</postamble>
        </figure>
      </section>

      <section title="Identical Prefixes">
        <t>In the identical prefix model, each DHCPv6 server is configured
        with the same overlapping prefix and pool deployed for use within an
        IPv6 network. Distribution between two or more servers, for example,
        would require that the same /64 prefix and pool be configured on all
        DHCP servers. For example, the 2001:db8:1:0001:0000::/64 pool would be
        assigned to all the DHCPv6 servers for allocation to clients derived
        from the 2001:db8:1:0001::/64 pool. This would be repeated for each
        active DHCP server. An example of such a scenario is presented in
        <xref target="example-3"/>.</t>

        <t>This approach uses the same prefix, length, and pool definition
        across multiple DHCPv6 servers: all other configuration parameters
        remain the same, with the exception of the DHCPv6 preference. Such an
        approach conceivably eases the migration of DHCPv6 services to fully
        support a standards based redundancy or failover protocol, once such
        solution becomes available. Similar to the split prefix architecture
        described above this approach does not place any additional addressing
        requirements on the network infrastructure.</t>

        <t>The use of identical prefixes provides no benefit or advantage
        related to dynamic DNS updates, support of DHCPv6 Leasequery <xref
        target="RFC5007"/> or DHCPv6 Bulk Leasequery <xref target="RFC5460"/>.
        In this case all DHCP servers will use the same prefix and pool
        configurations making it less obvious that a failure condition or
        event has occurred.</t>

        <figure align="center" anchor="example-3">
          <artwork align="center"><![CDATA[
+----------+                 +-----------+
| Client 1 +-\            +--+ Server 1  |
+----------+  \           |  +-----------+
               \          |
                \         |
                 \        |
+----------+      \       |  +-----------+
| Client 2 +--------------+--| Server 2  |
+----------+      /       |  +-----------+
      .          /        .
      .         /         .
      .        /          .
+----------+  /           .  +-----------+
| Client N +-/            .--| n+1 Server|
+----------+                 +-----------+

Server 1
========
Prefix = 2001:db8:1:0000::/64
Pool = 2001:db8:1:0000::/64
Preference = 255

Server 2
========
Prefix = 2001:db8:1:0000::/64
Pool = 2001:db8:1:0000::/64
Preference = 0

Server 3
========
Prefix = 2001:db8:1:0000::/64
Pool = 2001:db8:1:0000::/64
Preference = [0..255)
]]></artwork>

          <postamble>Identical prefix approach.</postamble>
        </figure>
      </section>
    </section>

    <section title="Challenges and Issues">
      <t>The lack of interaction between DHCPv6 servers introduces a number of
      challenges related to the operations of the same service instances in a
      production environment. The following areas are of particular
      concern:</t>

      <t><list style="symbols">
          <t>In the identical prefixes scenario, both servers must follow the
          same address allocation procedure, i.e. they both must use the same
          algorithm and the same policy to determine which address is going to
          be assigned to a specific client. Otherwise there is a distinct
          chance that each server will assign the same address to two
          different clients. It is expected that both servers will receive
          each incoming REQUEST message. <!-- tomek: The following text is
	      rather obvious, but it was added to address comment #7 raised
	      by Brian Haberman during IESG review -->Usually no special action is
          required to achieve this as REQUEST messages are sent to multicast
          address by directly connected clients. Relays are expected to
          forward incoming client messages to all servers. The client
          indicates chosen server by including its DUID in Server-ID option.
          The chosen server assigns the address and other configuration
          options, while the other server discards the incoming request. In
          case of a failure of one server, the other server will assign the
          same address by following the same algorithm and the same
          policy.</t>

          <t>Interactions with DNS server(s) using dynamic update for the same
          address when one or more DHCPv6 servers have become unavailable.
          This specifically becomes a challenge when (or if) nodes that were
          initially granted a lease: <list style="numbers">
              <t>Attempt to renew or rebind the lease originally granted,
              or</t>

              <t>Attempt to obtain a new lease</t>
            </list> <!-- In either of the cases cited above, safeguards leveraged
	      to prevent the deliberate or inadvertent overwriting of DNS data
	      will likely prevent the responding DHCPv6 server from properly
	      updating DNS with the client&rsquo;s new information and or may
	      result in stale data in DNS. Possible solutions include the
	      following:<list style="symbols">
	      <t>The ability to configure the override and or disabling of the
	      safeguards that prevent the over-writing of DNS data care of
	      RFC2136, specifically, related to <xref target="RFC4701"></xref>
	      and <xref target="RFC4703"></xref>. This behaviour must specifically
	      be supported by the DHCPv6 server. This will allow for the
	      overwriting of existing RRs in DNS that represent the former
	      binding for the client. As a result clients will not have
	      multiple RRs in DNS for a client&rsquo;s FQDN-to-IPv6 address
	      mapping. Conversely, RR&rsquo;s for a client&rsquo;s IPv6
	      address-to-FQDN mapping will not be actively overwritten or
	      deleted. Stale reverse zone data will be purged using well
	      known DNS constructs, including but not limited to leveraging
	      TTLs. Access control on the DNS server must be leveraged to
	      restrict which DHCP servers may update DNS.</t>
	    </list></t>
	    removed after David Hankins, Ted Lemon and Bernie Volz comments
	  --> The DHCID resource record <xref target="RFC4701"/> allows
          identification of the current owner of the specific DNS data that is
          the target of an update <xref target="RFC2136"/>. <xref
          target="RFC4704"/> specifies how DHCPv6 servers and/or client may
          perform updates. <xref target="RFC4703"/> provides a way to solve
          conflicts between clients. Although the <xref target="RFC4703"/>
          deals with most cases, it is still possible to leave abandoned
          resource records. Consider the following scenario: there are two
          independent servers, A and B. Server A assigns a lease to a client
          and updates the DNS with an AAAA record for the assigned address.
          When the client renews, server A is not available and server B
          assigns a different lease. The DNS is again updated, so now two AAAA
          resource records are present for the client: there is no indication
          as which of the two leases is active. If server A never recovers,
          its information may never be removed (although it should be noted
          that this case is somewhat similar to that of a single server
          crashing and leaving abandoned resource records).</t>

          <t>Interactions with DHCPv6 servers to facilitate the acquisition of
          IPv6 lease data by way of the DHCPv6 Leasequery <xref
          target="RFC5007"/> or DHCPv6 Bulk Leasequery <xref
          target="RFC5460"/> protocols when one or more DHCPv6 servers have
          granted leases to DHCPv6 clients and later became unavailable. If
          the lease data is required and the granting server is unavailable,
          it will not be possible to obtain any information about leases
          granted until one of the following has taken place: <list
              style="numbers">
              <t>The granting DHCPv6 server becomes available with all lease
              information restored.</t>

              <t>The client has renewed or rebound its lease against a
              different DHCPv6 server.</t>
            </list> It is important to note that any exchange of available
          leases and synchronization between DHCPv6 servers is not possible
          until a redundancy or failover protocol is standardized or
          proprietary solutions become available.</t>
        </list></t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document does not require any actions from IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Additional security considerations are created through the use of
      this interim architecture beyond what has been cited in Section 23 of
      <xref target="RFC3315"/>. In particular, Dynamic DNS update using the
      models defined in this document allows for the possibility of not
      removing abandoned DNS records, even when using conflict resolution
      mechanism defined in <xref target="RFC4703"/>. However, this is no worse
      than a case where a single deployed server crashes and its lease
      database cannot be recovered.</t>

      <t>When using identical prefixes model, care must be taken to ensure
      that all servers use the same lease allocation procedure and are
      configured with the same policy. If this guidance is not followed, there
      is a risk of assignment of the same lease to two separate clients. In
      some cases that situation can be recovered by using Duplicate Address
      Detection (Neighbor Discovery) and DECLINE mechanism (DHCPv6).</t>
    </section>

    <section title="Acknowledgements">
      <t>Authors would like to thank Bernie Volz, Kim Kinnear, Ralph Droms,
      David Hankins, Chuck Anderson, Ted Lemon, Stephen Farrel, Pete McCann,
      Robert Sparks, Martin Stiemerling, Brian Haberman and Barry Leiba for
      their input and review.</t>

      <t>Special thanks to Stephen Morris for his numerous spelling, grammar
      corrections and proof-reading.</t>

      <t>This work has been partially supported by Department of Computer
      Communications (a division of Gdansk University of Technology) and the
      Polish Ministry of Science and Higher Education under the European
      Regional Development Fund, Grant No. POIG.01.01.02-00-045/09-00 (Future
      Internet Engineering Project).</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <references title="Normative References">
      &RFC2136;

      &RFC3315;

      &RFC3633;

      &RFC3736;

      &RFC4701;

      &RFC4703;

      &RFC4704;

      &RFC5007;

      &RFC5460;

      &RFC5970;
    </references>

    <references title="Informative References">
      &I-D.ietf-dhc-dhcpv6-failover-requirements;
    </references>
  </back>
</rfc>
