<?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-rfvlb-behave-v6-content-for-v4-clients-01"
     ipr="trust200902">
  <front>
    <title abbrev="Access to IPv6 content for IPv4-only clients">Framework for
    accessing IPv6 content for IPv4-only clients</title>

    <author fullname="Branimir Rajtar" initials="B." surname="Rajtar">
      <organization>Hrvatski Telekom</organization>

      <address>
        <postal>
          <street/>

          <city>Zagreb</city>

          <country>Croatia</country>
        </postal>

        <email>branimir.rajtar@t.ht.hr</email>
      </address>
    </author>

    <author fullname="Ian Farrer" initials="I." surname="Farrer">
      <organization>Deutsche Telekom AG</organization>

      <address>
        <postal>
          <street/>

          <city>Bonn</city>

          <country>Germany</country>
        </postal>

        <email>ian.farrer@telekom.de</email>
      </address>
    </author>

    <author fullname="Ale&scaron; V&iacute;zdal" initials="A."
            surname="V&iacute;zdal">
      <organization>T-Mobile CZ</organization>

      <address>
        <postal>
          <street/>

          <city>Prague</city>

          <country>Czech Republic</country>
        </postal>

        <email>ales.vizdal@t-mobile.cz</email>
      </address>
    </author>

    <author fullname="Xing Li" initials="X." surname="Li">
      <organization>CERNET Center/Tsinghua University</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <country>China</country>
        </postal>

        <email>xing@cernet.edu.cn</email>
      </address>
    </author>

    <author fullname="Congxiao Bao" initials="C." surname="Bao">
      <organization>CERNET Center/Tsinghua University</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <country>China</country>
        </postal>

        <email>congxiao@cernet.edu.cn</email>
      </address>
    </author>

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

    <area>Transport</area>

    <workgroup>Behave WG</workgroup>

    <abstract>
      <t>With the expansion of IPv6 usage and content available on IPv6, it is
      important that clients with legacy (i.e. non IPv6-capable) operating
      systems are able to access such content.</t>

      <t>This document describes a method for achieving this, including how
      the method could be implemented in real-world scenarios.</t>
    </abstract>

    <note 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>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>At the time of writing, IPv6 is still not widely deployed. There are
      several reasons for this, one of which is that IPv4-only operating
      systems are still commonplace with end-users and account for a large
      fraction of overall Internet traffic.</t>

      <t>With the growth of IPv6 traffic, servers supporting only IPv6 are
      appearing on the Internet. An approach for enabling and IPv4-only
      clients to access this content is described below.</t>

      <section title="Solution Requirements">
        <t>To clarify when this approach is applicable, the following
        requirements can be named:<list style="numbers">
            <t>The content MUST be reachable through IPv6, i.e. the server on
            which the content is stored must have a valid IPv6 address and a
            working IPv6 stack.</t>

            <t>The server hosting the content MUST have a valid AAAA
            record</t>

            <t>The client MUST support IPv4 only. The other alternative is
            also that it supports IPv6, but for some reason uses only IPv4 to
            access content on the Internet.</t>

            <t>Client's DNS queries MUST be resolved by a dedicated appliance,
            i.e. a caching nameserver.</t>

            <t>All traffic between the client and the server MUST be routed
            through a device capable of performing translation between IPv4
            and IPv6, as described in <xref target="RFC6145"/> and <xref
            target="RFC6052"/>.</t>
          </list>It is feasible that requirements (4) and (5) can be combined
        in one device and managed by the service provider.That would simplify
        operations and remove the need for a control-plane protocol between
        the two devices.</t>
      </section>

      <section title="Covered Scenarios">
        <t><xref target="RFC6144"/> describes multiple scenarios for IPv4/IPv6
        translation. This document is mainly concerned with Scenario 4: An
        IPv4 Network to the IPv6 Internet, but is also applicable to Scenario
        6 (An IPv4 Network to an IPv6 Network). This scenario is not covered
        in this memo and can be elaborated in future documents, as necessary.
        Scenario 2, which faces similar challenges (The IPv4 Internet to an
        IPv6 Network), is covered by <xref
        target="I-D.draft-sun-behave-v4tov6-00"/>.</t>
      </section>

      <section title="Functional elements">
        <t><list style="hanging">
            <t hangText="Client">User end-device, typically a personal
            computer or similar.</t>

            <t hangText="DNS proxy">Caching nameserver which proxies DNS
            queries from the client.</t>

            <t hangText="NAT46 translator">Translation device which translates
            incoming IPv4 traffic.</t>

            <t hangText="IPv6-only server">Device which holds content on an
            IPv6-only network.</t>
          </list></t>
      </section>
    </section>

    <section title="Algorithm Description">
      <t>This section describes how the algorithm works and the roles of every
      functional element. The steps are in cronological order, and display the
      scenario when the IPv4 client initiates a request for ipv6.example.com
      which is running on an IPv6-only server.</t>

      <t><list style="numbers">
          <t>The customer types in "ipv6.example.com" into his web browser and
          initiaties the request for the web page.</t>

          <t>The client operating system initiates a DNS query for
          "ipv6.example.com". Since the client uses IPv4, the query is for an
          A record.</t>

          <t>The DNS proxy receives the A record query and assumes the client
          is not IPv6 capable. Therefore, it initiates a DNS query for A and
          AAAA records for "ipv6.example.com" to the authorative DNS
          server.</t>

          <t>If a DNS response is received with only an AAAA record, the DNS
          proxy assumes that the server is IPv6-only. (In case the proxy
          receives both A or AAAA records, or just an A record, the A record
          is returned to the client and the process ends here.)</t>

          <t>As a response to the client, the proxy returns a fake A record
          for "ipv6.example.com" pointing at an un-used IPv4 address from the
          private address space (as described in <xref
          target="RFC1918"/>).</t>

          <t>The private IPv4 address and the resolved IPv6 address of
          "ipv6.example.com" must be kept in the translation table of the
          NAT46 translator. The time the translation would stay active in the
          table would be equal to the TTL field of the DNS response. How the
          DNS-related information is conveyed from the DNS proxy to the
          translator is out of the scope of this document. In the case the
          translator and the DNS proxy are functions of the same device, the
          logic is simplified.</t>

          <t>All IPv4 traffic from the client to "ipv6.example.com" will be
          translated to IPv6 as described in <xref target="RFC6145"/>. Unlike
          NAT-PT described in <xref target="RFC2766"/> (moved to Historic
          Status by <xref target="RFC4966"/>), the translation is a learned
          state and not a session triggered state. The destination address of
          the translated IPv6 packet will be the resolved AAAA record of
          "ipv6.example.com", while the source IPv6 address will be created
          according to <xref target="RFC6052"/>. The IPv6 prefix used to
          create the source IPv6 address must be globally unique and allocated
          to the device. If there are more IPv6 prefixes on the device,
          defining which one will be used is out of the scope of this
          document. The IPv4 address used to create the source IPv6 address is
          the address of the client.</t>

          <t>Return IPv6 traffic will be translated by the same device as the
          outgoing traffic, using IPv6 to IPv4 translation analogous to the
          previous step. The source IPv4 address will be the private IPv4
          address given by the DNS proxy to the client, while the destination
          IPv4 address would be the one of the client.</t>
        </list></t>

      <section title="Flow diagram">
        <t>In this example, the client is located behind a home gateway and is
        delegated an IPv4 address of 192.168.1.3. The home gateway is acting
        as a DNS proxy and as a NAT46 translator.<figure>
<artwork><![CDATA[
+-----------+       +----------------+   +-----------+ +------------+
|           |       | (Home Gateway) |   |   DNS     | |   ipv6.    |
|  Client   |       |   DNS proxy/   |   |authorative| |example.com |
|192.168.1.3|       |NAT46 translator|   |  server   | |2000:db9::1 |
|           |       |   2000:db8::1  |   |           | |            |
+-----------        +----------------+   +-----------+ +------------+
     |    DNS A query for   |                      |          |
     |  "ipv6.example.com"  |                      |          |
     |--------------------->|DNS A and AAAA query  |          |
     |                      |for "ipv6.example.com"|          |
     |                      |--------------------->|          |
     |                      |   DNS AAAA response  |          |
     |                      |for "ipv6.example.com"|          | 
     |DNS A response:       |<---------------------|          |
     |""ipv6.example.com"   |                      |          |
     |is located on 10.1.1.1|                                 |
     |<---------------------|                                 |
     | IPv4 SA:192.168.1.3  | IPv6 SA:2000:db8::192.168.1.3   |
     |   DA:10.1.1.1        | DA:2000:db9::1                  |
     |--------------------->|-------------------------------->|
     | IPv4 SA:10.1.1.1     | IPv6 SA:2000:db9::1             |
     |  DA:192.168.1.3      | DA:2000:db8::192.168.1.3        |
     |<---------------------|<--------------------------------|
     |                      |                                 |]]></artwork>
          </figure></t>
      </section>
    </section>

    <section title="Usage scenarios">
      <t>The typical scenario where such a solution can be used is the home
      network. The customer can have a broadband service with access to IPv6
      Internet, but uses an IPv4-only client. The DNS proxy and the
      translation device would in that case be the home gateway, which would
      handle the decision-making process, as well as the translation.</t>

      <t>However, other scenarios can also be foreseable, such as mobile
      access, business customers, etc. It's applicable to all scenarios where
      a DNS proxy is used, as well as a default gateway which can act as a
      translation device.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document makes no request of IANA.</t>

      <t>Note to RFC Editor: this section may be removed on publication as an
      RFC.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t/>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t/>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <reference anchor="RFC6145">
        <front>
          <title>IP/ICMP Translation Algorithm</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="RFC1918">
        <front>
          <title>Address Allocation for Private Internets</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="RFC6052">
        <front>
          <title>IPv6 Addressing of IPv4/IPv6 Translators</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement
          Levels</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="RFC6144">
        <front>
          <title>Framework for IPv4/IPv6 Translation</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="RFC2766">
        <front>
          <title>Network Address Translation - Protocol Translation
          (NAT-PT)</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="RFC4966">
        <front>
          <title>Reasons to Move the Network Address Translator - Protocol
          Translator (NAT-PT) to Historic Status</title>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>

      <reference anchor="I-D.draft-sun-behave-v4tov6-00">
        <front>
          <title/>

          <author>
            <organization/>
          </author>

          <date/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
