Протокол BGP - протокол динамической маршрутизации, основная его задача состоит в том, чтобы обмениваться маршрутами между автономными системами AS (eBGP), а также в пределах одной системы (iBGP). Данный протокол поддерживается всей линейкой L3-коммутаторов SNR.
Базовая настройка BGP
Схема сети:
Конфигурация коммутатора R2:
Code Block |
---|
|
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 - также не требуется.
Проверяем, что все работает:
Code Block |
---|
|
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-интерфейсе.
Code Block |
---|
|
router bgp 10
neighbor 1.1.1.2 bfd |
Атрибут MED (multi-exit discriminator) предназначен для определения наилучшего пути, по которому другие AS могут взаимодействовать с нашей AS. Данный атрибут не локальный, он передается между AS. Если вам требуется чтобы всегда происходило сравнение значения метрики между разными AS, то необходимо добавить в конфигурацию команду bgp always-compare-med.
Code Block |
---|
|
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. Логика работы данного атрибута очень проста - чем больше его численное значение, тем выше его приоритет.
Code Block |
---|
|
router bgp 20
neighbor 2.2.2.1 weight 150 |
Атрибут BGP community предназначен для маркировки маршрутов с целью последующей их обработки по специальным правилам. У маршрутов может быть несколько community. К примеру, на основе данного атрибута можно фильтровать трафик. Также, данный атрибут применяется для балансировки и распределения нагрузки. Принцип его работы почти аналогичен работе ip access-list:
Code Block |
---|
|
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
Note |
---|
|
После изменений необходимо применить команду clear ip bgp <neighbor_ip> soft, иначе они вступят в силу не сразу. |
Настройка BGP confederation
Для масштабирования сети можно использовать функционал BGP Confederation. Суть заключается в том, чтобы разделить большую автономную систему AS на несколько подсистем (подуровней AS). Это позволяет всем iBGP-соседям изучить все iBGP-маршруты в AS, не используя при этом полносвязную топологию между всеми устройствами в сети. Для других AS конфедерация будет отображаться только под своим глобальным номером AS.
Схема сети:
Конфигурация устройств:
Code Block |
---|
|
!
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:
Code Block |
---|
|
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.
Схема сети:
Конфигурация устройств:
Code Block |
---|
|
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 настройка идентична, изменится только используемая адресация. Проверим, что все работает:
Code Block |
---|
|
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.