
Tengo la siguiente configuración, todos los paquetes udp:
cliente (42.123.124.125) -> (42.123.0.125) nat_server (192.168.2.2) -> (192.168.2.5) udp_service
nat_server tiene que recibir udp entrante del cliente a través de una IP pública y redirigir el paquete a udp_service a través de una red privada. Luego tiene que redirigir todas las respuestas de udp_service al cliente.
El cliente negocia la conexión a un puerto específico (4244) y luego recibe datos en su puerto udp aleatorio.
El flujo se puede describir con tcpdump. Negociación:
15:03:48.630928 IP 42.123.124.125.38541 > nat_server.4244: UDP, length 4
15:03:48.630953 IP nat_server.38541 > 192.168.2.5.4244: UDP, length 4
15:03:48.680698 IP 192.168.2.5.43434 > nat_server.38541: UDP, length 4
15:03:48.680707 IP nat_server > 42.123.124.125.38541: UDP, length 4
Flujo de datos:
15:03:48.680741 IP 192.168.2.5.43434 > nat_server.38541: UDP, length 16
15:03:48.680743 IP nat_server.43434 > 42.123.124.125.38541: UDP, length 16
Los puertos 38541 y 43434 permanecen iguales durante toda la conexión. Logré hacerlo con esta configuración de iptables:
iptables -t nat -A PREROUTING -s 42.123.124.125 -p udp -j DNAT --to-destination 192.168.2.5:4244
iptables -t nat -A PREROUTING -s 192.168.2.5 -p udp -j DNAT --to-destination 42.123.124.125
iptables -t nat -A POSTROUTING -j MASQUERADE
¿Cómo puedo lograr el mismo comportamiento cuando hay muchos clientes? Entonces, en lugar de 42.123.124.125, me gustaría usar un rango, por ejemplo, 42.123.124.0/24.