Правило ip не должно побеждать ip route

Я использую CentOS и использую ip route и ip rule для маршрутизации.

В настоящее время у меня есть ip rule

from 10.8.23.0/28 table 1234

и ip route

default via 10.8.23.254 eth1
10.10.10.10 via 10.10.10.1 eth1
10.0.0.0/14 dev test-interface table 1234

Кажется, мое ip rule следует за второй строкой в ​​ ip route , поэтому даже если IP-адрес назначения равен 10.10. 10.10 мои пакеты по-прежнему отправляются через тестовый интерфейс , если исходный IP-адрес 10.8.23.0/28 .

Как я могу убедиться, что 10.10.10.10 через 10.10. 10.1 eth1 отменяет «правило p», даже если исходный IP-адрес соответствует правилу? Надеюсь, это имеет смысл :)

Тестирование ip route get 10.10.10.10 дает мне:

10.10.10.10 via 10.10.10.1 dev eth1  src 10.8.23.1

но ip route get 10.10.10.10 src 10.0.0.13 дает мне:

10.10.10.10 via 10.10.10.254 dev test-interface  src 10.8.23.1

Итак, src IP имеет приоритет над IP назначения.

1
задан 21 February 2018 в 14:26
1 ответ

Вы можете просто представить правило IP как способ создать / иметь больше таблиц маршрутизации IP (а не только по умолчанию).

Чтобы решить проблема, вам необходимо добавить еще одну запись ip rule для обработки вашего конкретного случая маршрута. Например, вы можете использовать следующую команду:

$ sudo ip rule add to 10.10.10.10/32 lookup 123 priority 10

Здесь я предполагаю, что 10 достаточно мал, чтобы быть первым правилом IP . Это зависит от вывода ip rule ls . Он покажет вам все правила в соответствии с приоритетом (меньшее значение означает более высокий приоритет и отображается первым).

Если вам нужно объединить проверки источника и назначения в вашем IP-правиле , вы можете использовать:

$ sudo ip rule add from 10.8.23.0/28 to 10.10.10.10/32 lookup 123 priority 10

Таблица 123 должна содержать правильный маршрут, например:

$ sudo ip route add 10.10.10.10/32 via 10.10.10.1 table 123
1
ответ дан 3 December 2019 в 23:19

Теги

Похожие вопросы