具有 2 个接口的具有相同子网范围的分离虚拟网络

具有 2 个接口的具有相同子网范围的分离虚拟网络

我在以下路由方面遇到了一些问题:

我有一台带有 2 个接口的服务器。它有 1-1 个别名,包含相同的子网。2 个接口连接到 2 个交换机,它们彼此分开。基础设施:

Eth0      192.168.16.2/20
Eth0:eth0 192.168.1.222/20
Eth1      192.168.32.3/20
Eth1:eth1 192.168.1.223/20

我有一台电脑,其 IP 地址为:192.168.1.3/24

问题是下一个:

  • 如果 PC 位于子网 1 上,我可以 ping 它。
  • 如果 PC 位于子网 2 上,则我无法 ping 通它。

traceroute显示路线穿过192.168.1.222

ping -I 192.168.1.223 192.168.1.3在子网 2 上不起作用。

arp 条目显示属于正确接口(子网 2 上的 eth1)的 MAC 地址

我如何强制服务器在两个接口上查找特定 IP 的同一范围子网?

它仅在第一个子网中搜索。

路由表包含以下 2 个条目:

192.168.0.0/20 dev eth0 proto kernel scope link src 192.168.1.222
192.168.0.0/20 dev eth1 proto kernel scope link src 192.168.1.223

更新1:

因此 Linux 内核无法确定哪个接口具有 192.168.1.3 ip。我们通过将分离的子网交换机相互连接解决了该问题,但现在流量在 ETH0 上流出。

最后一种方法是在测试期间重新配置 PC 的 IP 地址以适应子网 IP 范围。

谢谢您的回答。

答案1

我们的配置完全相同,但 IP 地址不同。一台主机在多个接口上配置了一个 IP 地址,例如:

10.0.0.0/24 dev eth1  proto kernel  scope link  src 10.0.0.10 
10.0.0.0/24 dev eth2  proto kernel  scope link  src 10.0.0.10 
10.0.0.0/24 dev eth3  proto kernel  scope link  src 10.0.0.10

我只需添加 IP 路由,例如:

> ip route add 10.0.0.123 dev eth3

所以我有如下条目:

> ip route show
...
10.0.0.123 dev eth3  scope link 
10.0.0.101 dev eth2  scope link 
10.0.0.136 dev eth1  scope link
...

经过这些之后,它应该可以工作了。@nickw 建议基于策略的规则可能也是正确的,但我发现这种方法更容易一些。


注意:恕我直言,这是个非常糟糕的做法,我们最终为此遇到了很多麻烦。另外,据我所知,如果不更改 IP 路由或规则条目,您将无法访问其他接口上的主机,因此如果您将机器移动到不同的(物理)网络,则必须重新配置表。

答案2

问题是下一个:

如果 PC 位于子网 1,我可以 ping 通它。如果 PC 位于子网 2,则无法 ping 通它。

我如何强制服务器在两个接口上查找特定 IP 的同一范围子网?

这是不可能的。至少在内核层面上不可能。

当您未指定其他任何内容(例如要使用哪个接口或源 IP 地址)时,您不能在路由表上有两条路由并期望内核会尝试这两条路由。

基本经验法则是:如果无法通过接口访问主机,请勿在该接口上为该主机添加路由。主机不应该“聪明”或神奇地猜出要使用哪个接口。如果有路由,内核总是选择该路由,即使它不起作用。

您可以根据源 IP 地址、应用程序指定的输出接口或标记、tos 或许多其他参数甚至多个网络命名空间拥有多个路由表,但最后,如果您只执行简单的“ping 192.168.1.3”,内核将只在您的一个路由表中选择一条路由并使用它。

即使 Linux 具有轮询使用哪条路由的技术可能性,它也会针对每个数据包执行此操作。如果使用这种方式,到达主机的数据包丢失率将达到 50%。


如果您需要这个有点不完善的设置来工作,请执行以下操作之一:

  • 在您的服务器或交换机上桥接两个网络,即使只是从您的服务器的角度来看。
  • 确保两个网络都可以看到你的 192.168.1.3 主机
  • 在第 2 层,连接两个接口,并将发送到 eth0 的所有内容复制到 eth1。这确实很糟糕。
  • 停止从您的两个子网中移动 192.168.1.3。
  • 在您的服务器和 192.168.1.3 上运行路由协议,以便根据 192.168.1.3 的位置自动调整路由表。

相关内容