我遇到以下问题的路由问题:
我有一个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
问题是下一个:
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
所以没有办法让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%的数据包丢失到达你的主机。
如果你需要这个有点破坏的设置工作,或者: