默认情况下,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
有没有什么方法可以影响该端口的选择或衡量其选择的范围?
是的,可以通过在规则中使用masquerade
orsnat
语句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