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

我遇到以下问题的路由问题:

我有一个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条目显示属于正确接口的MAC地址(子网2上的eth1)

如何强制服务器在特定IP的两个接口相同的远程子网上查看?

它只在第一个子网中search。

路由表有这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 

UPDATE1:

所以没有办法让linux内核确定哪个接口有192.168.1.3 ip。 我们解决了连接分离的子网交换机的问题,但现在stream量在ETH0上了。

最后的方法是在testing过程中重新configurationpc ip地址以适应子网ip范围。

感谢答复。

我们有不同的IP地址完全相同的configuration。 一台主机在多个接口上configuration了一个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暗示基于策略的规则也许是对的,但我觉得这种方法更容易一些。


注:恕我直言,这是一个非常糟糕的做法,我们结束了很多麻烦。 另外,AFAIK在不改变IP路由或规则条目的情况下将无法访问另一个接口上的主机,因此如果将机器移动到不同的(物理)networking,则必须重新configuration表。

问题是下一个:

如果PC在子网1上,我可以ping它。 如果PC在子网2上,我无法ping通它。

如何强制服务器在特定IP的两个接口相同的远程子网上查看?

这不可能。 不在内核级别。

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

基本的经验法则是:如果主机无法通过接口到达,请不要在该接口上添加该主机的路由。 主机不应该是“聪明的”或神奇地猜测使用哪个接口。 如果有路由,内核总是select那个路由,即使它不工作。

根据源IP地址,应用程序指定的输出接口或标记,tos或许多其他参数甚至多个networking名称空间,您可以拥有多个路由表,但最终如果您只做一个简单的“ ping 192.168.1.3“,内核只会在你的一个路由表中select一个路由,并使用它。

即使Linux具有循环使用哪条路线的技术可能性,对于每个数据包也是如此。 如果你使用它,你将有50%的数据包丢失到达你的主机。


如果你需要这个有点破坏的设置工作,或者:

  • 在服务器或交换机上桥接两个networking,即使它只处于服务器的angular度。
  • 确保您的192.168.1.3主机可以在两个networking中看到
  • 在第2层,join你的两个接口,把所有发送给eth0的东西复制到eth1。 这太可怕了,是的。
  • 停止从你的两个子网移动192.168.1.3。
  • 在服务器和192.168.1.3上运行路由协议,以便根据192.168.1.3的位置自动调整路由表。