如何為 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

相關內容