两台主机之间的多条路由

两台主机之间的多条路由

我有以下网络结构,其中有两台主机(主主机和从主机),它们不是在同一个网络中,但有一些“Mid”主机与 Master 和 Slave 共享网络。所有主机都运行 CentOS。

图表

我需要主从设备之间进行通信,因此我从 Mid2 开始,启用 IP 转发并配置 IP 表。我还在主设备中添加了一条通过 Mid2 到从设备的静态路由,反之亦然。到目前为止,一切正常。配置如下:

从站配置:

[user@slave] $ ip r 
192.168.10.150 via 192.9.202.52 dev ens3f0

主服务器配置:

[user@master] $ ip r
192.9.202.242 via 192.168.10.52 dev bond0

mid2 处的配置:

[user@mid2] $ cat /proc/sys/net/ipv4/ip_forward
1
[user@mid2] $ iptables -L
...

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  192.9.202.242        192.168.10.150
ACCEPT     all  --  192.168.10.150       192.9.202.242

之后,我尝试与其余主机复制相同的配置,但开始失败:

# ip r add 192.9.202.242 via 192.168.10.51  dev bond0
RTNETLINK answers: File exists

然后我使用不同的度量标准对每条路由进行测试。然而,一旦为 mid1 和 mid2 配置好一切,就没有 ping 了。

问题是,这可能吗?我是否可以有多个“选项”来将通信路由到远程主机?我该怎么做?

答案1

总的来说,你描述的正是ECMP 路由。尽管动态路由协议可以(并且会)安装此类路由,但如果您不希望网络拓扑发生变化,则运行动态路由协议会​​增加复杂性,我认为这有点过头了。相信我,OSPF 并非易事。

当然,你可以手动安装这样的路线:

ip route add 192.9.202.242 proto static scope global \
    nexthop dev ens2f0 via 192.168.10.51 weight 1 \
    nexthop dev ens2f0 via 192.168.10.52 weight 1 \
    nexthop dev ens2f0 via 192.168.10.53 weight 1

反面亦然。

有很多选项,您可以在这里看到其中之一 - 重量,但也有其他的。Cumulus 网络文章如这个总体来说,是有关 Linux 网络的良好信息来源。

答案2

如果你使用多条路由的目的是为了提高可靠性(在中间节点发生故障时提供冗余),那么可以在所有五个节点上运行 OSPF。一种选择是斑驴,为包括 CentOS 在内的各种 Linux 版本提供 OSPF 和其他路由协议。

在节点上运行 OSPF 使每个节点都成为路由器,并且如果主节点和从节点正在使用的中间系统出现故障,则主节点和从节点之间的通信将自动切换到另一个中间系统。

如果您的目的是在三个路由之间实现负载平衡,请参阅 Nikita Kipriyanov 关于 ECMP 的回答。请注意,只有当您有多个流(例如,多个 TCP 连接或不同端口之间的 UDP 连接)或您专门配置 ECMP 哈希以对不同数据包的不同内容进行哈希处理时,您才能获得负载平衡。(我不熟悉 Linux 允许 ECMP 哈希配置的内容。)或者在一端有三个不同的 IP 地址。

如果您想要同时获得两种好处(负载共享和稳健性),那么您需要这两种解决方案,但是如果您使用 OSPF,配置 ECMP 将会有所不同(您将配置 OSPF 来执行此操作而不是定义静态路由。)

请注意,中间系统不会有特别好/快的路由器,因此@Bernhard 的想法是重组并在它们之间添加一个实际的路由器,这可能是更好的解决方案。但如果带宽要求较低,并且您想避免重组网络或添加新设备,那么这可以与您现有的设备配合使用。

相关内容