Настройка BGP на Cisco и диагностика

Представляем Вам пример как настроить BGP на роутере Cisco в базовом варианте с комментариями. Так же будут рассмотрены особенности работы протокола BGP в крупных корпоративных сетях.

Базовая настройка BGP:

Router(config)# router bgp <ASN>
Router(config-router)# neighbor <address> remote-as <ASN>

ID маршрутизатора в BGP берется из следующих источников, в порядке предпочтения:

  1. Команда bgp router-id
  2. Наибольший IP петлевого (loopback) интерфейса
  3. Наибольший IP физического интерфейса

В BGP маршруты по умолчанию суммируются до границ своего класса. Отключается это командой: no auto-summary.

Маршруты, объявляемые вручную, указываются следующей командой:

Router(config-router)# network <subnet> [mask <mask>]

Включение редистрибуции:

Router(config-router)# redistribute <protocol …>

Маршруты, добавленные вручную командой network, помечаются как маршруты, происходящие из IGP, вот так — «i». Маршруты, которые получены при редистрибуции, помечаются как маршруты с неизвестным происхождением — вот так:»?».

BGP-маршрутизатор может отдавать своим соседям маршрут по умолчанию:

Router(config-router)# neighbor <address> default-originate

Требование синхронизации маршрутов можно отключить, позволив тем самым BGP импортировать в свою таблицу внутренние маршруты, не известные IGP:

Router(config-router)# no synchronization

В маршрутах, рассылаемых iBGP-пирам, атрибут «next hop» можно подменять на адрес роутера, который объявляет эти маршруты. Вот так:

Router(config-router)# neighbor <address> next-hop-self

Регулировка таймеров (в секундах):

Router(config-router)# bgp timers <keepalive> <hold>

Исходный адрес, от имени которого устанавливаются связи с соседями, можно указать вручную. Это особенно полезно, если исходный адрес висит на Loopback-интерфейсе:

Router(config-router)# neighbor <address> update-source <interface

TTL в eBGP по умолчанию равно 1. Чтобы увеличить это значение, используется команда «eBGP multihop»:

Router(config-router)# neighbor <address> ebgp-multihop <TTL>

«eBGP multihop» обязателен, если используются петлевые интерфейсы.

Агрегация маршрутов BGP

Есть два способа рассылки агрегированных маршрутов:

  • статические маршруты
  • команда aggregate-address 

Агрегация с помощью статических маршрутов:

Router(config)# ip route 192.168.0.0 255.255.0.0 Null0

Router(config-router)# network 192.168.0.0 mask 255.255.0.0

Агрегация с помощью команды «aggregate-address»:

Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 [summary-only]

Если используется ключевое слово summary-only, тогда объявляется только агрегированный маршрут. Если же это ключевое слово не используется, то наряду с агрегированным маршрутом рассылаются и more-specific (морспецифики, более конкретные маршруты).

С другой стороны, отдельные морспецифики можно фильтровать при помощи «подавления» (suppress map):

Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 suppress-map <route-map>

С целью изменения атрибутов агрегированному адресу можно назначить attribute map (например, для установки origin — происхождения маршрута):

Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 attribute-map <route-map>

В агрегированный маршрут по умолчанию не включается «AS Set». Включается этот атрибут вот так:

Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 as-set

При включении «AS Set» агрегированный маршрут наследует все атрибуты включенных в него маршрутов. Для наследования атрибутов только от избранных маршрутов используется «advertise map«:

Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 as-set advertise-map <route-map>

Управление BGP-соединениями

Для удобства каждому соседу можно назначить описание:

Router(config-router)# neighbor 192.168.123.45 description R7 in Moscow<

Соединение с отдельным соседом можно спрятать под пароль (хэш MD5 включается в BGP-пакеты):

Router(config-router)# neighbor 192.168.123.45 password FooBar

Для каждого соседа можно настроить интервал рассылки (advertisement interval), регулируя тем самым время ожидания перед отправкой объявлений (0-600 секунд):

Router(config-router)# neighbor 192.168.123.45 advertisement-interval <seconds>

Переговоры между соседями об использовании версии BGP можно отключить, указав версию вручную:

Router(config-router)# neighbor 192.168.123.45 version <version>

Можно настроить маршрутизатор таким образом, чтобы в процессе выбора наилучшего маршрута не учитывалась длина «AS Path»:

Router(config-router)# bgp bestpath as-path ignore

Количество префиксов, получаемых от соседа, можно ограничить:

Router(config-router)# neighbor 192.168.123.45 maximum-prefix <count> [<warning threshold>] [warning-only]

Здесь порог предупреждения (warning threshold) определяет процент от максимального количества префиксов, при превышении которого генерируется предупреждение. Ключевое слово warning-only позволяет соединению продолжать работу, даже если пир превысил максимальный порог префиксов.

Для временного отключения соседа без удаления его конфигурации используется команда neighbor shutdown.

Правила маршрутизации

Для фильтрации принимаемых или рассылаемых маршрутов применяются списки дистрибуции (distribute list):

Router(config-router)# neighbor <neighbor> distribute-list <ACL> {in | out}

Для фильтрации маршрутов, основываясь на их «AS Path», применяются списки фильтрации (filter list):

Router(config)# ip as-path access-list 1 permit <regex>

Router(config-router)# neighbor <neighbor> filter-list <list> {in | out}

Вместо списков дистрибуции или фильтрации можно использовать роутмапы (route map), которые позволяют производить более гибкую настройку и, в добавок, позволяют менять атрибуты. Применение route-map к соседу:

Router(config-router)# neighbor <neighbor> route-map <route-map> {in | out}

Административный вес влияет на предпочтения среди маршрутов, полученных от BGP-пиров. Маршрутам от отдельного соседа этот вес (0-65535) можно назначить локально:

Router(config-router)# neighbor <neighbor> weight <weight>

По умолчанию маршрутам, имеющим локальное происхождение, назначается вес 32768, в то время как вес всех остальных равен 0. Вес можно назначать и избранным маршрутам, применяя роутмапы или используя ключевое слово weightпосле параметра filter-list:

Router(config-router)# neighbor <neighbor> filter-list <list> weight <weight>

Административная дистанция отличается от веса тем, что влияет на предпочтения среди маршрутов, полученных от разных протоколов маршрутизации. Чем меньше дистанция, тем предпочтительней. Административная дистанция внешних BGP-маршрутов равна 20. Дистанция внутренних и локальных (генерируемых данным роутером при помощи команды network) BGP-маршрутов равна 200.

Бэкдор (backdoor link, черный ход) — приватное соединение между AS, которому должно отдаваться предпочтение перед eBGP-маршрутами. Для чего административная дистанция внешнего маршрута должна быть искусственно завышена включением в BGP-процесс необходимой сети с ключевым словом backdoor:

Router(config-router)# network <network> backdoor

Маршрут к указанной сети будет считаться локальным с административной дистанцией 200, из-за чего предпочтение будет отдаваться маршрутам, полученным из IGP, который работает в этом приватном линке, и трафик вместо внешнего маршрута потечет по бэкдору.

Кроме того, iBGP-пиры обмениваются друг с другом локальными предпочтениями (local preference, 32-битная величина, по умолчанию равная 100). Это значение можно установить командой ip default local-preference, либо set local-preference в роутмапе. В отличие от административного веса, действие локалпрефов распространяется за пределы локального роутера.

Влияние на путь, которым трафик будет заходить в вашу AS из соседней, при наличии нескольких точек входа, оказывает MED (или «метрика»). Для установки MED BGP-маршрута равным значению метрики такого же маршрута из IGP, в роутмапе можно воспользоваться командой set metric-type internal. Для принудительного сравнения MED нескольких маршрутов к одному адресату, даже если они происходят из разных AS, в BGP-процессе применяется команда bgp always-compare-med.

MED влияет только на поведение соседней AS. Повлиять аналогичным образом на поведение удаленных AS можно при помощи искусственного увеличения «AS Path» маршрутов. Для этого в роутмапе используется команда set as-path prepend. Обычно локальная AS «препендится» один или несколько раз. Например, для маршрутов AS 123:

route-map PREPEND_AS permit 10
match ip address <ACL>
set as-path prepend 123 123 123

Для сохранения BGP-информации в процессе редистрибуции в/из IGP используется тегирование маршрутов (route tagging). По умолчанию маршруты, передаваемые из BGP в IGP, тегируются собственным «AS Path». В тег можно добавить ещё происхождение маршрута командой set automatic-tag в роутмапе. Для автоматической установки атрибута «AS Path» из тега при редистрибуции маршрута из IGP обратно в BGP применяется команда set as-path tag в роутмапе. Также теги маршрутов могут применяться для хранения BGP-коммьюнити.

Включение подавления маршрутов:

Router(config-router)# bgp dampening [<half-life> <reuse> <suppress> <max-suppress>]

Посмотреть подавленные маршруты можно командой show ip bgp dampened-paths. Команда show ip bgp flap-statistics позволяет просмотреть все текущие подавленные маршруты вместе с маршрутами, которые вообще когда-либо подавлялись. Команда clear ip bgp dampening возвращает подавленные маршруты обратно в обслуживание. Командой clear ip bgp flap-statistics стирается вся история «мигания» маршрутов.

Особенности настройки BGP в больших сетях

Пример организации пиринговой группы:

Router(config-router)# neighbor BRANCHES peer-group
Router(config-router)# neighbor BRANCHES ebgp-multihop 2
Router(config-router)# neighbor BRANCHES update-source Loopback 0
Router(config-router)# neighbor 10.1.0.84 peer-group BRANCHES
Router(config-router)# neighbor 10.1.0.84 remote-as 123

У правил, применяемых к отдельному члену пиринговой группы, приоритет выше, чем у правил, применяемых ко всей группе.

Коммьюнити

Коммьюнити (сообщество) можно установить в роутмапах командой: set community <community>. В добавок, для включения атрибута «community» в рассылку, каждый сосед или пиринговая группа должны быть настроены с опцией send-community.

Общепринятые коммьюнити:

  • no-export — передается с маршрутом, рассылаемым eBGP-пирам, инструктируя их не рекламировать этот маршрут дальше, за пределы собственной AS
  • no-advertise — рассылается iBGP-пирам с целью предотвращения дальнейшей рассылки маршрута
  • local-as — используется для ограничения рассылки маршрута пределами конфедерации

Пользовательские коммьюнити устанавливаются либо в десятичном формате, либо в форме AA:NN (ASN:число).

Организация стандартного списка сообществ (community list):

Router(config)# ip community-list 1 {permit | deny} <community> [<community> …]

Расширенный коммьюнити-лист:

Router(config)# ip community-list 101 {permit | deny} <regex>

Критерий сравнения по коммьюнити-листу в роутмапе можно включать командой match community. Коммьюнити можно добавлять к маршруту без изменения уже присвоенных ему коммьюнити при помощи ключевого слова additive команды set community. Определенные коммьюнити, совпадающие с коммьюнити-листом, можно удалять командой set comm-list <number> delete.

Номера приватных AS

Частные ASN находятся в промежутке с 64512 по 65535. В настройках соседа командой remove-private-as можно стереть из маршрутов этого соседа все частные ASN в атрибуте «AS Path»:

Router(config-router)# neighbor <neighbor> remove-private-as

Конфедерации

Конфедерация — это AS, поделенная на более мелкие локальные автономные системы, обычно использующие приватную нумерацию. Между этими мелкими AS работает eBGP. Маршрутизаторы внутри конфедерации должны быть соответствующим образом настроены для её распознавания:

Router(config-router)# bgp confederation identifier <ASN>

Плюс маршрутизаторы, пирящиеся с другими локальными AS, должны быть в курсе, что эти AS также принадлежат одной конфедерации:

Router(config-router)# bgp confederation peers <ASN> [<ASN> …]

Роут-рефлекторы BGP

На роут-рефлекторе должны быть указаны внутренние пиры, которым он должен отражать маршруты:

Router(config-router)# neighbor <neighbor> route-reflector-client

Роут-рефлектор добавляет к маршрутам «Originator ID», указывающий на происхождение маршрута, и «Cluster List», определяющий рефлект-кластер во избежание появления маршрутных петель. По умолчанию роут-рефлектор добавляет свой ID в список кластера. Но ID кластера можно указать вручную командой bgp cluster-id. Это необходимо, если в кластере несколько рефлекторов.

Если клиенты рефлектора полносвязны между собой, для отключения отражения маршрутов между клиентами используется команда: no bgp client-to-client reflection. Маршруты извне кластера будут продолжать отражаться обычным образом.

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

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