Методичка настройка BGPv4
Только сегодня: скидка до 20% в подарок на первый заказ.
Какую работу нужно написать?
Другую работу
Помощник Анна
Министерство образования и науки Российской Федерации Сибирский федеральный университет Системы документальной электросвязи Методические указания для выполнения практических и самостоятельных работ Красноярск СФУ 2012 УДК 621.372.852.5(07) ББК 32.845.7я73 Ф 947 Составитель: К. Э. Гаипов Ф 947 Системы документальной электросвязи: лабораторный практикум для студентов направления 210400.62 «Телекоммуникации» и специальности 210406.65 «Сети связи и системы коммутации» [Текст]/ сост. К.Э. Гаипов. – Красноярск: Сиб. федер. ун-т, 2012. – 42 с. Представлены сведения об установке необходимых программ для проведения лабораторных, даны указания по выполнению лабораторных и самостоятельных работ по дисциплине «Системы документальной электросвязи». Предназначено для студентов радиотехнического факультета направления подготовки 210400.62 «Телекоммуникации» и специальности «210406.65» «Сети связи и системы коммутации». УДК 621.372.852.5(07) ББК 32.845.7я73 © Сибирский федеральный университет, 2012 Введение Данный курс предполагает наличие предварительных знаний о маршрутизации в IP сетях в объеме соответствующему дисциплине «Основы автоматической коммутации». Для проведения лабораторных работ потребуется следующее программное обеспечение: GNS3, WireShark, VirtualBox, порядок установки программ описан в методических указаниях по лабораторным работам «Основы автоматической коммутации». 1. Практическая работа №1 Изучение работы протокола BGP Основная цель: Освоить основные алгоритмы функционирования протокола BGP. Промежуточные цели 1. Изучить функционирования атрибута NEXT_HOOP; 2. Изучить правила формирования атрибута ORIGIN; 3. Изучить правила формирования атрибута AS_PATH; 4. Организация туннеля IP-in-IP; 5. Изучить правила взаимодействия с протоколами маршрутизации внутреннего шлюза. Рисунок 1 – Исследуемая топология 1.1 Предварительная конфигурация
- Соберите топологию, указанную на рисунке 1;
- Настройте все интерфейсы маршрутизаторов согласно их ip адресам;
- В качестве протокола IGP в AS 100 и AS 300 должен функционировать протокол OSPF, протоколом IGP в AS 200 должен быть RIPv2.
- Протокол BGP должен быть настроен только на маршрутизаторах R2, R3, R5, R6, R8.
1.2 Базовая конфигурация протоколаBGP Если в качестве протокола IGP в двух соседних автономных системах работают одинаковые протоколы внутреннего шлюза, то данные протоколы не должны взаимодействовать между собой. Поэтому интерфейсы, находящиеся на границе автономных систем, должны быть настроенные как пассивные или же полностью не участвовать в работе протокола IGP. Это зависит от того должна ли сеть между автономными система быть доступна из внутренних сетей автономной системы. Базовая конфигурация маршрутизаторов заключается в воде следующих команд: (config)#router bgp [номер автономной системы] (config-router)#network [ip адрес] mask [маска] ……… R2(config-router)#neighbor [ip адрес] remote-as [номер автономной системы] В команде router bgp [номер автономной системы] в качестве номера автономной системы надо водить тот номер в автономной системы, в котором находится сам маршрутизатор. В команде network [ip адрес] mask [маска] в качестве ip адреса указывается номер подсети, который будет анонсироваться соседним спикерам, при этом этот же номер сети должен был быть получен с помощью средств протоколов внутреннего шлюза, или статически задан в таблице маршрутизации, в параметре маска указывается маска этой сети В команде neighbor [ip адрес] remote-as [номер автономной системы] в качестве ip адреса указывается соседний спикер, в качестве номера автономной системы надо вводить тот номер автономной системы, в которой находится соседний спикер, если номера автономных систем соседних спикеров совпадают, то они взаимодействуют по протоколу iBGP, если не совпадают, то взаимодействие идет по протоколу eBGP. В таблице 1.1 показана базовая конфигурация всех маршрутизаторов. Таблица 1.1 – Базовая конфигурация
Конфигурация R1 R1#config t R1(config)#int f0/0 R1(config-if)#ip address 1.0.1.1 255.255.255.0 R1(config-if)#no shutd R1(config-if)#int f1/0 R1(config-if)#ip address 1.0.0.2 255.255.255.0 R1(config-if)#no shutd R1(config-if)#int f2/0 R1(config-if)#ip address 1.0.3.1 255.255.255.0 R1(config-if)#no shutd R1(config-if)#router ospf 1 R1(config-router)#netw R1(config-router)#network 1.0.0.0 0.255.255.255 area 0 | Конфигурация R2 R2#config t R2(config)#int f0/0 R2(config-if)#ip address 192.168.1.1 255.255.255.0 R2(config-if)#no shutd R2(config-if)#int f1/0 R2(config-if)#ip address 1.0.1.2 255.255.255.0 R2(config-if)#no shutd R2(config-if)#int f2/0 R2(config-if)#ip address 1.0.2.1 255.255.255.0 R2(config-if)#no shutd R2(config-if)#router ospf 1 R2(config-router)#network 1.0.0.0 0.255.255.255 area 0 R2(config-router)#network 192.168.1.0 0.0.0.255 area 0 R2(config-router)#passive-interface fastEthernet 0/0 R2(config-router)#exit R2(config)#router bgp 100 R2(config-router)#network 1.0.0.0 mask 255.255.255.0 R2(config-router)#network 1.0.1.0 mask 255.255.255.0 R2(config-router)#network 1.0.2.0 mask 255.255.255.0 R2(config-router)#network 1.0.3.0 mask 255.255.255.0 R2(config-router)#network 1.0.4.0 mask 255.255.255.0 R2(config-router)#neighbor 192.168.1.2 remote-as 200 R2(config-router)#neighbor 1.0.0.1 remote-as 100 |
Конфигурация R3 R3#config t R3(config)#int f0/0 R3(config-if)#ip address 192.168.0.1 255.255.255.0 R3(config-if)#no shutd R3(config-if)#int f1/0 R3(config-if)#ip address 1.0.0.1 255.255.255.0 R3(config-if)#no shutd R3(config-if)#int f2/0 R3(config-if)#ip address 1.0.4.1 255.255.255.0 R3(config-if)#no shutd R3(config-if)#int f3/0 R3(config-if)#ip address 192.168.2.1 255.255.255.0 R3(config-if)#no shutd R3(config-if)#exit R3(config)#router ospf 1 R3(config-router)#network 1.0.0.0 0.255.255.255 area 0 R3(config-router)#network 192.168.0.0 0.0.255.255 area 0 R3(config-router)#passive-interface fastEthernet 3/0 R3(config-router)#passive-interface fastEthernet 0/0 R3(config-router)#exit R3(config)#router bgp 100 R3(config-router)#neighbor 1.0.1.2 remote-as 100 R3(config-router)#network 1.0.0.0 mask 255.255.255.0 R3(config-router)#network 1.0.1.0 mask 255.255.255.0 R3(config-router)#network 1.0.2.0 mask 255.255.255.0 R3(config-router)#network 1.0.3.0 mask 255.255.255.0 R3(config-router)#network 1.0.4.0 mask 255.255.255.0 R3(config-router)#neighbor 192.168.0.2 remote-as 200 R3(config-router)#neighbor 3.0.0.2 remote-as 300 | Конфигурация R4 R4#config t R4(config)#int f0/0 R4(config-if)#ip address 4.0.2.2 255.255.255.0 R4(config-if)#no shutd R4(config-if)#int f1/0 R4(config-if)#ip address 4.0.1.1 255.255.255.0 R4(config-if)#no shutd R4(config-if)#int f2/0 R4(config-if)#ip address 4.0.3.1 255.255.255.0 R4(config-if)#no shutd R4(config-if)#router rip R4(config-router)#version 2 R4(config-router)#no auto-summary R4(config-router)#netw 4.0.0.0 |
Конфигурация R5 R5#config t R5(config)#int f0/0 R5(config-if)#ip address 4.0.2.1 255.255.255.0 R5(config-if)#no shutd R5(config-if)#int f1/0 R5(config-if)#ip address 4.0.0.1 255.255.255.0 R5(config-if)#no shutd R5(config-if)#int f2/0 R5(config-if)#ip address 192.168.1.2 255.255.255.0 R5(config-if)#no shutd R5(config-if)#int f3/0 R5(config-if)#ip address 192.168.0.2 255.255.255.0 R5(config-if)#no shutd R5(config-if)#router rip R5(config-router)#ver R5(config-router)#version 2 R5(config-router)#no auto-summary R5(config-router)#network 4.0.0.0 R5(config-router)#netw 192.168.0.0 R5(config-router)#netw 192.168.1.0 R5(config-router)#passive-interface f2/0 R5(config-router)#passive-interface f3/0 R5(config-router)#exi R5(config)#router bgp 200 R5(config-router)#network 4.0.0.0 mask 255.255.255.0 R5(config-router)#network 4.0.1.0 mask 255.255.255.0 R5(config-router)#network 4.0.2.0 mask 255.255.255.0 R5(config-router)#network 4.0.3.0 mask 255.255.255.0 R5(config-router)#neighbor 4.0.0.2 remote-as 200 R5(config-router)#neighbor 192.168.1.1 remote-as 100 R5(config-router)#neighbor 192.168.0.1 remote-as 100 | Конфигурация R6 R6#config t R6(config)#int f0/0 R6(config-if)#ip address 4.0.0.2 255.255.255.0 R6(config-if)#no shutd R6(config-if)#int f1/0 R6(config-if)#ip address 4.0.1.2 255.255.255.0 R6(config-if)#no shutd R6(config-if)#int f2/0 R6(config-if)#ip address 192.168.3.2 255.255.255.0 R6(config-if)#no shutd R6(config-if)#router rip R6(config-router)#version 2 R6(config-router)#network 4.0.0.0 R6(config-router)#network 192.168.3.0 R6(config-router)#no auto-summary R6(config-router)#passive-interface f2/0 R6(config-router)#exit R6(config)#router bgp 200 R6(config-router)#network 4.0.0.0 mask 255.255.255.0 R6(config-router)#network 4.0.1.0 mask 255.255.255.0 R6(config-router)#network 4.0.2.0 mask 255.255.255.0 R6(config-router)#network 4.0.3.0 mask 255.255.255.0 R6(config-router)#neighbor 192.168.3.1 remote R6(config-router)#neighbor 192.168.3.1 remote-as 300 R6(config-router)#neighbor 4.0.0.1 remote-as 200 |
Конфигурация R7 R7#config t R7(config)#int f0/0 R7(config-if)#ip address 192.168.2.2 255.255.255.0 R7(config-if)#no shutd R7(config-if)#int f1/0 R7(config-if)#ip address 3.0.0.1 255.255.255.0 R7(config-if)#no shutd R7(config-if)#int f2/0 R7(config-if)#ip address 2.0.0.1 255.255.255.0 R7(config-if)#no shutd R7(config-if)#router ospf 1 R7(config-router)#network 192.168.2.0 0.0.0.255 area 0 R7(config-router)#network 3.0.0.0 0.0.0.255 area 0 R7(config-router)#network 2.0.0.0 0.0.0.255 area 0 R7(config-router)#passive-interface f0/0 | Конфигурация R8 R8#config t R8(config)#int f0/0 R8(config-if)#ip address 3.0.0.2 255.255.255.0 R8(config-if)#no shutd R8(config-if)#int f1/0 R8(config-if)#ip address 192.168.3.1 255.255.255.0 R8(config-if)#no shutd R8(config-if)#int f2/0 R8(config-if)#ip address 2.0.1.1 255.255.255.0 R8(config-if)#no shutd R8(config-if)#router ospf 1 R8(config-router)#network 192.168.3.0 0.0.0.255 area 0 R8(config-router)#network 3.0.0.0 0.0.0.255 area 0 R8(config-router)#network 2.0.1.0 0.0.0.255 area R8(config-router)#passive-interface f1/0 R8(config-router)#exit R8(config)#router bgp 300 R8(config-router)#network 3.0.0.0 mask 255.255.255.0 R8(config-router)#network 2.0.0.0 mask 255.255.255.0 R8(config-router)#network 2.0.1.0 mask 255.255.255.0 R8(config-router)#neighbor 192.168.3.2 remote-as 200 R8(config-router)#neighbor 192.168.2.1 remote-as 100 |
После ввода базовых конфигураций на каждом из маршрутизаторов посмотрите таблицы маршрутизации с помощью команды show ip route. В примере 1.1 показан вывод команды show ip route на маршрутизаторе R8 Пример 1.1 R8#show ip route Codes: C — connected, S — static, R — RIP, M — mobile, B — BGP D — EIGRP, EX — EIGRP external, 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, su — IS-IS summary, L1 — IS-IS level-1, L2 — IS-IS level-2 ia — IS-IS inter area, * — candidate default, U — per-user static route o — ODR, P — periodic downloaded static route Gateway of last resort is not set 1.0.0.0/24 is subnetted, 5 subnets B 1.0.1.0 [20/0] via 192.168.3.2, 00:01:09 B 1.0.0.0 [20/0] via 192.168.3.2, 00:01:09 B 1.0.3.0 [20/0] via 192.168.3.2, 00:01:09 B 1.0.2.0 [20/0] via 192.168.3.2, 00:01:09 B 1.0.4.0 [20/0] via 192.168.3.2, 00:01:09 2.0.0.0/24 is subnetted, 2 subnets O 2.0.0.0 [110/2] via 3.0.0.1, 00:00:14, FastEthernet0/0 C 2.0.1.0 is directly connected, FastEthernet2/0 3.0.0.0/24 is subnetted, 1 subnets C 3.0.0.0 is directly connected, FastEthernet0/0 4.0.0.0/24 is subnetted, 4 subnets B 4.0.0.0 [20/0] via 192.168.3.2, 00:01:10 B 4.0.1.0 [20/0] via 192.168.3.2, 00:01:11 B 4.0.2.0 [20/1] via 192.168.3.2, 00:01:11 B 4.0.3.0 [20/1] via 192.168.3.2, 00:01:11 O 192.168.2.0/24 [110/2] via 3.0.0.1, 00:00:16, FastEthernet0/0 C 192.168.3.0/24 is directly connected, FastEthernet1/0 Как видно из вывода данной команды буквой B обозначены маршруты, полученные по протоколу BGP. Обратите внимание на то, что маршрутизаторы R3 и R8 не сформировали соседских отношений, поэтому в примере 1.1. все маршруты, полученные по протоколу BGP доступны только через маршрутизатор R6 (192.168.3.2). Это связано с тем, что в отправляемых ip пакетах, в которых содержится протокол eBGP, в заголовке значение поля TTL (time to live время жизни) установлено в единицу, следовательно, по умолчанию, только маршрутизаторы соединенные непосредственно могут взаимодействовать между собой. Очевидным решением является изменить значение поля TTL в отправляемых IP пакетах, что можно сделать с помощью команды: neighbor [ip адрес] ebgp-multihop [ttl] Тогда обновленная конфигурация маршрутизаторов R3 и R8 будет следующая, таблица 1.2 Таблица 1.2 – Конфигурация маршрутизаторов R3 и R8
Конфигурация R3 | Конфигурация R8 |
R3#config t R3(config)#router bgp 100 R3(config-router)#neighbor 3.0.0.2 ebgp-multihop 2 | R8#config t R8(config)#router bgp 300 R3(config-router)#neighbor 192.168.2.1 ebgp-multihop 2 |
Тем не менее, даже после ввода этой команды маршрутизаторы не взаимодействуют по протоколу eBGP. Рассмотрим эту ситуацию более подробно, для того чтобы спикеры BGP могли взаимодействовать между собой между ними должно существовать ip соединение, то есть в таблицах маршрутизции каждого спикера должен быть указан маршрут к соседнему спикеру. Таблицы маршрутизации R3 и R8 показаны в таблице 1.3. Таблица 1.2 – таблицы маршрутизации R3 и R8
Таблица маршрутизации R3 | Таблица маршрутизации R8 |
B 2.0.1.0 [20/0] via 192.168.0.2, 01:11:12 3.0.0.0/24 is subnetted, 1 subnets B 3.0.0.0 [20/0] via 192.168.0.2, 01:11:13 4.0.0.0/24 is subnetted, 4 subnets B 4.0.0.0 [20/0] via 192.168.0.2, 01:26:39 B 4.0.1.0 [20/1] via 192.168.0.2, 01:26:10 B 4.0.2.0 [20/0] via 192.168.0.2, 01:26:10 B 4.0.3.0 [20/1] via 192.168.0.2, 01:26:10 C 192.168.0.0/24 is directly connected, FastEthernet0/0 O 192.168.1.0/24 [110/3] via 1.0.0.2, 01:35:21, FastEthernet1/0 C 192.168.2.0/24 is directly connected, FastEthernet3/0 | B 4.0.0.0 [20/0] via 192.168.3.2, 01:19:41 —More— *Mar 1 01:42:11.747: %BGP-3-NOTIFICATION: sent to neighbor 192.168.2.1 4/0 (hold time expired) 0 bytes B 4.0.1.0 [20/0] via 192.168.3.2, 01:19:42 B 4.0.2.0 [20/1] via 192.168.3.2, 01:19:42 B 4.0.3.0 [20/1] via 192.168.3.2, 01:19:42 O 192.168.2.0/24 [110/2] via 3.0.0.1, 01:18:46, FastEthernet0/0 C 192.168.3.0/24 is directly connected, FastEthernet1/0 |
Как видно из таблиц маршрутизации и тот и другой маршрутизатр знают маршруты до своих соседей, но в маршрутизаторе R3 маршрут к сети 3.0.0.0/24 лежит через маршрутизатор R5 (192.168.0.2) , то есть этот маршрут содержит три транзитных маршрутизатора, а, следовательно, поле TTL должно быть равно 4, из таблицы маршрутизатора R8 видно что сеть 192.168.2.0/24 доступна через маршрутизатор R7, а следовательно для взаимодействия с маршрутизатором R3 маршрутизатор R8 может отправлять пакеты со значением TTL равным два. Таким образом, решением проблемы может быть ввод в конфигурацию команды: R3(config-router)#neighbor 3.0.0.2 ebgp-multihop 4, Введите эту команду, через несколько секунд маршрутизатор R3 действительно выведет системное сообщение «%BGP-5-ADJCHANGE: neighbor 3.0.0.2 Up», это означает, что сообщения UPDATE маршрутизатора R3 достигают маршрутизатор R8 и, наоборот, при этом маршрутизатор R3 отправляет сообщения UPDATE через маршрутизатор R5, находящийся в АС200, а маршрутизатор R8 отправляет сообщения UPDATE маршрутизатору R3 через маршрутизатор R7. В результате мршрутизатор R3 получает информацию о сетях АС 300 из трех источников, данную информацию можно посмотреть, введя команду show ip bgp [Network] [mask], где в качестве аргумента Network и Mask можно ввести любую сеть автономной системы 300. Пример 1.2 R3#show ip bgp 2.0.0.0 255.255.255.0 BGP routing table entry for 2.0.0.0/24, version 488 Paths: (3 available, best #2, table Default-IP-Routing-Table) Flag: 0x820 Advertised to update-groups: 1 2 1 200 300 192.168.1.2 (metric 3) from 1.0.1.2 (192.168.1.1) Origin IGP, metric 0, localpref 100, valid, internal
2 300 3.0.0.2 from 3.0.0.2 (192.168.3.1) Origin IGP, metric 2, localpref 100, valid, external, best
3 200 300 192.168.0.2 from 192.168.0.2 (192.168.1.2) Origin IGP, localpref 100, valid, external Как видно маршрутизатор R3 имеет три возможных маршрута к сети 2.0.0.0/24, но лучшей считается второй маршрут. Согласно информации о втором маршруте сеть 2.0.0.0/24 обладает следующими атрибутами AS_PATH=АС300, Next_Hop=3.0.0.2, информация, полученная об этом маршруте от других источников, проходит через две автономные системы, поэтому процесс принятия решения определяет маршрут 2 как лучший и заносит себе в таблицу маршрутизации. Пример 1.3 R3#show ip route 1.0.0.0/24 is subnetted, 5 subnets O 1.0.1.0 [110/2] via 1.0.0.2, 00:47:07, FastEthernet1/0 C 1.0.0.0 is directly connected, FastEthernet1/0 O 1.0.3.0 [110/2] via 1.0.0.2, 00:47:07, FastEthernet1/0 O 1.0.2.0 [110/3] via 1.0.0.2, 00:47:07, FastEthernet1/0 C 1.0.4.0 is directly connected, FastEthernet2/0 2.0.0.0/24 is subnetted, 2 subnets B 2.0.0.0 [20/2] via 3.0.0.2, 00:00:02 B 2.0.1.0 [20/0] via 3.0.0.2, 00:00:02 3.0.0.0/24 is subnetted, 1 subnets B 3.0.0.0 [20/0] via 3.0.0.2, 00:00:04 4.0.0.0/24 is subnetted, 4 subnets B 4.0.0.0 [20/0] via 192.168.0.2, 01:14:22 B 4.0.1.0 [20/1] via 192.168.0.2, 01:14:23 B 4.0.2.0 [20/0] via 192.168.0.2, 01:14:23 B 4.0.3.0 [20/1] via 192.168.0.2, 01:14:23 C 192.168.0.0/24 is directly connected, FastEthernet0/0 O 192.168.1.0/24 [110/3] via 1.0.0.2, 00:47:10, FastEthernet1/0 C 192.168.2.0/24 is directly connected, FastEthernet3/0 Сравните эту таблицу маршрутизации с таблицей из примера 1.1, как видно для этих маршрутов поменялся адрес следующего транзитного перехода, поэтому теперь чтобы отправить пакет в сеть 3.0.0.0/24 или 2.0.0.0/24 маршрутизатор R3 должен осуществить рекурсивный поиск по таблице маршрутизации, чтобы найти маршрут к узлу 3.0.0.2, который является следующим транзитным переходом, в свою очередь узел 3.0.0.2 находится в сети 3.0.0.0/24, следовательно, маршрутизатор R3 не сможет отправлять пакеты в сети, находящиеся в АС300. Из сказанного следует, что команда R3(config-router)#neighbor 3.0.0.2 ebgp-multihop 4 не решает поставленной задачи, единственно верным решением будет внесение в таблицу маршрутизации маршрутизатора R3 информации о достижимости сети 3.0.0.0/24, либо с помощью статической маршрутной записи, либо используя динамическую маршрутизации. В данной ситуации будем использовать статическую маршрутную запись, а также значение ebgp-multihop будет равно 2. R3#config t R3(config)#router bgp 100 R3(config-router)#neighbor 3.0.0.2 ebgp-multihop 2 R3(config-router)#exit R3(config)#ip route 3.0.0.0 255.255.255.0 192.168.2.2 После чего в таблице маршрутиации маршрутизатора R3 будет выглядеть следующим образом: Пример 1.4. R3#show ip route O 1.0.1.0 [110/2] via 1.0.0.2, 17:45:58, FastEthernet1/0 C 1.0.0.0 is directly connected, FastEthernet1/0 O 1.0.3.0 [110/2] via 1.0.0.2, 17:45:58, FastEthernet1/0 O 1.0.2.0 [110/3] via 1.0.0.2, 17:45:58, FastEthernet1/0 C 1.0.4.0 is directly connected, FastEthernet2/0 2.0.0.0/24 is subnetted, 2 subnets B 2.0.0.0 [20/2] via 3.0.0.2, 00:01:01 B 2.0.1.0 [20/0] via 3.0.0.2, 00:01:01 3.0.0.0/24 is subnetted, 1 subnets S 3.0.0.0 [1/0] via 192.168.2.2 4.0.0.0/24 is subnetted, 4 subnets B 4.0.0.0 [20/0] via 192.168.0.2, 18:13:12 B 4.0.1.0 [20/1] via 192.168.0.2, 18:13:13 B 4.0.2.0 [20/0] via 192.168.0.2, 18:13:13 B 4.0.3.0 [20/1] via 192.168.0.2, 18:13:13 C 192.168.0.0/24 is directly connected, FastEthernet0/0 O 192.168.1.0/24 [110/3] via 1.0.0.2, 17:46:00, FastEthernet1/0 C 192.168.2.0/24 is directly connected, FastEthernet3/0 Как видно из примера 1.4 чтобы пакеты попадали в сеть 2.0.0.0/24 АС300, они должны, как и в предыдущем случае, отправляться на адрес 3.0.0.2, но теперь поиск по таблице маршрутизации указывает на то, что сеть 3.0.0.0/24, где находится адрес 3.0.0.2, доступен через 192.168.2.2. Рассмотрим таблицу маршрутизации маршрутизатора R2 Пример 1.5 R2#show ip route 1.0.0.0/24 is subnetted, 5 subnets C 1.0.1.0 is directly connected, FastEthernet1/0 O 1.0.0.0 [110/2] via 1.0.1.1, 00:05:52, FastEthernet1/0 O 1.0.3.0 [110/2] via 1.0.1.1, 00:05:52, FastEthernet1/0 C 1.0.2.0 is directly connected, FastEthernet2/0 O 1.0.4.0 [110/3] via 1.0.1.1, 00:05:52, FastEthernet1/0 2.0.0.0/24 is subnetted, 2 subnets B 2.0.0.0 [200/2] via 3.0.0.2, 00:00:07 B 2.0.1.0 [200/0] via 3.0.0.2, 00:00:07 3.0.0.0/24 is subnetted, 1 subnets B 3.0.0.0 [200/0] via 3.0.0.2, 00:00:09 4.0.0.0/24 is subnetted, 4 subnets B 4.0.0.0 [20/0] via 192.168.1.2, 00:05:19 —more- Как видно из таблицы маршрутизации, пример 1.5, сети автономной системы AC 300 для него доступны через ip адрес 3.0.0.2, это связано с тем, что атрибут NEXT_HOP=3.0.0.2 не изменяется при передаче его по протоколу iBGP. Данная ситуация аналогична ситуации с маршрутизатором R3, когда рекурсивный поиск по таблице маршрутизации не давал ответа как достичь адреса 3.0.0.2, иными словами сети автономной системы 300 для маршрутизатора R2 являются не доступными. Для обеспечения доступности этих сетей необходимо обеспечить в таблицах маршрутизации маршрут к сети 3.0.0.0/24 через тот транзитный переход, чей ip адрес будет доступен через таблицу маршрутизации маршрутизатора R2. Для решения этой проблемы можно пойти тремя путями:
- статически внести информацию о сети 3.0.0.0/24, что она доступна через ip адрес 1.0.0.1 маршрутизатора R3 или через ip 1.0.1.1 маршрутизатора R1;
- перераспределить статическую информацию о сети 3.0.0.0/24 в маршрутную информацию протокола IGP на маршрутизаторе R3;
- изменить значение атрибута NEXT_HOP=3.0.0.2, получаемого от маршрутизатора R8, на значение 1.0.0.1.
Первый способ не является лучшим решением, так как в автономной системе АС100 могло бы оказаться большое число маршрутизаторов, в которых сеть 3.0.0.0/24 была бы недоступна, и статическое внесение маршрутных записей было бы слишком рутинной задачей, к тому же если в автономной системе 300 произойдет изменение ip BGP спикера, то все статические записи необходимо будет менять. Второй способ, является более приемлем, так как в этом случае все маршрутизаторы автоматически получат по протоколу IGP информации о том как получить доступ к сети 3.0.0.0/24, недостатком же будет являться то, что данная сеть будет известна всем маршурутизаторам автономной системы. К тому же количество спикеров с маршрутизатором R3 может быть велико, и тогда придется перераспределять все статические маршруты, ведущие к этим спикерам, также чтобы не перераспределять лишнюю информацию из статических таблиц, необходимо будет сконфигурировать списки доступов. Последний способ обеспечивает простую замену атрибута, и анонсы о всех сетях, получаемые маршрутизатором R3 от других автономных систем по eBGP будут передаваться всем iBGP соседам маршрутизатра R3 с измененым атрибутом NEXT_HOP=1.0.0.1. Таким образом, в общем случае лучшим решением будет последний способ, но первый и второй способы также имею право на существования в зависимости от сложившейся ситуации. Для того чтобы маршрутизатор R3 изменял атрибут NEXT_HOP, полученный от маршрутизатора R8, необходимо ввести следующую команду: R3(config-router)#neighbor 1.0.1.2 next-hop-self После чего таблица маршрутизации маршрутизатора R2 будет иметь вид: Пример 1.6 R2#show ip route 2.0.0.0/24 is subnetted, 2 subnets B 2.0.0.0 [200/2] via 1.0.0.1, 00:00:09 B 2.0.1.0 [200/0] via 1.0.0.1, 00:00:09 3.0.0.0/24 is subnetted, 1 subnets B 3.0.0.0 [200/0] via 1.0.0.1, 00:00:11 4.0.0.0/24 is subnetted, 4 subnets —more— На данном этапе таблицы маршрутизации маршрутизаторов, работающих с протоколом BGP, являются полными, но этого не достаточно для обмена ip пакетами между пользователями автономных систем. Это связано с тем что пакеты отправляемые пользователями, как правило, попадают на маршрутизаторы не работающие по протоколу BGP, а в таблицах маршрутизации не содержится информации как доставить пакет в сети других автономны систем, мало того из-за такой ситуации не возможна транзитная передача пакетов через автономные системы. В качестве примера рассмотрим ситуацию отправки ICMP пакета с маршрутизатора R2 на интерфейс маршрутизатора R3 2.0.1.1, хотя информация о сети 2.0.1.0/24 содержится в таблице маршрутизатора R2, следующим мршрутизатором, которому будет отправлен пакет ICMP c адресом назначения 2.0.0.1, будет маршрутизатор R1, чья таблица маршрутизации содержит только информацию о внутренних сетях автономной системы, а, следовательно, пакет будет удален, а отправителю будет отправлено ICMP сообщение о том, что узел не достижим. Пример 1.7 R2#ping 2.0.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2.0.1.1, timeout is 2 seconds: U.U.U Сообщение U.U.U означает unreachable (недостижим), тоже касается и отправки сообщения ICMP c маршрутизатора R1 и маршрутизатора R4. R1#ping 2.0.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2.0.1.1, timeout is 2 seconds: . Таким образом, необходимо решить следующие задачи:
- обеспечить доступ всех пользователей к другим автономным системам:
- обеспечить транзитную передачу пакетов через автономную систему.
При этом, не допустив чтобы внутренние маршрутизаторы получали информации о сетях других автономных систем. Рассмотрим задачу транзитной передачи трафика. Для обеспечения транзита через АС100 можно запустить протокол BGP на маршрутизаторе R1, но такая ситуация не всегда является возможной. Для выполнение такой задачи необходимо чтобы маршрутизаторами R2 и R3 обладали соединением канального уровня, иными словами, если между маршрутизаторами организовать туннель GRE, IP-in-IP, PPTP или L2TP, то транзитный трафик будет передаваться по туннельным интерфейсам, поскольку средства протокола PPP для данной ситуации излишни, то для поставленной задачи будет достаточно туннеля GRE или IP-in-IP. Таблица 1.3 — Конфигурация туннелей
Маршрутизатор R2 | Маршрутизатор R3 |
R2(config)#interface tunnel 1 R2(config-if)#tunnel source fastEthernet 1/0 R2(config-if)#tunnel destination 1.0.0.1 R2(config-if)#tunnel mode ipip R2(config-if)#ip address 10.0.0.1 255.255.255.0 | R3(config)#int tunnel 1 R3(config-if)#tunnel source f1/0 R3(config-if)#tunnel destination 1.0.1.2 R3(config-if)#tunnel mode ipip R3(config-if)#ip address 10.0.0.2 255.255.255.0 |
Для проверки работы туннеля используем утилиту ping Пример 1.8 R3#ping 10.0.0.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds: . Success rate is 100 percent (5/5), round-trip min/avg/max = 48/70/112 ms Перехваченный пакет ICMP рисунок 1.2, посланный маршрутизатору R3 от маршрутизатора R2.
Ethernet II, Src: cc:03:0f:b0:00:10 (cc:03:0f:b0:00:10), Dst: cc:01:0f:b0:00:10 (cc:01:0f:b0:00:10) Internet Protocol Version 4, Src: 1.0.0.1 (1.0.0.1), Dst: 1.0.1.2 (1.0.1.2) Internet Protocol Version 4, Src: 10.0.0.2 (10.0.0.2), Dst: 10.0.0.1 (10.0.0.1) Internet Control Message Protocol |
Рисунок 1.2 – Перехваченный пакет ICMP Из рисунка 1.2 видно, что теперь передача данных ведется через туннель организованный между интерфейсами с ip адресами 1.0.0.1 и 1.0.1.2. Организации туннеля недостаточно для того чтобы транзитный трафик передавался по нему, для этого необходимо чтобы обмен сообщениями по протоколу iBGP велся через туннель, поэтому адреса соседних спикеров в конфигурации протокола BGP должны быть заменены на ip адреса туннельных интерфейсов.
Принципы работы протокола BGP
Сегодня мы рассмотрим протокол BGP. Не будем долго говорить зачем он и почему он используется как единственный протокол. Довольно много информации есть на этот счет, например тут.
Итак, что такое BGP? BGP — это протокол динамической маршрутизации, являющийся единственным EGP( External Gateway Protocol) протоколом. Данный протокол используется для построения маршрутизации в интернете. Рассмотрим как строится соседство между двумя маршрутизаторами BGP.
Рассмотрим соседство между Router1 и Router3. Настроим их при помощи следующих команд:
router bgp 10 network 192.168.12.0 network 192.168.13.0 neighbor 192.168.13.3 remote-as 10 router bgp 10 network 192.168.13.0 network 192.168.24.0 neighbor 192.168.13.1 remote-as 10
Соседство внутри одной автономной системы — AS 10. После ввода данных на маршрутизаторе, например на Router1, данный маршрутизатор пытается настроить отношения соседства с маршрутизатором Router3. Начальное состояние, когда ничего не происходит называется Idle. Как только будет настроен bgp на Router1, он начнет слушать TCP порт 179 — перейдет в состояние Connect, а когда пытается открыть сессию с Router3, то перейдет в состояние Active.
После того, как сессия установится между Router1 и Router3, то происходит обмен Open сообщениями. Когда данное сообщение отправит Router1, то данное состояние будет называться Open Sent. А когда получит Open сообщение от Router3, то перейдет в состояние Open Confirm. Рассмотрим более подробно сообщение Open:
В данном сообщение передается информация о самом протоколе BGP, который использует маршрутизатор. Обмениваясь Open сообщениями, Router1 и Router3 сообщают друг другу информацию о своих настройках. Передаются следующие параметры:
- Version: this includes the BGP version that the router is using. The current version of BGP is version 4 which is described in RFC 4271. Two BGP routers will try to negotiate a compatible version, when there is a mismatch then there will be no BGP session.
- My AS: this includes the AS number of the BGP router, the routers will have to agree on the AS number(s) and it also defines if they will be running iBGP or eBGP.
- Hold Time: if BGP doesn’t receive any keepalive or update messages from the other side for the duration of the hold time then it will declare the other side ‘dead’ and it will tear down the BGP session. By default the hold time is set to 180 seconds on Cisco IOS routers, the keepalive message is sent every 60 seconds. Both routers have to agree on the hold time or there won’t be a BGP session.
- BGP Identifier: this is the local BGP router ID which is elected just like OSPF does:
- Use the router-ID that was configured manually with the bgp router-id command.
- Use the highest IP address on a loopback interface.
- Use the highest IP address on a physical interface.
- support for MP-BGP (Multi Protocol BGP).
- support for Route Refresh.
- support for 4-octet AS numbers.
Для установления соседства необходимо выполнения следующих условий:
- Номер версии. Нынешняя версия 4.
- Номер AS должен совпадать с тем, что вы настроили neighbor 192.168.13.3 remote-as 10.
- Router ID должен быть отличным от соседа.
Здесь указывают сети, о которых сообщает Router1 и Path attributes, которые являются аналогом метрик. О Path attributes мы поговорим более подробно. Также внутри TCP сессии передаются Keepalive сообщения. Они передаются, по умолчанию, каждые 60 секунд. Это Keepalive Timer. Если в течении Hold Timer-а не будет получено Keepalive сообщение, то это будет означать потерю связи с соседом. По умолчанию, он равен — 180 секундам.
Вроде бы разобрались как маршрутизаторы передают друг другу информацию, теперь попытаемся разобраться с логикой работы протокола BGP.
Чтобы анонсировать какой-нибудь маршрут в таблицу BGP, как и в протоколах IGP, используется команда network, но логика работы отличается. Если в IGP, после указание маршрута в команде network, IGP смотрит — какие интерфейсы принадлежат данной подсети и включает их в свою таблицу, то команда network в BGP смотрит в таблицу маршрутизации и ищет точное совпадение с маршрутом в команде network. При нахождении таких, данные маршруты попадут в таблицу BGP.
Look for a route in the router’s current IP routing table that exactly matches the parameters of the network command; if the IP route exists, put the equivalent NLRI into the local BGP table.
Теперь поднимем BGP на всех оставшихся и посмотрим как происходит выбор маршрута внутри одной AS. После того, как BGP маршрутизатор получит маршруты от соседа, то начинается выбор оптимального маршрута. Здесь надо понять какого вида соседи могут быть — внутренние и внешние. Маршрутизатор по конфигурации понимает является ли сконфигурированный сосед внутренним или внешним. Если в команде:
neighbor 192.168.13.3 remote-as 10
в качестве параметра remote-as указан AS, который сконфигурирован на самом маршрутизаторе в команде router bgp 10. Маршруты, пришедшие из внутренней AS считаются внутренними, а маршруты из внешней соответственно внешними. И по отношению к каждому работает разная логика получения и отправки. Рассмотрим такую топологию:
На каждом маршрутизаторы настроен loopback интрефейс с ip: x.x.x.x 255.255.255.0 — где x номер маршрутизатора. На Router9 у нас есть loopback интерфейс с адресом — 9.9.9.9 255.255.255.0. Его мы будем анонсировать по BGP и посмотрим как он распространяется. Данный маршрут будет передан на Router8 и Router12. С Router8 данный маршрут попадет на Router6, но на Router5 в таблице маршрутизации его не будет. Также и на Router12 данный маршрут попадет в таблицу, но на Router11 его также не будет. Попытаемся разобраться с этим. Рассмотрим какие данные и параметры передается Router9 своим соседям, сообщая об этом маршруте. Пакет внизу будет отправлен с Router9 на Router8.
Информация о маршруте состоит из аттрибутов пути (Path attributes).
Атрибуты пути разделены на 4 категории:
- Well-known mandatory — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).
- Well-known discretionary — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.
- Optional transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.
- Optional non-transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.
- Well-known mandatory:
- Autonomous system path
- Next-hop
- Origin
- Local preference
- Atomic aggregate
- Aggregator
- Communities
- Multi-exit discriminator (MED)
- Originator ID
- Cluster list
Атрибут Origin — указывает на то, каким образом был получен маршрут в обновлении. Возможные значения атрибута:
- 0 — IGP: NLRI получена внутри исходной автономной системы;
- 1 — EGP: NLRI выучена по протоколу Exterior Gateway Protocol (EGP). Предшественник BGP, не используется
- 2 — Incomplete: NLRI была выучена каким-то другим образом
Далее, Next-hop. Атрибут Next-hop
- Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.
- Атрибут меняется при передаче префикса в другую AS.
- Если маршрутизатор передает маршрут своему внутреннему соседу, то он не меняет параметр Next-hop.
- Если маршрутизатор передает маршрут своему внешнему соседу, то меняет Next-hop на ip интерфейса, с которого передает данный маршрутизатор.
Router6#show ip route bgp Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, 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, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override, p - overrides from PfR Gateway of last resort is not set 9.0.0.0/24 is subnetted, 1 subnets B 9.9.9.0 [20/0] via 192.168.68.8, 00:38:25
Теперь Router6 передал маршрут Router5 и первому правилу Next-hop не изменил. То есть, Router5 должен добавить 9.9.9.0 [20/0] via 192.168.68.8, но у него нет маршрута до 192.168.68.8 и поэтому данный маршрут добавлен не будет, хотя информация о данном маршруте будет храниться в таблице BGP:
Router5#show ip bgp BGP table version is 1, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path * i 9.9.9.0/24 192.168.68.8 0 100 0 45 i
Та же самая ситуация произойдет и между Router11-Router12. Чтоб избежать такой ситуации необходимо настроить, чтоб Router6 или Router12, передавая маршрут своим внутренним соседям, подставляли в качестве Next-hop свой ip адрес. Делается при помощи команды:
neighbor 192.168.56.5 next-hop-self
После данной команды, Router6 отправит Update сообщение, где для маршрутов в качества Next-hop будет указан ip интерфейса Gi0/0 Router6 — 192.168.56.6, после чего данный маршрут уже попадет в таблицу маршрутизации.
Пойдем дальше и посмотрим появиться ли этот маршрут на Router7 и Router10. В таблице маршрутизации его не окажется и мы могли бы подумать, что проблема как в первом с параметром Next-hop, но если мы посмотрим вывод команды show ip bgp, то увидим, что там маршрут не был получен даже с неправильным Next-hop, что означает, что маршрут даже не передавался. И это нас приведет к существованию еще одного правила:
Маршруты, полученные от внутренних соседей не передаются другим внутренним соседям.
Так как, Router5 получил маршрут от Router6, то другому своему внутреннему соседу он передаваться не будет. Для того, чтобы передача произошла необходимо настроить функцию Route Reflector, либо настроить полносвязные отношения соседства ( Full Mesh), то есть Router5-7 каждый будет соседом с каждым. Мы будем в данном случае использовать Route Reflector. На Router5 необходимо использовать данную команду:
neighbor 192.168.57.7 route-reflector-client
Route-Reflector меняет поведение BGP при передаче маршрута внутреннему соседу. Если внутренний сосед указан как route-reflector-client, то данным клиентам будут анонсироваться внутренние маршруты.
Маршрут не появился на Router7? Не забываем также и про Next-hop. После данных манипуляций маршрут должен и на Router7, но этого не происходит. Это нас подводит к еще одному правилу:
Правило next-hop работает только для External маршрутов. Для внутренних маршрутов замена атрибута next-hop не происходит.
И мы получаем ситуацию, в которой необходимо создать среду при помощи статичной маршрутизации или протоколов IGP сообщить маршрутизаторам о всех маршрутах внутри AS. Пропишем статические маршруты на Router6 и Router7 и после этого получим нужный маршрут в таблице маршрутизаторе. В AS 678 же мы поступим немного иначе — пропишем статические маршруты для 192.168.112.0/24 на Router10 и 192.168.110.0/24 на Router12. Далее, установим отношения соседства между Router10 и Router12. Также настроим на Router12 отправку своего next-hop для Router10:
neighbor 192.168.110.10 next-hop-self
Итогом будет то, что Router10 будет получать маршрут 9.9.9.0/24, он будет получен и от Router7 и от Router12. Посмотрим какой выбор сделает Router10:
Router10#show ip bgp BGP table version is 3, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.112.12 0 100 0 45 i 192.168.107.7 0 123 45 i
Как мы видим, два маршрута и стрелка ( > ) означает, что выбран маршрут через 192.168.112.12.
Посмотрим как происходит процесс выбора маршрута:- Первым делом при получении маршрута, проверяется доступность его Next-hop. Именно поэтому, когда мы получали маршрут на Router5 без настройки Next-hop-self, данный маршрут далее не отдавался на обработку.
- Далее идет параметр Weight. Данный параметр не является Атрибутом пути ( PA ) и не передается в сообщениях BGP. Он настраивается локально на каждом маршрутизаторе и используется только для манипуляции выбора маршрута на самом маршрутизаторе. Рассмотрим пример. Чуть выше показано, что Router10 выбрал маршрут для 9.9.9.0/24 через Router12 ( 192.168.112.12 ). Чтоб изменить параметр Wieght, можно использовать route-map, чтоб задать для определенных маршрутов, либо присвоить его соседу вес при помощи команды:
neighbor 192.168.107.7 weight 200
Теперь все маршруты от данного соседа будут иметь такой вес. Посмотрим как изменится выбор маршрута после данной манипуляции:
Router10#show bgp *Mar 2 11:58:13.956: %SYS-5-CONFIG_I: Configured from console by console BGP table version is 2, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 9.9.9.0/24 192.168.107.7 200 123 45 i * i 192.168.112.12 0 100 0 45 i
Router5#show bgp BGP table version is 2, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.56.6 0 100 0 45 i
Но как видим один маршрут через Router6. А где же маршрут через Router7? Может и на Router7 его нет? Смотрим:
Router#show bgp BGP table version is 10, local router ID is 7.7.7.7 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.56.6 0 100 0 45 i 192.168.107.10 0 678 45 i
Странно, вроде все в порядке. Почему же он не передается на Router5? Все дело в том, что у BGP есть правило:
Маршрутизатор передает только те маршруты, которые использует сам.
Router7 используется маршрут через Router5, поэтому маршрут через Router10 передаваться не будет. Вернемся к Local Preference. Давайте зададим Local Preference на Router7 и посмотрим как отреагирует на это Router5:
route-map BGP permit 10 match ip address 10 set local-preference 250 access-list 10 permit any router bgp 123 neighbor 192.168.107.10 route-map BGP in
Итак, мы создали route-map, в который попадаются все маршруты и сказали Router7, чтоб при получение он менял параметр Local Preference на 250, по умолчанию равен 100. Смотрим, что произошло на Router5:
Router5#show bgp BGP table version is 8, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.57.7 0 250 0 678 45 i
Router#show bgp BGP table version is 2, local router ID is 9.9.9.9 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 9.9.9.0/24 0.0.0.0 0 32768 i
Router10#show bgp BGP table version is 2, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path * 9.9.9.0/24 192.168.107.7 0 123 45 i *>i 192.168.112.12 0 100 0 45 i
- Выбрать путь через ближайшего IGP-соседа.
- Выбрать самый старый маршрут для eBGP-пути.
- Выбрать путь через соседа с наименьшим BGP router ID.
- Выбрать путь через соседа с наименьшим IP-адресом.
Посмотрим, что произойдет, если допустим Router6 потеряет маршрут 9.9.9.0/24 через Router9. Отключим интерфейс Gi0/1 Router6, который сразу поймет, что BGP сессия с Router8 оборвана и сосед пропал, а значит и маршрут, полученные от него не действительны. Router6 сразу отправляет Update сообщения, где указывает сеть 9.9.9.0/24 в поле Withdrawn Routes. Как только Router5 получит подобное сообщение, отправит его к Router7. Но так как у Router7 есть маршрут через Router10, то в ответ сразу отправит Update c новым маршрутом. Если детектировать падения соседа по состоянию интерфейса не получается, то придеться ждать срабатывания Hold Timer-а.
Конфедерация.
Если помните, то мы говорили о том, что часто приходится использовать полносвязную топологию. С большим количеством маршрутизаторов в одной AS это может доставить большие проблемы, чтоб избежать этого необходимо использовать конфедерации. Одна AS разбивается на несколько sub-AS, что позволяет работать им без требования полносвязной топологии.
Здесь ссылка на данную лабу, а тут конфигурация для GNS3.
Например, при такой топологии нам пришлось бы связывать все маршрутизаторы в AS 2345 между собой, но используя Confederation, мы можем установить отношения соседства только между маршрутизаторами непосредственно подключенных друг к другу. Поговорим об этом подробно. Если у нас была только AS 2345, то laForge получив маршур от Picard рассказал бы его маршрутизаторам Data и Worf, но они не рассказали бы о нем маршрутизатору Crusher . Также маршруты, которые распрастраняет сам маршрутизатор laForge, не были бы переданы Crusher ни Worf-ом, ни Data.
Пришлось бы настраивать Route-Reflector или полносвязые отношения соседства. Разбивая одну AS 2345 на 4 sub-AS ( 2,3,4,5) для каждого маршрутизатора, мы в итоге получаем другую логику работы. Все отлично описано здесь.
- CCIE Routing and Switching v5.0 Official Cert Guide, Volume 2, Fifth Edition, Narbik Kocharians, Terry Vinson.
- Сайт xgu.ru
- Сайт GNS3Vault.
Маршрутизация на пальцах, Основы BGP: EGP vs IGP
Итак, Друзья, Добрый Вечер. Наконец после долгих часов сидения за сотнями гайдов и километровых конфигурационных файлов, я все же таки решил приступить к раскрытию темы, которая освещена самым странным образом, причем многими вендорами.
Почему странным? Да потому что, казалось бы, по BGP просто миллиард статей, томов, гайдов, пособий. НО! Есть один ВАЖНЕЙШИЙ момент (наверное это стратегия больших вендоров) ни в одном гайде данным вопрос не освещен целостно и полно. Что я имею в виду под понятиями целотсно и полно? Под ними я подразумеваю логичное, лаконичное и конкретное объяснение функций, целей и задач протокола BGP. Однако словно закон пакости, все мануалы пестрят, просто реально пестрят деталями! Однако за деталями скрыт основной скоуп, который должен быть понятен и обычным людям, а не только нашпигованным вендороной литературой, профам.
Итак, начнем с азов. Для чего нам нужен BGP? Сразу скажу, при своем описании данного протокола я буду использовать строго необходимые описания, где-то с деталями, где-то без, но материал Вы в конце статьи уясните по-любому, даже если кто-то параллеьно жевал бутерброд и чиатл эту статью.
Для того, чтобы ответить на вопрос какие функции BGP представляет, нужно понимать для чего он нужен. Итак, чтобы было понятно, глаголю как заклинание, Ваше дело просто запоминать и перечитывать раз за разом, итак поехали!
«Все протолы маршрутизации делятся на 2 вида: маршрутизация внутри домена (IGP) и маршрутизация за пределами домена (EGP). Под маршрутизацией внутри домена мы понимаем корпоративную сеть любой величины, которая может даже иметь VPN точки по хедквартерам, однако которая соединяется между своими точками без самостоятельной автономной системы, то есть через провайдера. Другими словами, внутридоменная маршрутизация означает, что Вы можете гипотетически сами управлять каждым участком Вашей сети. И работа всей сети зависит только от Вас, главного инженера сети. Что такое маршрутизация вне домена? Это в большей степени межпровайдерная маршрутизация, если хотите это больше не техническая маршрутизация, а политическая. Ибо смыслом внутридоменной маршрутизации является является обеспечение максимальной связности между всеми узлами сети, которые позволяют это сделать технически. Внедоменная маршрутизация совсем не подразумевает такого рода альтруизма, она уже производится на основе важных бумаг- ДОГОВОРОВ между провайдерами или с Вашим провайдером. Иными словами, если Вы заплатили за транзитную зону, Вы и получаете транзитуню зону. Если захотели 2 эквивалентных бэкапных пути- получили, только заплатив денежку в свой интернет-провайдер. Более того, у Вас даже может быть физическая связность до Вашего провайдера, однако она будет запрещена првайдером услуг. Чтобы Вам был понятен подход, постарайтесь представить следующий ассоциативный ряд: есть улицы в городе. Гипотетически дороги на эти улицы открыты, и Вы можете кружить по ним на своей тачке сколько угодно, без ограничений, это IGP. А теперь представьте, что эти улицы также открыты, однако по ним Вы можете ездить, только заплатив и взяв договор с владельцем улиц. Это подход EGP, внешнедоменной маршрутизации с точки зрения договоренностей, но не с точки зрения технической возможности.
В категорию IGP входят следующие протоколыы: IS-IS, OSPF, EIGRP, RIP, RIPv2, а также списанный на данный момент со счетов IGRP. протоколам внешнедоменной маршрутизации относится BGP, и только он. Если быть совсем верным- BGPv4. Скажу сразу всем, кто считает, что также существует старший брат BGPv4- BGPv6. Это не совсем так, так как в данном случае используется тот же самый BGPv4 однако с расширенным функционалом в виде надстроечки на протокол- MP-BGP или Multiprotocol BGP. Целью MP-BGP как раз таки и является устранение недостатков обычного BGPv4, который передает только IPv4 маршруты. MP-BGP напротив, может поддерживать MPLS, IPv6 адреасцию, мультикаст адресацию, VRF-ы. Когда мы строим большую конвергентную сеть без MP-BGP просто не обойтись, поэтому мы также его рассмотрим в следующей главе. Равно и как все процессы, которые происходят с протоколом BGPv4 и взаимная работа EBGP и IBGP. Пока же, перед началом второй части, пропустите данную информацию через себя, чтобы далее каждую дальнйшую информацию Вы воспринимали как контструктив, который ложится на твердый фундамент. «
Продолжение следует завтра! Не пропустите. А теперь- спать,
(c) DERIVED FROM CISCO UNIVER CD. For education only
Автор перевода — Олег Семенюк, olegs@relcom.net.
Редактор — Алексей Руднев, alex@relcom.net.Попытка перевести все полностью на русский, к сожалению, показывает, что начинает теряться смысл. Поэтому в тексте и частично — в оглавлении оставлены на английском те термины, которые прямо соответствуют командам или понятиям протокола.
Использование BGP
Border Gateway Protocol — протокол пограничного роутинга
для междоменного роутинга- Основы BGP
- Внутридоменный (Internal) BGP
- Интерфейсы Loopback
- Мультихоповый (Multihop) EBGP
- EBGP и Load Balancing
- Синхронизация
- Анонсирование сетей
- Ре-анонсирование (Redistributing) статических роутов
- Ре-анонсирование (Redistributing) динамических роутов
- Использование команды network
- Атрибут AS_path
- Атрибут Origin
- Атрибут Next Hop
- Атрибут Next Hop Attribute а мультидоступовая среда(Multiaccess Media)
- Атрибут Next Hop и среда без бродкастов (Nonbroadcast Media Access)
- Использование листов доступа для установки веса
- Использование роуте-мепов для установки веса
- Использование команды neighbor weight для установки веса
- Использование команды bgp default local-preference
- Использование роут-мапов для установки Local Preference
- Administrative Distance
- Фильтрация BGP
- Фильтрация префиксов
- Фильтрация AS_path
- Фильтрация в Route Map
- Фильтрация по Community
- Агрегатирование и статический роутинг
- Агрегатирование и AS-SET
- Использование Originator ID
- Использование Cluster List
- Роут рефлекторы и традиционные BGP устройства
- Определение статуса BGP
- Исправление проблемы Next Hop
- Выключение синхронизации
- Ре-анонсирование OSPF
- Управление несимметрией
- Окончательная конфигурация
Using the Border Gateway Protocol for Interdomain Routing
- BGP Fundamentals
- BGP Decision Algorithm
- Controlling the Flow of BGP Updates
- Practical Design Example
Note Мы будем рассматривать BGP Version 4.
I. BGP Fundamentals
Эта глава представляет информацию о BGP, и включает в себя следующие разделы:
- I.1 Internal BGP
- I.2 External BGP
- I.3 BGP and Route Maps
- I.4 Advertising Networks
Роутеры, которые принадлежат одной и той же AS и обмениваются BGP update’ами, работают по Internal BGP (IBGP); роутеры, которые принадлежат разным AS и тоже обмениваются BGP update’ами, работают по External BGP (EBGP). Команды для конфигурации IBGP и EBGP одинаковы, исключая команду конфигурации роутера «neighbor ebgp-multihop» (которая описана в разделе «2» External BGP» этой главы). Поэтому везде, где мы будем упоминать о IBGP и EBGP, это будет делаться в контексте, что routing updates происходят либо в пределах одной AS, либо между AS.
На рисунке 12-1 демонстрируется различие между EBGP и IBGP.
Figure 12-1: EBGP, IBGP, and Multiple ASs
Перед тем, как обмениваться информацией о маршрутах с внешними AS, BGP должен гарантировать, что сети _внутри его_ AS достижимы. Это обеспечивается комбинацией обмена информацией о маршрутах по IBGP между роутерами внутри AS и передачей информации о маршрутах BGP в один из Interior Gateway Protocols (IGPs), которые работают внутри AS (например, Intereior Gateway Routing Protocol IGRP, Intermediate System-to-Intermediate System IS-IS, Routing Information Protocol RIP и Open Shortest Path First OSPF).
BGP использует TCP в качестве транспортного протокола (port 179). Любые два роутера, между которыми открыто tcp соединение для обмена информацией о маршрутизации, называются «peers» или «neighbors». На приведенном выше рисунке роутеры A и B являются BGP peers, равно как и роутеры B и C, C и D. Routing Information состоит из незакольцованной (loop-free) карты автономных систем. Заметим, что внутри AS BGP peers не являются подключенными непосредственно друг к другу (грубо говоря, не соединены между собой напрямую проводом).
BGP peers инициируют обмен полными таблицами BGP маршрутизации между собой. Позже они посылают лишь incremental updates. Кроме этого, BGP peers обмениваются keepalive messages (чтобы удостовериться, что связь между ними не потеряна), и notification messages (сообщениями об ошибках и другой служебной информацией).
Для простой конфигурации роутеров на приведенном выше рисунке используются следующие команды:
! Router A router bgp 100 neighbor 129.213.1.1 remote-as 200
! Router B router bgp 200 neighbor 219.213.1.2 remote-as 100 neighbor 175.220.1.2 remote-as 200
! Router C router bgp 200 neighbor 175.220.212.1 remote-as 200 neighbor 192.208.10.1 remote-as 300
! Router D router bgp 300 neighbor 192.208.10.2 remote-as 200
Как видно из приведенной выше конфигурации, router bgp global configuration команды присваивают роутеру номер его AS и включают обмен BGP маршрутами между автономными системами.
Команда конфигурации neighbor [ip address] remote-as [AS] добавляет запись в таблицу маршрутизации BGP, и в этой записи говорится о том, что peer идентифицируется его IP адресом внутри его автономной системы. Для роутеров, в которых используется EBGP, neighbors обычно соединены напрямую, и IP адрес neighbor’а — это IP адрес сетевого интерфейса граничной с вашим роутером стороны. (Исключением из этого правила является «EBGP Multihop,» который описан позднее в этом же параграфе).
Для роутеров, на которых используется IBGP, IP адресом может быть адрес любого из интерфейсов роутера в сети, которая входит в вашу AS.
Некоторые замечания к автономным системам, указанным на Figure 12-1:
* Роутеры A и B обмениваются информацией о маршрутизации по EBGP, а роутеры B и C — по IBGP. Заметим, что EBGP peers соединены непосредственно, а IBGP — нет, но поскольку между ними работает IGP, он позволяет им достигать друг друга и обмениваться информацией.
* Все роутеры, обменивающиеся BGP таблицами внутри AS, должны установить «peers relations» между собой. Это означает, что BGP speakers внутри AS должны быть логически связаны. BGP4 использует два механизма, которые облегчают выполнение требования о полной логической взаимосвязи роутеров внутри AS. Это «Confederations» и «Route Reflectors», которые описываются ниже.
* AS 200 является «транзитом» для AS 100 и AS 300; То есть AS 200 используется для транзитной передачи пакетов между AS 100 и AS 300.
Для проверки того, работают (доступны ли) BGP peers, вы можете использовать команду:
show ip bgp neighbors
для роутера «A» с рисунка, приведенного выше, вы получите следующую информацию:
RouterA# show ip bgp neighbors
BGP neighbor is 129.213.1.1, remote AS 200, external link BGP version 4, remote router ID 175.220.212.1 BGP state = established, table version = 3, up for 0:10:59 Last read 0:00:29, hold time is 180, keepalive interval is 60 seconds Minimum time between advertisement runs is 30 seconds Received 2828 messages, 0 notifications, 0 in queue Sent 2826 messages, 0 notifications, 0 in queue Connections established 11; dropped 10
state - указывает, работает и доступен ли peer с вашего роутера; Любое значение state, не совпадающее с established, означает что peer не доступен. Remote router ID - значение главного IP адреса peer раутера (или его главного loopback iface'а). table version number - каждый раз, когда в таблицу маршрутов добавляется новая информация, этот номер увеличивается на 1. Если этот номер постоянно увеличивается, это означает, что роутер "flapping", то есть его таблица маршрутизации все время получает новые значения.
Заметим, что после того, как вы изменили конфигурацию своего роутера, надо выполнить команду:
clear ip bgp [ip address]
для того, чтобы сделать reset BGP сесии с вашим peer’ом.
I.1 Internal BGP
Internal BGP (IBGP) является одной из форм протокола BGP для обмена информацией о маршрутах внутри AS. В принципе, вместо использования IBGP, информация о путях к роутерам, пришедшая по EBGP, может быть redistributed (преобразована) в IGP в пределах данной AS, а затем быть redistributed обратно в другую AS. Однако, использование IBGP является гораздо более гибким, и обеспечивает более эффективные пути для управления обменом информацией как внутри AS, так и вовне, предоставляя возможность согласовывать обмен информацией о путях к данной AS с внешними neighbors.
Например, с помощью IBGP можно управлять точкой выхода из AS.
Figure 12-2 shows a topology that demonstrates IBGP.
Figure 12-2: Internal BGP Example
Приведенные ниже команды конфигурируют Routers A and B в AS 100, и Router C в AS 400:
!Router A router bgp 100 neighbor 180.10.30.1 remote-as 100 neighbor 190.10.50.1 remote-as 100 neighbor 170.10.20.2 remote-as 300 network 150.10.0.0 !Router B router bgp 100 neighbor 150.10.30.1 remote-as 100 neighbor 175.10.40.1 remote-as 400 neighbor 180.10.30.1 remote-as 100 network 190.10.50.0 !Router C router bgp 400 neighbor 175.10.40.2 remote-as 100 network 175.10.0.0 !Router D router bgp 100 neighbor 150.10.30.1 remote-as 100 neighbor 190.10.50.1 remote as 100 network 190.10.0.0
Замечание: Когда BGP speaker принимает IBGP update’ы от других BGP speaker’ов в пределах одной AS, он передает эти update’ы только своим neighbors по EBGP.
Например, на приведенном выше рисунке, если бы не было IBGP соединения между роутерами B и D, то роутер A пересылал бы update’ы, принятые от B по IBGP, на роутер E (по EBGP). Если же вы хотите, чтобы роутер «D» принимал update’ы от роутера «B», то роутер «B» надо сконфигурировать так, чтобы роутер «D» стал его BGP peer’ом (что и сделано выше).
I.1.1 Loopback Interfaces
Loopback interfaces часто используются IBGP peer’ами. Приемущество использования loopback interfaces заключается в том, что настройка маршрутизации перестает быть связана с IP адресом физического интерфейса. При этом, даже если физический интерфейс будет down, это никоим образом не повлияет на маршрутизацию между автономными системами, т.к. он будет использовать некий псевдо-ip адрес интерфейса loopback, как идентифицирующий данный роутер.
Figure 12-3: Use of Loopback Interfaces
На приведенном выше рисунке роутеры A и B обмениваются таблицами маршрутизации по IBGP в пределах AS 100. Если при конфигурировании роутера A в качестве IP адреса neighbor’а мы укажем IP адрес одного из его eth iface’ов, то все, конечно же, будет работать. До тех пор, пока этот eth iface по каким-то причинам не упадет. Если это случится, то обмен таблицами маршрутизации, равно как и траффиком, прекратится в результате того, что станет невозможным установить TCP connection между раутерами A и B.
Поэтому, вместо того чтобы указывать IP адрес eth iface’а раутера B, мы сделаем следующее:
а) сконфигурим раутер B таким образом, чтобы он получил некоторый дополнительный IP адрес — адрес его loopback iface’а.
б) настроим обмен таблицами маршрутизации между роутерами A и B таким образом, что на роутере A в качестве IP адреса команде neighbor будет указан IP адрес loopback iface’а роутера B.
в) Роутер B сконфигурим таким образом, чтобы IP адрес выходящих с него пакетов — был IP адрес интерфейса loopback.
Конфигурация роутера «A»:
!Router A router bgp 100 neighbor 150.212.1.1 remote-as 100
Конфигурация роутера «B»:
!Router B loopback interface 0 ip address 150.212.1.1 255.255.0.0 ! router bgp 100 neighbor 190.225.11.1 remote-as 100 neighbor 190.225.11.1 update-source loopback 0
Таким образом, в конфигурации роутера A мы можем указать IP адрес loopback iface’а роутера B (150.212.1.1) в команде neighbor.
Заметим, что loopback ifaces редко используются на роутерах, которые работают по EBGP, поскольку эти роутеры и так зависят от непосредственного физического соединения друг с другом — то есть при падении одного из iface’ов на одном из роутеров связь так или иначе будет прервана, будь то eth или serail iface’ы.
I.2 External BGP
EBGP используется тогда, когда два bgp speaker’а обмениваются таблицами маршрутизации, находясь в разных AS.
В данном параграфе рассматриваются команды, с помощью которых решаются вопросы некоторой нестандартной конфигурации при обмене таблицами маршрутизации peer’ов из разных AS.
- I.2.1 EBGP Multihop
- I.2.2 EBGP Load Balancing
- I.2.3 Synchronization
I.2.1 EBGP Multihop
Multihop используется только с EBGP.
Обычно оба EBGP speaker’а связаны друг с другом через wide-area network (WAN). Однако, иногда требуется настроить обмен трафиком между двумя AS, которые не являются соединенными непосредственно.
На рисунке 12-4 приведена топология сети, в которой полезно использовать команду neighbor ebgp-multihop.
Figure 12-4: EBGP Multihop
Заметим, что соединение A — B может быть не непосредственным в данном случае.
Рассмотрим конфигурацию EBGP на роутере «A»:
!Router A loopback interface 0 ip address 129.213.1.1 ! router bgp 100 neighbor 180.225.11.1 remote-as 300 neighbor 180.225.11.1 ebgp-multihop neighbor 180.225.11.1 update-source loopback 0
!Router B loopback interface 0 ip address 180.225.11.1 router bgp 300 neighbor 129.213.1.1 remote-as 100 neighbor 129.213.1.1 ebgp-multihop neighbor 129.213.1.1 update-source loopback 0
В обоих случаях (и в конфигурации роутера A, и в B) команда
neighbor [ip address] ebgp-multihop
означает тот факт, что для достижения соседней AS _следующим шагом_ будет [ip address], указанный в данной команде neighbor, а не ip адрес сетевого интерфейса AS.
Замечание: В случае, когда взаимодействуют два роутера, принадлежащие разным автономным системам, и не являющиеся соединенными непосредственно, требуется прописывать маршрут к «следующему hop’у». Как это делать — будет рассказано немного позже.
I.2.2 EBGP Load Balancing
Команда neighbor ebgp-multihop, и возможность использования такого понятия, как loopback interface, позволяют конфигурировать load balancing между разными автономными системами, которые соединены между собой по serial lines.
Figure 12-5: Load Balancing over Parallel Serial Lines
!Router A interface loopback 0 ip address 150.10.1.1 255.255.255.0 ! router bgp 100 neighbor 160.10.1.1 remote-as 200 neighbor 160.10.1.1 ebgp-multihop neighbor 160.10.1.1 update-source loopback 0 network 150.10.0.0 ! ip route 160.10.0.0 255.255.0.0 1.1.1.2 ip route 160.10.0.0 255.255.0.0 2.2.2.2
Следующие команды конфигурируют Load Balancing для роутера «B»:
!Router B interface loopback 0 ip address 160.10.1.1 255.255.255.0 ! router bgp 200 neighbor 150.10.1.1 remote-as 100 neighbor 150.10.1.1 ebgp-multihop neighbor 150.10.1.1 update-source loopback 0 network 160.10.0.0 ! ip route 150.10.0.0 255.255.0.0 1.1.1.1 ip route 150.10.0.0 255.255.0.0 2.2.2.1
Команды neighbor ebgp-multihop и neighbor update-source позволяют установить next-hop’ом loopback iface для EBGP, это позволяет настроить и использовать load balancing. Статические роуты используются для того, чтобы сети соседней AS были доступны по каждому из них. Итак, роутер «A» может достичь next hop 160.10.1.1, используя один из путей: через реальный serial interface 1.1.1.2, или 2.2.2.2; Аналогично, роутер «B» может достичь next hop 150.10.1.1 одним из двух путей, через любой из реальных serial interface’ов «A»: а именно через 1.1.1.1 или через 2.2.2.1
Тот же самый результат можно получить, настроив IGP.
Когда наша AS обеспечивает transit service информации в другую автономную систему, и если в нашей AS присутствуют роутеры, на которых не поддерживается BGP, transit traffic может быть утерян в случае, если на одном из промежуточных не-BGP роутеров неизвестен IGP маршрут к удаленной автономной системе.
Figure 12-6: Synchronization
Ключевой момент: роутеры «A» и «B» проводами не связаны, они связаны только логически по IBGP; Траффик же идет через роутер «E», который не поддерживает IBGP, но зато работает по IGP. Этот роутер «E» внутри AS100 и надо научить маршрутам, проходящим через AS100 — иначе весь трафик по этим маршрутам, идущий через «E», будет утерян.
Допустим, роутер C отправляет update’ы, содержащие маршрут к сети 170.10.0.0, роутеру A. Поскольку A и B взаимодействуют по IBGP, то роутер B получает информацию о пути к сети 170.10.0.0 через IBGP.
Если роутер B захочет обратиться к сети 170.10.0.0, он отправит трафик роутеру E. Но, если роутер A не делает redistribute маршрутов в IGP (в-частности, о сети 170.10.0.0), роутер E не будет знать путей для достижения сети 170.10.0.0 и пакеты будут утеряны.
Если роутер «B» передаст маршруты в AS 400, и хосты этой автономной системы попробуют обратиться к сети 170.10.0.0 до того, как роутер «E» узнает об этой сети по IGP, траффик пришедший от «D» к «B» с destination 170.10.0.0 и направленный на «E» будет утерян (dropped).
Данная ситуация разрешается с помощью правила синхронизации обмена путями по BGP, которое (разберем на нашем примере) заключается в том, что если AS100 передает траффик от одной системы (300) к другой (400), роутер промежуточной (100) автономной системы не будет принимать маршруты по BGP от граничных AS (например, информацию 170.10.0.0) до тех пор, пока все роутеры той AS, к которой он принадлежит (и через которые в результате пойдет трафик на 170.10.0.0) не узнают о сети 170.10.0.0 по _IGP_ (в конечном счете, в результате трансляци BGP table —> IGP table). То есть, роутер «B» передаст информацию о маршрутах к сети 170.10.0.0 на роутер «D» AS400 только после того, как сеть 170.10.0.0 станет доступна внутри AS100 через протокол IGP.
Заметим, что при выполнении некоторых условий (они описаны ниже) можно отключить синхронизацию, которая на самом деле замедляет скорость передачи данных:
*) Если ваша AS не передает трафик от одной чужой AS к другой AS.
*) Все transit routers в вашей AS поддерживают BGP.
Figure 12-7 На приведенном ниже рисунке рассматривается ситуация, в которой можно отключить synchronization.
Figure 12-7: Disabled Synchronization
!Router A network 150.10.0.0 neighbor 3.3.3.4 remote-as 100 neighbor 2.2.2.1 remote-as 300 no synchronization !Router B router bgp 100 network 150.10.0.0 neighbor 1.1.1.2 remote-as 400 neighbor 3.3.3.3 remote-as 100 no synchronization !Router D router bgp 400 neighbor 1.1.1.1 remote-as 100 network 175.10.0.0
Команда «no synchronisation» означает, что роутер «B» добавит в свою таблицу маршрутов информацию с роутера «C» о сети 170.10.0.0 и передаст эту информацию на роутер «D» другой AS 400 без того, чтобы сначала убедиться в том, что маршрут к сети 170.10.0.0 в пределах AS 100 стал известен по IGP.
I.3 BGP and Route Maps
Route Maps используются в BGP для управления таблицами маршрутов и указания условий, при выполнении которых маршруты передаются между доменами. Формат route map следующий:
route-map map-tag [[permit | deny] | [sequence-number]]
map tag - это имя, которое идентифицирует route map; sequence number - идентифицирует положение данного правила в route map относительно других правил в том же самом route map.
Например, вы можете использовать следующие команды конфигурации роутера для определения route map с именем MYMAP:
route-map MYMAP permit 10 ! здесь будет набор правил, которые выполнятся первыми route-map MYMAP permit 20 ! а здесь - набор правил, которые выполнятся в том случае, ! если не выполнятся правила, указанные в разделе с sequence number = 10
Когда BGP применяет MYMAP к routing updates, первым выполняется правило с наименьшим номером. Команда «match» указывает критерий, равенство которому должно проверяться, а команда «set» указывает действие, которое должно быть выполнено над маршрутом, если в таблице встречается правило, подходящие под условие match.
Простой пример route map:
route-map MYMAP permit 10 match ip address 1.1.1.1 set metric 5
в нашем простом примере, если в updat’е таблицы маршрутизации встречается IP адрес 1.1.1.1, BGP устанавливает этому update’у (вернее, той записи, которая встретилась в таблице маршрутизации и удовлетворила нашему критерию «match») значение metric = 5 (его смысл будет рассмотрен ниже). После чего update пересылается neighbor’у, который указан в строке, например, следующего вида:
neighbor 1.2.3.4 route-map MYMAP out,
поскольку в описании самого набора правил route-map стоит слово permit.
После этого набор route-map’ов с бОльшими sequence numbers не рассматривается, естественно.
В том случае, когда update не встречает подходящий критерий «match», BGP использует правило из route-map с бОльшим номером, и так далее. Если ни один из критериев не подходит, то update _не передается дальше_.
В том случае, когда update удовлетворяет критерию, указанному в match, а route-map содержит ключевое слово «deny», BGP также заканчивает обработку списка критериев, и update не передается дальше.
Замечание: Route map не может быть использован для фильтрации incoming BGP update’ов, основываясь на IP адресе. Однако, вы можете управлять outgoing update’ами, используя в качестве критерия сравнение IP адреса в правиле match.
Figure 12-8: Route Map Example
На этом рисунке роутеры «A» и «B» в качестве протокола маршрутизации между собой используют RIP. Роутеры «A» и «C» — BGP. Например, если вы захотите, чтобы роутер «A» передавал на «B» информацию о маршрутах к сети 170.10.0.0 с метрикой 2, а все остальные пути — с метрикой 5, роутер «A» должен быть сконфигурирован следующим образом:
!Router A router rip network 3.0.0.0 network 2.0.0.0 network 150.10.0.0 passive-interface serial 0 redistribute bgp 100 route-map SETMETRIC ! router bgp 100 neighbor 2.2.2.3 remote-as 300 network 150.10.0.0 ! route-map SETMETRIC permit 10 match ip-address 1 set metric 2 ! route-map SETMETRIC permit 20 set metric 5 ! access-list 1 permit 170.10.0.0 0.0.255.255
Итак, если передаваемый через роутер «A» путь встречает IP адрес 170.10.0.0,
то дальше он передается с metric 2;
Если ip address передаваемого через роутер «A» пути не равен 170.10.0.0,
то далее он передается с метрикой 5.
Предположим, что на роутере «C» (рис. выше) вы хотите установить community attribyte=300 для outgoing updates о сети 170.10.0.0
!Router C router bgp 300 network 170.10.0.0 neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 route-map SETCOMMUNITY out ! route-map SETCOMMUNITY permit 10 match ip address 1 set community 300 ! access-list 1 permit 0.0.0.0 255.255.255.255
Access list 1 запрещает какие бы то ни было update’ы для сети 170.10.0.0 и разрешает update’ы для всех других сетей.
Q/ERROR: . Наверное, надо добавить строки
access-list 1 permit 170.10.0.0 0.0.255.255 access-list 2 deny 0.0.0.0 255.255.255.255
вместо той, которая используется выше, а так же расписать
route-map SETCOMMUNITY permit 10/20 соответственно.
Задача-то заключалась в том, чтобы присвоить community для outgoing updates о сети 170.10.0.0.
Advertising Networks
Сети, которые расположены внутри данной AS, будем называть «originate» , то есть включенными в данную AS. Для информирования других автономных систем о сетях, которые включает данная AS, данная AS должна анонсировать эти сети во внешний мир. То есть передавать маршруты об этих сетях тем AS, которые являются neighbors.
Протокол BGP поддерживает три пути, с помощью который AS может анонсировать данные сети во внешний мир. А именно:
- Redistributing Static Routes
- Redistributing Dynamic Routes
- Using the network Command
Важно помнить , что пути, которые мы анонсируем таким образом, являются дополнением к другим путям в таблице маршрутизации BGP, которые роутер узнал по протоколу bgp от своих внутренних и внешних соседей (neighbors).
BGP всегда передает имеющуюся у него информацию от одного peer’а к другим peer’ам. Разница заключается в том, что пути, полученные с помошью команд «network» и «redistribute» , указывают, что AS данного роутера является originating для данной сети
В данном параграфе мы рассмотрим сеть, которая показана на рис. ниже:
Figure 12-9: Network Advertisement Example 1
I.4.1 Redistributing Static Routes
Итак, один из путей анонсирования сети (или подсети), которая включена в AS — это redistribute static routes into BGP. Разница между redistribute static и redistribute dynamic routes заключается лишь в том, что в случае redistribute static route, BGP устанавливает флаг origin attribute (в таблице BGP маршрутов) для данного пути равным «?», то есть «Incomplete».
Замечание: другие значения флага Origin Attribute рассмотрены ниже, в главе «Origin Attribute,»
Итак, для конфигурирования роутера «C» на приведенном выше рисунке, как роутера, который включает путь к сети 175.220.0.0 в BGP, используются следующие команды:
!Router C router bgp 200 neighbor 1.1.1.1 remote-as 300 redistribute static ! ip route 175.220.0.0 0.0.255.255 null 0
Команда роутера redistribute static означает, что все статические маршруты будут redistribute в BGP. А статические маршруты, как видим, прописываются командой «ip route» , которая также присутствует в конфигурации Router’а C.
Команда роутера ip route устанавливает статический маршрут для сети 175.220.0.0; Теоретически, указание «null 0» интерфейса означает, что пакеты, предназначенные для сети 175.220.0.0, будут потеряны. На практике же, условие «ip route 175.220.0.0 0.0.255.255 null 0» представляет собой довольно специфическое правило для пакетов, предназначенных любой другой сети, кроме как 175.220.0.0, и роутер отправит эти пакеты мимо соответствующего интерфейса.
Note: Рекламирование сетей с помощью статической маршрутизации — это лучший путь для анонсирования сетей, поскольку он предотвращает пути от роутеров, которые могут быть подверженымогут быть подвержены «flapping».
Заметим в любом случае, что команда конфигурации роутера «redistribute» (будь то static или dynamic) является лишь способом, которым BGP роуты добавляются в маршруты IGP route table.
Q/ERROR: А не наоборот — IGP в BGP? A:
I.4.2 Redistributing Dynamic Routes
Другой путь анонсирования своих сетей — это redistribute dynamic routes. В этом случае вы делаете redistribute IGP routes (полученных по таким протоколам, как Enhanced IGRP, IGRP, IS-IS, OSPF и RIP) в BGP. Некоторые из этих IGP роутов могли быть получены и из BGP, поэтому при использовании динамического redistributing’а of маршрутов вам требуется настраивать access-lists для предотвращения пере-редистрибьюции маршрутов, пришедших откуда-то по bgp, оттранслированных в igp — обратно в BGP.
Предположим, что на рисунке выше, Routes B и C работают по IBGP, что роутер «C» имеет информацию о сети 129.213.1.0 (полученную по bgp), и что роутер «B» делает redistributing 129.213.1.0 обратно в Enhanced IGRP. Итак, конфигурим роутер «C» следующим образом:
!Router C ! router eigrp 10 network 175.220.0.0 redistribute bgp 200 --> в eigrp redistribute connected default-metric 1000 100 250 100 1500 ! router bgp 200 neighbor 1.1.1.1 remote-as 300 neighbor 2.2.2.2 remote-as 200 neighbor 1.1.1.1 distribute-list 1 out redistribute eigrp 10 ! access-list 1 permit 175.220.0.0 0.0.255.255
Итак, что мы имеем выше: команда «redistribute eigrp 10» делает redistribute (попросту говоря, преобразование) таблиц маршрутизации протокола Enhanced IGRP for your process ID 10 в BGP.
Примечание: Обычно преобразований BGP --> IGP следует опасаться, по причине включения очень большого количества путей в таблицу IP маршру- тизации.
Далее. Команда конфигурации роутера «neighbor 1.1.1.1 distribute-list 1 out» применяет access-list 1 для выходящих анонсируемых этим роутером путей одному из своих neighbor’ов: 1.1.1.1 (Router D). Acess list 1 указывает, что сеть 175.220.0.0 будет анонсирована. Все другие сети, такие как 129.213.1.0, подразумеваются защищеными от анонсирования. Access list запрещает обратное ре-транслирование сети 129.213.1.0 в BGP, чтобы она не выглядела originated AS 200, и позволяет BGP анонсировать сеть 175.220.0.0, как сеть AS 200.
Примечание: Redistribution of dynamic routes требует осторожности в использовании access lists для предотвращения попадания некоторых путей, пришедших по BGP, обратно в BGP. Когда это возможно, вам следует использовать команду "network" (она описана позднее в этом параграфе) или команду "redistribute static" вместо redistribute dynamic routes.
I.4.3 Using the network Command
Другой путь для анонсирования сетей — это использование команды «network» . Когда команда network используется с BGP, в качестве ее аргумента указывается сеть, которая будет анонсироваться данной AS, как входящая в нее. (Для сравнения: когда эта команда используется с одним из IGP протоколов, например с RIP’ом, команда network идентифицирует интерфейс, с которым работает IGP). Команда network работает и для сетей, о которых роутер узнал динамически, и для сетей, пути к которым сконфигурены с помощью команд статической маршрутизации. Origin attribute маршрутов, который присутствует в таблице маршрутизации в результате выполнения команды конфигурации network , равен «i» , то есть IGP.
Команды, приводимые ниже, конфигурируют роутер «C» для того, чтобы он анонсировал сеть 175.220.0.0:
!Router C router bgp 200 neighbor 1.1.1.1 remote-as 300 network 175.220.0.0
Команда network в данном случае означает, что Router «C» генерирует запись в таблице BGP маршрутизации о сети 175.220.0.0.
На рисунке 12-10 показана другая топология сети, в которой также используется команда network:
Figure 12-10: Network Advertisement Example 2
!Router A router bgp 100 neighbor 150.10.20.2 remote-as 300 network 150.10.0.0 !Router B router bgp 200 neighbor 160.10.20.2 remote-as 300 network 160.10.0.0 !Router C router bgp 300 neighbor 150.10.20.1 remote-as 100 neighbor 160.10.20.1 remote-as 200 network 170.10.0.0
Для того, чтобы быть увереным в отсутствии зацикливаний (loop-free interdomain topology), BGP не принимает updates, которые originates from its own AS. Поясним: на приведенном выше рисунке, если Router A генерирует updates о сети 150.10.0.0 с услановленным origin в значение AS100, и отправлет эти updates роутеру C, то роутер C передаст updates роутеру B с тем же самым origin’ом AS100. Когда роутер B отправит свои updates роутеру A, тот признает свои собственные updates и игнорирует их.
II. BGP Decision Algorithm
BGP speaker - это роутер, который обмениваются маршрутами с другим роутером (тоже с BGP speaker'ом) по протоколу BGP.
Итак, когда BGP speaker принимает updates от нескольких AS, и в каждом из этих updates содержатся различные пути к одной и той же точке в Inet, встает вопрос о выборе оптимального маршрута к этой точке, будь то автономная система, или сеть, или конкретный хост с IP адресом. Выбрав оптимальный путь в некоторую точку, роутер рассказывает совим соседям об этом пути.
Алгоритм выбора оптимального пути базируется на нескольких параметрах (next hop, administrative weights, local preference, origin of the route, path lenght и др.), которые содержатся в update’е, а так же на некоторых других факторах, устанавливаемых при конфигурации BGP peer’ов.
Эта глава описывает следующие атрибуты и факторы, которые использует BGP в процессе принятия решения о наилучшем пути к некоторой точке в сети.
- II.1 AS_path Attribute
- II.2 Origin Attribute
- II.3 Next Hop Attribute
- II.4 Weight Attribute
- II.5 Local Preference Attribute
- II.6 Multi-Exit Discriminator Attribute
- II.7 Community Attribute
Итак, рассмотрим все перечисленные выше факторы по очереди.
II.1 AS_path Attribute
Всякий раз, когда updates передаются через AS, BGP добавляет AS number к update’у. AS path attribute — это список номеров автономных систем, через которые update прошел (а, следовательно, пройдет и дейтаграмма) в процессе достижения своей цели. AS-SET — набор чисел, а именно номеров автономных систем, которые были пройдены update’ом.
Рассмотрим сеть, которая показана на Figure 12-11.
Figure 12-11: AS_path Attribute
На этом рисунке роутер B анонсирует сеть 190.10.0.0 как входящую в AS 200 и в этом случае AS_path равен 200. Когда update о 190.10.0.0 передается в соседнюю AS 300, роутер C добавляет номер своей AS (а именно, 300) к AS_path, и таким образом, когда update достигнет роутера A, два номера AS будут прицеплены к нему: 200 и 300. Таким образом, AS_path attribute для достижения сети 190.10.0.0 из роутера A — это 300, 200. Аналогично, AS_path для достижения сети 170.10.0.0 с роутера B — это 300, 100.
II.2 Origin Attribute
Origin attribute содержит информацию о том, кто является «хозяином» данного пути. То есть кто инициировал запись в таблице BGP маршрутизации о данном конкретном пути.
Origin attribute может принимать одно из трех значений:
IGP - route является _внутренним_ по отношению к данной AS. Это значение i устанавливается как атрибут записи в таблице маршрутизации в том случае, когда роутер использует команду "network" для добавления данного пути в таблицу BGP маршрутизации. IGP origin type представлен буковкой "i" в результатах shop ip bgp команды.
EGP - информация о данном пути получена через Exterior Gateway Protocol e (EGP). EGP origin type представлен буковкой "e" в выводе show ip bgp.
Incomplete - origin of route неизвестен или получен каким-то третьим ? (не одним из опинанных выше) способом. А так же origin incomplete имеет место в тех случаях, когда route получен путем преобразования маршрута (например, полученного из записи о статической маршрутизации как redistribute static) в BGP. В этом случае origin attribute выглядит как "?".
Figure 12-12: Origin Attribute
Роутеры конфигурятся следующими командами:
!Router A router bgp 100 neighbor 190.10.50.1 remote-as 100 neighbor 170.10.20.2 remote-as 300 network 150.10.0.0 redistribute static ! ip route 190.10.0.0 255.255.0.0 null 0 !Router B router bgp 100 neighbor 150.10.30.1 remote-as 100 network 190.10.50.0 !Router E router bgp 300 neighbor 170.10.20.1 remote-as 100 network 170.10.0.0
Исходя из данной конфигурации, получаем следующие значения AS_path и Origin attribute в таблице маршрутизации:
1. в BGP route table на роутере A путь достижения сети 170.10.0.0 имеет AS_path 300 и Origin attribute «IGP» (поскольку для анонсирования своей сети роутер «E» использует команду network 170.10.0.0).
2. в BGP route table на роутере A путь к сети сеть 190.10.50.0 имеет AS_path=пусто, и Origin attribute = «IGP» (по той же причине).
3. в BGP route table на роутере E путь к сети 150.10.0.0: AS_path=100, Orig. attr = «IGP» (по той же причине).
4. в BGP route table на роутере E путь к 190.10.0.0: AS_path=100, Orig. attr. = Incomplete (тк на «A» данная сеть анонсируется через «redistribute route».
II.3 Next Hop Attribute
В BGP понятие «Next Hop Attribute» означает IP адрес роутера, который будет следующим в цепочке роутеров на пути достижения дейтаграммой конечной точки.
Естественно, что для EBGP понятие «next hop» — это IP адрес neighbor’а, который указан в конфигурации нашего роутера командой:
neighbor [ip_addr] remote-as [as]
Исключением является тот случай, когда имеем дело с Multiaccess Media, (тогда nexp hop должен быть IP address роутера в данной подсети).
Figure 12-13: Next Hop Attribute
На приведенном выше рисунке роутер «C» анонсирует сеть 170.10.0.0 роутеру «A» с next hop attribute 170.10.20.2. А роутер «A» анонсирует 150.10.0.0 роутеру «C» с next hop = 170.10.20.1.
Небольшое пояснение: на таблицу маршрутизации надо смотреть со стороны того роутера, на котором она имеет место быть; Для того, чтобы с роутера «C» увидеть сеть 150.10.0.0, надо обратиться к роутеру «A» (его ip address 170.10.20.1). Для этого роутер «A» и анонсирует сеть своей AS, указывая next hop _для таблицы роутера «C»_ как 170.10.20.1;
Заметим, что есть такое правило: next hop маршрута, полученного по EBGP, передается без изменения в IBGP.
А именно: роутер «A» анонсирует сеть 170.10.0.0 своему IBGP peer’у — роутеру «B» с next hop attribute 170.10.20.2, поэтому в таблице маршрутизации на роутере «B» путь к данной сети будет иметь next hop’ом исходный 170.10.20.2, вместо 150.10.30.1 (который должен был бы быть по логике вещей). Из-за этого надо быть совершенно уверенными, что роутер «B» может достичь 170.10.20.2 через IGP (например, через RIP). Иначе роутер «B» потеряет пакеты, предназначенные для 170.10.0.0.
Например, если роутер «B» работает по IGRP, то роутер «A» должен поддердивать IGRP для сети 170.10.0.0; Конечно, вы можете захотеть отключить IGRP на линке к «C» и тогда «A» и «C» будут обмениваться только BGP update’ами.
Следующие команды используются для конфигурации роутеров с приведенного выше рисунка:
!Router A router bgp 100 neighbor 170.10.20.2 remote-as 300 neighbor 150.10.50.1 remote-as 100 network 150.10.0.0 !Router B router bgp 100 neighbor 150.10.30.1 remote-as 100 !Router C router bgp 300 neighbor 170.10.20.1 remote-as 100 network 170.10.0.0
Заметим, что Router «C» анонсирует сеть 170.10.0.0 роутеру «A» с next hop attribute 170.10.20.2, а роутер «A» в свою очередь анонсирует (как бы передает) эту сеть 170.10.0.0 роутеру «B» с исходным next hop attr. 170.10.20.2 (собственно, эти слова — всего лишь повторение того, что уже сказано выше). Итак, next hop путей, полученных по EBGP, передается без изменения IBGP neighbor’ам.
II.3.1 Next Hop Attribute and Multiaccess Media
При работе в Multiaccess Media, например в Ethernet сети, BGP может устанавливать значение next hop attribute по-другому.
Figure 12-14: Next Hop Attribute and Multiaccess Media
Сразу заметим, что роутеры A,C,D находятся в одной _подсети_. Это важно. Итак, пусть C и D обмениваются таблицами маршрутизации по протоколу OSPF, и кроме этого роутер C обменивается таблицами маршрутизации с роутером A по протоколу BGP. Роутер C может может достичь сеть 180.20.0.0 через 170.10.20.3; Когда C отправляет BGP update’ы роутеру A о пути, по которому доступна сеть 180.20.0.0, он указывает в качестве next hop адрес 170.10.20.3, вместо своего собственного адреса 170.10.20.2 — это делается потому, что все три роутера находятся в одной и той же подсети, и роутеру «A» будет более очевидно использовать для достижения сети 180.20.0.0 адрес роутера D: 170.10.20.3.
Next Hop Attribute and Nonbroadcast Media Access
На рисунке 12-15 три сети соединены в Nonbroadcast Media Access (NBMA), такой как Frame Relay.
Figure 12-15: Next Hop Attribute and Nonbroadcast Media Access
Если роутеры A,C,D используют общую схему обмена данными, такую как Frame Relay (или любой из NBMA), то роутер «C» анонсирует сеть 180.20.0.0 роутеру «A» со значением next hop 170.10.20.3, точно так же так если бы эти роутеры были включены в сеть Ethernet. Но, в данном случае есть одна проблема: она заключается в том, что роутер «A» не имеет постоянного прямого соединения с роутером «D» (это называется «direct Permanent Virtual Connection, или PVC) и не может достичь этого самого next hop’а, который ему указан в таблице маршрутизации. Таким образом, маршрутизация не работает. Для решения данной проблемы, используется команда роутера:
next-hop-self
Итак, конфигурация роутера «C»:
!Router C router bgp 300 neighbor 170.10.20.1 remote-as 100 neighbor 170.10.20.1 next-hop-self
Последяя из приведенных выше команд указывает роутеру «C», что надо анонсировать сеть 180.20.0.0 со значением next-hop-attribute равным 170.10.20.2.
II.4 Weight Attribute
Weight attribute - это специальный атрибут, который используется роутерами Cisco в процессе выбора наилучшего пути к какому-то роутеру, или сети - если к нему ведет больше одного пути. Значение "weight attribute" является локальным для роутера, на котором оно устанавливается. Это значение не передается по таблицам маршрутизации на другие роутеры.
По умолчанию, значение weight attribute = 32768 для тех путей, которые берут начало на данном роутере, и 0 — для всех остальных путей.
Пути (маршруты) с бОльшим «weight» являются предпочтительными, когда есть несколько путей до какой-то точки в inet.
Рассмотрим сеть, показанную на рис. 12-16.
Figure 12-16: Weight Example
На данном рисунке роутеры «A» и «B» узнают о сети 175.10.0.0 от AS 400, и каждый из роутеров передает updates об этой сети на роутер «C». Таким образом, в таблице маршрутов на роутере «C» появляются два пути для достижения сети 175.10.0.0; и этот роутер должен выбрать, какой из маршрутов ему использовать. Поэтому на роутере «C» устанавливаем весовые коэффициенты для обоих маршрутов к 175.10.0.0 (пришедших соответственно от «A» и «B»). Причем, если установить weight больше для updates, пришедших с «A», то «C» будет использовать в качестве next hop’а для достижения 175.10.0.0 роутер «A». Если же на «C» установить weight для маршрутов, пришедших с «B» больше, то маршрутизация к данной сети пойдет через «B».
Существуют три способа, с помощью которых на «C» можно установить «weight» для update’ов, пришедших с роутера «A»:
- II.4.1 Использование Access List для установки Weight Attribute
- II.4.2 Использование a Route Map для установки Weight Attribute
- II.4.3 Использование the neighbor weight Command для установки Weight Attribute
II.4.1 Использование Access List для установки Weight Attribute
Приведенные ниже команды конфигурации роутера «C» используют access-lists и значение AS_path для присваивания router updates коэффициента «weight».
!Router C router bgp 300 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 filter-list 5 weight 2000 neighbor 2.2.2.2 remote-as 200 neighbor 2.2.2.2 filter-list 6 weight 1000 ! ip as-path access-list 5 permit ^100$ ip as-path access-list 6 permit ^200$
В данном примере весовой коэффициент 2000 присваивается всем update’ам, пришедшим от neighbor’а с IP адресом 1.1.1.1 — это устанавливается в access-list’е 5. Этот access-list 5 разрешает (тк стоит permit) update’ы, у который AS_path начинается с 100 (см «^») и заканчивается 100 (см «$»).
Заметим, что символы ^ и $ используются в regular expressions, и если вы хотите познакомиться с ними поближе, обратитесь к приложению о Regular Expressions в Cisco Internetwork Operating System (Cisco IOS) software configration guide and command references.
В приведенном выше примере весовой коэффициент 1000 присваивается всем update’ам от neighbor’а 2.2.2.2 — это описано в acess-list’е 6. Access list 6 разрешает все update’ы, чьи AS_path начинаются с 200 и заканчиваются 200 (т.е. содержат только одно значение AS 200 в AS_path).
В результате данной конфигурации весовой коэффициент 2000 присваивается всем route update’ам, пришедшим от AS 100, и весовой коэффициент 1000 присваивается всем update’ам, пришедшим от AS 200.
II.4.2 Using a Route Map to Set the Weight Attribute
Приведенные ниже команды конфигурации роутера «C» используют route map для присваивания weight attribute приходящим на данный router update’ам.
!Router C router bgp 300 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 route-map SETWEIGHTIN in neighbor 2.2.2.2 remote-as 200 neighbor 2.2.2.2 route-map SETWEIGHTIN in ! ip as-path access-list 5 permit ^100$ ! route-map SETWEIGHTIN permit 10 match as-path 5 set weight 2000 route-map SETWEIGHTIN permit 20 set weight 1000
В данном случае первый набор правил (permit 10) устанавливает weight attr. равным 2000 для всех update’ов, пришедших с AS 100 (и имеющих AS_path=100), а второй набор правил (permit 20) устанавливает weight = 1000 всем остальным update’ам (в том числе и с AS200, что и требовалось выше).
II.4.3 Using the neighbor weight Command to Set the Weight Attribute
!Router C router bgp 300 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 weight 2000 neighbor 2.2.2.2 remote-as 200 neighbor 2.2.2.2 weight 1000
Данная конфигурация устанавливает weight 2000 для всех маршрутов, пришедших _от_ AS100, и weight 1000 для всех маршрутов, пришедших _от_ AS200.
Разумеется, поскольку weight для маршрутов, пришедших от AS100, выше, то роутер «C» будет обмениваться трафиком с роутером 1.1.1.1 AS100 с бОльшим приоритетом.
II.5 Local Preference Attribute
Когда для доступа к некоторой точке сети существует несколько путей, local preference attribute указывает наилучший путь. Чем больше local preference для данного конкретного пути, тем выше его приоритет. Значение local preference по умолчанию — 100. В отличие от weight attribute, который относится только к данному локальному роутеру, local preference является частью routing update и имеет силу при обмене маршрутами среди роутеров в пределах одной AS (на той AS, на одном из роутеров которой lpref установлен).
Figure 12-17: Local Preference
Итак, AS256 получает route updates о пути к сети 170.10.0.0 от AS100 и AS300. Есть два способа установить local preference:
- II.5.1 Using the bgp default local-preference Command
- II.5.2 Using a Route Map to Set Local Preference
Рассмотрим сначала первый способ, как самый простой (но не самый лучший).
II.5.1 Using the bgp default local-preference Command
Итак, в приведенной ниже конфигурации роутеров «C» и «D» используется команда bgp default local-preference [n]
!Router C router bgp 256 neighbor 1.1.1.1 remote-as 100 neighbor 128.213.11.2 remote-as 256 bgp default local-preference 150 !Router D router bgp 256 neighbor 3.3.3.4 remote-as 300 neighbor 218.213.11.1 remote-as 256 bgp default local-preference 200
Конфигурация роутера «C» при помощи bgp default local-preference означает, что все update’ы от AS300 получат lpref=150. Конфигурация роутера «D» означает, что всем update’ам с AS100 устанавливается lpref =200.
Поскольку маршруты внутри AS обмениваются по IBGP (между роутерами «C» и «D»), то оба этих роутера определят (исходя из значения lpref передаваемых между ними маршрутов), что наилучший маршрут к 170.10.0.0 — через роутер «B» в AS300.
II.5.2 Using a Route Map to Set Local Preference
Использование route-map предоставляет больше гибкости, чем использование bgp default local preference , поскольку если при использовании bgp default local preference на «D» все пути, прошедшие через роутер «D» (например) приобретают значение lpref = 200, в том числе и update’ы с AS 34. А при использовании route-map можно указать, каким именно автономным системам добавлять lpref, а каким — нет.
Рассмотрим конфигурацию роутера «D», при которой lpref устанавливается только для update’ов, полученных от AS 300.
!Router D router bgp 256 neighbor 3.3.3.4 remote-as 300 neighbor 3.3.3.4 route-map SETLOCALIN in - Q/ERROR: в оригинале не было "neighbor" neighbor 128.213.11.1 remote-as 256 ! ip as-path access-list 7 permit ^300$ - Q/ERROR: в оригинале не было "access-list" ! route-map SETLOCALIN permit 10 match as-path 7 set local-preference 200 ! route-map SETLOCALIN permit 20 ! пусто
В соответствии с данной конфигурацией, local preference attribute всех пришедших от AS 300 update’ов будет установлен равным 200. Правило «20» в SETLOCALIN предназначено для того, чтобы принимать updates от всех остальных роутеров.
II.6 Multi-Exit Discriminator Attribute
Multi-Exit Descriminator Attribute — это способ указания наилучшего пути своим внешним neighbor’ам.
Меньшее значение MED является более предпочтительным. Значение по умолчанию = 0.
Примечание: в BGP Version 3 MED называется Inter-AS_Metric.
В отличие от Local Preference (когда обмен lpref’ами происходит в пределах одной AS) использование MED ведет к тому, что эта характеристика передается между автономными системами. Но — с одним ограничением, а именно — MED’ы передаются на _соседнюю_ AS, но не передаются за ее пределы (вернее, при передаче за пределы системы, получившей MED, это значение обнуляется).
Если отдельно не обговорено, роутер сравнивает MED attributes с путями от внешних neighbor’ов, которые принадлежат одной и той же AS (от C и D, например). Если же вы хотите сравнивать MED attributes между автономными системами, нужно в конфигурации роутера (на котором хотите включить такое сравнение) использовать следующую команду:
bgp always-compare-med.
Figure 12-18: MED Example
Суть: с помощью коэффициента MED, заданного на роутерах, которые анонсируют сеть 180.10.0.0 или просто передают update’ы о этой сети, пришедшие от своих соседей, можно указать наилучший путь к этой сети через один из роутеров.
Рассмотрим конфигурацию всех четырех роутеров.
!Router A router bgp 100 neighbor 2.2.2.1 remote-as 300 neighbor 3.3.3.3 remote-as 300 neighbor 4.4.4.3 remote-as 400 !Router B router bgp 400 neighbor 4.4.4.4 remote-as 100 neighbor 4.4.4.4 route-map SETMEDOUT out neighbor 5.5.5.4 remote-as 300 ! route-map SETMEDOUT permit 10 set metric 50 !Router C router bgp 300 neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 route-map SETMEDOUT out neighbor 5.5.5.5 remote-as 400 neighbor 1.1.1.2 remote-as 300 ! route-map SETMEDOUT permit 10 set metric 120 !Router D router bgp 300 neighbor 3.3.3.2 remote-as 100 neighbor 3.3.3.2 route-map SETMEDOUT out neighbor 1.1.1.1 remote-as 300 ! route-map SETMEDOUT permit 10 set metric 200
По умолчанию, BGP сравнивает параметр MED в таблице маршрутизации для маршрутов, пришедших от neighbor’ов, которые принадлежат одной и той же AS (не той, в которой находится роутер, а см. рис.). В нашем примере это AS 300. В этом случае роутер «A» может сравнивать MED attributes в роутах, пришедших от «C» (MED = 120) и «D» (MED = 200). И не обращает внимания на то, что update’ы, пришедшие от «B», имеют более низкий MED.
Итак, роутер «A» выберет роутер «C» как best path для достижения сети 180.10.0.0; Для того, чтобы заставить роутер «A» сравнивать MED’ы для update’ов с роутера «B» (который не принадлежит той же AS, что и C и D), используется команда bgp always-compare-med:
!Router A router bgp 100 neighbor 2.2.2.1 remote-as 300 neighbor 3.3.3.3 remote-as 300 neighbor 4.4.4.3 remote-as 400 bgp always-compare-med
Итак, после этого роутер «A» выберет путь к сети 180.10.0.0 через роутер «B», тк MED для путей, анонсируемых роутером «B» роутеру «A», наименьший. Конечно, это имеет место в том случае, когда все остальные атрибуты для сравнения путей (lpref, weight, etc) являются одинаковыми.
Вы можете также установить MED attribute и в случае redistributing routes into BGP. Например, на роутере «B» вы можете добавить static route в BGP со значением MED=50:
!Router B router bgp 400 redistribute static default metric 50 ! ip route 160.10.0.0 255.255.0.0 null 0
Данная конфигурация означает, что роутер «B» будет отправлять updates для 160.10.0.0 с MED attribute = 50.
II.7 Community Attribute
Community attribute - это способ группирования маршрутов (communities), к которым может быть установлено одно из правил, таких как "acceptance", "preference", "redistribution".
Как и MED Attribute, Community передается соседним neighbor’ам и служит для управления маршрутами к вашей AS.
Для установки community attribute используется route-map.
Несколько заранее определенных Community attributes содержатся в табл. 12-1.
Table 12-1: Predefined Communities Community: Meaning: no-export Не передавать эти маршруты EBGP peer'ам no-advertise Не передавать эти маршруты вообще никому internet Передавать эти пути в internet community; Все маршруты внутри сети относятся к этому community.
На примере, приведенном ниже, community attribute устанавливаются с помощью route-map.
route-map COMMUNITYMAP match ip address 1 set community no-advertise ! route-map SETCOMMUNITY match as-path 1 set community 200 additive
Если вы используете ключевое слово «additive» , то указанное значение 200 добавляется к уже существующему community attribute («no-advertise», как было указано выше). В противном случае, новое значение community перезаписывало бы значение, которое было задано раньше.
Для того, чтобы передать community attribute своему neighbor’у, вы должны использовать команду:
neighbor [ip address] send-community
router bgp 100 neighbor 3.3.3.3 remote-as 300 neighbor 3.3.3.3 send-community neighbor 3.3.3.3 route-map SETCOMMUNITY out
Подробнее об использовании community для фильтрации update’ов см. в главе «Community Filtering» ниже.
Для просмотра примеров, как Comminity Attribute используется для фильтрации update’ов, смотрите section «Community Filtering,» later in this chapter.
Summary of the BGP Path Selection Process
BGP всегда выбирает один из маршрутов — как наилучший. Когда маршрут выбран, BGP помещает его в свою таблицу маршрутизации, и передает его своим neighbor’ам. Для выбора наилучшего маршрута BGP использует следующие критерии:
1. Если путь, указанный в поле next-hop, недоступен, этот update убивается.
2. Лучшим считается путь с наибольшим значением weight;
3. Если weight путей одинаковы, то выбирается путь с наибольшим lpref;
4. Если weight и lpref одинаковы, то выбирается путь, который появился в таблице маршрутов BGP на данном роутере. (подразумевается, что это будет самый наикратчайший путь);
5. Если нет путей, которые «родились» на данном роутере, то выбирается путь с AS_path минимальной длины;
6. Если все пути имеют одинаковую длину (одинаковое количество hop’ов, следовательно), выбирается путь с «lowest origin type». Считается, что IGP < EGP < Incomplete.;
7. Если Origin attr. code одинаковы для всех путей, выбирается путь с наименьшим MED attr.;
8. Если и MED одинаковы для всех возможных путей, предпочтительным считается external path перед internal path;
9. Если опять все пути одинаковы, то prefer the path through the closest IGP neighbor;
10. Выбирается путь с наименьшим IP адресом из тех, которые указываются by the BGP router ID.
III. Controlling the Flow of BGP Updates
Сначала — лирическое отступление: в предыдущих главах рассматривались вопросы:
a) Основные понятия. Протокол BGP, таблица маршрутизации BGP, neighbor’ы. Взаимодействия роутеров, принадлежащих одной и той же, или разным автономным системам, для обмена маршрутами.
b) Выбор оптимального маршрута из имеющихся в таблице BGP маршрутизации. Факторы, влияющие на выбор оптимального маршрута.
В этой главе мы будем рассматривать способы, с помощью которых можно управлять BGP update’ами, которые пересылаются между автономными системами.
В этой главе рассматривается механизм управления передачей BGP update’ов. Он включает в себя следующие части:
- III.1 Administrative Distance
- III.2 BGP Filtering
- III.3 BGP Peer Groups
- III.4 CIDR and Aggregate Addresses
- III.5 Confederations
- III.6 Route Reflectors
- III.7 Route Flap Dampening
III.1 Administrative Distance
Обычно, о некоем маршруте роутер может узнать из более чем одного протокола. Механизм «Administrative Distance» используется для распознования путей, о которых роутер узнал, используя несколько протоколов.
Путь с мЕньшим значением administrative distance прописываются в IP routing table.
По умолчанию, BGP использует Administrative Distances из табл. 12-2.
Distance Default value Function Extarnal 20 Присваивается путям, полученным из EBGP Internal 200 ------------------- // ----------- IBGP Local 200 Пути, которые рождены на данном роутере
ЗАМЕЧАНИЕ: Distance не влияет на алгоритм выбора BGP пути, но влияет на процесс записи путей, полученных по BGP, в IP routing table.
Обычно, если маршрут приходит через BGP, он прописывается в IP routing table, поскольку его «distance» = 20. Однако иногда две AS имеют как бы «back door» между собой, полученный по IGP, кроме пути, полученного по EBGP. При этом, с помощью определенных команд на одном из этих роутеров, можно управлять маршрутизацией таким образом, что наилучшим путем будет путь, полученный через IGP, а запасным путем (который будет использоваться в IP route table в случае падения основного пути) будет путь, полученный через BGP update.
Figure 12-19: Back Door Example
На данном рисунке роутеры «A» и «C», равно как и роутеры «C» и «B», взаимодействуют по EBGP. Роутеры «A» и «B» взаимодействуют по IGP (RIP, IGRP, Enhanced IGRP, or OSFP). Значения default distance для RIP, IGRP, Enhanced IGRP и OSPF равны 120,100,90 и 110 соответственно. Поскольку все эти default distance больше, чем def distance для EBGP (20), то по правилу, описанному выше, для в таблицу IP маршрутов на роутере «A» должен быть прописан маршрут, полученный по EBGP.
Более детально: роутер «A» получает updates о сети 160.10.0.0 по двум протоколам: EBGP и IGP. Поскольку default distance для EBGP меньше, чем для IGP, то роутер «A» выберет путь к данной сети, полученный им от роутера «C». Но мы можем изменить эту картину (как раз в этом и заключается использование back door): например, если мы хотим, чтобы роутер «A» использовал путь к 160.10.0.0, полученный по IGP от роутера «B», можно воспользоваться одним из трех приведенных ниже способов:
*) Изменить external distance у EBGP. Но это не рекомендуется, поскольку distance влияет на все updates между роутерами, и может случиться путаница при взаимодействии нескольких протоколов между собой;
*) Изменить distance у IGP. Не рекомендуется по той же причине;
*) Использовать конфигурацию BGP back door. Это правильно.
Итак, для использования IGP connection as back door, существует команда конфигурации роутера:
network [net] backdoor
С ее помощью сконфигурим роутер «A» таким образом, что он будет в свою IP table прописывать update’ы, полученные от роутера «B».
!Router A router eigrp 10 network 150.10.0.0 router bgp 100 neighbor 2.2.2.1 remote-as 300 network 160.10.0.0 backdoor
Команда network 160.10.0.0 backdoor на роутере «A» выдает маршрут к сети 160.10.0.0, как локальный, и прописывает его в IP routing table со значением distance = 200. Поскольку сеть 160.10.0.0 также анонсируется и по Enhanced IGRP (с роутера «B», причем с distance=90) то именно полученный по Enhanced IGRP маршрут бедет прописан в IP route table и будет использоваться как основной. Если же IGRP маршрут упадет, то EBGP маршрут будет прописан в IP routing table и будет использован для прохождения трафика.
Примечание: Несмотря на то, что BGP трактует сеть 160.10.0.0 как local, это не значит, что данная сеть анонсируется как локальная для данного роутера.
III.2 BGP Filtering
Существует возможность управления отправкой/получением update’ов с использованием нескольких методов фильтрации BGP update’ов:
- III.2.1 Prefix Filtering
- III.2.2 AS_path Filtering
- III.2.3 Route Map Filtering
- III.2.4 Community Filtering
Любой из перечисленных методов может быть использован для достижения одного и того же результата. Выбор того, или иного метода зависит от вида сети, в котором его предпологается использовать.
Рассмотрим все 4 метода filtering’а BGP update’ов по отдельности.
III.2.1 Prefix Filtering
Для фильтрации информации о маршрутах, которые данный роутер получает, или информации, которую данный роутер, наоборот, анонсирует далее в сеть, можно использовать фильтр, основанный на routing updates, идущих к/от neighbor’ов.
На рисунке ниже мы видим сеть, которая демонстрирует использование prefix filtering.
Figure 12-20: Route Filtering
На данном рисунке роутер «B» является originated для сети 160.10.0.0 и он отправляет update’ы об этой сети на роутер «C». Если Вы хотите запретить передачу update’ов об этой сети с роутера «C» на роутер «A» AS100, вы можете воспользоваться access-list’ом:
!Router C router bgp 300 network 170.10.0.0 neighbor 3.3.3.3 remote-as 200 neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 distribute-list 1 out ! access-list 1 deny 160.10.0.0 0.0.255.255 access-list 1 permit 0.0.0.0 255.255.255.255
В этом примере конфигурации, как вы видите, комбинация команд neighbor [ip] distribute-list 1 out и access-list 1 запрещает роутеру «C» передавать update’ы о сети 160.10.0.0 neighbor’у 2.2.2.2 AS100, но разрешает все остальные update’ы в его направлении.
Использование access-list’а для фильтрации сетей целиком делается просто. Но, предположим, что роутер «B» на приведенном выше рисунке имеет другую подсеть от 160.10.x.x, а вы хотите анонсировать только 160.0.0.0/8.
access-list 1 permit 160.0.0.0 0.255.255.255
разрешает сети 160.0.0.0/8, 160.0.0.0/9 и так далее. Для того, чтобы роутер пропускал update’ы только о 160.0.0.0/8, следует использовать extended access list, например:
access-list 101 permit ip 160.0.0.0 0.255.255.255 255.0.0.0 0.255.255.255
III.2.2 AS_path Filtering
AS_path filtering - это возможность фильтровать и приходящие, и уходящие из данного роутера update'ы, основываясь на значении AS_path attribute.
Figure 12-21: AS_path Filtering
!Router C neighbor 3.3.3.3 remote-as 200 neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 filter-list 1 out ! ip as-path access-list 1 deny ^200$ ip as-path access-list 1 permit .*
В данном примере access-list 1 на роутере «C» запрещает все update’ы, в которых AS_path начинается _И_ заканчивается на 200.
Итак, роутер «B» посылает updates о сети 160.10.0.0, у которой AS_path attribute начинается и заканчивается на 200, и как только этот update получит Router «C», и сравнит со своим access-list’ом, он игнорирует этот update, то есть не передаст его на «A».
ЗАМЕТИМ, что update, который заканчивается на 200, будет разрешен данным access-list'ом. Таким образом, updates от AS 400, которые проходят через AS 200 (у них AS_path = 200,400) не игнорируются. А вот если в правиле access-list написать ^200 вместо ^200$, то эти updates не будут переданы на "A".
В правиле, в котором встречаются метасимволы . и *, «.» означает любой символ, а «*» означает многократное его повторение. Так что это любой AS_path.
Если Вы хотите проверить, работает ли введенное вами regular expression так, как предпологалось, используйте следующую EXEC команду:
show ip bgp regexp regular-expression
По выполнении этой команды роутер отобразит все пути, которые удовлетворяют данному регулярному выражению.
III.2.3 Route Map Filtering
Команда конфигурации роутера neighbor [ip] route-map может быть использована для приложения route map к incoming и outgoing routes.
Замечание: команда neighbor [ip] route-map ничего не дает для incoming updates, если проверяется равенство IP адресов.
Предположим, что вы хотите, чтобы роутер «C» узнавал только о сетях, которые являются локальными для AS200, и больше не получал никаких маршрутов (т.е. чтобы «C» не знал о AS100, AS400, AS600 от AS200). Также, допустим вы хотите, чтобы все маршруты, которые роутер «C» получает от AS200, имели weight attribute равный 20. Это достигается следующей конфигурацией роутера «C»:
!Router C router bgp 300 network 170.10.0.0 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 route-map STAMP in ! route-map STAMP permit 10 match as-path 1 set weight 20 ! ip as-path access-list 1 permit ^200$
В данной конфигурации access list 1 разрешает любые update’ы, чьи AS_path начинаются и заканчиваются на 200 (то есть этот access list разрешает только update’ы, которые оригинальны для AS200). Все другие update’ы игнорируются.
Предположим, что для той же схемы, которая нарисована выше, мы хотим следующее:
!) Все так же принимать update’ы, оригинальные для AS200, и присваивать им weight attribute 20;
!) Не принимать update’ы, которые в AS_path содержат AS400;
!) Принимать все остальные update’ы, и устанавливать им weight attribute = 10.
Это достигается такой конфигурацией:
!Router C router bgp 300 network 170.10.0.0 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 route-map STAMP in ! route-map STAMP permit 10 match as-path 1 set weight 20 ! route-map STAMP permit 20 match as-path 2 ! route-map STAMP permit 30 set weight 10 ! ip as-path access-list 1 permit ^200$ ip as-path access-list 2 deny _400_
В данной конфигурации роутера «C» указано, что access-list 1 разрешает любой update с AS_path attribute, начинающимся и заканчивающимся на 200, что означает разрешение всех update’ов, для которых AS200 является originated. Weight attribute для разрешенных update’ов устанавливается равным 20.
Access-list 2 запрещает все update’ы, содержащие 400 в AS_path. Все остальные update’ы будут иметь weight attribute = 10, как указано в правиле «30» route-map’а STAMP.
Далее, предположим, что на рис. выше Router «C» анонсирует свою собственную сеть 170.10.0.0 автономным системам AS100 и AS200. Когда update’ы об этой сети достигнут AS600, роутеры этой автономной системы получат два пути к нашей сети: через AS100 с AS_path=100,300 и через AS400 с AS_path=400,200,300. Допустим, что все остальные значения attributes, которые могут повлиять на выбор пути к нашей сети, одинаковы. В этом случае роутер в AS600 выберет тот путь, который короче, т.е. через AS100.
Если вы захотите сделать так, чтобы конфигурация роутера «C» влияла на выбор пути к сети 170.10.0.0, который будет производиться на роутере «D», вы можете это сделать. прибавив к AS_path дополнительные номера AS, как правило просто повторив несколько раз номер AS300, в которую и входит роутер «C»:
!Router C router bgp 300 network 170.10.0.0 neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 route-map SETPATH out ! route-map SETPATH permit 10 set as-path prepend 300 300
Команда конфигурации роутера «C» set as-path prepend 300 300 указывает роутеру «C», что, прежде чем отправить update на 2.2.2.2, к пути AS_path надо прибавить 300 дважды (искусственно удлинив путь). В результате, AS_path для сети 170.10.0.0, которая достигнет AS600 через AS100, будет иметь вид: 100,300,300,300; а AS_path, полученная AS600 через AS400, будет короче: 400,200,300 — она и будет выбрана роутером AS600 для доступа к сети 170.10.0.0.
III.2.4 Community Filtering
Figure 12-23: Community Filtering
Предположим, что мы не хотим, чтобы роутер «C» передавал полученные от роутера «B» маршруты на роутер «A».
Это делается установкой Community Attribute update’ам, отправляемым роутером «B» на роутер «C» (делается на роутере «B». ):
!Router B router bgp 200 network 160.10.0.0 neighbor 3.3.3.1 remote-as 300 neighbor 3.3.3.1 send-community neighbor 3.3.3.1 route-map SETCOMMUNITY out ! route-map SETCOMMUNITY permit 10 match ip address 1 set community no-export ! route-map SETCOMMUNITY permit 20 ! access-list 1 permit 0.0.0.0 255.255.255.255
Для маршрутов, которые посылаются роутеру «C» (neighbor с IP адресом 3.3.3.1), роутер «B» использует route-map с названием SETCOMMUNITY. Данный route-map для любого update’а, достигшего роурер _»C»_, и удовлетворяющего правилу access-list 1, устанавливает community равным «no-export». Команда конфигурации роутера «B» send-community используется для передачи данного community attribute роутеру «C» (3.3.3.1).
Когда роутер «C» получает update’ы от роутера «B», он не передает их на роутер «A», поскольку community attribute = no-export.
Существует еще один способ использования фильтров, в которых используется community attribute: это команда конфигурации
!Router B router bgp 200 network 160.10.0.0 neighbor 3.3.3.1 remote-as 300 neighbor 3.3.3.1 send-community neighbor 3.3.3.1 route-map SETCOMMUNITY out ! route-map SETCOMMUNITY permit 10 match ip address 2 set community 100 200 additive ! route-map SETCOMMUNITY permit 20 ! access list 2 permit 0.0.0.0 255.255.255.255
При данной конфигурации, роутер «B» добавляет значения 100 и 200 к значению community любого update’а, который достигнет neighbor’а с IP адресом 3.3.3.1; Далее: для конфигурирования роутера _»C»_ используется «ip community-list» команда, с помощью которой устанавливается «weight» в том случае, когда у пришедшего на роутер «C» update’а community attribute содержит в себе 100 и/или 200:
!Router C router bgp 300 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 route-map check-community in ! route-map check-community permit 10 match community 1 set weight 20 ! route-map check-community permit 20 match community 2 exact set weight 10 ! route-map check-community permit 30 match community 3 ! ip community-list 1 permit 100 ip community-list 2 permit 200 ip community-list 3 permit internet
В данной конфигурации, любой update, приходящий на «C» и содержащий 100 в community attribute, удовлетворяет правилу ip community-list 1 и в результате этому маршруту присваивается весовой коэффициент weight = 20. Аналогично, если в comm. attr. есть _только_ 200, то маршруту присвоится weight = 10. Последний же в списке community list (list 3) использует ключевое слово «internet», и разрешает все остальные update’ы без изменения из аттрибутов.
Note: «internet» означавет _все_ update’ы, поскольку все маршруты всегда являются членами community = internet.
III.3 BGP Peer Groups
"BGP Peer Group" - это группа BGP neighbor'ов, которые используют одни и те же update policies.
Update policies обычно устанавливаются через route maps, distribution lists, и filter lists.
Вместо того, чтобы определять одни и те же policies для каждого neighbor’а, вы можете создать peer group name и присвоить policies этой peer group.
Роутеры, входящие в peer group, наследуют все опции конфигурации этой самой peer group. Роутеры в peer group могут также изменять эти опции, с условием что измененные значения не будут передаваться далее в outgoing updates. Это означает, что менять ту или иную опцию конфигурации можно только для incoming updates.
Figure 12-24: BGP Peer Groups
Итак, следующая конфигурация роутера «C» включает в себя BGP peer group «INTERNALMAP» на данном роутере и используется во всех роутерах AS300:
!Router C router bgp 300 ! neighbor INTERNALMAP peer-group neighbor INTERNALMAP remote-as 300 neighbor INTERNALMAP route-map INTERNAL out neighbor INTERNALMAP filter-list 1 out neighbor INTERNALMAP filter-list 2 in ! neighbor 5.5.5.2 peer-group INTERNALMAP neighbor 6.6.6.2 peer-group INTERNALMAP neighbor 3.3.3.2 peer-group INTERNALMAP neighbor 3.3.3.2 filter-list 3 in
Данная конфигурация определяет следующие policies для INTERNALMAP peer group:
*) Route map с названием INTERNAL
*) Filter list для outgoing updates (filter list 1)
*) Filter list для incoming updates (filter list 2)
В данной конфигурации peer group применяется ко всем _внутренним_ neighbor’ам — роутерам E, F и G. В ней также отдельно определено использование filter list’а для incoming updates от neighbor’а 3.3.3.2 (Router E). Этот filter list используется только для incoming updates.
Теперь рассмотрим другую конфигурацию роутера «C». В этой конфигурации создается BGP peer group name «EXTERNALMAP» на роутере «C» и она применяется к роутерам из AS100, 200, 600 :
!Router C router bgp 300 ! neighbor EXTERNALMAP peer-group neighbor EXTERNALMAP route-map SETMED neighbor EXTERNALMAP filter-list 1 out neighbor EXTERNALMAP filter-list 2 in ! neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 peer-group EXTERNALMAP neighbor 4.4.4.2 remote-as 600 neighbor 4.4.4.2 peer-group EXTERNALMAP neighbor 1.1.1.2 remote-as 200 neighbor 1.1.1.2 peer-group EXTERNALMAP neighbor 1.1.1.2 filter-list 3 in
Как видим, в этой конфигурации команда neighbor remote-as помещается вовне того блока, где прописывается neighbor . постольку поскольку используются несколько разных AS, а не одна, как в первом примере с peer-group.
Так же заметим, что в данной конфигурации определяется filter-list 3, который может быть использован для изменения (перезаписи) configurstion options для incoming updates от neighbor’а 1.1.1.2 (Router B).
III.4 CIDR and Aggregate Addresses
Протокол BGP4 поддерживает безклассовую внутридоменную маршрутизацию (Classless InterDomain Routing — CIDR), которая и является его главным преимуществом перед BGP3.
CIDR также известен под названием supernetting.
CIDR - это новый способ определения IP адресов, который исключает (не использует) концепцию классов (Class A, B, C и тд). Например, сеть 192.213.0.0 с "неправильным" классом сети "C" (см адрес - в третьем октете не может стоять 0 для сети класса C), является совершенно легальной supernet, когда она представлена в CIDR notation как 192.213.0.0/16;
Запись «/16» показывает, что маска подсети состоит из 16 бит (считая слева).
Заметим, что 192.213.0.0/16 и 192.213.0.0 255.255.0.0 — одно и то же.
more specific route - это маршрут на подблок.
CIDR делает простым aggregate маршрутов. Aggregation — это процесс преобразования нескольких различных маршрутов в один маршрут (prefix aggregate route), котороый и будет анонсироваться. Такой подход уменьшает размеры таблицы маршрутизации.
Figure 12-25: Aggregation
На этом рисунке роутер «B» из AS200 является originated для сети 160.11.0.0 и он анонсирует эту сеть роутеру «C» из AS300. Ниже приведена конфигурация роутера «C» для того, чтобы передавать aggregate address 160.0.0.0 роутеру «A»:
!Router C router bgp 300 neighbor 3.3.3.3 remote-as 200 neighbor 2.2.2.2 remote-as 100 network 160.10.0.0 aggregate-address 160.0.0.0 255.0.0.0
Команда конфигурации роутера aggregate-address анонсирует prefix route (в данном случае, 160.0.0.0/8) и все more specific routes.
Замечание: роутер не может aggregate адреса, если он не имеет more cpecific route к этим адресам в своей таблице маршрутизации. More cpecific route могут появиться в таблице BGP маршрутизации из incoming updates от других AS, или могут быть получены по IGP (redistributed into BGP), или могут быть установлены с помощью команды конфигурации роутера "network".
Если вы хотите, чтобы роутер «C» передавал только prefix route, и не хотите, чтобы он передавал more specific route, используйте ключевое слово «summary only» в команде affregate-address:
aggregate-address 160.0.0.0 255.0.0.0 summary-only
Эта команда передает prefix (160.0.0.0/8) и не передает more specific routes, которые данный роутер может иметь в BGP routing table.
Замечание: Если вы используете команду конфигурации "network" для анонсирования сети, запись о данной сети всегда будет появляться в BGP update'ах, даже если вы используете ключевое слово summary-only в команде конфигурации aggregate-address.
Если вы хотите запретить некоторые specific routes, когда принимаете маршруты, вы можете использовать route map. Например, если вы хотите, чтобы Router C принимал маршруты о 160.0.0.0 и запретить прием route 160.20.0.0, но все-таки разрешив маршруты к 160.10.0.0, используйте следующие команды:
!Router C router bgp 300 neighbor 3.3.3.3 remote-as 200 neighbor 2.2.2.2 remote-as 100 network 160.10.0.0 aggregate-address 160.0.0.0 255.0.0.0 suppress-map CHECK ! route-map CHECK permit 10 match ip address 1 ! access-list 1 deny 160.20.0.0 0.0.255.255 access-list 1 permit 0.0.0.0 255.255.255.255
Если вы хотите, чтобы на роутере устанавливалось значение некоторых attributes, когда он передает aggregate route, используйте attribute map:
aggregate-address 160.0.0.0 255.0.0.0 attribute-map SETORIGIN ! route-map SETORIGIN permit 10 set origin igp
III.4.1 Aggregation and Static Routes
Во-первых, заметим: Aggregation при Static routes конфигурится на том роутере, на котором эти самые static routes прописаны.
На рисунке 12-26, приведенном ниже, показано как static routes могут быть использованы для создания aggregate’ов.
Figure 12-26: CIDR Aggregation Example
Допустим, вы хотите, чтобы роутер «B» анонсировал prefix 160.0.0.0, но не передавал все остальные more specific routes.
Конфигурация роутера «B», приведенная ниже, выполняет redistribute static aggregate into BGP:
!Router B router bgp 200 neighbor 3.3.3.1 remote-as 300 redistribute static ! ip route 160.0.0.0 255.0.0.0 null 0
В результате этой конфигурации получаем, что роутер «B» анонсирует сеть 160.0.0.0 с origin attribute = Incomplete.
Замечание: вместо redistribute static можно использовать команду network дает тот же самый эффект, только origin attr для маршрута к сети 160.0.0.0 будет IGP, а не Incomplete:
!Router B router bgp 200 neighbor 3.3.3.1 remote-as 300 network 160.0.0.0 mask 255.0.0.0 ! ip route 160.0.0.0 255.0.0.0 null 0
Замечание: Использование static routes, как показано в двух последних примерах конфигурации (с помощью команд redistribute static и network) - наиболее предпочтительный способ добавления aggregate route, поскольку использование static routes предотвращает нежелательные route flaps.
III.4.2 Aggregation and AS-SET
Когда aggregates (обобщенные маршруты, так сказать) генерятся из more specific routes, атрибуты AS_path этих routes об’единяются в так называемый AS_SET. Это используется для предотвращения зацикливания маршрутов.
На рисунке ниже демонстрируется использование AS-SET при аггрегировании адресов.
Figure 12-27: CIDR Aggregation Example with AS-SET
На этом рисунке роутер «C» принимает updates о сети 160.20.0.0 от роутера «A» и updates о сети 160.10.0.0 от роутера «B». Если роутер «C» аггрегирует сеть 160.0.0.0/8 и отправляет update’ы об этой сети роутеру «D», то AS_path для этой сети будет указывать, что AS300 является _origin_ для нее.
Но в том случае, если роутер «D» имеет другой путь к AS100, update’ы (о сети 160.0.0.0/8) с «C» на «D» могут вести к зацикливанию маршрутов.
Для того, чтобы этого не случилось, используется команда конфигурации роутера aggregate-address с ключевым словом «as-set»:
!Router C neighbor 3.3.3.3 remote-as 200 neighbor 2.2.2.2 remote-as 100 neighbor 4.4.4.4 remote-as 400 aggregate-address 160.0.0.0 255.0.0.0 as-set
Ключевое слово «as-set» указывает роутеру «C», что в update’ы о сети 160.0.0.0/8 должна быть включена информация о том, что сеть 160.0.0.0 принадлежит «to a set» (в данном случае, 100 и 200).
III.5 Confederations
Confederations - это механизм уменьшения IBGP петель (связей) внутри автономной системы.
На рисунке ниже роутеры без названий я обозначил просто как «Router».
Figure 12-28: Confederations
На данном рисунке AS500 содержит 9 роутеров (не считая тех, которые не работают по BGP). Без confiderations, BGP будет требовать, чтобы роутеры, входящие в AS500, были полностью взаимосвязаны между собой. Это означает, что каждый роутер нуждается в том, чтобы у него было IBGP соединение с со всеми остальными 8 роутерами; Кроме того, пусть каждый из 9 роутеров связан по EBGP с external AS.
Confederation уменьшает количество peer’ов внутри AS. Это делается следующим образом: вы делите данную AS (AS500) на несколько автономных систем, и присваиваете каждой из них свой номер, номер mini-AS в «конфедерации». Каждая mini-AS является fully-meshed, то есть полностью взаимосвязанной (каждый из роутеров, входящих в данную mini-AS, связан по IBGP со всеми своими «соседями» в mini-AS). Каждая mini-AS связана с другой mini-AS в «конфедерации».
Заметим, что несмотря на то, что mini-AS имеют EBGP peer’ы с другими AS внутри confederations, они обмениваются routing updates как если бы они использовали IBGP — т.е. next hop, MED, и local preference не меняются.
Для внешнего мира concederation выглядит как одна AS.
Следующие команды конфигурируют роутер «C»:
!Router C router bgp 65050 bgp confederation identifier 500 bgp confederation peers 65060 65070 neighbor 128.213.10.1 remote-as 65050 neighbor 128.213.20.1 remote-as 65050 neighbor 128.210.11.1 remote-as 65060 neighbor 135.212.14.1 remote-as 65070 neighbor 5.5.5.5 remote-as 100
Здесь, команда конфигурации router bgp 65050 указывает, что роутер «C» принадлежит AS 65050.
Команда bgp confederation identifier 500 указывает, что роутер «C» принадлежит «конфедерации» 500.
Первые две строчки, начинающиеся с neighbor, указывают на то, что роутер «C» устанавливает IBGP connection с двумя оставшимися роутерами в своей mini-AS 65050. Вторые две строчки устанавливают BGP connection с confederation peers 65060 и 65070. Последняя команда «neighbor» устанавливает EBGP connection с external AS100.
Аналогично, рассмотрим конфигурацию роутера «D»:
!Router D router bgp 65060 - роутер принадлежит AS65060 bgp confederation identifier 500 - роутер принадлежит конф-ии 500 bgp confederation peers 65050 65070 neighbor 129.210.30.2 remote-as 65060 - устанавливает IBGP connect внутри AS neighbor 128.213.30.1 remote-as 65050 - устанавливает BGP connection neighbor 135.212.14.1 remote-as 65070 с peer'ами внутри "confederation" neighbor 6.6.6.6 remote-as 600 - устанавливает EBGP с внеш. AS 600.
Конфигурация роутера «A» выглядит следующим образом:
!Router A router bgp 100 neighbor 5.5.5.4 remote-as 500
— то есть устанавливается EBGP connection с роутером «C».
Заметим, что роутер «A» ничего не знает (и не должен знать) о делении AS500 на mini-AS, то есть он ничего не знает об AS65050, 65060, 65070. Он знает только об AS500.
III.6 Route Reflectors
Route Reflectors - это другой способ для установления IBGP peering'а внутри AS.
Как ранее было сказано в секции Synchronization, BGP speaker’ы не передают маршруты, пришедшие от одного IBGP speaker’а — другому IBGP speaker’у. Route Reflectors позволяют обойти данное ограничение и позволяют роутеру анонсировать маршруты (reflect — в смысле отражать, отражать _передавая дальше_), полученные им от других speaker’ов по IBGP. При использовании Route Reflectors уменьшается количество IBGP speaker’ов внутри AS (вернее, взаимосвязей между ними — теперь они не должны быть связаны со всеми своими IBGP «соседями»).
Figure 12-29: Simple Route Reflector Example
Итак, обратим внимание — все три роутера (A,B и C) принадлежат одной AS100.
Без использования Route Reflector’а для нормально функционирования сети, показанной на рисунке, требуется полная IBGP взаимосвязь (то есть роутер «A» должен быть связан еще и с роутером «B» по IBGP).
Но, если роутер «C» конфигурить как Route reflector, то IBGP peering между роутерами «A» и «B» не требуется, поскольку роутер «C» будет передавать updates, пришедшие от роутера «A», на роутер «B», и наоборот.
Для конфигурирования роутера «C» в качестве Router Reflector’а используются следующие команды:
!Router C router bgp 100 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 route-reflector-client neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 route-reflector-client
Итак, роутер, который включает в себя команду конфигурации neighbor router-reflector-client — это Route Reflector.
Роутеры, ip адреса которых указаны в команде router-reflector-client — это клиенты Route Reflector’а.
Если рассматривать всю сеть целиком, то все вместе (Route Reflector и его client’ы) — называется «cluster».
IBGP peer’ы данной AS, которые не перечислены как clients, называются «nonclients».
В AS может быть несколько Route Reflect’оров. Когда это так, то каждый Route Reflect’ор общается с остальными Route Reflect’орами как с обычными IBGP speaker’ами.
В одном claster’е может быть больше одного Route Reflect’ора, в одной AS может быть несколько claster’ов.
[рассмотрение более продвинутых конфигураций с использованием Route Reflector'ов, а так же способы защиты от зацикливаний при работе с Route Reflector'ами (Using an Originator ID, Using a Cluster List) пока опущены в настоящем рассмотрении. Причина: идея ясна, а рисунки слишком сложные для воспроизведения их в тексте; Да и времени маловато].
III.7 Route Flap Dampening
Route Flap Dampening - (начал использоваться в CISCO Internetwork Operating System [Cisco IOS] Release 11.0]) - это механизм предотвращения нестабильности работы роутеров, основанный на flap dampening'е.
Для описания Route Flap Dampening’а используются следующие термины:
Penalty — Числовое значение, которое присваивается маршруту, когда роутер flaps
Half-life time — Числовое значение, которое устанавливается в конфигурации и означает время которое должно пройти с момента поднятия линка, и ведущее к уменьшению panalty вполовину.
Suppress limit — Числовое значение, с которым сравнивается panalty. Если penalty больше, чем suppress limit, то маршрут считается недоступным и отбрасывается.
Suppressed — маршрут, который не анонсируется, даже если он «UP». Маршрут считается Suppressed, если Penalty больше Suppress Limit.
Reuse limit — Числовое значение, устанавливаемое в процессе конфигурации. Это значение сравнивается с Penalty; Если Penalty меньше Reuse Limit, то Suppressed маршрут, если он UP в настоящий момент, больше не будет замораживаться (то есть считается размороженным).
History entry — запись, которая используется для сохранения flap information о маршрутах, которые down.
Маршруты, которые flapping, получают 1000 penalty за каждый flap. Когда накопленный таким образом penalty привысит установленный в конфигурации предел (Suppress Limit), BGP приостанавливает анонсирование данного маршрута, даже если в этот момент маршрут является рабочим (я его назвал UP). Накопленный penalty уменьшается вдвое по истечении half-life time. Если после этого оказывается, что penalty < reuse limit, маршрут начинает анонсироваться опять (если он UPв этот момент, конечно).
Замечание: Dampening не применяется к маршрутам, которые получены по IBGP. Это ограничение предотвращает forwarding loops и как бы защищает IBGP peer'ы от имеющих бОльшие penalty у маршрутов, которые являются внешними к данной AS.
Figure 12-33: Route Flap Dampening
Рассмотрим команды конфигурации роутеров «A» и «B»:
!Router A hostname RouterA ! interface serial0 ip address 203.250.15.2 255.255.255.252 interface serial1 ip address 192.208.10.6 255.255.255.252 ! router bgp 100 bgp dampening ! network 203.250.15.0 neighbor 192.208.10.5 remote-as 300
!Router B hostname RouterB ! interface loopback 0 ip address 192.208.10.174 255.255.255.192 ! interface serial 0/0 ip address 192.208.10.5 255.255.255.252 ! router bgp 300 network 192.208.10.0 neighbor 192.208.10.6 remote-as 100
Итак, роутер «A» сконфигурирован для route dampening’а. Предположим теперь, что EBGP линк к роутеру «B» стабилен. В этом случае BGP table на роутере A будет выглядеть так:
Q/ERROR: Опечатка в оригинальной ссылке на английском. см. след. строчку ниже (там стоит RouterB#).
RouterA# show ip bgp table version is 24, local router ID is 203.250.15.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.208.10.0 192.208.10.5 0 0 300 i *> 203.250.15.0 0.0.0.0 0 32768 i
Для того, чтобы симитировать route flap, на роутере «B» введем команду: clear ip bgp 192.208.10.6
Теперь таблица BGP маршрутов на роутере «A» будет выглядеть так:
RouterA# show ip bgp table version is 24, local router ID is 203.250.15.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path h 192.208.10.0 192.208.10.5 0 0 300 i *> 203.250.15.0 0.0.0.0 0 32768 i
Поскольку маршрут к сети 192.208.10.0 has flapped, запись в BGP table как бы удаляется, и к ней добавляется признак h — history.
Для более подробного просмотра некоторого отдельного маршрута (например, к сети 192.208.10.0) выполним команду:
RouterA# show ip bgp 192.208.10.0 BGP routing table entry for 192.208.10.5 255.255.255.0, version 25 Paths: (1 available, no best path) 300 (history entry) 192.208.10.5 from 192.208.10.5 (192.208.10.174) Origin IGP, metric 0, external Dampinfo: penalty 1000, flapped 1 times in 0:02:03
Итак, мы видим, что данный маршрут имеет penalty 1000 из-за flapping, но penalty все еще меньше suppress limit’а (default 2000). Поскольку маршрут down, он помечен как «h» — history entry. Если маршрут flaps несколько раз, команда show ip bgp отображает следующее:
RouterA# show ip bgp table version is 32, local router ID is 203.250.15.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *d 192.208.10.0 192.208.10.5 0 0 300 i *> 203.250.15.0 0.0.0.0 0 32768 i
И теперь вывод show ip bgp 192.208.10.0 будет следующий:
RouterA# show ip bgp 192.208.10.0 BGP routing table entry for 192.208.10.5 255.255.255.0, version 32 Paths: (1 available, no best path) 300, (suppressed due to dampening) 192.208.10.5 from 192.208.10.5 (192.208.10.174) Origin IGP, metric 0, external Dampinfo: penalty 2615, flapped 3 times in 0:05:18, reuse in 0:27:00
Итак, route is UP, но поскольку penalty > suppress limit, в данный момент маршрут suppressed. Этот маршрут будет восстановлен в таблице маршрутизации, когда penalty станет равным reuse limit (default 750).
Кроме того, dampening information будет очищена после того, как penalty станет меньшим, чем 1/2 от reuse limit (750/2).
IV. Practical Design Example
На рисунке ниже предстьавлена BGP сеть, на которой рассматриваются types of topologies, типичные для Internet Service Providers.
Figure 12-34: Practical Design Example for ISPs
Если AS связана с двумя ISPs через EBGP, IBGP должен использоваться между роутерами внутри данной AS для лучшего управления маршрутами.
Рассмотрим AS100, имеющую два EBGP connection (роутеры «A» и «B») с внешним миром (роутеры «C» и «D»). «A» и «B» общаются между собой по IBGP.
Между роутерами «A-F», «A-B» и «B-F» этой AS также используется OSPF (протокол семейства IGP).
Приведенная ниже конфигурация роутеров — предварительная, поскольку она не полная. Это сделано для того, чтобы продемонстрировать методы BGP troubleshooting’а. Полная и правильная конфигурация расположена в главе «Final Configurations,» ниже.
!Router A hostname RouterA ! interface loopback 0 ip address 203.250.13.41 255.255.255.0 ! interface ethernet 0 ip address 203.250.14.1 255.255.255.0 ! interface serial 0 ip address 128.213.63.1 255.255.255.252 ! router ospf 10 network 203.250.0.0 0.0.255.255 area 0 router bgp 100 network 203.250.13.0 mask 255.255.255.0 network 203.250.14.0 mask 255.255.255.0 neighbor 128.213.63.2 update-source loopback 0 !Router B ! hostname RouterB ! interface serial 0 ip address 203.250.15.2 255.255.255.252 ! inetrface serial 1 ip address 192.208.10.6 255.255.255.252 ! router ospf 10 network 203.250.0.0 0.0.255.255 area 0 ! router bgp 100 network 203.250.15.0 neighbor 192.208.10.5 remote-as 300 neighbor 203.250.15.1 remote-as 100 !Router C hostname RouterC ! interface loopback 0 ip address 128.213.63.130 255.255.255.192 ! interface serial 2/0 ip address 128.213.63.5 255.255.255.252 ! interface serial 2/1 ip address 128.213.63.2 255.255.255.252 ! router bgp 200 network 128.213.0.0 neighbor 128.213.63.1 remote-as 100 neighbor 128.213.63.6 remote-as 400 !Router D hostname RouterD ! interface loopback 0 ip address 192.208.10.174 255.255.255.192 ! interface serial 0/0 ip address 192.208.10.5 255.255.255.252 ! interface serail 0/1 (ERROR: здесь и строчка ниже в оригинале - с опечаткой) ip address 192.208.10.2 255.255.255.252 ! router bgp 300 network 192.208.10.0 neighbor 192.208.10.1 remote-as 500 neighbor 192.208.10.6 remote-as 100 !Router E hostname RouterE ! interface loopback 0 ip address 200.200.10.1 255.255.255.0 ! interface serial 0 ip address 195.211.10.2 255.255.255.252 ! interface serial 1 ip address 128.213.63.6 255.255.255.252 ! router bgp 400 network 200.200.10.0 neighbor 128.213.63.5 remote-as 200 neighbor 195.211.10.1 remote-as 500 !Router F ! hostname RouterF ! interface ethernet 0 ip address 203.250.14.2 255.255.255.0 ! interface serial 1 ip address 203.250.15.1 255.255.255.252 ! router ospf 10 network 203.250.0.0 0.0.255.255 area 0 !Router G hostname RouterG ! interface loopback 0 ip address 195.211.10.174 255.255.255.192 ! interface serial 0 ip address 192.208.10.0 255.255.255.252 ! interface serial 1 ip address 195.211.10.1 255.255.255.252 ! router bgp 500 network 195.211.10.0 neighbor 192.208.10.2 remote-as 300 neighbor 195.211.10.2 remote-as 400
Когда вы конфигурируете redistribute IGP routes в BGP, вам необходимо контролировать те маршруты, которые попадают в BGP. По этой причине всегда лучше использовать команду конфигурации «network» или выполнять redistributing of static routes, как и показано на приведенной выше конфигурации. Эти методы так же предотвращают route flaps.
IV.1 Determining the State of BGP
Предположим, что (см. приведенный выше рисунок) связь между роутерами «B» и «D» испортилась. Выполним на роутере «B» команду show ip bgp:
RouterB# show ip bgp table version is 4, local router ID is 203.250.15.2 Status codes: s suppesed, d damped, h history, * valid, > best, i internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *i128.213.0.0 128.213.63.2 0 100 0 200 i *i192.208.10.0 128.213.63.2 100 0 200 400 500 300 i *i195.211.10.0 128.213.63.2 100 0 200 400 500 i *i200.200.10.0 128.213.63.2 100 0 200 400 i *>i203.250.13.0 203.250.13.41 0 100 0 i *>i203.250.14.0 203.250.13.41 0 100 0 i *> 203.250.15.0 0.0.0.0 0 32768 i
Символ «i» в начале строки означает, что о данном маршруте стало известно от IBGP peer’а.
Символ «i» в конце строки означает, что информация о данном пути пришла от IGP.
Первая строка читается так:
Информация о доступности сети 128.213.0.0 получена через AS_path 200, и для того, чтобы с данного роутера достичь этой сети, в качестве Next hop’а следует использовать 128.213.63.2.
Замечание: любой маршрут, который сгенерирован на данном роутере (см. 203.250.15.0) имеет next hop = 0.0.0.0.
Символ » > » означает, что BGP выбрал данный маршрут, как лучший. Процесс выбора наилучшего маршрута описан выше в главе «Summary of the BGP Path Selection Process». BGP всегда выбирает только один маршрут, как лучший. После чего он записывает этот маршрут в IP routong table и анонсирует этот путь другим BGP peer’ам.
Заметим, что next hop attribute 128.213.63.2, имеющий место для части маршрутов, унаследован от EBGP.
Теперь проверим IP routing table на роутере «B»:
RouterB# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort not set 203.250.13.0 255.255.255.255 is subnetted, 1 subnets O 203.250.13.41 [110/75] via 203.250.15.1, 02:50:45, Serial0 203.250.15.0 255.255.255.252 is subnetted, 1 subnets C 203.250.15.0 is directly connected, Serial0 O 203.250.14.0 [110/74] via 203.250.15.1, 02:40:46, Serial0
Заметим, что ни один BGP маршрут не появился в IP routing table. Это произошло потому, что в данной конфигурации мы имеем одну проблему: маршруты к некоторым сетям, содержащиеся в BGP route table на «B», имеют next hop = 128.213.63.2, который недоступен с «B».
Адрес 128.213.63.2 недоступен потому, что в таблице маршрутизации на «B» отсутствует запись о том, как достичь данный адрес через IGP (в данном случае, через OSPF). Итак, роутер «B» не знает о 128.213.63.0 из OSPF.
IV.2 Correcting Next Hop Problems
В данном примере проблема с next hop может быть решена двумя способами:
* Использованием на роутере «A» команды «next-hop-self» для изменения значения next hop между роутерами «A» и «B».
* На роутере «A» настроить OSPF _на интерфейсе_ Serial 0, указав его как passive. В этом случае роутер «B» будет знать, каким образом достичь next hop 128.213.63.2.
Итак, следующая конфигурация роутера «A» устанавливает OSPF на Serial 0 и делает его passive:
!Router A hostname RouterA ! interface loopback 0 ip address 203.250.13.41 255.255.255.0 ! interface ethernet 0 ip address 203.250.14.1 255.255.255.0 ! interface serial 0 ip address 128.213.63.1 255.255.255.252 ! router ospf 10 passive-interface serial 0 network 203.250.0.0 0.0.255.255 area 0 network 128.213.0.0 0.0.255.255 area 0 ! router bgp 100 network 203.250.13.0 mask 255.255.255.0 network 203.250.14.0 mask 255.255.255.0 neighbor 128.213.63.2 remote-as 200 neighbor 203.250.15.2 remote-as 100 neighbor 203.250.15.2 update-source loopback 0
Теперь, BGP neighbor table на роутере «B» будет содержать следующие маршруты:
RouterB# show ip bgp table version is 4, local router ID is 203.250.15.2 Status codes: s suppesed, d damped, h history, * valid, > best, i internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *>i128.213.0.0 128.213.63.2 0 100 0 200 i *>i192.208.10.0 128.213.63.2 100 0 200 400 500 300 i *>i195.211.10.0 128.213.63.2 100 0 200 400 500 i *>i200.200.10.0 128.213.63.2 100 0 200 400 i *>i203.250.13.0 203.250.13.41 0 100 0 i *>i203.250.14.0 203.250.13.41 0 100 0 i *> 203.250.15.0 0.0.0.0 0 32768 i
Как видно, символ » > » появился у всех записей о маршрутах, и это означает, что BGP удовлетворен наличием достижимого next hop’а в этих записях.
Теперь IP Routing Table на роутере «B» будет выглядеть по-другому:
RouterB# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort not set 203.250.13.0 255.255.255.255 is subnetted, 1 subnets O 203.250.13.41 [110/75] via 203.250.15.1, 02:50:45, Serial0 203.250.15.0 255.255.255.252 is subnetted, 1 subnets C 203.250.15.0 is directly connected, Serial0 O 203.250.14.0 [110/74] via 203.250.15.1, 02:40:46, Serial0 128.213.0.0 255.255.255.252 is subnetted, 1 subnets O 128.213.63.0 [110/138] via 203.250.15.1, 00:04:47, Serial0
Пока что мы добились лишь того, что сеть 128.213.63.0 стала доступной по OSPF. Заметим, что BGP entries все еще не появились в IP routing table.
Проблема заключается в synchronization: BGP не синхронизован с IGP, поэтому маршруты BGP не передались в IP routing table, и соответственно данные маршруты не включены в передаваемые далее BGP update’ы.
Роутер «F» не знает о сетях 192.208.10.0, 195.211.10.0 потому что BGP routes все еще не redistributed into OSPF.
IV.3 Turning Off Synchronization
Если вы введете команду конфигурации «no synchronisation» на роутере «B», и потом проверите таблицу IP маршрутизации на нем же, то увидите в ней следующие маршруты:
RouterB# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort not set B 200.200.10.0 [200/0] via 128.213.63.2, 00:01:07 B 195.211.10.0 [200/0] via 128.213.63.2, 00:01:07 B 192.208.10.0 [200/0] via 128.213.63.2, 00:01:07 203.250.13.0 is variably subnetted, 2 subnets, 2 masks O 203.250.13.41 255.255.255.255 [110/75] via 203.250.15.1, 00:12:37, Serial 0 B 203.250.13.0 255.255.255.0 [200/0] via 203.250.13.41, 00:01:08 203.250.15.0 255.255.255.252 is subnetted, 1 subnets C 203.250.15.0 255.255.255.252 is directly connected, Serial 0 O 203.250.14.0 [110/74 via 203.250.15.1, 00:12:37, Serial 0 128.213.0.0 is is variably subnetted, 2 subnets, 2 masks B 128.213.0.0 255.255.0.0 [200/0] via 128.213.63.2, 00:01:08 O 128.213.63.0 255.255.255.252 [110/138] via 203.250.15.1, 00:12:37, Serial 0
Итак, таблица маршрутизации на первый взгляд правильная, но достичь указанные в ней сети не представляется возможным из-за того, что роутер «F», расположенный на пути к ним, не знает маршрутов к этим сетям. Это видно в результатах выполнения команды show ip route на «F»:
RouterF# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort not set 203.250.13.0 255.255.255.255 is subnetted, 1 subnets O 203.250.13.41 [110/11] via 203.250.14.1, 00:14:15 203.250.15.0 255.255.255.252 is subnetted, 1 subnets C 203.250.15.0 is directly connected, Serial1 C 203.250.14.0 is directly connected, Ethernet0 128.213.0.0 255.255.255.252 is subnetted, 1 subnets O 128.213.63.0 [110/74] via 203.250.14.1, 00:14:15, Ethernet0
Если пакеты, пришедшие из сети, роутеры которой обмениваются маршрутами по BGP, попадут на роутер «F», они будут утеряны. Таким образом, выключение synchronization не решает эту проблему. Мы видим, что OSPF необходимо сделать redistribute своих маршрутов в BGP на роутере «A»; таким образом, роутер «F» узнает о BGP маршрутах.
IV.4 Redistributing OSPF
Итак, следующая конфигурация роутера «A» модифицированна таким образом, что BGP маршруты передаются (redistributed) в OSPF:
!Router A hostname RouterA ! interface loopback 0 ip address 203.250.13.41 255.255.255.0 ! interface ethernet 0 ip address 203.250.14.1 255.255.255.0 ! interface serial 0 ip address 128.213.63.1 255.255.255.252 ! router ospf 10 redistribute bgp 100 metric 2000 subnets passive-interface serial0 network 203.250.0.0 0.0.255.255 area 0 network 128.213.0.0 0.0.255.255 area 0 ! router bgp 100 network 203.250.0.0 mask 255.255.0.0 neighbor 128.213.63.2 remote-as 200 neighbor 203.250.15.2 remote-as 100 neighbor 203.250.15.2 update-source loopback 0
Теперь IP routing table будет выглядеть следующим образом:
RouterB# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort not set O E2 200.200.10.0 [110/2000] via 203.250.15.1, 00:00:14, Serial0 O E2 195.211.10.0 [110/2000] via 203.250.15.1, 00:00:14, Serial0 O E2 192.208.10.0 [110/2000] via 203.250.15.1, 00:00:14, Serial0 203.250.13.0 is variably subnetted, 2 subnets, 2 masks O 203.250.13.41 255.255.255.255 [110/75] via 203.250.15.1, 00:00:15, Serial0 O E2 203.250.13.0 255.255.255.0 [110/2000] via 203.250.15.1, 00:00:15, Serial0 203.250.15.0 255.255.255.252 is subnetted, 2 subnets C 203.250.15.8 is directly connected, Loopbackl C 203.250.15.0 is directly connected, Serial0 O 203.250.14.0 [110/74] via 203.250.15.1, 00:00:15, Serial0 128.213.0.0 is variably subnetted, 2 subnets, 2 masks O E2 128.213.0.0 255.255.0.0 [110/2000] via 203.250.15.1, 00:00:l5,Serial0 O 128.213.63.0 255.255.255.252 [110/138] via 203.250.15.1, 00:00:16, Serial0
Теперь записи о BGP маршрутах пропали, поскольку OSPF имеет лучшее значение Administrative Distance (110), чем IBGP (200).
Отключение синхронизации на роутере «A» означает, что роутер «A» анонсирует маршруты к сети 203.250.15.0; Это требуется потому, что роутер «A» не синхронизован с OSPF из-за mask differences. По той же самой причине, синхронизация должна быть отключена на роутере «B», чтобы этот роутер мог анонсировать сеть 203.250.13.0.
Добавим, что OSPF должен быть включен на интерфейсе Serial 1 роутера «B» и быть passive, таким образом роутер «A» узнает о next hop 192.208.10.5 через IGP.
Итак, новые конфигурации роутеров «A» и «B»:
!Router A hostname RouterA ! interface loopback 0 ip address 203.250.13.41 255.255.255.0 ! interface ethernet 0 ip address 203.250.14.1 255.255.255.0 ! interface serial 0 ip address 128.213.63.1 255.255.255.252 ! router ospf 10 redistribute bgp 100 metric 2000 subnets passive-interface serial 0 network 203.250.0.0 0.0.255.255 area 0 network 128.213.0.0 0.0.255.255 area 0 ! router bgp 100 no synchronization network 203.250.13.0 mask 255.255.255.0 network 203.250.14.0 mask 255.255.255.0 neighbor 128.213.63.2 remote-as 200 neighbor 203.250.15.2 remote-as 100 neighbor 203.250.15.2 update-source loopback 0
Конфигурация роутера «B»:
!Router B hostname RouterB ! interface serial 0 ip address 203.250.15.2 255.255.255.252 ! interface serial 1 ip address 192.208.10.6 255.255.255.252 ! router ospf 10 redistribute bgp 100 metric 1000 subnets passive-interface serial 1 network 203.250.0.0 0.0.255.255 area 0 network 192.208.0.0 0.0.255.255 area 0 ! router bgp 100 network 203.250.15.0 neighbor 192.208.10.5 remote-as 300 neighbor 203.250.13.41 remote-as 100
Теперь поднимем Serial 1 на роутере «B» и получим такую таблицу BGP маршрутизации на роутере «A»:
RouterA# show ip bgp table version is 117, local router ID is 203.250.13.41 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 128.213.0.0 128.213.63.2 0 100 0 200 i *>i192.208.10.0 192.208.10.5 0 100 0 300 i *>i195.211.10.0 192.208.10.5 100 0 300 500 i * 128.213.63.2 0 200 400 500 i *> 203.250.13.0 0.0.0.0 0 32768 i *> 203.250.14.0 0.0.0.0 0 32768 i *>i203.250.15.0 203.250.15.2 0 100 0 i
Результаты выполнения команды show ip route на роутере «A»:
RouterA# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort not set 192.208.10.0 is variably subnetted, 2 subnets, 2 masks O E2 192.208.10.0 255.255.255.0 [110/1000] via 203.250.14.2, 00:41:25, Ethernet0 O 192.208.10 4 255.255.255.252 [110/138] via 203.250.14.2, 00:41:25, Ethernet0 C 203.250.13.0 is directly connected, Loopback0 203.250.15.0 is variably subnetted, 3 subnets, 3 masks O 203.250.15.10 255.255.255.255 [110/75] via 203.250.14.2, 00:41:25, Ethernet0 O 203.250.15.0 255.255.255.252 [110/74] via 203.250.14.2, 00:41:25, Ethernet0 B 203.250.15.0 255.255.255.0 [200/0] via 203.250.15.2, 00:41:25 C 203.250.14.0 is directly connected, Ethernet0 128.213.0.0 is variably subnetted, 2 subnets, 2 masks B 128.213.0.0 255.255.0.0 [20/0] via 128.213.63.2, 00:41:26 C 128.213.63.0 255.255.255.252 is directly connected, Serial0 B* 200.200.0.0 255.255.0.0 [20/0] via 128.213.63.2, 00:02:38
Результаты выполнения команды show ip bgp на роутере «B»:
RouterB# show ip bgp table version is 12, local router ID is 203.250.15.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *>i128.213.0.0 128.213.63.2 0 100 0 200 i * 192.208.10.5 0 300 500 400 200 i *> 195.208.10.0 192.208.10.5 0 0 300 i *> 195.211.10.0 192.208.10.5 0 300 500 i *>i200.200.10.0 128.213.63.2 100 0 200 400 i *> 192.208.10.5 0 300 500 400 i *>i203.250.13.0 203.250.13.41 0 100 0 i *>i203.250.14.0 203.250.13.41 0 100 0 i *> 203.250.15.0 0.0.0.0 0 32768 i
IV.5 Managing Asymmetry
Существует несколько путей для соединения сетей AS100 с сетями ISP’ов в AS200 и AS300.
Один путь это — подключение через primary ISP и наличие backup ISP. AS100 может получать часть маршрутов от одного ISP, и иметь default routes к обоим ISP. В этом случае, AS100 получает часть маршрутов от AS200 и только local routes от AS300. Оба роутера, «A» и «B», generate default routes в OSPF, с более предпочтительным маршрутом к роутеру «B», поскольку он имеет меньший MED attribute. Это позволяет управлять outgoing traffic’ом к двум граничным с вами ISP.
Потенциальная asymmetry может случиться в том случае, если траффик, уходящий через роутер «A», вернется назад через роутер «B». Это может случиться в том случае, если вы анонсируете свои сети обоим ISP. Вовне вашей AS ваши сети будут достижимы через любого из ваших провайдеров — то есть в конечном итоге к вашим сетям траффик может идти как через «A», так и через «B». В этом случае вы можете обнаружить, что весь incoming traffic в вашу AS идет только через одного провайдера, несмотря на то, что на самом деле их двое.
Одна потенциальная причина этого явления — различная длина AS_path для достижения вашей AS извне. Например, траффик с AS400 всегда будет приходить через AS100 — потому что эта AS_path короче. Вы можете изменить это с помощью команды route-map, используя ключевое слово «prepend» для искусственного удлинения AS_path. Но, если на AS400 каким-либо образом удастся установить exit point через AS200 (с помощью lpref, MED, weight), то вы уже ничего не сможете изменить.
IV.5 Final Configurations
Итак, заключительная конфигурация роутера «A»:
!Router A hostname RouterA ! interface loopback 0 ip address 203.250.13.41 255.255.255.0 ! interface ethernet 0 ip address 203.250.14.1 255.255.255.0 ! interface serial 0 ip address 128.213.63.1 255.255.255.252 ! router ospf 10 redistribute bgp 100 metric 2000 subnets passive-interface serial 0 network 203.250.0.0 0.0.255.255 area 0 network 128.213.0.0 0.0.255.255 area 0 default-information originate metric 2000 ! router bgp 100 no synchronization neighbor 128.213.63.2 remote-as 200 neighbor 128.213.63.2 route-map setlocalpref in neighbor 203.250.15.2 remote-as 100 neighbor 203.250.15.2 update-source loopback 0 ! ip default-network 200.200.0.0 ! route-map setlocalpref permit 10 set local-preference 200
Заключительная конфигурация роутера «A» устанавливает lpref для маршрутов, пришедших от AS200, равным 200. В данной конфигурации также используется команда ip default-network 200.200.0.0 для указания сети 200.200.0.0 как какндидата в default route.
Команда конфигурации роутера default-information originate metric 2000 используется для добавления default route в OSPF domain. Для RIP, сеть 0.0.0.0 автоматически redistributed в RIP без дополнительных команд конфигурации. Для IGRP и Enhanced IGRP, default information добавляется в IGP domain после того, как BGP redistributed. Также, с IGRP и Enhanced IGRP, вы можете redistribute a static route для 0.0.0.0 в IGP domain.
Ниже приведена конфигурация роутера «B»:
!Router B hostname RouterB ! interface serial 0 ip address 203.250.15.2 255.255.255.252 ! interface serial 1 ip address 192.208.10.6 255.255.255.252 ! router ospf 10 redistribute bgp 100 metric 1000 subnets passive-interface serial 1 network 203.250.0.0 0.0.255.255 area 0 network 192.208.0.0 0.0.255.255 area 0 default-information originate metric 1000 ! router bgp 100 no synchronization network 203.250.15.0 neighbor 192.208.10.5 remote-as 300 neighbor 192.208.10.5 route-map LOCALONLY in neighbor 203.250.13.41 remote-as 100 ! ip default-network 192.208.10.0 ip as-path access-list 1 permit ^300 500$ ip as-path access-list 2 permit ^300$ ! route-map LOCALONLY permit 10 match as-path 1 set local-preference 300 ! route-map LOCALONLY permit 20 match as-path 2
В конфигурации роутера «B» устанавливается lpref=300 для update’ов, пришедших из AS300 и имеющих AS_path=300,500 или AS_path=300; Этот lpref больше, чем lpref у IBGP update’ов, пришедших от роутера «A». Поэтому AS100 будет выбирать Router B для маршрутов к AS500. Все остальные маршруты на роутере «B» будут отправлены по внутренним маршрутам с lpref=100, который меньше, чем lpref 200 у маршрутов, пришедших с роутера «A». Все это позволяет использовать роутер «A», как наиболее предпочтительный. В дальнейшем, в связи с длиной AS_path Attribute, роутер «B» используется для достижения сетей в AS300.
Заметим, что роутер «B» принимает только маршруты от AS300 и AS500. Update’ы, чьи AS_path не содержат данный AS, удаляются. Если вы хотите анонсировать local routes и neighbor routes (клиентов ISP), вы можете использовать ^300_[0-9]* в качестве регулярного выражения.
RouterB# show bgp regexp ^300$ BGP table version is 14, local router ID is 203.250.15.2 Status code: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.208.10.0 192.28.10.5 0 300 0 300
Рассмотрим теперь окончательную конфигурацию роутера «C»:
!Router C hostname RouterC ! interface loopback 0 ip address 128.213.63.130 255.255.255.192 ! interface serial 2/0 ip address 128.213.63.5 255.255.255.252 ! interface serial 2/1 ip address 128.213.63.2 255.255.255.252 ! router bgp 200 network 128.213.0.0 aggregate-address 128.213.0.0 255.255.0.0 summary-only neighbor 128.213.63.1 remote-as 100 neighbor 128.213.63.1 distribute-list 1 out neighbor 128.213.63.6 remote-as 400 ! access-list 1 deny 195.211.0.0 0.0.255.255 access-list 1 permit any
Конфигурация роутера «C» анонсирует сеть 128.213.0.0/16 и указывает маршруты, которые будут переданы в AS100.
Окончательная конфигурация роутера «D»:
!Router D hostname RouterD ! interface loopback 0 ip address 192.208.10.174 255.255.255.192 ! interface serial 0/0 ip address 192.208.10.5 255.255.255.252 ! interface serial 0/1 ip address 192.208.10.2 255.255.255.252 ! router bgp 300 network 192.208.10.0 neighbor 192.208.10.1 remote-as 500 neighbor 192.208.10.6 remote-as 100
Конфигурация роутера «E»:
!Router E hostname RouterE ! interface loopback 0 ip address 200.200.10.1 255.255.255.0 interface serial 0 ip address 195.211.10.2 255.255.255.252 ! interface serial 1 ip address 128.213.63.6 255.255.255.252 ! router bgp 400 network 200.200.10.0 aggregate-address 200.200.0.0 255.255.0.0 summary-only neighbor 128.213.63.5 remote-as 200 neighbor 195.211.10.1 remote-as 500
Как видно, роутер «E» анонсирует сеть 200.200.0.0/16.
Теперь — окончательная конфигурация роутеров «F» и «G»:
!Router F hostname RouterF ! interface ethernet 0 ip address 203.250.14.2 255.255.255.0 ! interface serial 1 ip address 203.250.15.1 255.255.255.252 ! router ospf 10 network 203.250.0.0 0.0.255.255 area 0 !Router G hostname RouterG ! interface loopback 0 ip address 195.211.10.174 255.255.255.192 ! interface serial 0 ip address 192.208.10.1 255.255.255.252 ! interface serial 1 ip address 195.211.10.1 255.255.255.252 ! router bgp 500 network 195.211.10.0 aggregate-address 195.211.0.0 255.255.0.0 summary-only neighbor 192.208.10.2 remote-as 300 neighbor 192.208.10.2 send-community neighbor 192.208.10.2 route-map setcommunity out neighbor 195.211.10.2 remote-as 400 ! access-list 2 permit any access-list 101 permit ip 195.211.0.0 0.0.255.255 255.255.255.0 0.0.0.255 ! route-map setcommunity permit 10 match ip address 101 set community no-export ! route-map setcommunity permit 20 match ip address 2
В конфигурации роутера «G» демонстрируется использование community filtering’а с добавлением «no-export» community в more specific Class C routes 195.211.0.0/16, которые посылаются роутеру «D». Роутер «D» не передает маршруты роутеру «B».
В результате, таблица BGP маршрутизации на роутере «A»:
RouterA# show ip bgp table version is 21, local router ID is 203.250.13.41 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 128.213.0.0 128.213.63.2 0 200 0 200 i *>i192.208.10.0 192.208.10.5 0 300 0 300 i *> 200.200.0.0/16 128.213.63.2 200 0 200 400 i *> 203.250.13.0 0.0.0.0 0 32768 i *> 203.250.14.0 0.0.0.0 0 32768 i *>i203.250.15.0 203.250.15.2 0 100 0 i
Таперь — таблица маршрутизации IP на роутере «A»:
RouterA# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort is 128.213.63.2 to network 200.200.0.0 192.208.10.0 is variably subnetted, 2 subnets, 2 masks O E2 192.208.10.0 255.255.255.0 [110/1000] via 203.250.14.2, 00:41:25, Ethernet0 O 192.208.10.4 255.255.255.252 [110/138] via 203.250.14.2, 00:41:25, Ethernet0 C 203.250.13.0 is directly connected, Loopback0 203.250.15.0 is variably subnetted, 3 subnets, 3 masks O 203.250.15.10 255.255.255.255 [110/75] via 203.250.14.2, 00:41:25, Ethernet0 O 203.250.15.0 255.255.255.252 [110/74] via 203.250.14.2, 00:41:25, Ethernet0 B 203.250.15.0 255.255.255.0 [200/0] via 203.250.15.2, 00:41:25 C 203.250.14.0 is directly connected, Ethernet0 128.213.0.0 is variably subnetted, 2 subnets, 2 masks B 128.213.0.0 255.255.0.0 [20/0] via 128.213.63.2, 00:41:26 C 128.213.63.0 255.255.255.252 is directly connected, Serial0 B* 200.200.0.0 255.255.0.0 [20/0] via 128.213.63.2, 00:02:38
Таблица маршрутизации на роутере «F»:
RouterF# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort is 203.250.15.2 to network 0.0.0.0 192.208.10.0 is variably subnetted, 2 subnets, 2 masks O E2 192.208.10.0 255.255.255.0 [110/1000] via 203.250.15.2, 00:48:50, Serial1 O 192.208.10.4 255.255.255.252 [110/128] via 203.250.15.2, 01:12:09, Serial1 203.250.13.0 is variably subnetted, 2 subnets, 2 masks O 203.250.13.41 255.255.255.255 [110/11] via 203.250.14.1, 01:12:09, Ethernet0 O E2 203.250.13.0 255.255.255.0 [110/2000] via 203.250.14.1, 01:12:09, Ethernet0 203.250.15.0 is variably subnetted, 2 subnets, 2 masks O 203.250.15.10 255.255.255.255 [110/65] via 203.250.15.2, 01:12:09, Serial1 C 203.250.14.0 is directly connected, Ethernet0 128.213.0.0 255.255.0.0 is variably subnetted, 2 subnets, 2 masks O E2 128.213.0.0 255.255.0.0 [110/2000] via 203.250.14.1, 00:45:01, Ethernet0 O E2 200.200.0.0 255.255.0.0 [110/1000] via 203.250.14.1, 00:03:47, Ethernet0 O*E2 0.0.0.0 0.0.0.0 [110/1000] via 203.250.15.2, 00:03:33, Serial1
Заметим, что на роутере «F» указывается, что сети локальные к AS300, такие как 192.208.10.0, достигаются через роутер «B». Другие известные сети, такие как 200.200.0.0, достижимы через роутер «A». Шлюз для последнего обращения — роутер «B». Если что-либо случится с соединением между роутерами «B» и «D», то default advertised by Router «A» will kick in with MED attribute of 2000.
Таблица BGP маршрутизации на роутере «B»:
RouterB# show ip bgp table version is 14, local router ID is 203.250.15.10 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *>i128.213.0.0 128.213.63.2 0 200 0 200 i *> 192.208.10.0 192.208.10.5 0 300 0 300 i *>i200.200.0.0/16 128.213.63.2 200 0 200 400 i *>i203.250.13.0 203.250.13.41 0 100 0 i *>i203.250.14.0 203.250.13.41 0 100 0 i *> 203.250.15.0 0.0.0.0 0 32768 i
IP routing table на роутере «B»:
RouterB# show ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default Gateway of last resort is 203.250.15.2 to network 192.208.10.0 * 192.208.10.0 is variably subnetted, 2 subnets, 2 masks B* 192.208.10.0 255.255.255.0 [20/0] via 192.208.10.5, 00:50:46 C 192.208.10.4 255.255.255.252 is directly connected, Serial1 203.250.13.0 is variably subnetted, 2 subnets, 2 masks O 203.250.13.41 255.255.255.255 [110/75] via 203.250.15.1, 01:20:33, Serial0 O E2 203.250.13.0 255.255.255.0 [110/2000] via 203.250.15.1, 01:15:40, Serial0 203.250.15.0 255.255.255.252 is subnetted, 2 subnets, 2 masks O 203.250.15.10 255.255.255.255 [110/65] via 203.250.15.2, 01:12:09, Serial1 C 203.250.14.0 is directly connected, Ethernet0 128.213.0.0 255.255.0.0 is variably subnetted, 2 subnets C 203.250.15.8 id directly connected, Loopback1 C 203.250.15.0 is directly connected, Serial0 O 203.250.14.0 [110/74] via 203.250.15.1, 01:20:33, Serial0 128.213.0.0 is variably subnetted, 2 subnets, 2 masks O E2 128.213.0.0 255.255.0.0 [110/2000] via 203.250.15.1, 00:46:55, Serial0
V. Summary
Основная функция BGP — обмен информацией о путях к сетям с другими BGP системами. Эта информация использует graph of AS connectivity, к котором устранены зацикливания и с которым используется AS-level policy decision. BGP предоставляет механизм управления потоком передаваемых маршрутов, это route, path и community Filtering. Он также содержит методы об’единения маршрутов, такие как CIDR aggregation, Confederations, и Route Reflectors. BGP — это высокоэффективное средство обеспечения маршрутизации без зацикливаний между Автономными системами и в пределах одной Автономной Систсемы.
- Внутридоменный (Internal) BGP