Linux - 具有多个网关的多个子网

Linux - 具有多个网关的多个子网

我有多台计算机,它们分布在多个子网中,有 3 个接口。

例如:(全部/24)

RED (linux)
eth0 192.22.184.113
eth1 192.23.184.113
eth2 192.24.184.113

BLUE (windows)
nic1 192.22.184.28
nic2 192.23.184.28
nic3 192.24.184.28

CYAN (windows)
nic1 192.22.184.30
nic2 192.20.184.30

当我在 Windows 机器上指定一个简单的网关时,我遇到了路由问题:ping 到有网关的接口可以工作,但 ping 到其他接口则不行。因此,我做了以下事情:

在此处输入图片描述

这样,每个 BLUE 的网卡就可以 ping 每个 CYAN 的网卡。

但是 Linux 有问题。当我定义网关时,只有与网关相连的接口才能响应 ping。

当我尝试进行与 Windows 相同的配置时:

在此处输入图片描述

我能做些什么 ?

- - - - - - - - - - - 编辑 - - - - - - - - -

这是没有任何路由/网关的完整配置。

红色的 在此处输入图片描述

蓝色的 在此处输入图片描述

青色 在此处输入图片描述

路由器 (win serv) 在此处输入图片描述

添加一些网关/路由后,核心问题仍然相同:只有具有路由/网关的网卡才能响应 ping,但 Linux 只允许一个网卡路由到网络。如果我为 eth0 指定“路由到 .20”,eth1 将永远不会响应来自 .20 机器的 ping。

答案1

所有机器(RED、BLUE 和 CYAN)都通过三个不同的子网相互连接并连接到路由器。这不是常见的配置。通常,您会这样设计网络,即任何一对机器之间都只有一个子网连接它们。

由于计算机通过多个子网连接,因此可能会发生非对称路由,例如,您从计算机 BLUE 向子网 192.22.184.* 上的计算机 CYAN 发送请求,但它返回子网 192.23.184.*。操作系统通常会丢弃/拒绝此类数据包,因此您无法获得 ping 响应。

似乎您设法通过在所有三个子网上定义默认网关来解决 Windows 上的这个问题,但在 Linux 上这是不可能的。在 Linux 中,您只能有一个默认网关(好吧,实际上您可以有多个,但在这种情况下它们需要有不同的指标,这可能无法解决您的问题)。

您必须在 Linux 上启用非对称路由,即让 Linux 接受来自与发送请求不同的接口的回复数据包。如何执行此操作取决于您的 Linux 发行版(您没有指定您使用的是哪一个)。在这里我找到了针对 RedHat 和 CentOS 的解释:https://openplatform.xyz/enable-asymmetric-routing.html在其他发行版上,可能做法不同,但它总是涉及修改net.ipv4.conf.*.rp_filter相应配置文件中的内核参数。

相关内容