BGP между роутерами, принадлежащими к одной автономной системе (AS), называется внутренним (iBGP), между роутерами, принадлежащими к различным AS — внешним (eBGP). Конфигурирование iBGP и eBGP производится одинаково (за исключением команды «neighbor ebgp-multihop», применяемой только для eBGP), однако, логика функционирования iBGP и eBGP имеет отличия, которые будут ясны из дальнейшего.
Рис.1 :
Прежде чем сообщать информацию о роутинге во внешнюю AS, BGP убеждается в том, что анонсируемые сети доступны, то есть пути до них известны посредством одного из внутренних протоколов роутинга (IGP) — IGRP, IS-IS, RIP, OSPF.
BGP использует TCP-соединение по порту 179 для обмена информацией о роутинге. Любые два роутера, установившие такое соединение между собой считаются <соседями> (neighbors или peers). Информация о роутинге содержит последовательность номеров автономных систем (AS), описявающих путь до кнкретной сети. Эта информация используется BGP для построения карты AS.
Заметим, что внутри AS <соседи> по BGP не обязательно должны иметь прямое соединение между собой.
BGP-peers при установлении соединения обмениваются своими полными таблицами роутинга BGP. Впоследствии они обмениваются только информацией о изменениях в таблицах.
Ниже приведены конфигурации BGP для роутеров, изображенных на рис.1,
Роутер — A
router bgp 100
neighbor 129.213.1.1 remote-as 200
Роутер — B
router bgp 200
neighbor 129.213.1.2 remote-as 100
neighbor 175.220.1.2 remote-as 200
Роутер C
router bgp 200
neighbor 175.220.212.1 remote-as 200
neighbor 192.208.10.1 remote-as 300
Роутер D
router bgp 300
neighbor 192.208.10.2 remote-as 200
Команда router bgp включает процессы BGP в роутере и задает номер AS, к которой принадлежит данный роутер.
Команда «neighbor : remote-as :» добавляет запись в таблицу <соседей> (BGP-peers) и указывает IP-адрес соседа и принадлежность его к AS. В случае eBGP соседи обычно связаны непосредственно и IP-адрес — это адрес интерфейса на другой стороне соединения (исключения см. в описании команды ebgp-multihop). В случае iBGP — IP-адрес — это адрес любого интерфейса роутера-соседа.
Некоторые комментарии к рис.1:
Роутеры A и B связаны по eBGP, роутеры B и C — по iBGP. Заметим, что iBGP-peers не имеют непосредственного соединения между собой. Это нормальное явление, если внутри AS функционирует какой-либо внутренний протокол роутинга (IGP).
Все роутеры, использующие BGP внутри одной AS должны быть связаны между собой и образовывать полносвязную структуру. Это требование может быть снято использованием конфедераций или <отражателей> (route-reflectors).
AS 200 является транзитной для AS 100 и AS 300, т.е. AS 200 используется для передачи пакетов между AS 100 и AS 300.
Для проверки состояния BGP используется группа команд «sho ip bgp :«
Пример выводы команды «sho 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
Если в разделе «BGP state» указано что-то кроме established, то BGP-соединение неработоспосбно.
Когда производятся изменения в конфигурации BGP-peer для того, чтобы они стали действительными необходимо сбросить текущую сессию и запустить ее вновь. Это делается командой «clear ip bgp
Внутренний BGP (iBGP)
С помощью iBGP информация, полученная извне AS по eBGP распространяется внутри AS. Использование iBGP не является обязательным, полученная информация может быть введена в какой-либо IGP и распространяться с его помощью. Однако, при использовании iBGP система получается более гибкой и удобной в управлении.
Рис. 2 — iBGP
Конфигурация роутеров
!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-peer, числящегося в той же самой AS (то есть по iBGP), то он распространяет ее только своим соседям по eBGP. Эта особенность iBGP объясняет требование, чтобы все BGP-роутеры внутри AS образовывали полносвязную структуру.
Loopback-интерфейсы
При конфигурировании iBGP часто используются loopback-интерфейсы. Это позволяет избежать зависимости состояния BGP-сессий от состояния конкретного физического интерфейса.
Рис.3
Если бы в конфигурации роутера A в качестве IP-адреса <соседа> был указан адрес одного из интерфейсов роутера B, то при выключении или аварии на данном интерфейсе BGP-сессия будет сброшена. При использовании loopback-интерфейса BGP-сессия может быть установлена вне зависимости от состояния каких-либо интерфейсов.
!Router A
router bgp 100
neighbor 150.212.1.1 remote-as 100
!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
Модификатор «update-source» в конфигурации BGP указывает, что для установления BGP-сессии c данным <соседом> нужно использовать адрес указанного интерфейса.
Внешний BGP (eBGP)
Когда BGP-<соседи> принадлежат к разным AS, они считаются связанными по eBGP.
Как правило, eBGP-соседи соединены непосредственно. Если же это не так, то для установления сессии между ними необходимо использовать модификатор ebgp-multihop.
Такое включение может использоваться для балансировки нагрузки на параллельных каналах.
Рис.2 Балансировка нагрузки на параллельных каналах
!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
!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
Синхронизация
Если через AS проходит транзитный траффик других AS и если в составе AS есть роутеры, не работающие с BGP, то транзитный траффик может <пропадать> внутри AS, если промежуточным роутерам не будет известен путь, который они могут язнать только посредством IGP. Чтобы этого не произошло, введено требование синхронизации BGP с IGP.
BGP-роутер не объявляет через BGP пути, которые неизвестны ему по IGP.
Рис.3 Синхронизация
На рис.3 роутер C анонсирует сеть 170.10.0.0 роутеру A. Роутеры A и B — iBGP-peers, поэтому роутер B получает информацию о сети 170.10.0.0 по iBGP. Не имея прямого соединения с роутером A, роутер B посылает траффик для сети 170.10.0.0 через роутер E. Если роутер A не проанонсировал сеть 170.10.0.0 по IGP, то роутер E не знает, куда направлять траффик для этой сети и будет его отбрасывать.
Если роутер B сообщит в AS 400 информацию о сети 170.10.0.0 до того, как роутер E получит эту информацию по IGP, то траффик направляемый из AS 400 в адрес сети 170.10.0.0 также
<умрет> в роутере E.
Чтобы избежать этого, роутер B анонсирует информацию о сети 170.10.0.0, полученную от роутера A по iBGP, своему eBGP-соседу только после того, как получит информацию об этой сети еще и по IGP. Это гарантирует, что траффик на анонсируемую сеть достигнет точки выхода из AS.
Синхронизацию можно отключить в следующих случаях:
- AS не пропускает транизтный траффик других AS через себя
- Все роутеры внутри AS используют BGP.
Использование route-maps в BGP
Route-maps используются в BGP для управления информацией о роутинге и ее модификации при необходимости. Формат route-map следующий:
route-map map-tag [[permit | deny] | [sequence-number]]
BGP сначала применяет правила с наименьшим sequence-number, далее по возрастающей. Если какое-либо условие выполняется, то производятся действия, определенные для этого условия и просмотр условий прекращается.
Для задания условий (критериев) используется команда match, для задания действий при выполнении заданных условий — команда set.
Пример:
route-map MYMAP permit 10
match ip address 1.1.1.1
set metric 5
Если информация касается IP-адреса 1.1.1.1, то BGP устанавливает метрику для данной информации, равную 5, пересылает ее BGP-соседу (слово permit в описании route-map) и заканчивает просмотр route-map.
Если информация не удовлетворяет заданному условию, то применяется следующее условие, до тех пор, пока не будет найдено свопадение или не останется больше условий. Если информация не удовлетворила ни одному из условий, она просто отбрасывается и никому не пересылается.
Если информация удовлетворила условию с ключевым словом deny, то она отбрасывается.
Анонсирование сетей
О сети, расположенной внутри AS говорится, что она <происходит> (originated) из этой AS. Чтобы проинформировать другие AS о ней, AS анонсирует ее. Существует три способа проанонсировать сети по BGP:
- Инжекция статических путей
- Инжекция динамических путей
- Использование команды network
Следует отметить, что роутер не только анонсирует заданные в его конфигурации сети, то также всегда распространяет информацию, полученную от других роутеров по BGP.
Следует также отметить, что способы, связанные с инжекцией (redistributing) информации из других протоколов роутинга в BGP содержат большое количество потенциальных опасностей и, в типичных ситуациях, применение их неоправданно. Поэтому, далее рассматривается только способ анонсирования сетей с использованием команды network.
Использовании команды network
В конфигурации BGP с помощью команды network задаются те сети, которые AS должна анонсировать. Следует заметить, что и здесь действует что-то вроде синхронизации, анонсирование не будет произведено, если BGP-роутер не имеет информации о роутинге на данную сеть, полученной через IGP или установленной статически.
Пример: роутер C анонсирует сеть 175.220.0.0
!Router C
router bgp 200
neighbor 1.1.1.1 remote-as 300
network 175.220.0.0
Алгоритм выбора путей в BGP
Когда роутер с BGP получает анонсы от разных AS, содержащие различные пути к одной точке назначения, он обязан выбрать один, <лучший> путь. После того, как этот выбор сделан, роутер распространяет информацию о нем (и только о нем!) своим соседям. Выбор производится на основе анализа целого ряда атрибутов, перечисленных ниже.
Атрибут AS_path
Когда информация проходит через какую-либо AS , BGP-роутер добавляет свой номер AS к этой информации. Таким образом формируется атрибут AS-path, содержащий упорядоченный список AS, через которые эта информация прошла.
Атрибут Origin
Этот атрибут может принимать одно из трех значений:
IGP— Сеть является внутренней для AS-родительницы. Этот атрибут проставляется на информации, которая была анонсирована командой network.
EGP— Информация была получена через Exterior Gateway Protocol (EGP) (практически не встречатеся в настоящее время)
Incomplete— Источник информации неизвестен. Проставляется при инжектировании информации в BGP из других протоколов маршрутизации.
.
Атрибут Next Hop
Содержанием этого атрибута является IP-адрес, куда необходимо направлять пакеты для анонсируемой сети.
Как правило, это адрес BGP-роутера, от которого поступила данная информация.
Атрибут Weight
Этот атрибут специфичен для Cisco-роутеров и используется для выбора одного из нескольких путей к одной и той же сети. Этот атрибут локален для роутера, никуда не передается. По умолчанию он устанавливается в 32768 для путей, которые <породил> данный роутер и в нуль для всех остальных путей. Предпочтительными являются пути с большим значением атрибута.
Этот атрибут может быть установлен тремя способами:
- Использованием списков доступа
- Использованием route-map
- Использованием команды neighbor weight
Использование списков доступа
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$
Использование route-map
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
Использование команды neighbor weight
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
Атрибут Local Preference
При наличии нескольких путей в одну точку, можно использовать данный атрибут для указания предпочтительного пути. Путь с большим значением атрибута является более предпочтительным (по умолчанию значение атрибута — 100 ). В отличие от атрибута weight, который локален для роутера, атрибут local preference является частью передаваемой информации и распространяется между роутерами внутри одной AS.
Существуют два метода задания атрибута
- Использование команды bgp default local-preference
- Использование route-map
Использование команды bgp default local-preference
router bgp 256
neighbor 1.1.1.1 remote-as 100
neighbor 128.213.11.2 remote-as 256
bgp default local-preference 150
Использование route-map
Ниже приведена конфигурация, устанавливающая значение атрибута 200 для информации, поступившей из AS 300 (и порожденной там):
router bgp 256
neighbor 3.3.3.4 remote-as 300
route-map SETLOCALIN in
neighbor 128.213.11.1 remote-as 256
!
ip as-path 7 permit ^300$
!
route-map SETLOCALIN permit 10
match as-path 7
set local-preference 200
!
route-map SETLOCALIN permit 20
Атрибут Multi-Exit Discriminator
Атрибут MED — это информация, передаваемая внешним соседям для указания предпочтения конкретной точки входа в AS (при наличии нескольких точек входа). Получив несколько вариантов пути с различным значением MED, роутер предпочтет путь с наименьшим значением MED. Значение атрибута по умолчанию равно 0.
В отличие от local preference, MED может покидать границы AS, но он не может пересекать AS. Когда в AS поступает информация с неким значением MED, это значение используется для принтия решения внутри AS, но, когда эта информация пересылается в другую AS значение MED сбрасывается в 0.
Роутер сравнивает значения MED только для путей, поступивших от роутеров из одной и той же AS. Если нужно, чтобы сравнивались значения MED поступающие с роутеров из разных AS, нужно использовать команду «bgp always-compare-med«
Рис. 4 MED
На рис. 4 AS 100 получает информацию о сети 180.10.0.0 от роутеров B,C,D. Роутеры C,D находятся в AS 300, роутер B — в AS 400.
!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 в путях, пришедших от соседей, расположенных в одной AS (AS 300 в примере). Роутер A может сравнивать только MED пришедший с роутера С (120) с MED, пришедшим с роутера D (200), хотя информация, приходящая с роутера B, имеет еще меньшее значение MED.
Роутер А выберет в качестве лучшего пути роутер C. Чтобы заставить роутер A включить в сравнение информацию, поступающую с роутера B, нужно применить команду «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
В этом случае будет выбран путь через роутер B, как имеющий наименьшее значение MED.
Атрибут Community
Этот атрибут позволяет группировать информацию для применения к ней каких-либо действий.
Для установки и проверки атрибута community используются route-maps.
Существует несколько предопределенных значений атрибута:
no-export
Не передавать данную информацию соседям по eBGP.
no-advertise
Не передавть данную информацию никаким соседям по BGP.
internet
Передавать информацию без ограничений всем соседям по BGP.
Примеры route-map для работы с community:
route-map COMMUNITYMAP
match ip address 1
set community no-advertise
!
route-map SETCOMMUNITY
match as-path 1
set community 200 additive
Если указано слово additive, то значение атрибута будет добавлено к уже существующим значениям. Если не указано, предыдущие значения атрибута будут стерты и заменены на новое.
Чтобы атрибут community передавался BGP-соседям, необходимо указать send-community в команде neighbor:
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
Процесс выбора лучшего пути в BGP
BGP выбирает только один путь в качестве лучшего. После того, как лучший путь выбран, он устанавливается в таблицу роутинга и распространяется соседям. Критерии выбора приведены ниже и применяются именно в этом порядке.
- Если указан next-hop, который не доступен — не выбирать такой путь.
- Предпочитать путь с наибольшим весом (weight)
- Если веса одинаковы, предпочесть путь с наибольшим значением local preference.
- Если preference одинаковы, то предпочесть путь, порожденный на этом же роутере.
- Если такого пути нет, то предпочесть путь с самым коротким AS-path.
- Если длина AS-path одинакова, то предпочесть путь с наименьшим значением origin ( IGP < EGP < Incomplete).
- Если origin одинаков, предпочесть путь с наименьшим MED.
- Если MED одинаков, предпочесть внешний путь внутреннему.
- Если пути все еще одинаковы, предпочесть путь, указывающий на ближайшего IGP-соседа.
- Предпочесть путь, полученный от BGP-соседа с наименьшим IP-адресом.
Источник http://ts.psc.ru/CISCO/ees/DAY4-BGP.html