В этой статье я приведу пример настройки OSPF в BIRD.
Команда установки BIRD в Ubuntu:
sudo -i
apt install bird
Настроим логи как я описывал в статье:
Настройка логов BIRD
Откроем файл конфигурации в любом текстовом редакторе:
nano /etc/bird/bird.conf
Глобально укажем ID маршрутизатора, обычно это IP адрес который смотрим к остальным OSFP соседям, если глобально не указать, то будет выбран случайный IP адрес на интерфейсе, в секциях protocol ospf, protocol bgp и т.д. при необходимости можно дополнительно указывать отдельные router id, если сетевых интерфейсом много с разными IP адресами:
router id 192.168.31.201;
Настроим протокол который будет отслеживать события интерфейсов, up/down (в зависимости от количества интерфейсов и загрузки CPU в этот момент, можно регулировать период сканирования в секундах, я указал 100, это больше чем обычно, так как на примере беру сервер с accel-ipoe на котором более 10 000 сетевых интерфейсов):
protocol device {
scan time 100;
}
Настроим протокол который будет генерировать маршруты ко всем указанным интерфейсам:
protocol direct {
interface "vlan*", "ipoe*";
}
Настроим протокол который будет синхронизировать маршруты BIRD с маршрутами ядра (по умолчанию import all, export none):
protocol kernel {
import all;
export all;
}
При необходимости настроим протокол который позволяет вручную добавить указанные статические маршруты:
protocol static {
route x.x.x.0/23 blackhole;
# route 10.0.0.0/8 unreachable;
# route 10.5.0.0/24 via "eth0";
}
При импорте и экспорте маршрутов желательно использовать фильтры, чтобы избежать непредвиденных ситуаций и импортировать и экспортировать только то что нужно, ниже приведу несколько примеров фильтров.
Первый пример для экспорта маршрутов с маской сети 32, например для сервера с accel-ppp:
filter export_OSPF {
if net.len = 32 then {
# print "net accepted:", net;
accept;
}
else{
# print "net rejected:", net;
reject;
}
}
Аналогичный фильтр для импорта:
filter import_OSPF {
if net.len = 32 then {
# print "net accepted:", net;
accept;
}
else{
# print "net rejected:", net;
reject;
}
}
Еще пример фильтра который принимает только указанные сети:
filter ixnfo_com
prefix set localnet;
{
localnet = [ 10.5.0.0/24+, X.X.X.0/23+ ];
if net ~ localnet then accept;
reject;
}
Теперь настроим протокол OSPF, в котором укажем фильтры, OSPF соседей, сетевой интерфейс в сторону соседей и прочие параметры:
protocol ospf {
#router id 192.168.x.x;
export filter export_OSPF;
import none;
area 0.0.0.0 {
interface "vlan777" {
hello 10;
retransmit 5;
cost 10;
transmit delay 1;
dead count 4;
wait 40;
type broadcast;
priority 1;
authentication none;
#authentication cryptographic; password "ixnfo.com";
neighbors {
#192.168.5.100 eligible;
192.168.5.100;
};
};
};
}
Перезапустим bird чтобы применить изменения конфигурации:
systemctl restart bird.service
systemctl status bird.service
service bird status
Проверим запускается ли bird при запуске операционной системы и активируем автозапуск:
systemctl is-enabled bird.service
systemctl enable bird.service
Подключимся к консоли bird, посмотрим статистику и соединение с OSPF соседями:
birdc
show status
show protocols all
show route
show route all
show ospf
show ospf neighbors
show ospf topology
exit
DR (Designated Router) — маршрутизатор с наивысшим приоритетом, когда приоритеты равны, то выбирается тот у которого наивысший router-id.
BDR (Backup Designated Router) — следующий маршрутизатор с наивысшим приоритетом после DR.
Если маршрутов очень много, то экспортируем маршруты ядра в текстовый файл и там уже посмотрим их и убедимся что все хорошо:
ip route > ixnfo.com.txt
Можно мониторить количество маршрутов например с помощью Zabbix:
route -n | wc -l
Можно выполнять команды birdc прямо из терминала Linux, например:
birdc show ospf interface
birdc show ospf interface | wc -l
Смотрите также мои статьи:
Настройка OSPF в Quagga
Настройка OSPF на Juniper MX
Установка и настройка BIRD (BGP)