Для примера приведу простой пример миграции с 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