两条具有相同度量的默认路由:Linux 内核将使用哪一条

两条具有相同度量的默认路由:Linux 内核将使用哪一条

类似问题但没有答案:

在Linux上,当两条路由具有相同的度量时,将使用哪一条?我发现这是有记录的对于 Windows(“如果相同速度的多个接口具有相同的最低接口指标,则根据绑定顺序,使用第一个网络适配器的默认网关。当第一个网络适配器不可用。”)但无法找到 Linux 是如何处理这个问题的。

我想答案就在代码但这并不明显。

答案1

内核不允许您拥有多个同样可行的路线。它将拒绝第二条路由并出现EEXIST错误:

% ip route add 192.0.2.0/24 dev eth0 metric 10
% echo $?
0
% ip route add 192.0.2.0/24 dev eth1 metric 10
RTNETLINK answers: File exists
% echo $?
2

您可以拥有多路径路由,即具有多个下一跳的单个路由,其中​​内核将根据以下方式在可用下一跳之间分配(负载共享/负载平衡)流量:fib_multipath_hash_policy:

% ip route add 192.0.2.0/24 metric 10 nexthop dev eth0 nexthop dev eth1
% ip route show to exact 192.0.2.0/24
192.0.2.0/24 metric 10
        nexthop dev eth0 weight 1
        nexthop dev eth1 weight 1

答案2

您应该避免有两个(或更多)默认路由。当使用静态 IP 寻址时,这很简单。只是不要在“网关”字段中放入任何内容。如果您使用 DHCP 分配的地址,则可以重新配置 DHCP 服务器以仅通告一条默认路由,或将 Linux 计算机配置为忽略其中一条默认路由。我通常使用简单的 NetworkManager 命令来执行后者,如下所示:

$ nmcli connection modify "eth1" ipv4.ignore-auto-routes yes

相关内容