同一子网中的两个网卡--需要设置路由

同一子网中的两个网卡--需要设置路由

我有一个棘手的案例:

+---+                      +----+
|D1 +->eth0---------<-eth0-+D2  |
|   |                      |    |
|   +->eth1---------<-eth1-+    |
+---+                      +----+

在 D2 上eth0并且eth1具有来自同一子网的 IP 地址:eth0 10.1.1.1/24, eth1 10.1.1.2/24。 D1 上的接口没有分配地址,它的作用类似于交换机。

现在,我希望 D2 能够将流量发送到10.1.1.2via eth0,因此数据包路径必须是:D2(eth0)--D1(eth0)--D1(eth1)--D2(eth1)。

当我10.1.1.2从 D2 ping 时,它在本地发送数据包,即 D1 没有收到任何数据包。我应该在 D2 上更改哪些内容才能实现所需的行为?

谢谢。

答案1

你想要的东西在 Linux 下是不可能实现的。至少不在路由层内。如果目标地址属于本地接口,则数据包始终通过环回接口,从该接口无法(通过 RfC)路由到外部。

我认为可能可以使用iptables并将DNAT目标更改为子网中未使用的地址,并使用ip neigh静态将 MAC 地址设置为另一个 NIC 之一,但甚至不DNAT匹配到本地地址的数据包的规则。

可以使用虚拟机或网络命名空间,这样内核就看不到10.1.1.1on eth0。但是您需要代理 ARP 和 DNAT 将传入数据包从物理接口移动到虚拟接口。

如果值得这么努力吗?

答案2

网络命名空间可能是一种选择。它们本质上是网络堆栈的独立实例,因此它们至少在理论上应该能够分离两个接口。

上次我尝试和它们一起玩,但我无法让它们正常工作。

相关内容