.png)
У меня есть 2 следующих маршрута:
# ip ro show table 0|grep 10.250
10.250.0.0/16 via 10.80.1.1 dev ens5 table 220 proto static src 10.80.1.76
10.250.1.4 via 10.80.1.45 dev ens5
Первый взят из таблицы 220, управляемой strongSwan, другой я создал вручную для теста.
Я ожидаю, что явный /32
путь всегда победит, но
# ip ro get 10.250.1.4
10.250.1.4 via 10.80.1.1 dev ens5 table 220 src 10.80.1.76 uid 0
cache
Linux по-прежнему предпочитает /16
.
Почему это так?
решение1
Это потому, что strongSwan использует маршрутизацию политик. Недостающая часть для объяснения этого — это выводip rule
с дополнительной записью, установленной strongSwan, которая обычно выглядит так:
# ip rule
0: from all lookup local
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default
Маршрутизацияправилапросматриваются в порядке предпочтения (порядок, показанный выше) для ссылки на различные маршрутытаблицы, пока не будет найден маршрут (или ни одного (возможный случай, если нигде не было маршрута по умолчанию или присутствуют «отрицательные» маршруты) и не Network is unreachable
будет возвращена ошибка, например). Правило маршрутизации pref 220 выполняется до стандартного правила маршрутизации pref 32766, поэтому таблица маршрутизации 220 проверяется первой. Поскольку в таблице маршрутизации 220 10.250.0.0/16 соответствует 10.250.1.4, маршрут был найден: оценка маршрута останавливается здесь, что бы ни было выбрано в более поздних таблицах.основнойТаблица маршрутизации для этого пункта назначения никогда не достигается.
Когда результат ip route get ...
показывает таблицу маршрутизации, отличную отместный,основной(или таблицапо умолчаниюесли оно не оставлено пустым, как это обычно бывает), это означает, что должно быть правило маршрутизации, ссылающееся на эту таблицу, и оно будет видно с помощью ip rule
.
Для многих другихмаршрутизация на основе политикслучаях будет дополнительный селектор вместо "wildcard" from all
. Обычно используется исходный IP-адрес/сеть или входящий интерфейс: снова для изменения обычного результата маршрутизации. Есть даже другие возможности, такие как порт, uid и т. д. Целевой IP-адрес/сеть уже выбран обычными записями маршрута, поэтому редко будет использоваться в качестве селектора в правилах маршрутизации.