Головна Мережа Настроюємо BGP на Quagga

Настроюємо BGP на Quagga

Настроюємо BGP на Quagga
Настроюємо BGP на Quagga

Quagga або zebra - демон динамічної маршрутизації під Unix-подібні ОС. Вона вміє OSPF, RIP, ISIS, BGP та статичну маршрутизацію, і крам того підтримує IPv6. Плюс до того можливість налаштування через Cisco-подібний інтерфейс vtysh роблять її чи не найзручнішим інструментом управління динамічною маршрутизацією для провайдерів.

Сьогодні ми розглянемо початкове встановлення і налаштування BGP.

Встановлення пакунку Quagga

Встановлювати пакунок ми будемо з репозиторію готових пакунків, оскільки там вже за замовчуванням все включено як треба, проте якщо ви хочете змінити опції налаштувань - ви можете скористатись системою портів.

pkg update
pkg install quagga

Одразу ж додамо її в rc:

echo "quagga_enable=YES" >> /etc/rc.conf
echo 'quagga_daemons="zebra bgpd"' >> /etc/rc.conf

опцією quagga_daemons ми обираємо які саме інстанси динамічної маршрутизації будуть запущені. Оскільки зараз ми настроюємо bgp, то в нашому списку присутній тільки bgpd. zebra потрібна для статичної маршрутизації і налаштування інтерфейсів, і якщо чесно я не певен що воно працюватиме без неї)

В Quagga є дуже класна фіча, разом з нею встановлюється "сторожовий пес" watchquagga. Активний він слідкує за інстансами quagga і в разі коли вони перестають відповідати (таке кажуть теж буває но я не стикався) перезапускає процес. Активується він в rc.conf:

watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/sbin/zebra -d; /usr/local/sbin/bgpd -d;' zebra bgpd"

Тепер скопіюємо дефолтні конфіги, бо quagga без нах не запуститься:

cp /usr/local/share/examples/quagga/bgpd.conf.sample /usr/local/etc/quagga/bgpd.conf
cp /usr/local/share/examples/quagga/zebra.conf.sample /usr/local/etc/quagga/zebra.conf
chown -R quagga:quagga /usr/local/etc/quagga

остання строчка необхідна щоб власником файлів була quagga інакше ми не зможемо внести зміни в конфіг через vtysh.

Від цього моменту quagga вже встановлена і готова до запуску. Тож запускаємо її і переходимо до налаштувань:

service quagga start

Налаштування Quagga BGP

Налаштовувати quagga ми будемо через Cisco-подібний CLI інтерфейс vtysh, команда для його запуску, відповідно, 

vtysh

Мабуть про сам BGP я зроблю окрему статтю, а може ви собі про нього так почитаєте, але трохи розкажу про нього щоб ті хто робить перші кроки (ми колись всі такі були) розуміли про що йде мова :) Отож BGP - це кореневий протокол Інтернету. Основою для нього служить AS - автономна система, яка по суті є просто номером який видає Регіональний Інтернет-Реєстратор. Для країн Європи це RIPE. BGP знає про маршрут IP адресу наступного маршрутизатора і шлях з номерів AS. Таким чином маршрутизатор зокрема може балансувати трафік якщо має 2 і більше аплінків.

Крім номера AS маршрутизатор зазвичай має ще блок IP адрес які він анонсує, адже це його основна задача) Хоча є і конфігурації в яких нічого не анонсується від себе, тоді маршрутизатор виступає в ролі RouteReflect. Така конфігурація в основному зустрічається в точках обміну трафіком, де всі учасники мають про всіх знати але логічно не з‘єднані між собою (про це може якось тоже напишу).

Для прикладів конфігурацій скористаємось RFC5737 (використовуватимемо блоки IP адрес 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24) і RFC1930 (використаємо номери AS 64700 і 64701). CLI в нас вже запущена, тож починаємо налаштування:

R1:

configure terminal
no router bgp  7675
router bgp 64701
bgp router-id 192.0.2.1
network 192.0.2.0/24
neighbor 203.0.113.1 remote-as 64700
neighbor 203.0.113.1 soft-reconfiguration inbound
write memory

R2: 

configure terminal
no router bgp  7675
router bgp 64700
bgp router-id 198.51.100.1
network 198.51.100.0/24
network 203.0.113.0/24
neighbor 203.0.113.2 remote-as 64701
neighbor 203.0.113.2 soft-reconfiguration inbound
write memory

Тут ми настроїли 2 роутера для прикладу, щоб порівняти як конфіг виглядає з 2 сторін. Насправді ж вам доведеться настроювати тільки 1 сторону)

Розберемо що ми тут нанастроювали:

configure terminal - переводить CLI в режим настроювання

no router bgp 7675 - витираємо дефолтну AS (пам‘ятаєте ми там файли з екзампл-конфігами копіювали?)

router bgp 64701 - ось тут ми прописуємо наш номер AS, і цією ж командою переходим в режим конфігурування BGP.

bgp router-id 198.51.100.1 - кожен BGP маршрутизатор якось себе ідентифікує. Зазвичай беруть першу IP адресу з блоку.

network 192.0.2.0/24 - таких рядків може бути багато (див. R2). Ними ми прописуємо всі мережі які анонсує наш маршрутизатор.

neighbor 203.0.113.1 remote-as 64700 - таким чином описується сусідство. Це означає що ми маємо зв‘язок з BGP-маршрутизатором який має AS номер 64700 і IP адресу 203.0.113.1

neighbor 203.0.113.1 soft-reconfiguration inbound - дуже цікава опція. Справа в тому що BGP настільки крутий і гнучкий завдяки широким можливостям route-map і коли треба поміняти якісь параметри дуже незручно обривати сесію і по новій все рахувати. Особливо якщо пірів багато і анонсів також. Тому в BGP є soft-reconfiguration inbound. Установка цієї опції виділяє частину пам‘яті і записує в неї всі маршрути які анонсував нам сусід як є, без фільтрації і до route-map. Це дає змогу без втрат і без перевтановлення з‘єднань переписувати route-map, міняти ваги префіксів і таке інше. І найголовніше що оригінатор маршрутної інформації навіть не здогадуватиметься що ми щось собі тут робимо! 

write memory - це команда запису конфігурації (ті хто мають часто справу з Cisco і знають її короткий варіант wri mem - тут так тоже можна)

Щоб вийти з режиму конфігурації можна натиснути комбінацію Ctrl+Z. Але якщо вам необхідно під час конфігурації щось провірити (наприклад що приходить від нового сусіда, або що ми відсилаємо йому) перед командою треба написати do - це поверне CLI в режим перегляду для тієї одної команди.

Тепер ми можемо перевіряти чи все гаразд:

show ip route bgp

ця команда показує маршрути що ми прйняли по BGP і для нашого маршрутизатора R1 виведе

Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
 
B>* 198.51.100.0/24 [20/0] via 203.0.113.1, em0, 00:01:03
B>* 203.0.113.0/24 [20/0] via 203.0.113.1, em0, 00:01:03

це означає що ми прийняли 2 маршрути від сусіда 203.0.113.1 що з‘єднаний з нами через інтерфейс em0.


Гарного адміністрування!

perm_identity event

Коментарі