如何在同一个 Linux 上将同一个数据包的出站 NAT 和端口转发结合起来?

如何在同一个 Linux 上将同一个数据包的出站 NAT 和端口转发结合起来?

我想用 Linux 替换旧的 ASA 盒。我需要将出站 NAT 和端口转发结合到同一个数据包中 - 别名两次 NAT(如所述这里)。我必须在同一个包中一起更改:

  • 目标 IP 为 172.16.0.200:5252/udp 和
  • 源 IP 依赖​​于源数据包中的目标 IP。

我需要重复此翻译,以获得更多原始目的地 -> 翻译源/翻译目的地的组合。
例如:

                       +---------------------------+
                       |                           |
 IoT clients           | eth0                 eth1 |                     IoT portal
 ORIGINAL PACKET       | 192.168.0.1    172.16.0.1 |      TRANSLATED PACKET
src:* dst:192.168.0.5+-> 192.168.0.5               |-->src:10.254.0.5 dst:172.16.0.200:5252/udp
src:* dst:192.168.0.6+-> 192.168.0.6               |-->src:10.254.0.6 dst:172.16.0.200:5252/udp
                       |                           |
                       +---------------------------+

我无法更改 IoT 门户或 IP 地址模式 :( 而且我必须 1:1 替换。
我找不到解决此问题的方法。

答案1

您应该为每个这样的转换添加两个规则:第一条规则用于端口转发(DNAT),第二条规则用于重写源地址(SNAT

iptables -t nat -A PREROUTING -i eth0 --dst 192.168.0.5 -p udp --dport <N> -j DNAT --to 172.16.0.200:5252
iptables -t nat -A PREROUTING -i eth0 --dst 192.168.0.6 -p udp --dport <N> -j DNAT --to 172.16.0.200:5252

iptables -t nat -A POSTROUTING -o eth1 -m conntrack --ctstate DNAT --ctorigdst 192.168.0.5 -j SNAT --to 10.254.0.5
iptables -t nat -A POSTROUTING -o eth1 -m conntrack --ctstate DNAT --ctorigdst 192.168.0.6 -j SNAT --to 10.254.0.6

相反,直接运行这些命令,使用 iptables-save 将完整规则集写入文件,然后编辑该文件,并使用 iptables-apply 工具加载新规则集。

相关内容