Teredo is a protocol for tunnelling IPv6 over IPv4 using UDP packets standardized in RFC 4380. Teredo involves communication between four different parties:

Teredo has a control plane involving packets between all four parties and a data plane consisting of IPv6 packets travelling between Teredo client and native IPv6 server through the Teredo relay.

What is modified Teredo

Modified Teredo is a term I use to describe any protocol which makes use of a standard Teredo relay following the specification in RFC 4380 or later. Moreover modified Teredo means something in the communication between Teredo client, Teredo server, and native IPv6 server must deviate from RFC 4380.

Differences from RFC 4380

This peer-to-peer NAT64 network differs from RFC 4380 in three significant ways.

Teredo server to native IPv6 server

RFC 4380 involves ICMPv6 packets being sent from the Teredo server to the native IPv6 server. These packets are very prone to being dropped by packet filters and thus is one of the major sources of instability in standard Teredo communication.

In this peer-to-peer network the IPv6 peers serve the role as native IPv6 servers. And because NAT64 traffic is always initiated from the IPv6 side, the packets from Teredo server to native IPv6 server are entirely unnecessary. For those reason this peer-to-peer network avoids those packets.

Teredo client to Teredo server

RFC 4380 uses a UDP based protocols between Teredo client and Teredo server designed to keep the server stateless. In this peer-to-peer protocol the Teredo server also serves to coordinate communication between peers and thus cannot be stateless.

Instead of the UDP based protocol an entirely different protocol based on TLS over TCP is used.

IPv6 address assignments

RFC 4380 assigns one IPv6 addresses to a Teredo client during the setup communication between Teredo client and Teredo server which embeds the externally visible socket address of the Teredo client.

This peer-to-peer network however assigns addresses according to RFC 6052 which defines the address mapping for NAT64. This is possible because each Teredo server is given a /64 IPv6 range under the 2001::/32 prefix. And by using a different protocol between Teredo client and Teredo server it is possible to completely redefine how the allocated /64 range is subdivided.

The server assigns IPv6 addresses to each connected IPv4 peer as needed by NAT64 clients. Additionally each IPv4 peer is assigned one static address with an embedded RFC 1918 address.