我想用 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 工具加载新规则集。