Я работаю на 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- адрес ip route
назначения 10.10.10.10, мои пакеты все равно отправляются через .test-interface
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-адресом назначения.
решение1
Вы можете просто думать, 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