Internet DRAFT - draft-v6-via-v4

draft-v6-via-v4






Network Working Group                                          P. Tattam
Internet-Draft                           Tattam Software Enterprises Pty
Intended status: Experimental                     Ltd, Hobart, Australia
Expires: July 18, 2012                                  January 15, 2012


            Stateless IPv6 delivery within IPv4 (V6 via V4)
                           draft-v6-via-v4-00

Abstract

   This document describes a method for transmitting IPv6 packets
   directly to and from IPv4 hosts via the IPv4 network in a stateless
   manner using an IPv4 header option and transponders.  Additionally
   described is a mechanism to automatically locate IPv6 network
   transponders via well known IPv4 and IPv6 network prefixes.

Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on July 18, 2012.

Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of



Tattam                    Expires July 18, 2012                 [Page 1]

Internet-Draft                   V6viaV4                    January 2012


   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Transmission of IPv6 payload via IPv4  . . . . . . . . . . . .  3
     2.1.  Sending a packet from IPv4 to IPv6 . . . . . . . . . . . .  3
       2.1.1.  IPv4 Header Option (IPv6 Address Extension)  . . . . .  4
       2.1.2.  Code (to be allocated) . . . . . . . . . . . . . . . .  4
       2.1.3.  Length . . . . . . . . . . . . . . . . . . . . . . . .  4
       2.1.4.  Flags  . . . . . . . . . . . . . . . . . . . . . . . .  4
       2.1.5.  Translation of IPv6 via IPv4 packet to an IPv6
               packet . . . . . . . . . . . . . . . . . . . . . . . .  5
     2.2.  Sending a packet from IPv6 to IPv4 . . . . . . . . . . . .  8
     2.3.  Optimal Alignment of IPv4 header . . . . . . . . . . . . . 10
     2.4.  Handling Payload Checksums . . . . . . . . . . . . . . . . 10
     2.5.  Handling ICMP and ICMPv6 traffic . . . . . . . . . . . . . 12
     2.6.  Additional IPv4 packet considerations  . . . . . . . . . . 12
     2.7.  Definition of HELPER_ADDRESS() . . . . . . . . . . . . . . 12
     2.8.  Definition of V6_VIA_V4_PREFIX (IPv6)  . . . . . . . . . . 13
     2.9.  Local Operation of Protocol  . . . . . . . . . . . . . . . 13
   3.  Global Network Allocation for IPv6 via IPv4 traffic  . . . . . 13
     3.1.  HELPER_ADDRESS() function for global IPv6 via IPv4
           access . . . . . . . . . . . . . . . . . . . . . . . . . . 14
     3.2.  Definition of V6_VIA_V4_NETWORK (IPv4) . . . . . . . . . . 14
   4.  Example of IPv6 via IPv4 traffic . . . . . . . . . . . . . . . 14
   5.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 17
   6.  Security Considerations  . . . . . . . . . . . . . . . . . . . 17
   7.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 18
   8.  Normative References . . . . . . . . . . . . . . . . . . . . . 18
   Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 18














Tattam                    Expires July 18, 2012                 [Page 2]

Internet-Draft                   V6viaV4                    January 2012


1.  Introduction

   Since its acceptance as new standard, deployment of IPv6 [RFC2460]
   has been somewhat slower than anticipated.  The original transition
   strategy was to deploy IPv6 alongside IPv4 in the expectation that
   the IPv6 network would grow to such an extent that it would supplant
   the aging IPv4 network.  This, however, has not been the case, and in
   early 2011 top level IPv4 address allocations in at least one
   regional registry were exhausted.

   One of the possible reasons for the slow uptake of IPv6 is that the
   current IPv6 protocol is not backwardly compatible with widely
   deployed IPv4 protocol.  This in turn has led to a reluctance by
   network infrastructure suppliers to deploy IPv6 natively.  Another
   significant factor has been that in recent years much end-user
   customer link level infrastructure has only supported IPv4 network
   services (layer 2 services, customer DSL routers etc).  To supply
   both IPv4 and IPv6 service typically requires having to roll out a
   duplicate network topology, both at the transport layer and at the
   link level layer making, which is not economically viable within an
   industry highly sensitive to delivery costs.

   This document outlines a proposal to deliver IPv6 network access over
   IPv4 only infrastructure without the use of tunnels.  It is divided
   into two parts, the first being a header extension to provide IPv6
   addressing for an IPv4 packet, and the second an addressing proposal
   for default IPv4 to IPv6 traffic.

   Ultimately such a protocol enhancement to IPv4 could logically join
   the IPv4 and IPv6 networks together allowing the IPv6 network to grow
   without the risk of being isolated from the IPv4 network despite the
   exhaustion of IPv4 address space.


2.  Transmission of IPv6 payload via IPv4

   Let us suppose that we want an IPv4 only host to communicate with an
   IPv6 only host directly.  We will divide this problem into two tasks.

2.1.  Sending a packet from IPv4 to IPv6

   The first task is for us to send an IPv4 packet to an IPv6 host.  For
   the packet to be routable to the IPv6 host, it must contain an IPv6
   address destination, but the IPv4 packet only has space for an IPv4
   address of 32 bits, so it is proposed that we either extend the IPv4
   address by including the remaining 96 bits to make an IPv6 address of
   128 bits, or that we simply include the full IPv6 address as an IPv6
   address extension.  Operational experience has shown that the latter



Tattam                    Expires July 18, 2012                 [Page 3]

Internet-Draft                   V6viaV4                    January 2012


   is preferable in that it provides us the freedom to choose an
   arbitrary IPv4 address as a "helper" address to route the packet to
   its IPv6 destination (typically a V4 to V6 transponder).  To do this,
   it is proposed that the following IPv4 header option be approved by
   IANA.  This allows a data packet to transit the IPv4 network without
   the use of tunnels in a stateless manner.  Once the packet reaches
   the transponder, it is reformatted and retransmitted into the IPv6
   network where it will reach its ultimate destination.

2.1.1.  IPv4 Header Option (IPv6 Address Extension)

   An IPv6 via IPv4 packet is defined as standard IPv4 packet with the
   inclusion of a single IPv4 header Option (IPv6 address extension).
   The layout of this IPv4 header option is as follows.
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Code = nnn   | Length = 20 | Flags                       |I|D|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         IPv6  Address                         +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                IPv4 Header Option (IPv6 Address Extension)

2.1.2.  Code (to be allocated)

   The IPv4 Header Option (IPv6 Address Extension) has a value which as
   yet unassigned.

2.1.3.  Length

   The IPv4 Header Option (IPv6 Address Extension) has a fixed length of
   20 octets

2.1.4.  Flags

   IPv4 Header Option (IPv6 Address Extension) has a 16 bit flags field.
   Currently the only defined bits are the D (Direction) bit and the I
   (ignore checksum) .  All other values are reserved.






Tattam                    Expires July 18, 2012                 [Page 4]

Internet-Draft                   V6viaV4                    January 2012


2.1.4.1.  D (Direction) bit = 0

   The IPv6 Address is a replacement for the IPv4 Destination Address

2.1.4.2.  D (Direction) bit = 1

   The IPv6 Address is a replacement for the IPv4 Source Address

2.1.4.3.  I (ignore checksum) bit = 0

   Relevant payload checksums SHOULD BE modified

2.1.4.4.  I (ignore checksum) bit = 1

   Relevant payload checksums SHOULD NOT be modified.

2.1.4.5.  IPv6 Address

   The full IPv6 address that should replace the source or destination
   IPv4 address.  If D = 0, this represents the destination IPv6
   address.  If D = 1, this represents the source IPv6 address.

2.1.5.  Translation of IPv6 via IPv4 packet to an IPv6 packet

   A typical V6 via V4 packet header would look like the following.


























Tattam                    Expires July 18, 2012                 [Page 5]

Internet-Draft                   V6viaV4                    January 2012


    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | VER=4 |IHL=10 |Type of Service|          Total Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identification        |Flags|      Fragment Offset    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Time to Live |    Protocol   |         Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   IPv4 Source Address                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  IPv4 Destination Address                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Code = nnn   | Length = 20 |                             |I|D|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         IPv6  Address                         +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Payload                                 |
   |                        ......                                 |


                        IPv6 via IPv4 packet format

   On receipt of an IPv6 via IPv4 packet a suitable transponder can
   convert the packet in situ to an IPv6 packet using the following
   rules.  Two cases apply, the first being when a packet is destined to
   an IPv6 host (D = 0), for which the following rules apply.

   1.   IPv6.Version = 6

   2.   IPv6.traffic_class = 0

   3.   IPv6.flow_label[16:19] = 0

   4.   IPv6.payload_len = IPv4.len - (IPv4.header_len*4)

   5.   IPv6.flow_label[0:15] = 0

   6.   IPv6.next_header = IPv4.protocol

   7.   IPv6.hop_limit = IPv4.ttl




Tattam                    Expires July 18, 2012                 [Page 6]

Internet-Draft                   V6viaV4                    January 2012


   8.   subtract IPv4 addresses from payload checksum if necessary

   9.   IPv6.src_addr = IPv4.src_addr + V6_VIA_V4_PREFIX

   10.  /* IPv6.dst_addr = IPV4.option_v6_address_extension.ipv6_address
        */

   11.  add IPv6 addresses to payload checksum if necessary

   Note that if the IPv6 packet is reconstructed in situ, the rules need
   to be applied in the above order so as not to overwrite unprocessed
   information.  In particular, the IPv6 flow label and IPv4 packet
   length overlap.  Also note that in step 10, the IPv6 destination will
   be in the correct place so it need not be copied.  Finally it can be
   observed that the IPv6 source address will be recognizable as coming
   from the IPv4 network by checking its 96 bit (or 64/32 bit) prefix.
   Suitable choice of V6_VIA_V4_PREFIX will be discussed later.  Also
   consideration must be made towards modifying payload checksums if
   necessary.

   The packet should end up looking like a normal IPv6 packet as
   follows.
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | VER=6 | Traffic Class |           Flow Label                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Payload Length        |  Next Header  |   Hop Limit   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                     IPv6 Source Address                       +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                   IPv6 Destination Address                    +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Payload                             |
   |                                                               |




Tattam                    Expires July 18, 2012                 [Page 7]

Internet-Draft                   V6viaV4                    January 2012


   The other case is where a packet is received by an IPv4 host which is
   the ultimate destination for traffic from a native IPv6 host.  In
   this case the direction bit will be set (D=1) indicating that the
   address extension is for the IPv6 source.  The following rules apply
   to convert the packet from the IPv4 form to the eventual IPv6 form
   for processing directly within the originating hybrid IPv4/IPv6 host
   or for retransmission within a local IPv6 LAN.

   1.   IPv6.Version = 6

   2.   IPv6.traffic_class = 0

   3.   IPv6.flow_label[16:19] = 0

   4.   IPv6.payload_len = IPv4.len - (IPv4.header_len*4)

   5.   IPv6.flow_label[0:15] = 0

   6.   IPv6.next_header = IPv4.protocol

   7.   IPv6.hop_limit = IPv4.ttl

   8.   subtract IPv4 addresses from payload checksum if necessary

   9.   IPv6.src_addr = IPV4.option_v6_address_extension.ipv6_address

   10.  IPv6.dst_addr = IPv4.src_addr + V6_VIA_V4_PREFIX

   11.  add IPv6 addresses to payload checksum if necessary

2.2.  Sending a packet from IPv6 to IPv4

   This process is the converse of sending a packet from IPv4 to IPv6
   and involves constructing an IPv4 header based on the IPv6 header.
   There are two possibilities here, the first case is when a packet
   originates from a native IPv6 host (i.e. a machine on the live IPv6
   network) and the second case when a packet originates from an IPv6
   host within the IPv4 network.  This can be determined by a
   transponder by examining the IPv6 source address.  A packet
   originating from inside the IPv4 network MUST use an IPv6 address
   constructed from the special V6_VIA_V4_PREFIX concatenated with it's
   native IPv4 address.

   In the case that the IPv6 packet originates from an IPv6 within the
   IPv6 network, the following rules apply






Tattam                    Expires July 18, 2012                 [Page 8]

Internet-Draft                   V6viaV4                    January 2012


   1.   subtract IPv6 addresses from payload checksum if necessary

   2.   temp_addr = IPv6.src_addr

   3.   IPv4.dst_addr = IPv6.dst_addr[0:31]

   4.   IPv4.src_addr = HELPER_ADDRESS(IPv6.src_addr)

   5.   IPv4.option_v6_address_extension.type = nnn (to be assigned)

   6.   IPv4.option_v6_address_extension.len = 20

   7.   IPV4.option_v6_address_extension.D = 1

   8.   IPv4.option_v6_address_extension.IPv6_address = temp_addr

   9.   IPv4.version = 4

   10.  IPv4.header_len = 10 /* (20 + 20)/4 */

   11.  IPv4.tos = 0

   12.  IPv4.len = IPv6.payload_len + (IPv4.header_len *4)

   13.  IPv4.ttl = IPv6.hop_limit

   14.  IPv4.id = allocate_new_id

   15.  IPv4.protocol = IPv6.next_header

   16.  IPv4.fragment = 0

   17.  IPv4.dont_fragment = 1

   18.  IPv4.header_checksum = recalculate header checksum

   19.  add IPv4 addresses to payload checksum if necessary

   In the case that the IPv6 packet originates from an IPv6 host within
   the IPv4 network, the following rules apply

   1.   subtract IPv6 addresses from payload checksum if necessary

   2.   IPv4.dst_addr = HELPER_ADDRESS(IPv6.dst_addr)

   3.   IPv4.src_addr = IPv6.src_addr[0:31]





Tattam                    Expires July 18, 2012                 [Page 9]

Internet-Draft                   V6viaV4                    January 2012


   4.   IPv4.option_v6_address_extension.type = nnn (to be assigned)

   5.   IPv4.option_v6_address_extension.len = 20

   6.   IPv4.option_v6_address_extension.D = 0

   7.   /* IPv4.option_v6_address_extension.IPv6_address =
        IPv6.dst_address */

   8.   IPv4.version = 4

   9.   IPv4.header_len = 10 /* (20 + 20)/4 */

   10.  IPv4.tos = 0

   11.  IPv4.len = IPv6.payload_len + (IPv4.header_len *4)

   12.  IPv4.ttl = IPv6.hop_limit

   13.  IPv4.id = allocate_new_id

   14.  IPv4.protocol = IPv6.next_header

   15.  IPv4.fragment = 0

   16.  IPv4.dont_fragment = 1

   17.  IPv4.header_checksum = recalculate header checksum

   18.  add IPv4 addresses to payload checksum if necessary

2.3.  Optimal Alignment of IPv4 header

   Now the typical length of an IPv4 header is 20 bytes, whilst that of
   an IPv6 header is 40 bytes.  The size of the IPv6 address extension
   has been chosen such that the size of an V6 via V4 extended packet is
   that same size as its equivalent IPv6 packet.  Operational experience
   using tunnels has shown that packet size changes during transit cause
   an MTU impedance mismatch.  If the IPv6 address extension is the only
   IPv4 header option, then translation to an IPv6 packet can be done in
   situ.  Additionally, for a packet destined to an IPv6 host, the IPv6
   destination address will be in the correct place.

2.4.  Handling Payload Checksums

   Certain IP transport protocols such as TCP and UDP contain a payload
   checksum which includes the address end-points of the packet.
   Initially, the packet originator SHOULD calculate the checksum using



Tattam                    Expires July 18, 2012                [Page 10]

Internet-Draft                   V6viaV4                    January 2012


   the ultimate IPv6 source and destinations address.  The possibility
   of IPv4 NATs in the packet path complicates matters somewhat since
   the traffic is actually live IPv4 traffic, not tunnelled, and a NAT
   will modify payload checksums, possibly by updating the existing
   checksum by applying a delta, or by recalculating the checksum.  To
   handle this situation, any V6 via V4 packets within the IPv4 network
   should be maintained internally consistent.  This involves firstly
   modifying the payload checksum upon entry and exit from the IPv4
   network.  Initial operational experience has shown that this can be
   achieved in the following manner.

   To convert a V4viaV6 payload checksum

   1.  identify whether the packet needs payload checksum modification

   2.  if so, proceed further, otherwise no further action is required.

   3.  remove the IPv4 source and destination addresses from the
       checksum using ones complement arithmetic

   4.  include the updated IPv6 source and destination address in the
       checksum using ones complement arithmetic

   To convert a V6 payload checksum

   1.  identify whether the packet needs payload checksum modification

   2.  if so, proceed further, otherwise no further action is required.

   3.  remove the IPv6 source and destination addresses from the
       checksum using ones complement arithmetic

   4.  include the updated IPv4 source and destination address in the
       checksum using ones complement arithmetic

   There are some minor optimizations that can be taken in the process.
   For example, the V6_VIA_V4_PREFIX will be constant meaning a constant
   value can be applied for that component of the translation (indeed if
   the prefix were 0, no adjustment would be required).

   It can also be determined by a discovery process whether checksum
   modification is actually required and if not, the I (ignore checksum)
   bit can be set in the flags of the header option to disable this
   feature.  This feature is still an area for future research.  This
   does not apply to the IPv4 header checksum which must always be
   valid.

   The payload checksums for ICMP, ICMPv6, TCP and UDP packets are in a



Tattam                    Expires July 18, 2012                [Page 11]

Internet-Draft                   V6viaV4                    January 2012


   fixed location in the payload, and these are currently the only
   protocols for which these actions will be defined.

2.5.  Handling ICMP and ICMPv6 traffic

   It is suggested that ICMPv6 traffic be allowed to traverse the IPv4
   network when IPv6 via IPv4 packets are used.  This should allow
   ICMPv6 messages to pass between end points since we are ultimately
   only interested in IPv6 communication.  However there may be times
   where intervening routers on the IPv4 network may respond with ICMP
   messages.  Any host participating in this process should be prepared
   to receive ICMP packets if they have originated from the IPv4
   network.  More operational experience will be required to determine
   the nature of such traffic.  Translation of ICMP messages to ICMPv6
   and vice versa is the subject of further research at this stage.

2.6.  Additional IPv4 packet considerations

   For an IPv4 packet to be able to be suitably transmitted, the
   following restrictions SHOULD be adhered to.

   o  The IPv4 packet SHOULD only contain a single IPv4 header option
      (IPv6 address extension).

   o  The IPv4 packet MUST have the Don't Fragment bit set (DF=1) , and
      the Fragment Offset MUST be zero.

   o  The IPv4 header field Type Of Service (TOS) is ignored on
      conversion to IPv6 and set to zero or default value on conversion
      from IPv6.

   o  The IPv4 header field Identification (ID) is ignored on conversion
      to IPv6 and is set to a suitable ID on conversion from IPv6

2.7.  Definition of HELPER_ADDRESS()

   The HELPER_ADDRESS() function is a special function which takes the
   IPv6 destination address (a native IPv6 address) and converts it into
   an IPv4 address for transit out of the IPv4 network.

   Operational testing has shown that there is some flexibility in the
   choice of HELPER_ADDRESS() which is used to translate IPv6 packets
   into IPv6 via IPv4 packets.  The simplest function would be to use a
   fixed address, which in real terms would be the IP address of an IPv6
   transponder visible from IPv4 hosts able to participate in the IPv6
   via IPv4 protocol.

   Discussed later in this document is a proposal for a version of the



Tattam                    Expires July 18, 2012                [Page 12]

Internet-Draft                   V6viaV4                    January 2012


   HELPER_FUNCTION() which can be used in a global manner.

2.8.  Definition of V6_VIA_V4_PREFIX (IPv6)

   For this mechanism to operate, IPv6 packets destined for the IPv4
   network need to be identified.  It is proposed that a well known IPv6
   address allocation of at least /32 be allocated for this purpose.  It
   is not known at this stage if this mechanism can coexist with similar
   prefix allocations for IPv6 NAT mechanisms.  For efficiency with
   typical network infrastructure, it is preferable that it be unique in
   the IPv6 address space for the top 32 bits of the prefix (i.e. a /32
   allocation).

2.9.  Local Operation of Protocol

   For this protocol to function, it needs to differentiate traffic at
   the network layer.  As a minimum in the IPv6 world, IPv4 destined
   traffic needs to be identifiable with a known prefix, and in the IPv4
   world an IPv4 address or network needs to be visible for which
   transponders exist which bridge the IPv4 and IPv6 worlds.  Also any
   IPv6 capable host which is operating in the IPv4 world should have a
   local address constructed from its IPv4 address and the
   V6_VIA_V4_PREFIX.


3.  Global Network Allocation for IPv6 via IPv4 traffic

   One of the significant obstacles to continued growth of the IPv6
   network has been that of the address depletion happening faster than
   was anticipated.  This has created two disjoint networks.  New
   address allocations are made from the IPv6 network but these have
   limited value since only IPv6 network hosts can see them.
   Conversely, IPv4 address allocations are now at a premium due to
   scarcity.  It would be prudent if there were a standard mechanism by
   which existing IPv4 hosts could automatically see IPv6 hosts and vice
   versa.  This is termed as the backward compatibility problem.

   Whilst this proposal can't fully deliver seamless connectivity
   between the two networks, it can at least go a long way towards that
   in that any host armed with the IPv6 via IPv4 protocol could
   potentially achieve full IPv6 connectivity provided the IPv6 network
   were accessible from the IPv4 network via a well known IPv6 via IPv4
   prefix.  The local network need not be IPv6 connected or implement
   IPv6 via IPv4 transponders so long as it can direct any such traffic
   to a well known IPv4 prefix for such traffic.  Given the extreme need
   for traffic to be able to automatically pass between the two networks
   in the long term, it is conceivable that a special allocation be made
   for such traffic.  This proposal suggests a possible standard



Tattam                    Expires July 18, 2012                [Page 13]

Internet-Draft                   V6viaV4                    January 2012


   addressing scheme for IPv6 via IPv4 traffic which obviates the need
   for end user configuration or transponder discovery.

3.1.  HELPER_ADDRESS() function for global IPv6 via IPv4 access

   One possible HELPER_ADDRESS() function might be the function

   HELPER_ADDRESS(v6_address) = ((v6_address << 3) >>
   (V6_VIA_V4_NETWORK_PREFIXLEN + 96) ) + V6_VIA_V4_NETWORK

   i.e.  After removing the top 3 bits, take N bits from the routable
   part of the IPv6 address and assign them to the subnet address part
   of the routable IPv4 prefix.

   Such a prefix could be any allocation from the IPv4 network from /24
   up to /8, possibly even up to /4.  One possible candidate might be
   the reserved sections of the IPv4 network such as 224.0.0.0/4,
   255.0.0.0/8 or 255.255.0.0/16.  The degenerate case would be a single
   well known address (/32) which could be used to direct traffic to the
   IPv6 network.

3.2.  Definition of V6_VIA_V4_NETWORK (IPv4)

   For the HELPER_ADDRESS() function to operate on global basis, it
   would be advantageous to have an IPv4 address allocation of a
   suitable size that would allow for IPv6 via IPv4 traffic to be
   routable in a useful manner.  This would effectively be an address
   range which is a window to the IPv6 world from the IPv4 world.


4.  Example of IPv6 via IPv4 traffic

   Let us consider a round trip of an IPv4 host (A) sending a packet to
   IPv6 host (B).  IPv4 host A has only local IPv4 traffic capability
   and IPv6 host B has only local IPv6 capability.  We also assume there
   is an IPv6 via IPv4 transponder (X) which is accessible from both A
   and B, i.e.  X has both native IPv4 and native IPv6 access.
   Initially we will also assume that whilst host A has only IPv4
   connectivity, it is IPv6 capable, and also understands the IPv6 via
   IPv4 protocol.

   Host A will have an IPv4 address and also the pseudo IPv6 address
   constructed from the well known V6_VIA_V4_PREFIX address space.

   Transponder X be will transparent to host B, but we assume that any
   traffic for the V6_VIA_V4_PREFIX address space will be directed to
   it.




Tattam                    Expires July 18, 2012                [Page 14]

Internet-Draft                   V6viaV4                    January 2012


   Traffic flow from A to B is as follows.

   o  A requests internally that an IPv6 packet to be sent to B using
      the IPv6 addresses (v6.src=A.v6_address, v6.dst=B.v6_address)

   o  A then internally translates this packet to an IPv6 via IPv4
      packet using the address tuple (v4.src=A.v4_address,
      v4.dst=X.v4_address, v4.opt_hdr_v6_extension.v6_addr=B.v6_address,
      v4.opt_hdr_v6_extension.D=0)

   o  A then transmits this packet to X on the IPv4 network.

   o  X receives the packet and retrieves B.v6_address directly from
      v4.opt_hdr_v6_extension.v6_addr, and deduces A.v6_address from
      v4.src

   o  X converts it to an IPv6 packet with the address tuple
      (v6.src=A.v6_address, v6.dst=B.v6_address)

   o  X transmits the packet to B on the IPv6 network.

   o  B receives the packet and processes it as a normal IPv6 packet.

   Traffic flow from B to A is as follows.

   o  B requests that an IPv6 packet be sent to A using the address
      tuple (v6.src=B.v6_address, v6.dst=A.v6_address)

   o  B transmits packet to IPv6 network.

   o  IPv6 network routes packet to X as a result of the prefix of
      v6.dst being equal to V6_VIA_V4_PREFIX.

   o  X receives the IPv6 packet and determines that it should be
      forwarded to A.v4_address.  It extracts the IPv4 destination
      address from the lower 32 bits of the IPv6 destination address.

   o  X constructs an IPv6 via IPv4 packet in situ with the address
      tuple (v4.src=X.v4_address, v4.dst=A.v4_address,
      v4.opt_hdr_v6_extension.v6_addr=B.v6_address,
      v4.opt_hdr_v6_extension.D=1)

   o  X then retransmits the packet on the IPv4 network to A

   o  A receives the IPv6 via IPv4 packet and reconstructs the original
      IPv6 packet with the address tuple (v6.src=B.v6_address,
      v6.dst=A.v6_address).




Tattam                    Expires July 18, 2012                [Page 15]

Internet-Draft                   V6viaV4                    January 2012


   o  A processes the packet as an IPv6 packet.

   Our network round trip is now complete.

   There are some variants to this process which can be applied.

   Suppose that we have another host C which is not IPv6 aware at all.
   In this case, it would need assistance to reach the IPv6 network.  In
   this case A can act as an agent to make the IPv6 network visible to
   C. It would need to provide a pool of IPv4 to IPv6 translation pairs
   which it would need to maintain in a stateful manner.  It would also
   need to supply pseudo IPv4 DNS A records such that C would be able to
   discover the pseudo IPv4 address of B. The behaviour of A in this
   case would be similar to traditional IPv6 NAT operation.

   An additional variant of the basic scenario is that A can also act as
   an agent for other IPv6 enabled machines which have no IPv6
   connectivity but are able to reach A via localized IPv6.  In this
   scenario, each IPv6 machine should be using a local IPv6 address with
   the V6_VIA_V4_PREFIX.  When A is acting as an agent for such traffic,
   it would follow similar steps to the above example, but replacing the
   v4.src address in the V6 via V4 packet by the originating IPv6
   machine.

   Another possible variant to this scenario is when X is not identified
   as a specific machine, but is rather the destination route for a
   known IPv4 network prefix using the extended HELPER_ADDRESS()
   function described earlier in the document.  In this manner, the
   transponder functions could be distributed based upon the IPv6 prefix
   of destination from the IPv4 side.

   From the IPv6 network side, transmitting back to the IPv4 network
   could be either an all-or-nothing style of routing or some coarse
   grained routing could be applied to the component IPv4 destination
   address.  However in order to conform with the strong aggregation of
   IPv6, such behaviour should be deprecated.

   Theoretically, all IPv4 machines should be reachable from the IPv6
   network and vice versa as long as any such machines are IPv6 via IPv4
   capable and that there are transponders at transition points between
   the two networks.

   It should also be noted that the transponder component of this
   protocol is stateless, and that there is no MTU change for transition
   for packets from IPv4 to IPv6.  The only significantly identifiable
   transponder cost would be the cost of rearranging the packet and
   recalculation of payload checksums if required.  IPv4 header checksum
   recalculation is only required for the return path from an IPv6 host



Tattam                    Expires July 18, 2012                [Page 16]

Internet-Draft                   V6viaV4                    January 2012


   to an IPv4 host.


5.  IANA Considerations

   This document requests the following from IANA

   1.  A number assignment for the IPv4 header option
       IPV6_ADDRESS_EXTENSION

   2.  A global IPv6 address /32 allocation (V6_VIA_V4_PREFIX) to
       identify traffic destined for the IPv4 network from the IPv6
       network.  An allocation which simplifies or obviates the need to
       V4-V6 address checksum recalculation would be desirable.

   3.  A global IPv4 address in the range /24 up to /8 allocation
       (V6_VIA_V4_NETWORK) to identify traffic destined for the IPv6
       network from the IPv4 network.

   Note to RFC Editor: this section may be removed on publication as an
   RFC.


6.  Security Considerations

   IPv6-IPv4 transponders will have a similar function to routers in
   that they will be handling high volumes of traffic.  While the
   stateless mechanism described should have a trivially small amount of
   computing to rebuild the packet which comprises of reordering the
   header and possibly recomputing check sums, it may still be subject
   to denial of service issues.

   It is conceivable that transponders may become overloaded from the
   receipt of traffic over which it has no control.  This is however a
   similar scenario to that of core routers having to deal with transit
   traffic, and similar measures should apply.

   Any host which implements this protocol extension in a hybrid IPv4/
   IPv6 stack should take care that translated packets are managed
   correctly to prevent address space back doors.

   Operational experience has indicated that some implementations and
   firewalls may reject or flag packets containing the extended IPv4
   header options.  In particular it was noticed that one TCP/IP stack
   sent ICMP parameter problem messages in response to valid IPv4 header
   options.  There needs to be negotiation with TCP/IP stack and
   firewall vendors to resolve such issues.




Tattam                    Expires July 18, 2012                [Page 17]

Internet-Draft                   V6viaV4                    January 2012


7.  Acknowledgements

   The author wishes to thank internet pioneer Vint Cerf for his
   insightful thoughts during early drafts of this proposal.

   The author also wishes to thank Medical-Objects Pty Ltd for the
   continuing use of their IPv6 enabled infrastructure in the
   development of this proposal.


8.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2460]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
              (IPv6) Specification", RFC 2460, December 1998.


Author's Address

   Peter Tattam
   Tattam Software Enterprises Pty Ltd, Hobart, Australia




























Tattam                    Expires July 18, 2012                [Page 18]