Имеет ли значение порядок записей в таблице маршрутизации?

22

Имеет ли значение порядок маршрутизации:

> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
123.x.x.151     0.0.0.0         255.255.255.255 UH    0      0        0 vmbr0
123.x.x.154     0.0.0.0         255.255.255.255 UH    0      0        0 vmbr0
123.x.x.128     0.0.0.0         255.255.255.224 U     0      0        0 vmbr0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 vmbr1
0.0.0.0         123.x.x.129     0.0.0.0         UG    0      0        0 vmbr0

это так же, как:

> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
123.x.x.128     0.0.0.0         255.255.255.224 U     0      0        0 vmbr0
123.x.x.151     0.0.0.0         255.255.255.255 UH    0      0        0 vmbr0
123.x.x.154     0.0.0.0         255.255.255.255 UH    0      0        0 vmbr0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 vmbr1
0.0.0.0         123.x.x.129     0.0.0.0         UG    0      0        0 vmbr0

?

где разница в том, что

123.x.x.128     123.x.x.129         255.255.255.224 U     0      0        0 vmbr0

более высокого порядка, чем

123.x.x.151     0.0.0.0         255.255.255.255 UH    0      0        0 vmbr0

так что если я пошлю туда, 123.x.x.151куда он пойдет:

- the routed way over `123.x.x.129`, because it matches the `123.x.x.128` rule, or
- the direct way using the arp table, because it matches the `123.x.x.151` rule

?

статический
источник

Ответы:

27

Порядок в таблице не имеет значения; маршруты с более длинным префиксом всегда имеют приоритет. Если вы перестанете цепляться за сетевые маски и вместо этого будете учитывать длину префикса (которая ip routeпоказывает), у вас есть 123.x.x.128/27и 123.x.x.151/32, и последний - более конкретный - маршрут будет иметь приоритет над первым (более общим).

grawity
источник
2
Что произойдет, если есть маски одинакового размера? Например, 10.0.0.0/24 и 192.168.0.0/24.
ManuelSchneid3r
3
@ ManuelSchneid3r: ничего не происходит. Маршруты рассматриваются только в том случае, если они действительно соответствуют месту назначения, и IP-адрес, очевидно, не может начинаться с 10.и 192.в то же время, поэтому он будет соответствовать только одной из этих масок.
Гравитация
1
Что делать, если у вас есть два интерфейса в одном пространстве IP?
MikeSchem
@MikeSchem: Затем используется параметр «метрика» обоих маршрутов. (ОС обычно отказывается добавлять два маршрута с одинаковым префиксом, идентичным префиксом и одинаковой метрикой или, возможно, объединять их в маршрут с балансировкой нагрузки ECMP.)
grawity
5

Заказ имеет значение только при наличии дублированных маршрутов. Не делай этого.

Например, если два интерфейса имеют одинаковое назначение, маску сети и шлюз 0.0.0.0, первый будет захватывать весь трафик для этой сети.

Более того, я обнаружил, что некоторые системы будут случайным образом переупорядочиваться при загрузке, которая идет первой. Если работает только один или только у одного установлен шлюз маршрутизатора, это может привести к потере доступа к этой сети при перезагрузке.

kmarsh
источник
Если у вас есть повторяющиеся маршруты, то вы должны добавить более высокое административное расстояние (AD) для менее предпочтительного маршрута. Используемый маршрут всегда будет с нижним AD. Если этот путь идет вниз, то тот с более высоким AD автоматически заменит его в таблице маршрутизации.
kojow7