使用Linux的netfilter来反映数据包

我有一对主机之间的路由非常糟糕,但我有第三个主机,有非常好的ping每个。 为了解决这个不好的路由问题,我设置了第三个主机,在这两个主机之间来回传送数据包。

这第三个主机有一个IP地址,不用于其他任何东西。 我的理想configuration是,当主机1向主机3发送一个数据包时,主机3自动地将源地址和目的地址进行NAT,replacesource = host3和destination = host2,然后转发数据包。

反过来应该是真的:如果host2试图响应,数据包应该返回到host3,它会将其转换回源= host3,destination = host1。 不需要连接跟踪 – 这可以完全无状态地完成。

卡住的地方是让DNAT和SNAT同时工作。 看来,如果一个数据包由DNAT处理,它会自动标记为跳过SNAT规则:DNAT工作正常,但源地址没有被翻译。

什么是适当的iptablesconfiguration来实现这一目标?

奇怪的行为是由于CONNTRACK。 如果没有别的方法,SNAT和DNAT确实可以一起工作。

另外,我只在一个方向configuration了SNAT和DNAT。 因为有不断的交通stream量,SNAT和DNAT的自动反向翻译为我留下了回报。