# NAT traversal

NAT traversal es un término aplicado a las técnicas que establecen y mantienen conexiones en redes utilizando los protocolos TCP/IP o UDP que atraviesan (NAT) gateways.
Las técnicas de NAT traversal suelen ser requeridas por aplicaciones cliente-cliente, especialmente las peer-to-peer y Voip. Existen diversas técnicas, pero ninguna de ellas funciona en cualquiera de las situaciones debido a que el comportamiento del NAT no está estandarizado. Algunas de las técnicas necesitan de un servidor con dirección IP pública encaminable, otras solo necesitan el servidor cuando establecen la conexión (como STUN), y otras están basadas en transmitir todos los datos a través de él (cómo TURN), que aumenta el gasto de ancho de banda y la latencia, en detrimento de las comunicaciones de voz y video en tiempo real.
La traducción de direcciones de red rompe la conectividad entre los dos puntos finales. La intercepción y modificación del tráfico solo puede llevarse a cabo de manera transparente en ausencia de codificado seguro y autenticación. La mayoría de las técnicas basadas en NAT eluden la política de seguridad de las empresas. Expertos en seguridad prefieren técnicas que explícitamente cooperan con NAT y los firewalls.

## El problema del NAT traversal

Los dispositivos que realizan NAT tienen como misión aliviar el agotamiento de las direcciones IPv4 permitiendo el uso del direccionamiento privado en las redes, tanto de empresas como domésticas, para acceder a Internet a través de un router con una sola dirección IP pública. Los dispositivos de la red interna pueden comunicarse con dispositivos en la red externa cambiando en el router la dirección de origen de las peticiones salientes por su propia dirección de red. Esto crea un problema para los routers que no disponen de información sobre a que dispositivo de la red interna enviar las nuevas conexiones.

## NAT traversal e IPsec

Para permitir el funcionamiento de IPsec a través de NAT; los siguientes protocolos deben estar permitidos en el firewall:
* Internet Key Exchange (IKE) - User Datagram Protocol (UDP) puerto 500
* Encapsulating Security Payload (ESP) - IP protocol number 50 puerto 4500
o, en caso de NAT-T
* IPsec NAT-T - UDP puerto 4500
Habitualmente se consiguen los mismos efectos habilitando en routers domésticos la opción "IPsec Passthrough".
Debido a un controvertido y raro fallo de seguridad, el comportamiento por defecto de Windows XP SP2 es el de no soportar NAT-T. Esto previene a la mayoría de los usuarios domésticos de usar IPsec sin tener que hacer ajustes a la configuración de su sistema operativo. Para permitir el tráfico NAT-T para que dos sistemas se puedan comunicar estando detrás de NATs, se ha de añadir la siguiente clave al registro de windows con un valor de 2: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPsec\AssumeUDPEncapsulationContextOnSendRule
Parches para IPsec NAT-T también están disponibles para Windows 2000, Windows NT y Windows 98.

## Referencias IETF

* RFC 1579 - Firewall Friendly FTP
* RFC 2663 - IP Network Address Translator (NAT) Terminology and Considerations
* RFC 2709 - Security Model with Tunnel-mode IPsec for NAT Domains
* RFC 2993 - Architectural Implications of NAT
* RFC 3022 - Traditional IP Network Address Translator (Traditional NAT)
* RFC 3027 - Protocol Complications with the IP Network Address Translator (NAT)
* RFC 3235 - Network Address Translator (NAT)-Friendly Application Design Guidelines
* RFC 3715 - IPsec-Network Address Translation (NAT) Compatibility
* RFC 3947 - Negotiation of NAT-Traversal in the IKE
* RFC 5128 - State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)