Маршрут есть в
RIB, но пакет всё равно уходит не туда. Особенно неприятно это становится после изменений BGP, ECMP или policy routing.В Linux полезно сразу смотреть не только таблицу маршрутов, а конкретное решение forwarding для нужного адреса:
ip route get <ip> from <source-ip>
Здесь уже учитываются source address и выбранная таблица маршрутизации. Результат может отличаться от того, что вы видите обычным
ip route.Для нескольких routing tables:
ip rule
Потому что маршрут в
main может быть абсолютно правильным, но пакет до неё вообще не дойдёт.А дальше начинается интересное: control plane может считать маршрут лучшим, а dataplane уже использовать другую запись.
На сетевом оборудовании это удобно проверять отдельно:
show ip route <prefix>
show ip cef <destination>
Первая команда показывает решение routing process, вторая - что реально установлено в forwarding table.
Если между ними есть расхождение, искать проблему уже нужно не в самом маршруте, а в процессе установки маршрутов в FIB, ECMP, next-hop resolution или policy routing.
Именно поэтому “маршрут есть” ещё не означает, что пакет пойдёт по этому маршруту.
N.A.

