Назад | Перейти на главную страницу

Правило IP не должно побеждать IP-маршрут

Я использую 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, мои пакеты все равно отправляются через test-interface если исходный IP 10.8.23.0/28.

Как я могу убедиться, что 10.10.10.10 via 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-адресом назначения.

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

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

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

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

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

$ 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