¿Cómo se eligen los puertos de origen para los objetivos SNAT de iptables?

¿Cómo se eligen los puertos de origen para los objetivos SNAT de iptables?

De forma predeterminada, el destino SNAT mantiene el puerto de origen del paquete original. Si ese puerto ya está en uso, elige uno al azar. ¿Hay alguna manera de influir en la elección de este puerto o medir el rango dentro del cual se elige? En mis pruebas net.ipv4.ip_local_port_rangeno pareció tener influencia en esto. Me pregunto si hay una configuración diferente para ello.

Respuesta1

De forma predeterminada, el destino SNAT mantiene el puerto de origen del paquete original. Si ese puerto ya está en uso, elige uno al azar.

No se elige al azar de forma predeterminada, sino que el siguiente es el algoritmo predeterminado
(la parte en negrita confirma su afirmación sobre mantener el puerto original)

Si no se especifica ningún rango de puertos, los puertos de origen por debajo de 512 se asignarán a otros puertos por debajo de 512: aquellos entre 512 y 1023 inclusive se asignarán a puertos por debajo de 1024, y otros puertos se asignarán a 1024 o superior.Siempre que sea posible, no se producirá ninguna alteración del puerto.

https://man7.org/linux/man-pages/man8/iptables-extensions.8.html

¿Hay alguna forma de influir en la elección de este puerto o medir el rango dentro del cual se elige?

Sí, es posible utilizando declaraciones masqueradeo snaten su NATregla especificando rangos de puertos de la siguiente manera--to-ports port[-port]

--a-puertos puerto[-puerto]

          This specifies a range of source ports to use, overriding
          the default SNAT source port selection heuristics (see
          above). This is only valid if the rule also specifies one
          of the following protocols: tcp, udp, dccp or sctp.

https://man7.org/linux/man-pages/man8/iptables-extensions.8.html

En mis pruebas, net.ipv4.ip_local_port_range no pareció tener influencia en esto.

Esto net.ipv4.ip_local_port_rangese aplica a los puertos de escucha que deben estar disponibles para ser escuchados, no tiene nada que ver con SNAT, es decir, esos puertos nunca serán utilizados NAT.

https://www.ibm.com/docs/en/filenet-p8-platform/5.5.x?topic=listener-linux

información relacionada