Border Gateway Protocol (BGP) - это стандартный протокол динамической маршрутизации между автономными системами (AS). В корпоративной практике его используют для двух ключевых задач: подключения к интернет-провайдерам через eBGP и организации внутренней маршрутизации в крупных сетях через iBGP. Это руководство содержит проверенные пошаговые конфигурации для Cisco IOS версий 15.x и выше, которые помогут быстро развернуть рабочее решение, обеспечить отказоустойчивость multi-homed подключений и грамотно управлять трафиком.
Что такое BGP и когда он нужен в корпоративной сети
BGP работает с маршрутами на уровне автономных систем. Автономная система (AS) - это совокупность сетей под единым техническим управлением, имеющая уникальный номер (ASN). Протокол принимает решения о выборе пути на основе атрибутов, а не метрик, что позволяет реализовать сложные политики маршрутизации.
Основные сценарии применения BGP в корпоративной среде:
- Multi-homed подключение к двум и более интернет-провайдерам для отказоустойчивости и балансировки нагрузки.
- Построение внутренней маршрутизации в крупных сетях с несколькими граничными и внутренними маршрутизаторами.
- Организация пиринга в точках обмена трафиком (IX) для прямого обмена маршрутами с другими сетями.
Инструкции в этой статье проверены на актуальных версиях Cisco IOS и предназначены для практического применения.
eBGP для подключения к провайдерам vs iBGP для внутренней сети
Понимание различий между eBGP и iBGP - основа корректной настройки.
- eBGP (External BGP) работает между разными AS. Сессии устанавливаются напрямую между вашим маршрутизатором и маршрутизатором провайдера. По умолчанию TTL=1, что требует прямого соединения. Используется для обмена маршрутами с внешним миром.
- iBGP (Internal BGP) работает внутри одной AS. Сессии устанавливаются между маршрутизаторами внутри вашей сети, например, между двумя граничными роутерами, подключенными к разным провайдерам. Правило синхронизации и требование полной mesh-топологии (или использования Route Reflector) - ключевые особенности iBGP.
Архитектурно подключение к одному провайдеру называется single-homed, к двум и более - multi-homed. Последнее требует настройки как eBGP с провайдерами, так и iBGP между внутренними маршрутизаторами для корректного распространения внешних маршрутов.
Базовая настройка eBGP-пиринга с интернет-провайдером
Этот раздел - прямой ответ на запрос готового решения. Приведенные команды можно скопировать, подставить свои данные и применить.
Шаг 1: Подготовка данных и конфигурация базового соседства
Перед началом соберите данные:
- Ваш номер AS (публичный или приватный, например, 65001).
- IP-адрес пиринга на вашей стороне (например, 203.0.113.1/30).
- IP-адрес пиринга на стороне провайдера (например, 203.0.113.2).
- Номер AS провайдера (например, 64496).
- Ваш публичный IP-префикс для анонса (например, 192.0.2.0/24).
Конфигурация на маршрутизаторе Cisco:
! Настройка интерфейса для пиринга
interface GigabitEthernet0/0
ip address 203.0.113.1 255.255.255.252
no shutdown
! Запуск процесса BGP с указанием нашего AS
router bgp 65001
bgp router-id 192.0.2.1
! Объявление своей сети для анонса провайдеру
network 192.0.2.0 mask 255.255.255.0
! Настройка соседа - провайдера
neighbor 203.0.113.2 remote-as 64496
neighbor 203.0.113.2 description Uplink to ISP-1
! Опционально: установка пароля для аутентификации сессии MD5
neighbor 203.0.113.2 password secure_password_123
Команда network указывает, какой префикс мы хотим анонсировать в BGP. Маршрут для этого префикса должен присутствовать в таблице маршрутизации (через статику или IGP).
Шаг 2: Проверка установления сессии BGP (BGP State)
После настройки проверьте состояние сессии командой show ip bgp summary.
Router# show ip bgp summary
BGP router identifier 192.0.2.1, local AS number 65001
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
203.0.113.2 4 64496 15 14 1 0 0 00:05:12 1
Ключевые поля:
- State/PfxRcd: Должно отображать число (количество полученных префиксов), а не состояние типа
Idle,Active,Connect. Число означает, что сессия в состоянииEstablished. - Up/Down: Время работы установленной сессии.
Если состояние не Established, типовые причины:
- Active/Idle: Неверно указан AS номер соседа, IP-адрес недоступен (проверьте
ping), на пути блокируется TCP-порт 179. - Connect: Проблемы с установлением TCP-сессии. Проверьте списки контроля доступа (ACL) и наличие маршрута до адреса соседа.
- OpenSent/OpenConfirm: Расхождения в параметрах BGP (например, разные значения AS).
Для подключения к двум провайдерам (multi-homed) просто добавьте второй блок конфигурации neighbor с данными второго провайдера в том же процессе router bgp 65001.
Управление выбором маршрута: атрибуты BGP в действии
После установки сессий BGP начинает получать от провайдеров несколько путей до одних и тех же сетей. Алгоритм выбора лучшего пути BGP рассматривает атрибуты в строгом порядке. На практике чаще всего управляют тремя: LOCAL_PREF, AS_PATH и MED.
Local Preference: управляем исходящим трафиком
Атрибут LOCAL_PREF имеет локальное значение в пределах AS и влияет на выбор исходящего трафика. Более высокое значение предпочтительнее. По умолчанию Cisco присваивает полученным от eBGP-соседей маршрутам LOCAL_PREF=100, маршрутам от iBGP-соседей - LOCAL_PREF=100 (если не изменен).
Сценарий: У нас два провайдера, ISP-1 - основной, ISP-2 - резервный. Весь исходящий трафик должен идти через ISP-1.
Решение: Повысить LOCAL_PREF для маршрутов, полученных от ISP-1.
router bgp 65001
! Создаем route-map для установки высокого local-preference
route-map SET_LP_FROM_ISP1 permit 10
set local-preference 200
! Применяем этот route-map к входящим маршрутам от ISP-1
neighbor 203.0.113.2 route-map SET_LP_FROM_ISP1 in
! Для ISP-2 можно явно установить низкий local-preference (или оставить 100)
route-map SET_LP_FROM_ISP2 permit 10
set local-preference 50
neighbor 198.51.100.2 route-map SET_LP_FROM_ISP2 in
После применения конфигурации маршрутизатор будет выбирать для исходящего трафика пути через ISP-1, так как у них LOCAL_PREF=200 против 50 или 100.
AS Path Prepending и MED: влияем на входящий трафик
Управлять входящим трафиком сложнее, так как решение принимают провайдеры. Однако можно влиять на их выбор, манипулируя атрибутами в анонсируемых им маршрутах.
AS Path Prepending - метод удлинения AS_PATH путем добавления в него лишних номеров своей AS. Более длинный AS_PATH считается менее предпочтительным. Если мы хотим, чтобы входящий трафик по умолчанию шел через ISP-1, то для ISP-2 мы можем анонсировать свой префикс с prepending.
router bgp 65001
! Создаем route-map для prepending
route-map PREPEND_FOR_ISP2 permit 10
set as-path prepend 65001 65001 65001
! Применяем route-map к исходящим анонсам для ISP-2
neighbor 198.51.100.2 route-map PREPEND_FOR_ISP2 out
Теперь провайдер ISP-2 получит маршрут до 192.0.2.0/24 с AS_PATH = [64497, 65001, 65001, 65001], что выглядит длиннее, чем путь через ISP-1 (AS_PATH = [64496, 65001]).
MED (Multi-Exit Discriminator) - необязательный атрибут, который используется для указания предпочтительного пути в нашу AS, когда у провайдера несколько точек входа. Меньшее значение MED предпочтительнее. Важно: провайдеры могут игнорировать MED.
! Анонсируем свой префикс ISP-1 с MED=10, а ISP-2 с MED=50
route-map SET_MED_FOR_ISP1 permit 10
set metric 10
route-map SET_MED_FOR_ISP2 permit 10
set metric 50
router bgp 65001
neighbor 203.0.113.2 route-map SET_MED_FOR_ISP1 out
neighbor 198.51.100.2 route-map SET_MED_FOR_ISP2 out
Подробнее о построении сложных политик маршрутизации и фильтрации читайте в нашем полном руководстве по BGP для системных администраторов.
Фильтрация маршрутов: prefix-list и route-map для безопасности
Фильтрация предотвращает попадание в таблицу маршрутизации нежелательных или ошибочных префиксов, что критически важно для стабильности сети и безопасности.
Создание и применение prefix-list
Prefix-list - это простой и эффективный инструмент для фильтрации на основе IP-префиксов и их длины.
Задача: Принимать от провайдера только его агрегированные маршруты и default route, но не тысячи конкретных /24.
! Создаем prefix-list, разрешающий только default route и крупные сети провайдера
ip prefix-list FROM-ISP1 seq 5 permit 0.0.0.0/0
ip prefix-list FROM-ISP1 seq 10 permit 203.0.113.0/24 le 32
ip prefix-list FROM-ISP1 seq 15 deny 0.0.0.0/0 le 32
! Применяем prefix-list к входящим маршрутам от соседа
router bgp 65001
neighbor 203.0.113.2 prefix-list FROM-ISP1 in
Задача: Анонсировать провайдеру только свои публичные префиксы, но не внутренние служебные сети.
ip prefix-list TO-ISP1 seq 5 permit 192.0.2.0/24
ip prefix-list TO-ISP1 seq 10 permit 198.51.100.0/24
ip prefix-list TO-ISP1 seq 15 deny 0.0.0.0/0 le 32
router bgp 65001
neighbor 203.0.113.2 prefix-list TO-ISP1 out
Мощь route-map: фильтрация + управление атрибутами
Route-map - более гибкий инструмент, который объединяет фильтрацию (match) и модификацию атрибутов (set).
Сценарий: Принять от провайдера только определенные префиксы и сразу назначить им низкий LOCAL_PREF, сделав их резервными.
! Сначала создаем ACL или prefix-list для match
ip prefix-list BACKUP-PREFIXES seq 5 permit 198.51.100.0/24
! Создаем route-map
route-map FILTER_AND_SET_LP permit 10
match ip address prefix-list BACKUP-PREFIXES
set local-preference 50
route-map FILTER_AND_SET_LP deny 20
! Все остальные префиксы не принимаются
! Применяем route-map входящим
router bgp 65001
neighbor 203.0.113.2 route-map FILTER_AND_SET_LP in
Этот подход позволяет создавать сложные политики в одном месте. Для диагностики проблем с асимметричной маршрутизацией, которые могут возникнуть после настройки фильтрации, смотрите наше руководство по асимметричной маршрутизации.
Настройка iBGP для внутренней маршрутизации в крупной сети
В multi-homed архитектуре внешние маршруты, полученные через eBGP на одном граничном маршрутизаторе, должны быть переданы на другой граничный маршрутизатор внутри вашей AS. Для этого используется iBGP.
Архитектура iBGP Full-Mesh и ее ограничения
Правило iBGP гласит: маршрут, полученный от iBGP-соседа, не переанонсируется другому iBGP-соседу. Чтобы все iBGP-спикеры получили все маршруты, между ними должны быть установлены сессии по принципу «каждый с каждым» (full mesh).
Количество необходимых сессий рассчитывается по формуле N*(N-1)/2, где N - число маршрутизаторов, работающих в iBGP. Для 3 маршрутизаторов нужно 3 сессии, для 10 - уже 45. Это плохо масштабируется.
Пример конфигурации iBGP full-mesh между тремя маршрутизаторами с AS 65001, использующими loopback-адреса для устойчивости сессий:
! На всех трех маршрутизаторах (R1, R2, R3)
router bgp 65001
bgp router-id <LOOPBACK_IP>
! Настройка iBGP соседства с двумя другими роутерами
neighbor 10.0.0.1 remote-as 65001
neighbor 10.0.0.1 update-source Loopback0
neighbor 10.0.0.2 remote-as 65001
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.3 remote-as 65001
neighbor 10.0.0.3 update-source Loopback0
Ключевые моменты: remote-as одинаковый (наш AS), update-source Loopback0 гарантирует, что сессии будут устанавливаться с устойчивых loopback-адресов, а не с адресов физических интерфейсов. Для достижимости loopback-адресов между роутерами должен работать IGP (OSPF, EIGRP).
Масштабируемое решение: Route Reflector (RR)
Route Reflector - это специальная роль маршрутизатора в iBGP, которой разрешено нарушить правило non-transit и отражать (перенаправлять) маршруты между своими клиентами. Это избавляет от необходимости full mesh.
Принцип работы: Все клиенты RR настраивают iBGP-сессию только с ним. RR, получив маршрут от клиента, отражает его всем остальным клиентам и другим не-клиентским iBGP-соседям.
Конфигурация на маршрутизаторе, выполняющем роль Route Reflector (адрес RR - 10.0.0.100):
router bgp 65001
bgp router-id 10.0.0.100
! Настройка соседей-клиентов
neighbor 10.0.0.1 remote-as 65001
neighbor 10.0.0.1 update-source Loopback0
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.2 remote-as 65001
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.2 route-reflector-client
Конфигурация на клиенте Route Reflector (например, на граничном маршрутизаторе R1):
router bgp 65001
bgp router-id 10.0.0.1
! Настраиваем сессию только с RR
neighbor 10.0.0.100 remote-as 65001
neighbor 10.0.0.100 update-source Loopback0
! eBGP сессии с провайдерами настраиваются как обычно
Для отказоустойчивости рекомендуется развертывать как минимум два Route Reflector. Для интеграции BGP с внутренними сервисами, такими как системы хранения, может быть полезен наш гайд по настройке BGP для сетей хранения.
Типовые сценарии и готовые конфигурации
Ниже приведены сводные примеры конфигураций для распространенных архитектур. Используйте их как основу, подставив свои IP-адреса и номера AS.
Сценарий 1: Single-homed подключение (1 провайдер)
! Топология: Ваша сеть AS65001, провайдер AS64496.
! Пиринг на 203.0.113.0/30. Ваш префикс 192.0.2.0/24.
interface GigabitEthernet0/0
ip address 203.0.113.1 255.255.255.252
ip route 192.0.2.0 255.255.255.0 Null0
router bgp 65001
bgp router-id 192.0.2.1
network 192.0.2.0 mask 255.255.255.0
neighbor 203.0.113.2 remote-as 64496
neighbor 203.0.113.2 description ISP-Single-Homed
Сценарий 2: Multi-homed с балансировкой исходящего трафика
! AS65001, два провайдера: ISP1(AS64496), ISP2(AS64497).
! ISP1 - основной для исходящего трафика.
interface Gig0/0
ip address 203.0.113.1 255.255.255.252
interface Gig0/1
ip address 198.51.100.1 255.255.255.252
ip route 192.0.2.0 255.255.255.0 Null0
router bgp 65001
bgp router-id 192.0.2.1
network 192.0.2.0 mask 255.255.255.0
! Настройка соседей
neighbor 203.0.113.2 remote-as 64496
neighbor 198.51.100.2 remote-as 64497
! Политика: высокий local-pref для маршрутов от ISP1
route-map LP_ISP1 permit 10
set local-preference 200
route-map LP_ISP2 permit 10
set local-preference 100
neighbor 203.0.113.2 route-map LP_ISP1 in
neighbor 198.51.100.2 route-map LP_ISP2 in
! Prepending для ISP2, чтобы входящий трафик шел через ISP1
route-map PREPEND_ISP2 out
set as-path prepend 65001 65001
neighbor 198.51.100.2 route-map PREPEND_ISP2 out
Сценарий 3: Крупная сеть с двумя border-роутерами и Route Reflector
! AS65001. Border1 и Border2 подключены к провайдерам.
! Внутренний маршрутизатор Core1 выступает как Route Reflector.
! Все используют OSPF для достижимости loopback-адресов (10.0.0.0/24).
! ===== Конфигурация на Route Reflector (Core1, 10.0.0.100) =====
router bgp 65001
bgp router-id 10.0.0.100
neighbor 10.0.0.1 remote-as 65001 ! Border1
neighbor 10.0.0.1 update-source Loopback0
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.2 remote-as 65001 ! Border2
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.2 route-reflector-client
! ===== Конфигурация на Border1 (10.0.0.1) =====
router bgp 65001
bgp router-id 10.0.0.1
! iBGP с RR
neighbor 10.0.0.100 remote-as 65001
neighbor 10.0.0.100 update-source Loopback0
! eBGP с провайдером
neighbor 203.0.113.2 remote-as 64496
! Анонс сетей
network 192.0.2.0 mask 255.255.255.0
Эти конфигурации покрывают большинство типовых задач. Для более глубокого понимания основ маршрутизации рекомендуем ознакомиться с общим руководством по маршрутизации данных, а для тонкой настройки внутреннего IGP - с гайдом по настройке OSPF.
Помните, что тестирование конфигураций в лабораторной среде перед применением в production - обязательный шаг. Для автоматизации и экспериментов с сетевыми API может быть полезен сервис AiTunnel, агрегатор API для нейросетей, который позволяет, среди прочего, генерировать и проверять конфигурации с помощью ИИ.