Протокол граничного шлюза - Border Gateway Protocol (BGP).
Это основной протокол динамической маршрутизации в сети Интернет. Относится к классу протоколов маршрутизации внешнего шлюза (External Gateway Protocol – EGP). BGP поддерживает бесклассовую адресацию и спользует суммирование маршрутов для уменьшения таблиц маршрутизации. На текущий момент используется четвертая версия протокола.
BGP функционирует поверх транспортного уровня TCP (порт 179). Протокол предназначен для обмена информацией о достижимости подсетей между автономными системами (AS - autonomous system), то есть группами маршрутизаторов под единым техническим и административным управлением, использующими протокол внутридоменной маршрутизации для определения маршрутов внутри себя и протокол междоменной маршрутизации для определения маршрутов доставки пакетов в другие АС. Передаваемая информация включает в себя список АС, к которым имеется доступ через данную систему. Выбор наилучших маршрутов осуществляется исходя из правил, принятых в сети.
Рассмотрим как выглядит базовая конфигурация BGP на устройствах Huawei.
Предположим, что у нас есть три автономные системы (Рисунок 1):
· AS50 включает только один BGP маршрутизатор (R1), который устанавливает одну EBGP сессию с AS500.
· AS500 включает три маршрутизатора (R2, R3, R4), которые образуют IBGP full mesh топологию.
· AS5000 включает один маршрутизатор R5, который устанавливает две сессии с AS500.
R1, принадлежащий AS50, будет объявлять три сети в AS5000. R5 должен получить все три сети и иметь доступ к ним (пинговать).
Рисунок 1. Архитектура системы
Приступим к настройке BGP.
Во-первых настроим R1, должен быть запущен процесс AS50 и устанавливалась сессия с R2 в AS500:
[R1] interface Ethernet 0/0/0
[R1-Ethernet0/0/0] ip address 5.228.12.1 24
[R1] bgp 50
[R1-bgp] undo synchronization
[R1-bgp] undo summary automatic
[R1-bgp] peer 5.228.12.2 as-number 500
Далее перейдем к настройке AS500 на маршрутизаторе R2:
[R2] interface Ethernet 0/0/0
[R2-Ethernet0/0/0] ip address 5.228.12.2 24
[R2] interface GigabitEthernet0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.23.2 24
[R2] interface Ethernet 0/0/1
[R2-Ethernet0/0/1] ip address 192.168.24.2 24
[R2] bgp 500
[R2-bgp] undo synchronization
[R2-bgp] undo summary automatic
[R2-bgp] peer 5.228.12.1 as-number 50
Проверим нашу EBGP сессию между AS50 и AS500:
[R1-bgp] display bgp peer
BGP local router ID : 5.228.12.1
Local AS number : 50
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
5.228.12.2 4 500 4 5 0 00:02:24 Established 0
EBGP сессия между AS50 и AS500 установлена (Established), теперь можем приступить к настройке IBGP сессий в AS500. Для этого будем использовать peer группу с именем iBGP. Мы можем настроить каждое соседство по отдельности и назначить каждому свои BGP параметры, но в данном примере, для упрощения и сокращения конфигурации, мы настроим peer group (группа соседей), где все параметры будут назначены группе.
[R2] bgp 500
[R2-bgp] group iBGP internal
[R2-bgp] peer iBGP next-hop-local
[R2-bgp] peer 192.168.23.3 group iBGP
[R2-bgp] peer 192.168.24.4 group iBGP
Мы создали iBGP peer группу и присвоили ей тип internal. При использовании internal группы, не обязательно присваивать группе номер AS. Каждый пир, принадлежащий данной группе, получит номер локальнойAS. Давайте проверим BGP конфигурацию на маршрутизаторе R2:
bgp 500
peer 5.228.12.1 as-number 50
group iBGP internal
peer 192.168.23.3 as-number 500
peer 192.168.23.3 group iBGP
peer 192.168.24.4 as-number 500
peer 192.168.24.4 group iBGP
#
ipv4-family unicast
undo synchronization
peer 5.228.12.1 enable
peer iBGP enable
peer iBGP next-hop-local
peer 192.168.23.3 enable
peer 192.168.23.3 group iBGP
peer 192.168.24.4 enable
peer 192.168.24.4 group iBGP
Все параметры группы iBGP будут назначены маршрутизаторам соседям.
Далее настроим маршрутизаторы R3 и R4.
Также сразу пропишем настройки для установления соседства с R5:
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 192.168.34.3 24
[R3] interface Serial 0/0/0
[R3-Serial0/0/0] ip address 5.228.35.3 24
[R3] bgp 500
[R3-bgp] undo synchronization
[R3-bgp] undo summary automatic
[R3-bgp] group iBGP internal
[R3-bgp] peer iBGP next-hop-local
[R3-bgp] peer 192.168.23.2 group iBGP
[R3-bgp] peer 192.168.34.4 group iBGP
[R3-bgp] peer 5.228.35.5 as-number 5000
[R4] interface Ethernet 0/0/1
[R4-Ethernet0/0/1] ip address 192.168.24.4 24
[R4] interface GigabitEthernet 0/0/1
[R4-GigabitEthernet0/0/1] ip address 192.168.34.4 24
[R4] interface Ethernet 0/0/0
[R4- Ethernet 0/0/0] ip address 5.228.45.4 24
[R4] bgp 500
[R4-bgp] undo synchronization
[R4-bgp] undo summary automatic
[R4-bgp] group iBGP internal
[R4-bgp] peer iBGP next-hop-local
[R4-bgp] peer 192.168.24.2 group iBGP
[R4-bgp] peer 192.168.34.3 group iBGP
[R4-bgp] peer 5.228.45.5 as-number 5000
Проверим конфигурациюBGP на маршрутизаторах R3 и R4:
[R3-bgp] display this
#
bgp 500
peer 5.228.35.5 as-number 5000
group iBGP internal
peer 192.168.23.2 as-number 500
peer 192.168.23.2 group iBGP
peer 192.168.34.4 as-number 500
peer 192.168.34.4 group iBGP
ipv4-family unicast
undo synchronization
peer 5.228.35.5 enable
peer iBGP enable
peer iBGP next-hop-local
peer 192.168.23.2 enable
peer 192.168.23.2 group iBGP
peer 192.168.34.4 enable
peer 192.168.34.4 group iBGP
[R3-bgp] display bgp peer
BGP local router ID : 192.168.23.3
Local AS number : 500
Total number of peers : 3 Peers in established state : 3
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
5.228.35.5 4 5000 0 0 0 00:09:49 Idle 0
192.168.23.2 4 500 4 5 0 00:02:13 Established 0
192.168.34.4 4 500 6 6 0 00:04:42 Established 0
[R4-bgp] display this
#
bgp 500
peer 5.228.45.5 as-number 5000
group iBGP internal
peer 192.168.24.2 as-number 500
peer 192.168.24.2 group iBGP
peer 192.168.34.3 as-number 500
peer 192.168.34.3 group iBGP
ipv4-family unicast
undo synchronization
peer 5.228.45.5 enable
peer iBGP enable
peer iBGP next-hop-local
peer 192.168.24.2 enable
peer 192.168.24.2 group iBGP
peer 192.168.34.3 enable
peer 192.168.34.3 group iBGP
[R4-bgp] display bgp peer
BGP local router ID : 192.168.24.4
Local AS number : 500
Total number of peers : 3 Peers in established state : 3
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
5.228.45.5 4 5000 0 0 0 00:07:14 Idle 0
192.168.24.2 4 500 6 6 0 00:04:02 Established 0
192.168.34.3 4 500 8 8 0 00:06:42 Established 0
Все настроено верно.Теперь приступим к настройке R5:
[R5] interface Ethernet 0/0/0
[R5-Ethernet0/0/0] ip address 5.228.45.5 24
[R5] interface Serial 0/0/0
[R5-Serial0/0/0] ip address 5.228.35.5 24
[R5] bgp 5000
[R5-bgp] undo synchronization
[R5-bgp] undo summary automatic
[R5-bgp] peer 5.228.35.3 as-number 500
[R5-bgp] peer 5.228.45.4 as-number 500
[R5-bgp] display bgp peer
BGP local router ID : 5.228.35.5
Local AS number : 5000
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
5.228.35.3 4 500 2 2 0 00:02:20 Established 0
5.228.45.4 4 500 2 2 0 00:02:10 Established 0
R5 установил соседство с R3 и R4. На этом настройка BGP окончена.
Следующим шагом мы хотим чтобы AS50 начала объявлять нужные нам маршруты. Эти маршруты должна получить AS5000. Воспользуемся loopback интерфейсами для симуляции сетей, подключенных к R1. Присваиваем интерфейсам IP адреса и далее добавляем сети в наш bgp процесс:
[R1] interface LoopBack0
[R1-LoopBack0] ip address 10.0.0.1 24
[R1-LoopBack0] interface LoopBack1
[R1-LoopBack1] ip address 11.0.0.1 24
[R1-LoopBack1] interface LoopBack2
[R1-LoopBack2] ip address 12.0.0.1 24
[R1] bgp 50
[R1-bgp] network 10.0.0.0 24
[R1-bgp] network 11.0.0.0 24
[R1-bgp] network 12.0.0.0 24
Проверим объявляет ли R1 наши сети:
[R1] display bgp routing-table
BGP Local router ID is 5.228.12.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.0.0/24 0.0.0.0 0 0 i
*> 11.0.0.0/24 0.0.0.0 0 0 i
*> 12.0.0.0/24 0.0.0.0 0 0 i
Как видим, конфигурация в порядке. Эти сети должны проходить AS500 до AS5000. Давайте проверим bgp таблицу на R5:
[R5] display bgp routing-table
BGP Local router ID is 5.228.35.5
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.0.0/24 5.228.35.3 0 500 50i
* 5.228.45.4 0 500 50i
*> 11.0.0.0/24 5.228.35.3 0 500 50i
* 5.228.45.4 0 500 50i
*> 12.0.0.0/24 5.228.35.3 0 500 50i
* 5.228.45.4 0 500 50i
Как видим, все три сети присутствуют в bgp таблице маршрутизатора R5. Лучшим путь в эти сети проходит через маршрутизатор R3. R5 получил маршруты, но сможем ли мы получить доступ в какую-либо из этих сетей? Давайте проверим:
[R5] ping 10.0.0.1
PING 10.0.0.1: 56 data bytes, press CTRL_C to break
Request time out
Request time out
Request time out
Request time out
Request time out
--- 10.0.0.1 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss
Пинг не проходит.
Давайте разбираться что не так. BGP таблица в порядке, проверим таблицу маршрутизации на R5:
[R5] display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 10 Routes : 10
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.228.35.0/24 Direct 0 0 D 5.228.35.5 Serial0/0/0
5.228.35.3/32 Direct 0 0 D 5.228.35.3 Serial0/0/0
5.228.35.5/32 Direct 0 0 D 127.0.0.1 Serial0/0/0
5.228.45.0/24 Direct 0 0 D 5.228.45.5 Ethernet0/0/0
5.228.45.5/32 Direct 0 0 D 127.0.0.1 Ethernet0/0/0
10.0.0.0/24 EBGP 255 0 D 5.228.35.3 Serial0/0/0
11.0.0.0/24 EBGP 255 0 D 5.228.35.3 Serial0/0/0
12.0.0.0/24 EBGP 255 0 D 5.228.35.3 Serial0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
Как видим все три маршрута присутствуют в таблице маршрутизации R5. Значит BGP настроен правильно. Так в чем же дело? Для выявления проблемы нам поможет протокол ICMP с icmp debugging. Настроим debug icmp на R1 и проверим source IP адрес icmp пакета отсылаемого маршрутизатором R5:
<R1> debugging ip icmp
<R1> terminal monitor
<R1> terminal debugging
Теперь снова запустим пинг на маршрутизаторе R5:
[R5] ping 10.0.0.1
PING 10.0.0.1: 56 data bytes, press CTRL_C to break
Request time out
Request time out
Проверимdebug выводнаR1:
<R1>
Apr 8 2019 10:09:00.10.1-08:00 R1 IP/7/debug_icmp:
ICMP Receive: echo(Type=8, Code=0), Src = 5.228.35.5, Dst = 10.0.0.1, ICMP Id = 0xabce, ICMP Seq = 1
Apr 8 2019 10:09:00.10.2-08:00 R1 IP/7/debug_icmp:
ICMP Send: echo-reply(Type=0, Code=0), Src = 10.0.0.1, Dst = 5.228.35.5, ICMP Id= 0xabce, ICMP Seq = 1
Как видим, R1 получает icmp echo пакеты и отправляет echo-reply в ответ на адрес 5.228.35.5. Давайте проверим, есть ли сеть 5.228.35.0/24 в таблице маршрутизации R1:
[R1] display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 10 Routes : 10
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.228.12.0/24 Direct 0 0 D 5.228.12.1 Ethernet0/0/0
5.228.12.1/32 Direct 0 0 D 127.0.0.1 Ethernet0/0/0
10.0.0.0/24 Direct 0 0 D 10.0.0.1 LoopBack0
10.0.0.1/32 Direct 0 0 D 127.0.0.1 LoopBack0
11.0.0.0/24 Direct 0 0 D 11.0.0.1 LoopBack1
11.0.0.1/32 Direct 0 0 D 127.0.0.1 LoopBack1
12.0.0.0/24 Direct 0 0 D 12.0.0.1 LoopBack2
12.0.0.1/32 Direct 0 0 D 127.0.0.1 LoopBack2
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
R1 не знает пути до сети 5.228.35.0/24. Решить эту проблему можно двумя способами. Самый простой – объявить сеть 5.228.35.0/24 в bgp протоколе. Второй способ – настроить дополнительный IGP протокол между нашими маршрутизатрами и объявить все необходимые сети. Мы воспользуемся первым способом:
[R5] bgp 5000
[R5-bgp] network 5.228.35.0 24
Теперь еще раз попробуем пропинговать BGP сеть:
[R5-bgp] ping 10.0.0.1
PING 10.0.0.1: 56 data bytes, press CTRL_C to break
Reply from 10.0.0.1: bytes=56 Sequence=1 ttl=253 time=190 ms
Reply from 10.0.0.1: bytes=56 Sequence=2 ttl=253 time=160 ms
Reply from 10.0.0.1: bytes=56 Sequence=3 ttl=253 time=120 ms
Reply from 10.0.0.1: bytes=56 Sequence=4 ttl=253 time=110 ms
Reply from 10.0.0.1: bytes=56 Sequence=5 ttl=253 time=150 ms
--- 10.0.0.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 110/146/190 ms
Как видим R5 успешно пингует BGP сети, объявляемые маршрутизатором R1. Задача выполнена.