Столкнулся на тестовом стенде с проблемой когда маршрут прилетает от того хоста, где этого маршрута по факту нет.
Вот схема сети:
Все соединения OSPF между серверами PtP.
Конфигурация bird на всех хостах идентична(конечно router id разные у всех) вот пример с OSPF1:
router id 192.168.201.1;
filter input {
if net = 0.0.0.0/0 then reject;
else accept;
}
filter output {
if net ~ [ 10.99.99.0/24{32,32} ] then accept;
else reject;
}
protocol kernel {
ipv4 {
import all;
export all;
};
scan time 10;
learn;
}
protocol device {
scan time 10;
}
protocol ospf {
ipv4 {
export filter output;
import filter input;
};
area 102 {
interface "eth1" {
cost 100;
hello 2;
dead 6;
type ptp;
};
interface "eth2" {
cost 100;
hello 2;
dead 6;
type ptp;
};
};
}
При такой конфигурации проблема в том что при обрыве связи между OSPF1 и OSPF3 маршрут 10.99.99.59/32 прилетает от хоста OSPF2, какую настройку крутить чтобы исключить прилёт маршрутов от клиентских устройств.
Даже если я на OSPF2 не буду ничего отдавать (export none;) маршрут 10.99.99.59/32 на OSPF1 я всё равно увижу.
Что было сделано:
1. Были соединены OSPF1 и OSPF4, маршрутизация перестраивается корректно и маршрут я вижу от OSPF4, но завязываться на это соединение не очень хочется, т.к. при его обрыве есть риск получить маршрут от какого-нибудь устройства из клиентской сети.
2. Можно на всех клиентских хостах включить опцию "stub router" тогда маршрута с OSPF2 не будет, но OSPF2 будет принимать все маршруты от серверных хостов с максимальной метрикой и в такой конфиге отсутствует возможность рулить маршрутизацией с помощью cost.