Я использую 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