Multiple IPv4 - IPv6 address mapping encapsulation - fixed prefix (M46E-FP)
Naoki Matsuhira
WIDE Project
Japan
naoki.matsuhira@gmail.com
4 April 2022
IPv6
Draft
This document specifies Multiple IPv4 - IPv6 address mapping encapsulation - fixed prefix (M46E-FP) specification. M46E-FP makes backbone network to IPv6 only. And also, M46E-FP can stack many IPv4 networks, i.e. the networks using same IPv4 (private) addresses, without interdependence.

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.

Introduction
This document provides Multiple IPv4 - IPv6 address maping encapsulation - fixed prefix (M46E-FP) specification.
The basic strategy for IPv6 deployment is dual stack. Viewing this strategy from operational side, operation cost of dual stack is higher than single stack operation. Viewing from future, IPv6 only operation is more reasonable rather than IPv4 only operation. Therefore IPv6 only operation is desired.
M46E-FP makes backbone network to IPv6 only and privide IPv4 connectivities. And also, M46E-FP can stack many IPv4 networks, i.e. the networks using same IPv4 (private) address, without interdependence.

Architecture of M46E-FP
IP address contain two information, one is locator information, and another is identifier information. This is basic architecture of internet protocol, and also the Internet, and no difference between IPv4 and IPv6.
Locater is a information related "Where", and indentifier is a information related "Who". That mean, IP address's semantics is "Where's Who" meaning. Host is identified whole IP address information, that is "Where's Who", however route to the host is identified just locator information in IP address, that is "Where". See Figure 1.

     |<------ IP address ------------------>|
     |<----- Locator ----->|<--Identifier-->|
            (Where )             (Who)
     +---------------------+----------------+
     |                     |                |
     +---------------------+----------------+

In IPv4 address space, some host has IPv4 address, which consist n bits length identifier and 32 - n bits locator. In Where's Who representation, 32 - n bits "Where" and n bits "Who".
Keeping such "Where's Who" relation, IPv4 address can be represent as IPv6 address by expanding "Where" information from 32 - n bits to 128 - n bits. Expanding " Where" information, IPv4 address can be mapped to IPv6 address. Figure 2 shows such expanding.

 |<------------------------ 128 bits ----------------------------->|
 |<-------------------- 96 bits ------------------->|<-- 32 bits ->|
 |                                                          :      |
 |                                                          :      |
 |                                                  +-------:------+
 |                                                  | IPv4 address |
 |                                                  +-------:------+
 |                                                  |<-Loc->:<-ID->|
 |                                                  | 32-n  :  n   |
 |                                                  | bits  : bits |
 |                                                  |       :      |
 +--------------------------------------------------+-------:------+
 |       M46A prefix (no IPv4 network plane ID)     | IPv4 address |
 +--------------------------------------------------+-------:------+
 |                                                          :      |
 |<------------- Locator (128 - n bits ) ------------------>:<-ID->|
 |                                                          :  n   |
 |                                                          : bits |

IPv4 address space contain private address, that is non globally unique IP address. If some identifier which distinguish private address can introduce in IPv6 address space, we can treate IPv4 private address as different address in IPv6 address space. This document define such identifier as "IPv4 network plane ID". "IPv6 network plane ID" can provide VPN (Virtual Private Network) like service.
That is M46A. In M46E-FP address, "Where" information's bit length is 128 -n bits, and "Who" information's bit length is n bits. Figure 3 shows summary of IPv4 address and M46E-FP address relation.

 |<------------------------ 128 bits ----------------------------->|
 |<-------------------- 96 bits ------------------->|<-- 32 bits ->|
 |                                                          :      |
 |                                                          :      |
 |                                                  +-------:------+
 |                                                  | IPv4 address |
 |                                                  +-------:------+
 |                                                  |<-Loc->:<-ID->|
 |                                                  | 32-n  :  n   |
 |                                                  | bits  : bits |
 |                                                  |       :      |
 +--------------------------------------------------+-------:------+
 |       M46A prefix (no IPv4 network plane ID)     | IPv4 address |
 +--------------------------------------------------+-------:------+
 |                                                          :      |
 |                                                          :      |
 |    96 - m bits        |          m bits          |     32 bits  |
 +-----------------------+--------------------------+-------:------+
 |      M46A prefix      |  IPv4 network plane ID   | IPv4 address |
 +-----------------------+--------------------------+-------:------+
 |<------------- Locator (128 - n bits ) ------------------>:<-ID->|
 |                                                          :  n   |
 |                                                          : bits |

Basic Network Configuration
Figure 4 shows network configuration with M46E-FP. The network consists of three parts. Backbone network, stub network, and M46E-FP.
Backbone network is operated with IPv6 only. Stub network has three cases. IPv4 only, Dual Stack (both IPv4 and IPv6), and IPv6 only.
M46E-FP connects backbone network and stub network in case IPv4 still works in that stub network. If stub network is IPv6 only, M46E-FP is not needed.
Campus network, corporate network, ISP and datacenter network are the example for such network.
 /---------------------------------------------------\
 |                                                   |
 |                  Backbone Network                 |
 |                    (IPv6 only)                    |
 |                                                   |
 \---------------------------------------------------/
       |                    |                |
   +-------+            +-------+            |
   |M46E-FP|            |M46E-FP|            |
   +-------+            +-------+            |
       |                    |                |
 /--------------\   /--------------\   /--------------\
 |              |   |              |   |              |
 | Stub Network |   | Stub Network |   | Stub Network |
 | (IPv4 only)  |   | (Dual Stack) |   | (IPv6 only)  |
 |              |   |              |   |              |
 \--------------/   \--------------/   \--------------/

Basic Function of M46E-FP
M46E-FP has mainly two function. One is IPv4 over IPv6 Encapsulation / Decapsulation, and another is advertise route for stub network.

IPv4 over IPv6 Encapsulation / Decapsulation
M46E-FP encapsulates IPv4 packet to IPv6 from stub network to backbone network, and decapsulates IPv6 packet to IPv4 from backbone network to stub network. Figure 5 shows such movement.

  +--------+------------+       +----------+--------+------------+
  |IPv4 Hdr|    Data    |  -->  | IPv6 Hdr |IPv4 Hdr|    Data    |
  +--------+------------+       +----------+--------+------------+

  +--------+------------+       +----------+--------+------------+
  |IPv4 Hdr|    Data    |  <--  | IPv6 Hdr |IPv4 Hdr|    Data    |
  +--------+------------+       +----------+--------+------------+

 /-------------------\  +-------+  /-----------------------------\
 |   Stub Network    |--|M46E-FP|--|       Backbone Network      |
 |      (IPv4)       |  +-------+  |         (IPv6 only)         |
 \-------------------/             \-----------------------------/

M46E-FP MUST support tunnel MTU discovery. When encapsulated IPv6 Packet size exceed path MTU and inner IPv4 packet have the Don't Fragment bit is set, M46E-FP MUST return ICMP Destination unreachable message with Type3 Code4, fragmentation needed and DS set.
In case IPv6, M46E-FP just relays IPv6 packet.

  +----------+------------+       +----------+------------+
  | IPv6 Hdr |    data    |  -->  | IPv6 Hdr |    data    |
  +----------+------------+       +----------+------------+

  +----------+------------+       +----------+------------+
  | IPv6 Hdr |    data    |  <--  | IPv6 Hdr |    data    |
  +----------+------------+       +----------+------------+

 /---------------------\  +-------+  /--------------------\
 |    Stub Network     |--|M46E-FP|--|  Backbone Network  |
 |        (IPv6)       |  +-------+  |   (IPv6 only)      |
 \--------------------/             \---------------------/

By IPv4 over IPv6 function, M46E-FP make backbone network to IPv6 only.

M46A architecture
M46A is a IPv6 address used in outer IPv6 header which encapsulate IPv4 packet by M46E-FP. M46A is described in M46A.
Figure 7 shows M46A address architecture

 |      96 - m bits      |          m bits          |     32 bits  |
 +-----------------------+--------------------------+--------------+
 |      M46A  prefix     |  IPv4 network plane ID   | IPv4 address |
 +-----------------------+--------------------------+--------------+

M46A consists of three parts as follows.
M46A prefix:
M46A prefix. This value is fixed value and preconfigured to all M46E-FP in the networks.
IPv4 network plane ID:
IPv4 network plane ID is an identifier of IPv4 network stack over IPv6 backbone network. This value is preconfigured depend on the M46E-FP belong which IPv4 network plane. For more detail see Section 5.
IPv4 address:
IPv4 address in inner IPv4 packet.
M46A is resolved copying IPv4 address in inner IPv4 packet, and preconfigured values, M46A prefix and IPv4 network plane ID.

Route Advertisement
M46E-FP converts stub network's IPv4 route to M46E-FP IPv6 route and advertises to backbone network. And reverse direction, M46E-FP converts M46E-FP IPv6 route to IPv4 route, that advertises other IPv4 stub networks.
The IPv4 route for stub network is map to M46E-FP IPv6 route one to one, so number of route of IPv4 is same as number of route of M46E-FP IPv6 route. Total number of route is same as when backbone network operate dual stack, without M46E-FP.
In stub network, usual dynamic routing protocol for IPv4 and IPv6 can be used such as RIPv2, RIPng, OSPFv2, OSPFv3 and IS-IS[RFC5308]. Similarly, in backbone network, usual dynamic routing protocol for IPv6 can be used such as RIPng, OSPFv3 and IS-IS .
If want using default route, default M46E-FP advertise the route [M46E-FP address prefix/( 96 - m )] as default route. If want using different default route by IPv4 network plane ID, default M46E-FP in IPv4 network plane #1 advertise the route [ M46E-FP address prefix + IPv4 network plane ID #1 / 96] as default route. Figure 10 in Section 7 show the example using default route.

Stacking IPv4 Networks
M46E-FP can provide VPN like service to stub networks by using different IPv4 network plane ID value.
If backbone network operator provide IPv4 privates network service to Organization A, backbone network operator sets IPv4 network plane ID value =1 to the M46E-FP which connects stub network of organization A. If there are five stub network of organization A, backbone network operator sets same IPv4 network plane ID = 1, to five M46E-FPs which connect stub network of organization A. If there are one hundred stub network of organization B, backbone network operator sets same IPv4 network plane ID = 2, to one hundred M46E-FPs which connect stub network of organization B. If a new stub network in organization B join, backbone network operator configures same IPv4 network plane ID = 2, to the new stub network only, which connect stub network of organization B, and no configuration is needed to one hundred M46E-FPs which are already connected.
Such configuration, that means same stub network group to same IPv4 network plane ID value, is simple and easy to understand, so, it is expected that possibility of misconfiguration is very low. And also, number of configuration is minimum, that mean, number of configuration is same as number of stub networks, and add new stub network, configure to new one only.
Describe above, M46E-FP can provide VPN like service, for example, Intranet or extranet. And, after IPv4 global address running out, some service provider may want to reuse IPv4 private address. M46E-FP can provide such IPv4 private address networks over single IPv6 backbone network. By M46E-FP, some service providers may reuse IPv4 private address.

Redundancy of M46E-FP
M46E-FP brings no limit for redundancy. Figure 8 shows such example in case two connection between backbone network and stub network. Number of link between backbone network and stub network is not limited, and different type of link can be used, for example, for wire and wireless.
Configuration of M46E-FPs, which connect same stub network, is same. That mean same M46E-FP prefix and same IPv4 network plane ID value.

 /---------------------------------------------------\
 |                                                   |
 |                  Backbone Network                 |
 |                    (IPv6 only)                    |
 |                                                   |
 \---------------------------------------------------/
       |         |                  |         |
   +-------+ +-------+          +-------+ +-------+
   |M46E-FP| |M46E-FP|          |M46E-FP| |M46E-FP|
   +-------+ +-------+          +-------+ +-------+
       |         |                  |         |
 /---------------------\      /---------------------\
 |                     |      |                     |
 |    Stub Network     |      |    Stub Network     |
 |    (IPv4 only)      |      |    (Dual Stack)     |
 |                     |      |                     |
 \---------------------/      \---------------------/

Example of M46E-FP Operation

Basic M46E-FP Operation
Figure 9 shows M46E-FP operation which does not use IPv4 network plane ID. In this example, two stub network is connected to backbone network via M46E-FP. One stub network is 10.1.1.0/24 sub network, and the other is 10.1.2.0/24 sub network.
When M46E-FP receives IPv4 route advertisement, then M46E-FP convert this IPv4 route to IPv6 route by address resolution to M46E-FP address, and advertise this IPv6 route to backbone network. When M46E-FP receives IPv6 route advertisements, then M46E-FP converts this IPv6 route to IPv4 route if this IPv6 route is match M46E-FP address ( same prefix with M46E-FP), and advertise this IPv4 route to stub network.
In this example. IPv4 route, 10.1.1.0/24 is converted to IPv6 route, <M46E-FPprefix>:10.1.1.0/120,and IPv4 route, 10.1.2.0/24 is converted to IPv6 route, <M46E-FPprefix>:10.1.2.0/120 at M46E-FP from stub network to backbone network. And, from backbone network to stub network, IPv6 route, <M46E-FPprefix>:10.1.1.0/120 is converted to IPv4 route, 10.1.1.0/24, and IPv6 route, <M46E-FPprefix>:10.1.2.0/120 is converted to IPv4 route, 10.1.2.0/24.

  /-------------\  +-----+  /------------\  +-----+  /-------------\
  |Stub Network |  |     |  | Backbone   |  |     |  |Stub Network |
  |(10.1.1.0/24)|--|M46E |--| Network    |--|M46E |--|(10.1.2.0/24)|
  |             |  | -FP |  |(IPv6 only) |  | -FP |  |             |
  \-------------/  +-----+  \------------/  +-----+  \-------------/

 [10.1.1.0/24] ---> [<M46A prefix>:10.1.1.0/120] ---> [10.1.1.0/24]
 [10.1.2.0/24] <--- [<M46A prefix>:10.1.2.0/120] <--- [10.1.2.0/24]

  +---------+----+       +---------+----+----+      +---------+----+
  | data    |IPv4|  -->  | data    |IPv4|IPv6| -->  | data    |IPv4|
  +---------+----+       +---------+----+----+      +---------+----+
  src: 10.1.1.1       src: <M46A prefix>:10.1.1.1     src: 10.1.1.1
  dst: 10.1.2.1       dst: <M46A prefix>:10.1.2.1     dst: 10.1.2.1

Figure 10 shows the example using default route. Default route is useful in case most packets are routed same path. Typically, access network is one of the example. Although using default route, communication between stub networks can be done. Communication between host 10.1.1.1 and host 10.1.2.1 can be done inside in access network, and does not pass over default M46E-FP.

                            /------------\
                            |            |
  /-------------\  +-----+  |            |  +-----+  /-------------\
  |  Backbone   |  |     |  | Access     |  |     |  |Stub Network |
  |  Network    |--|M46E |--| Network    |--|M46E |--|(10.1.1.0/24)|
  |             |  | -FP |  |(IPv6 only) |  | -FP |  |             |
  \-------------/  +-----+  |            |  +-----+  \-------------/
                  (default) |      <--[<M46A prefix>:10.1.1.0/120]
             [<M46A prefix>/96] -->      |
                            |            |
                            |            |  +-----+  /-------------\
                            |            |  |     |  |Stub Network |
                            |            |--|M46E |--|(10.1.2.0/24)|
                            |            |  | -FP |  |             |
                            |            |  +-----+  \-------------/
                            |      <--[<M46A prefix>:10.1.2.0/120]
                            |            |
                            |            |
                            |            |  +-----+  /-------------\
                            |            |  |     |  |Stub Network |
                            |            |--|M46E |--|(10.1.3.0/24)|
                            |            |  | -FP |  |             |
                            |            |  +-----+  \-------------/
                            |      <--[<M46A prefix>:10.1.3.0/120]
                            |            |
                            \------------/

M46E-FP Operation with plane ID
Figure 11 shows M46E-FP operation which uses IPv4 network plane ID. In this example, there are two planes, and two stub network in each plane is connected to backbone network via M46E-FP. In each plane, one stub network is 10.1.1.0/24 sub network, and the other is 10.1.2.0/24 sub network, that means same IPv4 address is used in different plane.
When M46E-FP receives IPv4 route advertisements, then M46E-FP converts this IPv4 route to IPv6 route by address resolution to M46E-FP address, and advertise this IPv6 route to backbone network. When M46E-FP receives IPv6 route advertisements, then M46E-FP converts this IPv6 route to IPv4 route if this IPv6 route is match M46E-FP address ( same prefix with M46E-FP), and advertises this IPv4 route to stub network.
In this example in plane #1. IPv4 route, 10.1.1.0/24 is converted to IPv6 route, <M46E-FPprefix><#1>:10.1.1.0/120,and IPv4 route, 10.1.2.0/24 is converted to IPv6 route, <M46E-FPprefix><#1>:10.1.2.0/120 at M46E-FP from stub network to backbone network. And, from backbone network to stub network, IPv6 route, <M46E-FPprefix><#1>:10.1.1.0/120 is converted to IPv4 route, 10.1.1.0/24, and IPv6 route, <M46E-FPprefix><#1>:10.1.2.0/120 is converted to IPv4 route, 10.1.2.0/24.
And also, In this example in plane #2. IPv4 route, 10.1.1.0/24 is converted to IPv6 route, <M46E-FPprefix><#2>:10.1.1.0/120,and IPv4 route, 10.1.2.0/24 is converted to IPv6 route, <M46E-FPprefix><#2>:10.1.2.0/120 at M46E-FP from stub network to backbone network. And, from backbone network to stub network, IPv6 route, <M46E-FPprefix><#2>:10.1.1.0/120 is converted to IPv4 route, 10.1.1.0/24, and IPv6 route, <M46E-FPprefix><#2>:10.1.2.0/120 is converted to IPv4 route, 10.1.2.0/24.
In IPv6 space, address <M46E-FPprefix><#1>:10.1.1.1 and address <M46E-FPprefix><#2>:10.1.1.1 are different address, route <M46E-FPprefix><#1>:10.1.1.0/120 and route <M46E-FPprefix><#2>:10.1.1.0/120 are different route, although in IPv4 space, address 10.1.1.1 in plane #1 and 10.1.1.1 in plane#2 are same address, route 10.1.1.0/24 in plane#1 and route 10.1.1.0/24 in plane#2 are same route.

                            /------------\
.......<plane#1>............|............|............................
: /-------------\  +-----+  |            |  +-----+  /-------------\ :
: | Stub Network|  |     |  |            |  |     |  | Stub Network| :
: |(10.1.1.0/24)|--|M46E |--| Backbone   |--|M46E |--|(10.1.2.0/24)| :
: |             |  | -FP |  | Network    |  | -FP |  |             | :
: \-------------/  +-----+  |(IPv6 only) |  +-----+  \-------------/ :
:...........................|............|...........................:
                            |            |
........<plane#2>...........|............|............................
: /-------------\  +-----+  |            |  +-----+  /-------------\ :
: | Stub Network|  |     |  |            |  |     |  | Stub Network| :
: |(10.1.1.0/24)|--|M46E |--|            |--|M46E |--|(10.1.2.0/24)| :
: |             |  | -FP |  |            |  | -FP |  |             | :
: \-------------/  +-----+  |            |  +-----+  \-------------/ :
:...........................|............|...........................:
                            \------------/

<<plane #1>>

 [10.1.1.0/24]  --> [<M46A prefix><#1>:10.1.1.0/120] --> [10.1.1.0/24]
 [10.1.2.0/24]  <-- [<M46A prefix><#1>:10.1.2.0/120] <-- [10.1.2.0/24]

  +---------+----+       +---------+----+----+       +---------+----+
  | data    |IPv4|  -->  | data    |IPv4|IPv6|  -->  | data    |IPv4|
  +---------+----+       +---------+----+----+       +---------+----+
  src: 10.1.1.1      src: <M46A prefix><#1>:10.1.1.1    src: 10.1.1.1
  dst: 10.1.2.1      dst: <M46A prefix><#1>:10.1.2.1    dst: 10.1.2.1

<<plane#2>>

 [10.1.1.0/24]  --> [<M46A prefix><#2>:10.1.1.0/120] --> [10.1.1.0/24]
 [10.1.2.0/24]  <-- [<M46A prefix><#2>:10.1.2.0/120] <-- [10.1.2.0/24]

  +---------+----+       +---------+----+----+      +---------+----+
  | data    |IPv4|  -->  | data    |IPv4|IPv6| -->  | data    |IPv4|
  +---------+----+       +---------+----+----+      +---------+----+
  src: 10.1.1.1      src: <M46A prefix><#2>:10.1.1.1    src: 10.1.1.1
  dst: 10.1.2.1      dst: <M46A prefix><#2>:10.1.2.1    dst: 10.1.2.1

Figure 12shows the example using default route with IPv4 network plane. In this case, default M46E-FP may configure different by each IPv4 network plane.

                            /------------\
.......<plane#1>............|............|............................
: /-------------\  +-----+  |            |  +-----+  /-------------\ :
: | Backbone    |  |     |  |            |  |     |  | Stub Network| :
: | Network     |--|M46E |--| Access     |--|M46E |--|(10.1.1.0/24)| :
: |             |  | -FP |  | Network    |  | -FP |  |             | :
: \-------------/  +-----+  |(IPv6 only) |  +-----+  \-------------/ :
:                 (default) |    <--[<M46A prefix><#1>:10.1.1.0/120] :
:         [<M46A prefix><#1>/96] -->     |                           :
:                           |            |                           :
:                           |            |                           :
:                           |            |  +-----+  /-------------\ :
:                           |            |  |     |  | Stub Network| :
:                           |            |--|M46E |--|(10.1.2.0/24)| :
:                           |            |  | -FP |  |             | :
:                           |            |  +-----+  \-------------/ :
:                           |   <--[<M46A prefix><#1>:10.1.2.0/120]  :
:...........................|............|...........................:
                            |            |
.......<plane#2>............|............|............................
: /-------------\  +-----+  |            |  +-----+  /-------------\ :
: | Backbone    |  |     |  |            |  |     |  | Stub Network| :
: | Network     |--|M46E |--|            |--|M46E |--|(10.1.1.0/24)| :
: |             |  | -FP |  |            |  | -FP |  |             | :
: \-------------/  +-----+  |            |  +-----+  \-------------/ :
:                 (default) |    <--[<M46A prefix><#2>:10.1.1.0/120] :
:         [<M46A prefix><#2>/96] -->     |                           :
:                           |            |                           :
:                           |            |                           :
:                           |            |  +-----+  /-------------\ :
:                           |            |  |     |  | Stub Network| :
:                           |            |--|M46E |--|(10.1.2.0/24)| :
:                           |            |  | -FP |  |             | :
:                           |            |  +-----+  \-------------/ :
:                           |   <--[<M46A prefix><#2>:10.1.2.0/120]  :
:...........................|............|...........................:
                            |            |
                            \------------/

Characteristic
M46E-FP has following useful characteristics.
- Reduce backbone network operation cost with IPv6 single stack ( at least less than Dual Stack)
- Can allocate IPv4 address to stub networks, which used in backbone network before installing M46E-FP
- Less configuration
- No need for special protocol
- No dependent Layer 2 network
- Can Stack IPv4 Private networks
- Easy stop IPv4 operation in stub network for future ( just remove M46E-FP)
- Provide redundancy

IANA Considerations
This document makes no request of IANA.
Note to RFC Editor: this section may be removed on publication as an RFC.

Security Considerations
M46E-FP use automatic Encapsulation / Decapsulation technologies. Security consideration related tunneling technologies are discussed in RFC2893[RFC2893], RFC2267[RFC2267], etc.

Normative References
[I-D.draft-matsuhira-m46a]

Multiple IPv4 - IPv6 mapped IPv6 address
N. Matsuhira
1 June 2019
[RFC5308]
[RFC2893]
[RFC2267]