我是一名网络菜鸟,很抱歉我的标题太普通了。我的网络设置如下:
有关网络的一些细节:
- 所有设备上的 eth0 都有一个 10.10.10.0 子网中的 IP,可从我们的内联网访问
- 机器 1 上的 eth1 通过专用网络连接到机器 2 上的 eth1
- 机器 3 上的 eth1 通过专用网络连接到机器 2 上的 eth2
- 机器 2 上的 eth1 和 eth2 已桥接
- 机器 2 上的 eth1 和 eth2 没有 IP
机器 1 必须通过机器 2 上的网桥与机器 3 通信。我已为此在所有机器上设置了路由。也就是说,当流量从机器 1 上的 eth1 发送时,它会到达机器 2 上的 eth1,并从机器 2 上的 eth2 发送到机器 3 上的 eth1。这完全没问题。
我遇到的问题是当机器 2 进行 NAT 时(不是使用 iptables 完成的,而是由我无法控制的程序完成的)。程序所做的就是在将数据包转发到机器 3 时将机器 2 上的 eth0 的 IP 指定为源 IP。因此,当机器 3 必须回复时,它会在 10.10.0.0 子网上看到源,并将数据包从机器 3 上的 eth0 路由到机器 2 上的 eth0。
我的问题:如何将数据包从机器 3 路由到机器 2 上的 eth2?
我对执行 NAT 的程序的唯一控制就是告诉它在 NAT 时使用哪个源 IP。机器 2 上的 eth1 和 eth2 没有 IP,因此我可以使用的唯一 IP 是机器 2 上 eth0 的别名。
答案1
经过深思熟虑,我认为您可以将 M3 上的路由设置为(M1 的 eth0 地址),通过(M3 上的 eth1),其中 M1=machine1,依此类推。其中 10.10.10.x 是 M1 的 eth0 地址,请尝试
M3% route add -host 10.10.10.x dev eth1
您应该能够通过使用来验证,在 M3 上,对来自 M1 地址的数据包的响应是从 eth1 发出的,而不是从 eth0 发出的tcpdump
。 请注意,这并不能保证 M2 会做正确的事情;它应该只将它们按原路送回,并且希望 M2 可以对它们进行解除 NAT 处理,然后将它们发送给 M1。