我是一个networkingnoob,所以非常通用的标题很抱歉。 我有以下方式的networking设置:

关于networking的一些细节:
机器1必须通过机器2上的桥与机器3进行通讯。为此,我在所有机器上都设置了path。 也就是说,当stream量从机器1上的eth1发送时,到达机器2上的eth1,并从机器2上的eth2发送到机器3上的eth1。这很好地工作。
我的问题是当机器2进行NATing(这不是使用iptables完成的,而是一个我无法控制的程序)。 程序在将机器2上的eth0的IP地址作为源IP时,将其转发给机器3.当机器3必须回应时,它会看到10.10.0.0子网上的源,并将包从机器3上的eth0到机器2上的eth0。
我的问题:如何将机器3的数据包路由到机器2上的eth2?
我在NAT程序上唯一的控制是告诉它在NAT时使用什么源IP。 机器2上的eth1和eth2没有IP地址,所以我可以使用的唯一IP地址是机器2上eth0的别名。
经过思考,我认为你可以通过M3上的(eth1,M1)设置M3上的路由(M1的eth0地址),其中M1 = machine1,依此类推。 10.10.10.x是M1的eth0地址,请尝试
M3% route add -host 10.10.10.x dev eth1
您应该能够validation,在M3上,通过使用tcpdump ,对来自M1地址的数据包的响应将通过eth1而不是eth0进行。 请注意,这并不能保证M2会和他们做正确的事情 ; 它只应该把它们送回来,希望M2能够解除它们并将它们送到M1。