Práctico recorrido NAT para conexiones de red confiables

He visto y leído muchas preguntas similares, y los artículos correspondientes de Wikipedia (Transversal NAT, ATURDIR, GIRO, Perforación de agujeros TCP), pero la cantidad abrumadora de información realmente no me ayuda con mi simple problema:

Estoy escribiendo una aplicación P2P y quiero que dos usuarios de mi aplicación detrás de NAT puedan conectarse entre sí. La conexión debe ser confiable (comparable a la confiabilidad de TCP), por lo que no puedo cambiar a UDP. La solución debería funcionar en los sistemas comunes de hoy sin reconfiguración. Si ayuda, la solución puede involucrar a un tercero conectable, siempre y cuando no tenga que representar todos los datos (por ejemplo, para obtener las direcciones IP externas (WAN) de los pares).

Hasta donde sé, mi única opción es usar una biblioteca "UDP confiable" +Perforación de agujeros UDP. ¿Hay una biblioteca (C / C ++) para esto? encontréenet en unpregunta relacionada, pero solo se ocupa de la primera mitad de la solución.

¿Algo más? Cosas que he visto:

Túnel de Teredo - requiere soporte del sistema operativo y / o configuración del usuarioUPnP reenvío de puertos: UPnP no está presente / habilitado en todas partesPerforación de agujeros TCP parece ser experimental y solo funciona en ciertas circunstanciasSCTP es incluso menos compatible que IPv6. SCTP sobre UDP es simplemente UDP confiable y sofisticado (ver arriba)RUDP - casi no hay soporte convencionalPor lo que pude entender de STUN, STUNT, TURN e ICE, ninguno de ellos me ayudaría aquí.

Respuestas a la pregunta(2)

Su respuesta a la pregunta