Протокол BGP - протокол динамической маршрутизации, основная его задача состоит в том, чтобы обмениваться маршрутами между автономными системами AS (eBGP), а также в пределах одной системы (iBGP). Данный протокол поддерживается всей линейкой L3-коммутаторов SNR.
Базовая настройка BGP
Схема сети:
Конфигурация коммутатора R2:
router bgp 10 bgp router-id 1.1.1.2 network 1.1.1.0/30 network 2.2.2.0/30 neighbor 1.1.1.1 remote-as 10 neighbor 2.2.2.2 remote-as 20
Коммутатор R1 и R3 настраиваем аналогичным образом, но изменяется router-id и адреса соседей. Анонсировать подсети 1.1.1.0/30 и 2.2.2.0/30 - также не требуется.
Проверяем, что все работает:
show ip bgp summary: Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 1.1.1.1 4 10 2 3 34 0 0 00:00:06 0 2.2.2.2 4 20 7 9 34 0 0 00:05:26 0 show ip route: Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area * - candidate default C 1.1.1.0/30 is directly connected, Vlan10 tag:0 C 2.2.2.0/30 is directly connected, Vlan20 tag:0
Настройка BFD (Bidirectional Forwarding Detection)
При падении линка или потере связности между устройствами, BGP-сессия исчезает не сразу. Она остается активной еще некоторое время. Для быстрой сходимости сети используют протокол BFD. Данный протокол обнаруживает проблемы связности на IP-уровне и обеспечивает быструю сходимость сети. Обращаем внимание на то, что для каждого соседа он включается отдельно, при этом настройка таймеров производится на VLAN-интерфейсе.
router bgp 10 neighbor 1.1.1.2 bfd
Настройка атрибутов MED, Weight, Community
Атрибут MED (multi-exit discriminator) предназначен для определения наилучшего пути, по которому другие AS могут взаимодействовать с нашей AS. Данный атрибут не локальный, он передается между AS. Если вам требуется чтобы всегда происходило сравнение значения метрики между разными AS, то необходимо добавить в конфигурацию команду bgp always-compare-med.
route-map metric permit 10 set metric 50 ! router bgp 10 bgp always-compare-med neighbor 1.1.1.1 remote-as 10 neighbor 1.1.1.1 route-map metric out
Атрибут Weight применяется в тех случаях, когда устройство имеет более одного выхода в другие AS. Логика работы данного атрибута очень проста - чем больше его численное значение, тем выше его приоритет.
router bgp 20 neighbor 2.2.2.1 weight 150
Атрибут BGP community предназначен для маркировки маршрутов с целью последующей их обработки по специальным правилам. У маршрутов может быть несколько community. К примеру, на основе данного атрибута можно фильтровать трафик. Также, данный атрибут применяется для балансировки и распределения нагрузки. Принцип его работы почти аналогичен работе ip access-list:
access-list 1 permit 2.0.0.0 0.255.255.255 access-list 2 permit any-source ! router bgp 10 neighbor 2.2.2.2 route-map set-community out ! route-map set-community permit 10 match ip address 1 set community 1111 ! route-map set-community permit 20 match ip address 2
После данной настройки, коммутатор будет отправлять атрибут Community 0:1111 для соседа 2.2.2.2
Примечание
После изменений необходимо применить команду clear ip bgp <neighbor_ip> soft, иначе они вступят в силу не сразу.
Настройка BGP confederation
Для масштабирования сети можно использовать функционал BGP Confederation. Суть заключается в том, чтобы разделить большую автономную систему AS на несколько подсистем (подуровней AS). Это позволяет всем iBGP-соседям изучить все iBGP-маршруты в AS, не используя при этом полносвязную топологию между всеми устройствами в сети. Для других AS конфедерация будет отображаться только под своим глобальным номером AS.
Схема сети:
Конфигурация устройств:
! router bgp 10 bgp router-id 1.1.1.2 bgp confederation identifier 100 bgp confederation peers 30 neighbor 1.1.1.1 remote-as 30 ! router bgp 30 bgp router-id 1.1.1.1 bgp confederation identifier 100 bgp confederation peers 10 neighbor 1.1.1.2 remote-as 10 neighbor 2.2.2.2 remote-as 20
Настройка коммутатора в роли Route Reflector
Данный коммутатор будет выступать в роли "зеркала" и каждый коммутатор будет связан с ним только одним линком. При такой схеме мы получаем, что Route Reflector отправляет своим клиентам маршруты, а клиент не пересылает их дальше, т.к. является конечной точкой, ведь у него нет ни с кем более линков. RR-устройств может быть несколько. Логика работы этого устройства будет следующей:
- Если маршрут был получен от своего клиента, то маршрут будет отправлен всем.
- Если RR получил маршрут не от клиента, то такой маршрут будет отправлен только своим клиентам.
- Если RR получил маршрут от eBGP-соседа, то он пересылает этот маршрут всем.
Всех iBGP-соседей на RR коммутаторе нужно указать как route-reflector-client:
router bgp 10 bgp router-id 1.1.1.1 network 1.1.1.0/30 redistribute connected neighbor 1.1.1.2 remote-as 10 neighbor 1.1.1.2 route-reflector-client
Настройка BGP VPN
Часто для изоляции трафика используется VPN, а для их обслуживания создаются VRF . Для обмена маршрутной информацией между VRF разных граничных маршрутизаторов применяется протокол BGP, а сам BGP в свою очередь оперирует VPN-IPv4 маршрутами. Важно отметить, что VRF - локален для каждого маршрутизатора. Для определения VRF, в который требуется передать маршрут, используется уникальный идентификатор RT. Данный атрибут анонсируется в обновлениях BGP, как атрибут BGP extended community. А чтобы отличать принадлежность маршрута к определенному VPN, к префиксу подсети также добавляется идентификатор RD, который также передается в BGP extended community.
Схема сети:
Конфигурация устройств:
mpls enable ! vlan 100 name TEST_VRF ! ip vrf VRF-A rd 100:10 route-target both 100:10 ! ip vrf VRF-B rd 100:20 route-target both 100:20 ! interface Vlan100 mtu 2000 label-switching ldp enable ip address 10.10.10.1 255.255.255.252 ! interface Loopback100 ip address 1.1.1.1 255.255.255.255 ! interface Loopback101 ip vrf forwarding VRF-A ip address 192.168.100.1 255.255.255.255 ! interface Loopback102 ip vrf forwarding VRF-B ip address 192.168.120.1 255.255.255.255 ! router bgp 10 redistribute connected redistribute static neighbor 2.2.2.2 remote-as 10 neighbor 2.2.2.2 update-source 1.1.1.1 address-family vpnv4 unicast neighbor 2.2.2.2 activate exit-address-family address-family ipv4 vrf VRF-A redistribute connected redistribute static exit-address-family address-family ipv4 vrf VRF-B redistribute connected redistribute static exit-address-family
На другом коммутаторе R2 настройка идентична, изменится только используемая адресация. Проверим, что все работает:
show ip route Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area * - candidate default C 1.1.1.1/32 is directly connected, Loopback100 tag:0 O E2 2.2.2.2/32 [110/20] via 10.10.10.2, Vlan100, 01:35:58 tag:0 C 10.10.10.0/30 is directly connected, Vlan100 tag:0 show ip route vrf VRF-A C 192.168.100.1/32 is directly connected, Loopback101 tag:0 B 192.168.200.1/32 [200/0] via 2.2.2.2, 01:38:42 tag:0 show ip route vrf VRF-B C 192.168.120.1/32 is directly connected, Loopback102 tag:0 B 192.168.220.1/32 [200/0] via 2.2.2.2, 01:38:47 tag:0
Как можно заметить из вывода команд, мы изолировали данные маршруты между собой. Они будут недоступны для друг друга, т.к. находятся в разных VRF.