Мультихоминг на BGP: практическое руководство по настройке отказоустойчивого интернета | AdminWiki

Мультихоминг на BGP: практическое руководство по настройке отказоустойчивого интернета

15 июля 2026 12 мин. чтения

Что такое BGP-мультихоминг и зачем он нужен вашей сети

Мультихоминг - это технология подключения одной сети к нескольким интернет-провайдерам. Её цель - обеспечить отказоустойчивость и высокую доступность интернет-канала. Если один провайдер перестает работать, трафик автоматически переключается на другого, предотвращая простои сервисов.

BGP - это протокол, который делает такое подключение управляемым. В отличие от простых методов вроде IP SLA с одним провайдером, BGP дает полный контроль над входящим и исходящим трафиком. Вы можете не только резервировать каналы, но и балансировать нагрузку между ними, оптимизируя затраты и производительность.

Типичные сценарии для внедрения BGP-мультихомига:

  • Хостинг-провайдеры и дата-центры, которым критична доступность услуг.
  • Корпоративные сети с высокими требованиями к uptime.
  • Провайдеры онлайн-сервисов, платежных систем и телеком-операторов.

Эта технология подходит для проектов, где простой интернета приводит к прямым финансовым потерям или репутационным рискам.

Архитектурные схемы: один маршрутизатор против двух

Существует две базовые схемы подключения. Выбор зависит от бюджета и требований к отказоустойчивости.

Single-homed multi-homing (один маршрутизатор)

Все подключения к разным провайдерам идут через один физический маршрутизатор.

  • Плюсы: Экономия на оборудовании. Проще в настройке и администрировании.
  • Минусы: Сам маршрутизатор становится единой точкой отказа. Его выход из строя отключает оба канала.

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

Multi-homed (отдельный маршрутизатор на каждого провайдера)

Каждый интернет-провайдер подключается к своему отдельному маршрутизатору. Эти маршрутизаторы, в свою очередь, подключены к внутренней сети.

  • Плюсы: Полная отказоустойчивость. Выход из строя одного маршрутизатора не затрагивает канал другого провайдера.
  • Минусы: Выше стоимость оборудования (минимум два устройства). Сложнее архитектура и настройка.

Эта схема рекомендуется для критически важной инфраструктуры, где требуется максимальная надежность.

Необходимые ресурсы: публичный ASN и собственный блок IP-адресов

Для полноценного BGP-мультихомига вам потребуются два ресурса, независимых от провайдеров. Без них настройка будет ограниченной или невозможной.

1. Публичный номер автономной системы (ASN)

Это уникальный номер, который идентифицирует вашу сеть в глобальной таблице маршрутизации интернета. Продавцы оборудования или провайдеры его не выдают. ASN нужно получить самостоятельно у регионального интернет-регистратора (RIR).

  • Для Европы и части Азии - RIPE NCC.
  • Для Северной Америки - ARIN.
  • Для Азиатско-Тихоокеанского региона - APNIC.

Процесс получения включает подачу заявки и обоснование необходимости. Для компаний, имеющих собственные сети, это стандартная процедура.

2. Собственный блок публичных IP-адресов (Provider Independent - PI)

Это блок IP-адресов (например, /24, что равно 256 адресам), который принадлежит вам, а не провайдеру. Вы можете анонсировать этот блок через любого из ваших провайдеров. Это основа управления входящим трафиком.

Если у вас нет собственного блока адресов, вы можете использовать адреса, выданные провайдерами (Provider Assigned - PA). Однако в этом случае возможности мультихомига сильно ограничены. Вы сможете управлять только исходящим трафиком, выбирая, через какого провайдера он пойдет. Входящий трафик будет приходить только на адреса того провайдера, которому они принадлежат. Полноценной балансировки входящей нагрузки не получится.

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

Пошаговая настройка BGP-сессий с двумя провайдерами

Перейдем к практической части. Ниже приведены готовые конфигурации для установления BGP-сессий с двумя провайдерами. Предполагается, что у вас есть собственный ASN (например, 64512) и блок IP-адресов 203.0.113.0/24. IP-адреса провайдеров (BGP-соседей): 198.51.100.1 (ISP-A) и 192.0.2.1 (ISP-B).

Пример конфигурации для Cisco IOS

Этот пример для маршрутизаторов Cisco с IOS. Конфигурация включает базовые настройки интерфейсов и BGP.

! Настройка интерфейсов
interface GigabitEthernet0/0
 description Link to ISP-A
 ip address 198.51.100.2 255.255.255.252
!
interface GigabitEthernet0/1
 description Link to ISP-B
 ip address 192.0.2.2 255.255.255.252
!
! Настройка BGP процесса
router bgp 64512
 bgp router-id 203.0.113.1
 ! Сосед ISP-A
 neighbor 198.51.100.1 remote-as 65530
 neighbor 198.51.100.1 description ISP-A Uplink
 neighbor 198.51.100.1 password MySecurePassword123
 ! Сосед ISP-B
 neighbor 192.0.2.1 remote-as 65531
 neighbor 192.0.2.1 description ISP-B Uplink
 neighbor 192.0.2.1 password MySecurePassword456
 ! Анонсирование собственной сети обоим провайдерам
 network 203.0.113.0 mask 255.255.255.0
 ! Принимаем от провайдеров только маршрут по умолчанию (default route)
 neighbor 198.51.100.1 default-originate
 neighbor 192.0.2.1 default-originate
 ! Настройка таймеров для быстрого детектирования сбоя (Hold 90, Keepalive 30)
 timers bgp 30 90
 ! Распространение дефолтного маршрута внутри сети
 default-information originate

Ключевые моменты:

  • router bgp 64512 - запуск процесса BGP с указанием вашего ASN.
  • neighbor X.X.X.X remote-as Y - объявление соседа и номера его AS.
  • network 203.0.113.0 mask 255.255.255.0 - команда для анонсирования вашего префикса в интернет.
  • default-originate - запрос маршрута по умолчанию от провайдера. Это альтернатива приему полной таблицы маршрутов (full BGP table), которая требует больше ресурсов.
  • Пароль (MD5-аутентификация) повышает безопасность сессии.

Для более глубокого понимания атрибутов BGP, таких как AS_PATH и LOCAL_PREF, изучите наше подробное руководство по BGP для системных администраторов.

Пример конфигурации для MikroTik RouterOS

Настройка для маршрутизаторов MikroTik через терминал (CLI).

# Настройка интерфейсов и адресов
/ip address add address=198.51.100.2/30 interface=ether1
/ip address add address=192.0.2.2/30 interface=ether2

# Включение BGP и настройка экземпляра
/routing bgp instance set default as=64512 router-id=203.0.113.1

# Настройка соседа ISP-A
/routing bgp peer add name=ISP-A remote-address=198.51.100.1 remote-as=65530 \
  ttl=default update-source=ether1 password=MySecurePassword123

# Настройка соседа ISP-B
/routing bgp peer add name=ISP-B remote-address=192.0.2.1 remote-as=65531 \
  ttl=default update-source=ether2 password=MySecurePassword456

# Анонсирование сети 203.0.113.0/24
/routing bgp network add network=203.0.113.0/24

# Настройка фильтра для приема только default-route от провайдеров
/routing filter add chain=from_ISP_A prefix=0.0.0.0/0 prefix-length=0-32 action=accept
/routing filter add chain=from_ISP_A action=discard
/routing filter add chain=from_ISP_B prefix=0.0.0.0/0 prefix-length=0-32 action=accept
/routing filter add chain=from_ISP_B action=discard

# Применение фильтров к пирам
/routing bgp peer set ISP-A in-filter=from_ISP_A
/routing bgp peer set ISP-B in-filter=from_ISP_B

В MikroTik важно явно настраивать фильтры (/routing filter), чтобы контролировать, какие маршруты принимаются от провайдеров. В примере выше мы принимаем только маршрут 0.0.0.0/0 (default), а все остальные - отбрасываем.

Настройка на Linux (FRR) для виртуальных сред

Для виртуальных машин или bare-metal серверов на Linux часто используют пакет FRR (Free Range Routing). Установите его из репозиториев вашего дистрибутива (например, apt install frr для Debian/Ubuntu). Основная конфигурация находится в файле /etc/frr/frr.conf.

! Конфигурация FRR
hostname bgp-gateway
!
! Включение поддержки BGP
debug bgp keepalives
debug bgp updates in
debug bgp updates out
!
router bgp 64512
 bgp router-id 203.0.113.1
 ! Сосед ISP-A (через интерфейс eth1)
 neighbor 198.51.100.1 remote-as 65530
 neighbor 198.51.100.1 description ISP-A
 neighbor 198.51.100.1 password MySecurePassword123
 ! Сосед ISP-B (через интерфейс eth2)
 neighbor 192.0.2.1 remote-as 65531
 neighbor 192.0.2.1 description ISP-B
 neighbor 192.0.2.1 password MySecurePassword456
 ! Анонсирование сети
 network 203.0.113.0/24
 ! Настройка политик: принимаем только default route
 address-family ipv4 unicast
  neighbor 198.51.100.1 route-map FROM_ISP_A in
  neighbor 192.0.2.1 route-map FROM_ISP_B in
 exit-address-family
!
! Маршрутные карты (route-map) для фильтрации
route-map FROM_ISP_A permit 10
 match ip address prefix-list DEFAULT_ONLY
!
route-map FROM_ISP_B permit 10
 match ip address prefix-list DEFAULT_ONLY
!
! Prefix-list, разрешающий только маршрут 0.0.0.0/0
ip prefix-list DEFAULT_ONLY seq 5 permit 0.0.0.0/0
ip prefix-list DEFAULT_ONLY seq 10 deny 0.0.0.0/0 le 32
!
end

После изменения конфигурации перезапустите службу FRR: systemctl restart frr. Этот подход позволяет развернуть BGP-шлюз на недорогом VPS, что может быть актуально для распределенных проектов. Для сложных сценариев с несколькими VRF или VLAN потребуется дополнительная настройка. Готовые конфигурации FRR для multi-homing смотрите в отдельном практическом руководстве.

Для тестирования и развертывания подобных конфигураций удобно использовать облачные серверы, например, от Timeweb Cloud, где можно быстро создать виртуальную машину с нужным количеством сетевых интерфейсов.

Управление трафиком: балансировка и приоритизация каналов

После установления BGP-сессий нужно управлять тем, как трафик проходит через каналы. BGP предлагает несколько атрибутов для этого.

Для исходящего трафика (с вашей сети в интернет) главный инструмент - Local Preference (LOCAL_PREF). Маршрут с более высоким значением LOCAL_PREF считается более предпочтительным.

Для влияния на входящий трафик (из интернета в вашу сеть) используют:

  • AS Path Prepending: Искусственное увеличение длины пути AS_PATH, чтобы ваш префикс казался провайдерам «дальше» и менее привлекательным через конкретный канал.
  • Multi-Exit Discriminator (MED): Указание соседней AS предпочитать один канал для входящего трафика к вам.

Настройка основного и резервного канала (Active/Backup)

Самая распространенная схема: один канал - основной, второй - резервный, который включается только при отказе первого.

Реализуется через настройку LOCAL_PREF. На маршрутизаторе нужно назначить более высокий LOCAL_PREF для маршрутов, полученных от основного провайдера.

Пример для Cisco IOS:

! Создаем route-map для установки высокого local-pref для ISP-A
route-map SET_HIGH_PREF permit 10
 set local-preference 200
!
router bgp 64512
 ! Применяем route-map к входящим маршрутам от ISP-A
 neighbor 198.51.100.1 route-map SET_HIGH_PREF in
 ! Для ISP-B local-pref остается по умолчанию (100)

В этой конфигурации маршруты от ISP-A получат LOCAL_PREF=200, а от ISP-B - значение по умолчанию 100. Маршрутизатор всегда будет выбирать путь через ISP-A для исходящего трафика, пока сессия с ним активна. Если сессия с ISP-A упадет, автоматически начнется использование маршрутов от ISP-B.

Важно: для резервного канала часто нужно фильтровать маршрут по умолчанию, чтобы он не создавал «черную дыру» при работе основного канала. Детали настройки фильтрации с помощью prefix-list и route-map разобраны в статье «Настройка BGP на Cisco».

Балансировка исходящей нагрузки между каналами

Чтобы использовать оба канала одновременно и увеличить общую пропускную способность, можно распределить трафик.

Метод 1: Балансировка по префиксам. Разные внутренние подсети анонсируются через разных провайдеров.

! Пример для Cisco: анонсируем 203.0.113.0/25 через ISP-A, а 203.0.113.128/25 через ISP-B
router bgp 64512
 network 203.0.113.0 mask 255.255.255.128 route-map ANNOUNCE_TO_ISP_A
 network 203.0.113.128 mask 255.255.255.128 route-map ANNOUNCE_TO_ISP_B
!
route-map ANNOUNCE_TO_ISP_A permit 10
 set as-path prepend 64512 64512  ! Необязательно: можно добавить prepend для управления входящим трафиком
!
route-map ANNOUNCE_TO_ISP_B permit 10
 set as-path prepend 64512 64512 64512

В этом случае трафик к серверам в подсети 203.0.113.0/25 будет приходить в основном через ISP-A, а к серверам в 203.0.113.128/25 - через ISP-B. Исходящий трафик от этих серверов также пойдет через соответствующего провайдера, если настроена правильная политика маршрутизации.

Метод 2: Использование BGP Multipath. Некоторые реализации BGP позволяют устанавливать в таблицу маршрутизации несколько равнозначных (ECMP) путей к одному префиксу. Это позволяет балансировать трафик на уровне потоков (flow-based).

! Включение multipath для eBGP в Cisco IOS
router bgp 64512
 maximum-paths eibgp 2

Важное предупреждение: Балансировка может привести к асимметричной маршрутизации. Пакет от клиента может прийти через ISP-A, а ответ от вашего сервера уйти через ISP-B. Для большинства протоколов (HTTP, HTTPS) это не проблема. Но это критично для stateful-брандмауэров и некоторых VPN-решений, которые отслеживают состояние соединения. В таких случаях нужно либо избегать асимметрии, либо настраивать синхронизацию состояний между устройствами.

Для управления трафиком игровых серверов, где важны латенция и стабильность пути, могут потребоваться специальные подходы, описанные в руководстве по маршрутизации для игровых серверов.

Механизм автоматического переключения при отказе канала (Failover)

Отказоустойчивость в BGP обеспечивается самим протоколом. Принцип прост: если падает BGP-сессия с соседом (провайдером), все маршруты, полученные от этого соседа, удаляются из таблицы маршрутизации. Остаются маршруты от других провайдеров, и трафик переключается на них.

Скорость этого переключения зависит от одного ключевого параметра - таймеров BGP.

Таймеры BGP и их настройка для быстрого детектирования сбоя

BGP использует два основных таймера:

  • Keepalive Timer: Как часто маршрутизатор отправляет соседу keepalive-сообщения для подтверждения активности. По умолчанию - 60 секунд.
  • Hold Timer: Сколько времени маршрутизатор будет ждать keepalive-сообщения от соседа, прежде чем объявить сессию разорванной. По умолчанию - 180 секунд.

С таймерами по умолчанию детектирование сбоя может занять до 3 минут. Для критичных сервисов это слишком долго.

Рекомендуемые значения для баланса скорости и стабильности:

  • Hold Timer: 90 секунд.
  • Keepalive Timer: 30 секунд.

При таких настройках сессия будет признана разорванной примерно через 90 секунд после последнего полученного keepalive. Важно согласовать эти значения с вашими интернет-провайдерами, так как таймеры должны совпадать или hold timer провайдера должен быть больше вашего.

Пример настройки на Cisco:

router bgp 64512
 timers bgp 30 90  ! Глобальная настройка: keepalive 30, hold 90
 neighbor 198.51.100.1 timers 30 90  ! Или индивидуально для соседа

Предостережение: Слишком агрессивные таймеры (например, 3 секунды keepalive и 9 секунд hold) могут привести к нестабильности. Кратковременные помехи в канале связи будут вызывать постоянные разрывы и восстановления сессий (флаппинг), что дестабилизирует сеть.

После восстановления канала (Failback) трафик автоматически вернется на основной канал, так как его маршруты снова появятся в таблице с более высоким LOCAL_PREF. Чтобы избежать колебаний при нестабильном канале, можно использовать функцию BGP dampening, которая штрафует "флапящие" маршруты.

Для мониторинга реальной доступности шлюза провайдера, а не только BGP-сессии, можно использовать дополнительные инструменты: IP SLA (на оборудовании Cisco) или custom-скрипты, которые пингуют внешние IP-адреса и принудительно сбрасывают BGP-сессию при недоступности.

Диагностика и решение типичных проблем конфигурации

Даже при точном следовании инструкциям могут возникнуть проблемы. Вот список частых ошибок и способы их исправить.

Проверка таблицы BGP и состояния соседей

Первое, что нужно сделать при любой проблеме - проверить состояние BGP-сессий и таблицу маршрутов.

На Cisco IOS:

show ip bgp summary  # Общая сводка по соседям и количеству префиксов
show ip bgp neighbors 198.51.100.1  # Подробная информация о конкретном соседе
show ip route bgp  # Просмотр маршрутов, полученных через BGP

В выводе show ip bgp summary обратите внимание на столбец State/PfxRcd. Нормальное состояние - Established. В столбце PfxRcd должно быть число принятых префиксов (например, 1, если вы принимаете только default route). Если состояние не Established, сессия не работает. Распространенные состояния:

  • Active - маршрутизатор пытается установить TCP-соединение. Проблемы с IP-связностью, ACL, неправильный IP соседа.
  • Idle - сессия не запущена или сброшена. Проверьте конфигурацию neighbor.

На MikroTik:

/routing bgp peer print status  # Статус всех пиров
/routing bgp advertisement print  # Какие префиксы мы анонсируем

На Linux (FRR):

vtysh  # Вход в интерфейс управления FRR
show ip bgp summary
show bgp ipv4 unicast

Типичные проблемы и их решение:

  1. Сессия BGP не устанавливается (остается в состоянии Active/Idle).
    • Причина: Нет IP-связности между вашим адресом и адресом соседа.
    • Решение: Убедитесь, что ping 198.51.100.1 работает. Проверьте настройки интерфейсов, маски подсети, наличие маршрута до соседа. Проверьте, не блокирует ли межсетевой экран (ACL, firewall) TCP-порт 179.
  2. Сессия установлена (Established), но маршруты не анонсируются.
    • Причина 1: Сеть не добавлена в процесс BGP командой network.
    • Решение: Проверьте конфигурацию. На Cisco используйте show run | section router bgp.
    • Причина 2: Сеть, указанная в команде network, отсутствует в таблице маршрутизации (не настроена на интерфейсе или не получена через другой протокол).
    • Решение: Убедитесь, что сеть активна. На Cisco можно добавить ключевое слово mask или использовать статический маршрут.
  3. Маршруты от провайдера не появляются в таблице.
    • Причина: Срабатывают входящие фильтры (prefix-list, route-map, distribute-list).
    • Решение: Проверьте конфигурацию фильтров. Временно отключите их для диагностики.
  4. Проблемы с Next-Hop.
    • Симптом: Маршруты от провайдера есть в таблице BGP, но не попадают в основную таблицу маршрутизации (RIB).
    • Причина: Next-hop адрес маршрута (обычно это адрес интерфейса провайдера) недоступен.
    • Решение: Убедитесь, что у вас есть маршрут до next-hop адреса. Часто помогает команда next-hop-self, которую нужно настроить на стороне провайдера или, если возможно, на вашей стороне при iBGP.
  5. Асимметричная маршрутизация ломает stateful-брандмауэр.
    • Решение: Отказаться от балансировки для трафика, требующего отслеживания состояния, или настроить синхронизацию сессий (session synchronization) между firewall-устройствами на разных каналах.

Помните, что BGP - это сложный протокол, и его настройка в production-среде требует тщательного планирования и тестирования. Всегда проверяйте конфигурации в изолированном стенде или в непиковые часы.

Поделиться:
Сохранить гайд? В закладки браузера