NAT utiliza una combinación de número de puerto de dirección IP para hacer hash de las solicitudes salientes. Dado que las solicitudes de ping consisten en paquetes de solicitud de eco ICMP, no tienen ningún número de puerto asociado. ¿Cómo reenvía un servidor NAT las respuestas a los hosts dentro de la red?
ip-address
ping
nat
Rohit Banga
fuente
fuente
Respuestas:
Para mensajes de tipo de consulta / respuesta ICMP como Echoes (pings), NAPT usa el ID de consulta ICMP (a veces simplemente llamado ID ICMP) de la misma manera que usaría un número de puerto TCP o UDP.
Para los mensajes de error ICMP como Destination Unreachable, utiliza la copia interna del paquete ICMP de los encabezados de la trama que causó el error para determinar qué mapeo en la tabla NAT usar para traducirlo.
Estos procedimientos se mencionan brevemente en varios RFC relacionados con NAT, pero me costó encontrar uno que explique explícitamente el procedimiento. Consulte "NAT tradicional", RFC3022 , sección 4.1.
Esto no entra en conflicto con ningún mapeo TCP o UDP porque en una buena implementación NAPT, el protocolo es una de las piezas de información contenidas en la entrada de la tabla NAT para hacerlo único.
fuente
Hice una pequeña simulación (basada en el dispositivo GSN3 Kali Linux CLI), para verificar qué sucede cuando se produce un choque ICMP (aparentemente, podría ser específico del proveedor):
En solicitudes / respuesta ICMP Antes de que se muestre NAT, la situación, cuando los identificadores de solicitudes ICMP de 2 dispositivos (con las IP 10.0.0.1 y 10.0.0.2 respetuosamente) se vuelven iguales.
Al mismo tiempo, en solicitudes / respuesta de ICMP Después de que se muestre NAT, el NAT cambia el identificador de la sesión de ICMP en conflicto, y se incrementa a partir de ahí.
Como resumen, se puede decir que el NAT de Linux maneja el choque de los identificadores ICMP en su activación (ya que los identificadores ICMP no se cambian antes que el NAT).
fuente