Настраиваем BGP используя quagga на FreeBSD.

Posted by admin on Feb 27, 2010 in Gateway FreeBSD |

В статье описан способ поднять протокол динамической маршрутизации BGPv4 (EBGP) для минимального взаимодействия двух AS. Протокол BGP сложный механизм состоящий из многих параметров. В одной статье сложно учесть и объяснить все. Статья будет пригодна тем, кто только начал сталкиваться с этим протоколом и не использовал quagga.

Основные понятия:

AS – Autonomous system – группа маршрутизаторов (шлюзов) из одной административной области, взаимодействующих с другими автономными системами посредством внешнего протокола маршрутизации. При наличии собственного номера AS и блока адресов позволяет использовать два и более каналов в сеть Интернет одновременно, с распределением нагрузки между ними.

EGP – Exterior Gateway Protocol, протокол внешнего шлюза. (например: BGPv4, IS-IS);

IGP – Interior gateway protocol, протокол внутреннего шлюза (например: RIP, EIGRP, OSPF);

EBGP – External BGP, взаимодействие протокола BGP с другими (чужими) автономными системами;

IBGP – Internal BGP, взаимодействие протокола BGP внутри своей автономной системы;

peer – Сосед по протоколу динамической маршрутизации;

as-path – «Путь» из номеров AS (автономных систем) до сети назначения;

Номера AS 64512 – 65535 выделены для частного использования (»серые» номера AS);

Тестовый стенд: компьютер Intel P4, 4Gb памяти, и два сетевых интерфейса em0, em1

Начнем:

После установки нам необходимо настроить два демона:

1. zebra
2. bgpd

Переходим в директорию /usr/local/etc/quagga

Файл: zebra.conf

Пройдемся по конфигу zebra.conf

em0 – интерфейс смотрящий в сторону локальной сети
em1- интерфейс смотрящий в сторону провайдера
маршруты 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 отправлены в Null0, иными словами все пакеты которые будут приходить от данных сетей будут отбрасываться, т.к. это «серые» сети которые не маршрутизируются в сети Интернет.
64.17.0.0/21 – это выделенный нам, организацией RIPE, блок внешних адресов.
Т.к. для того, что бы протокол BGP мог анонсировать (объявлять) эту подсеть провайдеру он сам должен знать где находится данная сеть. Для того, чтобы в последствии избежать ситуаций когда из-за проблем внутри локальной сети, например недоступность gateway на который (которые) будут маршрутизироваться подсети или сеть 64.17.0.0/21 при использовании внутренних протоколов динамической маршрутизации (RIP, OSPF, EIGRP), BGP перестанет анонсировать наш блок внешних адресов, для этого мы также отправляем маршрут этой сети в Null0. Таким образом мы заставим BGP всегда знать маршрут в эту сеть.
Теперь возмем блок 64.17.0.0/21 и поделим его на две подсети 64.17.0.0/22, 64.17.4.0/22 и «отмаршрутизируем» их внутрь сети на два других сервера 10.1.1.2, 10.1.1.3 где они будут использоваться под клиентов или другое оборудование, где могут быть ещё разбиты на более мелкие подсети.

Вы возможно подумали о том: «как же это будет работать раз /21 отправлена в Null0 ?»
Это будет работать по тому, что в таблице маршрутизации роутера будет три маршрута, два из которых более точные (/22), поэтому наш маршрутизатор будет пользоваться ими для продвижения пакетов приходящие от нашего блока.

Файл bgpd.conf:

Пройдемся по конфигу bgpd.conf

AS100 – Autonomous system, наш номер автономной системы так же выданный нам организацией RIPE
AS200 – автономная система нашего провайдера
no synchronization – не ждать подтверждения маршрута от протоколов внутреннего шлюза (IGP)
network 64.17.0.0/21 – указываем сеть для анонсирования
командами neighbor мы описываем своего «соседа» (peer`а), указываем номер его AS, его IP-адрес, указываем маршрутные карты на вход и на выход, neighbor 2.2.2.1 next-hop-self – говорит о том, что для всех оглашаемых маршрутов next-hop будет выставлен на нас (в as-path будет содержаться номер нашей AS)
ip prefix-list bogons – описывает те сети маршруты в которые мы не хотим получать от своего «соседа»
ip as-path access-list 1 – описывает «серые» номера AS которые не маршрутизируются в сети Интернет и предоставлены для внутреннего использования, где бы они не встречались в as-path

route-map MY-PROVIDER-in – маршрутная карта которая применяется при передаче соседом маршрутов в нашу AS100

в deny 100 – запрещаем принимать маршруты в as-path которых содержатся «серые» AS, перечисленные в ip as-path access-list 1
в deny 110 – запрещаем принимать маршруты в которых содержатся сети перечисленные в ip prefix-list bogons
в deny 115 – запрещаем принимать default gateway
в deny 120 – запрещаем принимать маршрут в принадлежащие нам сети (наш блок адресов (prefix-list our-CIDR-blocks)) (на всякий случай 😉 )
в permit 200 – и последние правило которое разрешит все остальные маршруты и выставит на них local-preference 100

route-map MY-PROVIDER-out – маршрутная карта которая применяется при оглашении маршрутов от нашей AS100 к AS200 автономной системы нашего провайдера (prefix-list upstream-out).

в permit 100 – разрешаем свой блок /21

Принцип работы маршрутных карт (route-map) прост, то что разрешает access-list является совпадением, а дальше применяется действие указанное в маршрутной карте: permit или deny.
Последним действием которое не указано, но подразумевается это deny. Тот же самый принцип что и в access-list. Если совпадений не будет, то маршрут будет запрещен.

Рекомендуется присваивать «говорящие» названия для маршрутных карт (route-map) для дальнейшего удобства, когда конфиг будет разрастаться.

Ну вот мы и сделали необходимый минимум.
Пишем в /etc/rc.conf:

Стартуем:

либо

Все то что описано в конфиге, можно настроить и через консоль, после запуска демона.
Для того, чтобы настроить и управлять демоном zebra, после его запуска, устанавливаем telnet соединение на порт 2601 localhost (127.0.0.1:2601).
Демон bgpd работает на порту 2605 localhost (127.0.0.1:2605).

Проверяем, что все работает:

вводим пароль 123 и переходим в enable режим опять таки вводя пароль 123
смотрим информацию по соседу, где нас интересует строка состояния:
sh ip bgp neighbors 2.2.2.1
………………
BGP state = Established, up for 09w6d19h
…………………

даем команду sh ip bgp и смотрим получаем ли мы маршруты от соседа

Мы видим, что маршруты от соседа к нам приходят.

Теперь посмотрим, что мы огласили своему соседу:

Мы должны видеть наш блок адресов 64.17.0.0/21 и next-hop наш IP-адрес, если это так то все в порядке, наш маршрут соседу отправлен.

Copyright © 2018 Заметки по UNIX All rights reserved.
Desk Mess Mirrored v1.4.3.1 theme from BuyNowShop.com.