![如何为 iptables SNAT 目标选择源端口?](https://linux22.com/image/231089/%E5%A6%82%E4%BD%95%E4%B8%BA%20iptables%20SNAT%20%E7%9B%AE%E6%A0%87%E9%80%89%E6%8B%A9%E6%BA%90%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
默认情况下,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