Основы BGP

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 » (новые версии IOS позволяют менять часть параметров конфигурации не сбрасывая сессию).

Внутренний 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 выбирает только один путь в качестве лучшего. После того, как лучший путь выбран, он устанавливается в таблицу роутинга и распространяется соседям. Критерии выбора приведены ниже и применяются именно в этом порядке.

  1. Если указан next-hop, который не доступен — не выбирать такой путь.
  2. Предпочитать путь с наибольшим весом (weight)
  3. Если веса одинаковы, предпочесть путь с наибольшим значением local preference.
  4. Если preference одинаковы, то предпочесть путь, порожденный на этом же роутере.
  5. Если такого пути нет, то предпочесть путь с самым коротким AS-path.
  6. Если длина AS-path одинакова, то предпочесть путь с наименьшим значением origin ( IGP < EGP < Incomplete).
  7. Если origin одинаков, предпочесть путь с наименьшим MED.
  8. Если MED одинаков, предпочесть внешний путь внутреннему.
  9. Если пути все еще одинаковы, предпочесть путь, указывающий на ближайшего IGP-соседа.
  10. Предпочесть путь, полученный от BGP-соседа с наименьшим IP-адресом.

    Источник http://ts.psc.ru/CISCO/ees/DAY4-BGP.html

Запись опубликована в рубрике *Lan&Wan, *Сети. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91