[iptables/NAT]局域网内有三台设备A、B、C,在A上对pingC的包进行SNAT,将源地址改为B。此时ping的响应包会直接由C发送到B,能否使ping的响应包回到A?

A地址为192.168.1.18

B地址为192.168.1.1

C地址为192.168.1.21

在A上添加规则:iptables -t nat -A POSTROUTING -p icmp -j SNAT --to-source 192.168.1.1

然后pingC,即ping 192.168.1.21

在C上抓包结果如图:
图片说明

可以看到C上收到了来自"B设备"(其实MAC是A的)的icmp request包,

icmp reply的目的地址也是B设备(这时候MAC是B的)。

这时候肯定是B收到了这个reply的包。

请问有没有办法使这个数据包到达A设备呢?

我是想的在B上再做一次DNAT,在收到这个包的时候把目的地址改为A的,
即在B上添加规则:iptables -t nat -A PREROUTING -p icmp -s 192.168.1.21 -j DNAT --to-destination 192.168.1.18

可是试了以后发现不行,返回的数据包根本匹配不到这条规则。

希望各位大神可以不吝赐教,指点迷津,感谢!