Настройка OSPF в BIRD

В этой статье я приведу пример настройки OSPF в BIRD.

Команда установки BIRD в Ubuntu:

1
2
sudo -i
apt install bird

Настроим логи как я описывал в статье:
Настройка логов BIRD

Откроем файл конфигурации в любом текстовом редакторе:

1
nano /etc/bird/bird.conf

Глобально укажем ID маршрутизатора, обычно это IP адрес который смотрим к остальным OSFP соседям, если глобально не указать, то будет выбран случайный IP адрес на интерфейсе, в секциях protocol ospf, protocol bgp и т.д. при необходимости можно дополнительно указывать отдельные router id, если сетевых интерфейсом много с разными IP адресами:

1
router id 192.168.31.201;

Настроим протокол который будет отслеживать события интерфейсов, up/down (в зависимости от количества интерфейсов и загрузки CPU в этот момент, можно регулировать период сканирования в секундах, я указал 100, это больше чем обычно, так как на примере беру сервер с accel-ipoe на котором более 10 000 сетевых интерфейсов):

1
2
3
protocol device {
    scan time 100;
}

Настроим протокол который будет генерировать маршруты ко всем указанным интерфейсам:

1
2
3
protocol direct {
    interface "vlan*", "ipoe*";
}

Настроим протокол который будет синхронизировать маршруты BIRD с маршрутами ядра (по умолчанию import all, export none):

1
2
3
4
protocol kernel {
          import all;
          export all;
}

При необходимости настроим протокол который позволяет вручную добавить указанные статические маршруты:

1
2
3
4
5
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:

1
2
3
4
5
6
7
8
9
10
filter export_OSPF {
        if net.len = 32 then {
#                print "net accepted:", net;
                accept;
        }
 else{
#  print "net rejected:", net;
         reject;
 }
}

Аналогичный фильтр для импорта:

1
2
3
4
5
6
7
8
9
10
filter import_OSPF {
        if net.len = 32 then {
#                print "net accepted:", net;
                accept;
        }
 else{
#  print "net rejected:", net;
         reject;
 }
}

Еще пример фильтра который принимает только указанные сети:

1
2
3
4
5
6
7
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 соседей, сетевой интерфейс в сторону соседей и прочие параметры:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 чтобы применить изменения конфигурации:

1
2
3
systemctl restart bird.service
systemctl status bird.service
service bird status

Проверим запускается ли bird при запуске операционной системы и активируем автозапуск:

1
2
systemctl is-enabled bird.service
systemctl enable bird.service

Подключимся к консоли bird, посмотрим статистику и соединение с OSPF соседями:

1
2
3
4
5
6
7
8
9
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.

Если маршрутов очень много, то экспортируем маршруты ядра в текстовый файл и там уже посмотрим их и убедимся что все хорошо:

1
ip route > ixnfo.com.txt

Можно мониторить количество маршрутов например с помощью Zabbix:

1
route -n | wc -l

Можно выполнять команды birdc прямо из терминала Linux, например:

1
2
birdc show ospf interface
birdc show ospf interface | wc -l

Смотрите также мои статьи:
Настройка OSPF в Quagga
Настройка OSPF на Juniper MX
Установка и настройка BIRD (BGP)

Оставьте комментарий

Добавить комментарий