网络路由的顺序在 Linux 中很重要吗?

Nic*_*net 6 networking linux centos

在我的一台 Web 服务器上,环回路由位于第二个位置,通常在其他服务器上显示路由时位于第三个位置:

>ip route show
Run Code Online (Sandbox Code Playgroud)

结果显示在一台 centos 7 服务器上:

default via 85.x.x.254 dev enp32s0 
85.x.x.192/26 dev enp32s0  proto kernel  scope link  src 85.x.x.201 
169.254.0.0/16 dev enp32s0  scope link  metric 1002 
Run Code Online (Sandbox Code Playgroud)

另一台 centos 7 服务器的结果:

default via 217.x.x.1 dev em1 
169.254.0.0/16 dev em1  scope link  metric 1002 
217.x.x.0/24 dev em1  proto kernel  scope link  src 217.x.x.216 
Run Code Online (Sandbox Code Playgroud)

它有什么区别吗?它有什么后果吗?谁能解释为什么会发生?

sho*_*hok 12

根据定义,输入路由的顺序并不重要。这是由于应该如何应用路由:更具体的路由优先于更通用的路由。

假设你有两条路线:

  • 第一个用于 172.16.0.0/16 网络,通过网关 192.168.1.1
  • 第二个用于 172.16.32.0/24 网络,通过网关 192.168.1.2

当向机器发送数据包时,例如,IP 地址为 172.16.32.1,所选网关将始终为192.168.1.2,与路由在系统中输入的顺序无关。

然而,有一个问题:对于同一网络但具有不同网关的两条路由呢?例如,考虑以下设置:

  • 172.16.32.0/24 网络的第一条路由,通过网关 192.168.1.1
  • 172.16.32.0/24 网络的第二条路由,通过网关 192.168.1.2

该系统将如何工作?如果您希望一条路线优先于另一条相同的路线,则必须为它们分配一个量值。该指标被视为“成本”值,首选较低的指标。因此,如果您的系统有两条其他相同的路由但具有不同的 metric,它会选择具有较低 metric 值的路由。

但是如果两条路由的度量值相同,会发生什么?在这种(角落)情况下,默认行为未定义并且因系统而异。例如,一个系统可以优先选择第一个输入的路线,而另一个系统可以优先选择最后输入的路线。其他系统可以同时使用这两条路由,以近乎循环的方式分发数据包,称为ECMP(等价多路径路由)。最后,其他系统可以禁止存在两条真正相同的路线,甚至拒绝进入此类路线的可能性。