IPv6 to IPv4 tunnelling and addressing
Current methods for creating IPv6 tunnels over IPv4 and mapping of addresses do not not solve the problem of connecting dual stack capable nodes on an IPv4 network connecting to other such nodes in other IPv4 networks. This may be solved by assigning each IPv4 node an IPv6 address constructed from both a globally unique IPv4 address on the local (private) network and the node's IPv4 address. The node at the gobally unique IPv4 address would provide IPv4 routing functions. The constructed IPv6 address would be globally unique identifier of the end point node.
To support the addressing scheme outlined above the IPv6 stack (on RHEL) would need to be modified so that if an IPv6 connection does not exist then communication is established over the IPv4 network using 6to4 encapsulation of the IPv6 packets (type41). The IPv4 stack (on RHEL) would need to be modified to recognise a 6to4 packet (type 41), strip the IPv4 header and hand off to the IPv6 stack.
The IPv6 source and destination addresses in the IPv6 header (encapsulated by IPv4 or not) are the addresses of the end points constructed from the globally unique (32 bit) IPv4 address on the local network and the end point node's actual IPv4 address.
The IPv4 source and destination addresses for the IPv4 header encapsulating the IPv6 packet would be those of the IPV4 nodes with a globally unique IPv4 address which provides the local (private) routing services. This routing node must be capable of recognising that the end point address on the local (private) IPv4 network is actually embedded in the IPv6 address in the encapsulated IPv6 header (and modify/route the packet as appropriate).