Миграция с Quagga на Bird

Для примера приведу простой пример миграции с Quagga на Bird, то есть как можно на одном сервере установить одновременно Quagga и Bird, и переключаться между ними.

Допустим на сервере Ubuntu установлена Quagga (BGP) с одним uplink от которого приходит только маршрут по умолчанию.

Сначала посмотрим статистику Quagga, какие соседи есть, какие маршруты экспортируются/импортируются от них, чтобы убедится что текущая конфигурация Quagga правильная, так как исходя из нее нужно будет написать конфигурации в Bird:

telnet localhost 2605
sh ip bgp neighbors
sh ip bgp
sh ip bgp neighbors 192.168.5.5 advertised-routes
sh ip bgp neighbors 192.168.5.5 received-routes

Предположим что от uplink приходит только маршрут по умолчанию 0.0.0.0/0, а мы анонсируем до uplink только свою сеть X.X.X.0/23.

Посмотрим файлы конфигурации в директории /etc/quagga/, допустим в файле zebra.conf указано:

!
! Zebra configuration saved from vty
!   2017/07/21 13:13:02
!
hostname XXX
password XXX
enable password XXX
log file /var/log/zebra.log errors
!
interface lo
!
interface ens2
 ipv6 nd suppress-ra
!
interface ens4
 ipv6 nd suppress-ra
!
ip route X.X.X.128/25 Null0 254
!
ip forwarding
!
!
line vty
!

Из основного, это команда ip route X.X.X.128/25 Null0 254 которой я добавил в blackhole сеть для NAT, чтобы не назначать на сетевом интерфейсе IP адреса для NAT. В bird же я добавил в blackhole всю сеть, которая должна анонсироваться uplink.

Посмотрим основной файл конфигурации BGP /etc/quagga/bgpd.conf

!
! Zebra configuration saved from vty
!   2017/07/21 13:13:02
!
password XXX
enable password XXX
log file /var/log/quagga/bgpd.log
service advanced-vty
!
bgp multiple-instance
bgp config-type cisco
!
router bgp XXXXX
 no synchronization
 bgp router-id X.X.X.X
 bgp log-neighbor-changes
 network X.X.X.0 mask 255.255.254.0
 aggregate-address X.X.X.0 255.255.254.0 summary-only
 redistribute connected
 timers bgp 20 60
 neighbor X.X.X.X remote-as XXXXX
 neighbor X.X.X.X description ixnfo.com
 neighbor X.X.X.X soft-reconfiguration inbound
 neighbor X.X.X.X route-map IXNFO-OUT out
 no auto-summary
!
access-list 10 permit 127.0.0.1
access-list 10 deny any
access-list all permit any
!
ip prefix-list DEFAULT-ONLY seq 10 deny 0.0.0.0/0 ge 1 le 31
ip prefix-list DEFAULT-ONLY seq 20 permit 0.0.0.0/0
ip prefix-list DEFAULT-STRIP seq 10 deny 0.0.0.0/0
ip prefix-list DEFAULT-STRIP seq 20 permit 0.0.0.0/0 ge 1 le 31
ip prefix-list TO-IXNFO seq 10 permit X.X.X.0/23
ip prefix-list TO-IXNFO seq 100 deny 0.0.0.0/0 le 32
!
route-map IXNFO-IN permit 10
 match ip address prefix-list all
!
route-map IXNFO-OUT permit 10
 match ip address prefix-list TO-IXNFO
!
line vty
 access-class 10
 no login
!

Установим bird, временно остановим его процессы и создадим директорию для логов:

apt install bird
systemctl stop bird.service
systemctl stop bird6.service
mkdir /var/log/bird/
touch /var/log/bird/bird.log
chown -R bird:bird /var/log/bird/

Создадим файл конфигурации:

mv /etc/bird/bird.conf /etc/bird/bird.conf.original
nano /etc/bird/bird.conf

Приведу простой пример содержимого:

router id X.X.X.1;
define my_as=XXXXX;

log "/var/log/bird/bird.log" { trace, info, remote, warning, error, auth, fatal, bug };
timeformat base     iso long;
timeformat log      iso long;
timeformat protocol iso long;
timeformat route    iso long;

protocol direct {
        interface "ens2";
}

protocol kernel {
        persist off;
        scan time 20;
        learn;
        import all;
        export none;
}

protocol device {
        scan time 60;
}

protocol static {
preference 254;
route X.X.X.0/23 blackhole;
}

filter PROVIDER1_IN {
if net ~ [ 0.0.0.0/0 ] then {
       accept;
   }
   else reject;
}

protocol bgp IXNFO_COM {
    debug { states, events };
    router id X.X.X.X;
    description "IXNFO_COM";
    local as my_as;
    neighbor X.X.X.X as XXXXX;

    hold time 60;
    startup hold time 60;
    connect retry time 120;
    keepalive time 20;
    start delay time 5;
    error wait time 60, 300;
    error forget time 300;
    next hop self;
    path metric 1;
    default bgp_med 0;

    source address X.X.X.X;
    export where net = X.X.X.0/23;
    import filter PROVIDER1_IN;
}

Когда конфигурация BIRD готова, остановим Quagga:

service zebra stop
service zebra status
service bgpd stop
service bgpd status

И запустим BIRD:

service bird start
service bird status

Подключимся к консоли BIRD, убедимся что BGP сессия установилась и посмотрим статистику:

birdc
show protocols
show protocols all
show route
show route all
show static
show route export IXNFO.COM

Активируем автозапуск BIRD IPv4 при запуске операционной системы:

systemctl is-enabled bird.service
systemctl is-enabled bird6.service
systemctl enable bird.service
systemctl disable bird6.service

Деактивируем автозапуск Quagga:

systemctl is-enabled zebra.service
systemctl is-enabled bgpd.service
systemctl disable zebra.service
systemctl disable bgpd.service

systemctl is-enabled ospfd
systemctl is-enabled ospf6d
systemctl is-enabled ripd
systemctl is-enabled ripngd
systemctl is-enabled isisd

Пересмотрим и закомментируем лишнее в /etc/quagga/zebra.conf, так как bird будет запускать zebra.

Смотрите также мои статьи:
Установка и настройка BIRD (BGP)
Установка Quagga в Ubuntu Server 18

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

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