如何为 iptables SNAT 目标选择源端口?

如何为 iptables SNAT 目标选择源端口?

默认情况下,SNAT 目标保留原始数据包的源端口。如果该端口已被使用,它将随机选择一个。有没有什么方法可以影响该端口的选择或衡量其选择的范围?在我的测试中net.ipv4.ip_local_port_range似乎对此没有影响。我想知道是否有不同的设置

答案1

默认情况下,SNAT 目标保留原始数据包的源端口。如果该端口已被使用,它将随机选择一个。

默认情况下它不是随机选择的,而是以下是默认算法
(粗体部分确认了您关于保留原始端口的说法)

如果未指定端口范围,则低于 512 的源端口将映射到 512 以下的其他端口:512 到 1023(含)之间的源端口将映射到 1024 以下的端口,其他端口将映射到 1024 或以上。如果可能,不会发生端口变更。

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

有没有什么方法可以影响该端口的选择或衡量其选择的范围?

是的,可以通过在规则中使用masqueradeorsnat语句NAT指定端口范围,如下所示--to-ports port[-port]

--到端口 端口[-端口]

          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

在我的测试中 net.ipv4.ip_local_port_range 似乎对此没有影响。

适用net.ipv4.ip_local_port_range于必须可供侦听的侦听器端口,它与 无关,也就是说,这些端口实际上SNAT永远不会被使用。NAT

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

相关内容