Я использую 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 назначения.
Вы можете просто представить правило 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