Протокол BGP: что это за технология и как она объединяет глобальные сети
Знакомимся с магистралью современного интернета.
Иллюстрация: Оля Ежак для Skillbox Media
В 2008 году провайдер Pakistan Telecom попытался заблокировать YouTube на территории Пакистана. При настройке блокировки провайдер ошибочно объявил себя основным маршрутизатором для всего трафика YouTube, что привело к временному отключению сервиса во всём мире. Сбой случился из-за особенностей работы протокола BGP, который связывает весь интернет.
В этой статье рассмотрим основы протокола BGP: объясним его назначение и принципы работы, разберём основные уязвимости и продемонстрируем базовую настройку на примере маршрутизатора Cisco.
Содержание
- Что такое BGP
- Когда и зачем нужен протокол BGP
- Принцип работы BGP
- Типы и форматы BGP-сообщений
- Как настроить маршрутизацию на оборудовании Cisco
Что такое BGP
BGP (Border Gateway Protocol) — это основной протокол маршрутизации в интернете. Он определяет единые правила обмена информацией между множеством независимых сетей и обеспечивает их надёжное соединение.
Независимые сети, или автономные системы (АС), — это отдельные сети с собственными правилами маршрутизации и уникальным номером, которые самостоятельно определяют свою политику подключения к другим сетям. Автономными системами могут быть как сети крупных интернет-провайдеров (например, «Ростелекома» или МТС), так и небольших организаций: университетов, дата-центров или технокомпаний. Интернет состоит из множества таких сетей, а протокол BGP делает из них единую систему.
Представьте интернет как почтовую службу, где каждая автономная система — отдельное почтовое отделение. Подобно тому, как почта выбирает оптимальный способ доставки письма, протокол BGP определяет наиболее эффективный путь передачи данных. Например, когда вы запрашиваете информацию из Сингапура в Москву, BGP выстраивает оптимальный маршрут через цепочку сетей до вашего компьютера.
Рассмотрим упрощённую модель интернета, в которой всего шесть автономных систем (АС). Допустим, вы находитесь в автономной системе 1, а нужный вам сервер — в автономной системе 3. Между ними существует два возможных маршрута:
- короткий путь — через АС2 напрямую в АС3;
- длинный путь — через АС6, АС5, АС4 и далее в АС3.
Первый путь выглядит оптимальным, поскольку содержит всего один промежуточный узел. Если бы интернет работал как простая почтовая служба, подобная система успешно справлялась бы даже с тысячами автономных систем. Однако в реальности автономные системы принадлежат разным компаниям, из-за чего они могут становиться недоступными, а маршруты между ними постоянно меняются. Поэтому количество промежуточных узлов — это только один из критериев выбора маршрута. Об остальных характеристиках мы поговорим немного позже.
Когда и зачем нужен протокол BGP
BGP — основной протокол маршрутизации в интернете, однако большинству компаний нет необходимости работать с ним напрямую. Как правило, достаточно подключения через провайдера, который самостоятельно использует BGP для взаимодействия с другими сетями. Рассмотрим на примерах, в каких ситуациях BGP действительно необходим, а когда можно обойтись без него.
❌ При подключении к интернету провайдер назначает вам публичный IP-адрес. Если у вас дома установлен Wi-Fi-роутер, все подключённые к нему устройства будут использовать один общий публичный IP-адрес — это касается телефонов, ноутбуков, телевизоров и прочих гаджетов. Такая схема работает благодаря технологии NAT (network address translation).
NAT работает как «умный переводчик»: когда ваш ноутбук отправляет запрос на сервер YouTube, система назначает этому запросу уникальный порт (например, 12345). В то же время, когда телефон загружает почту, система присваивает этому запросу другой уникальный порт (например, 54321). При получении ответов NAT автоматически перенаправляет их на соответствующие устройства. В таком случае BGP не применяется, так как все операции выполняются с помощью внутренних протоколов провайдера.
❌ Компании часто получают доступ к интернету через провайдера, как и обычные пользователи. При этом они могут использовать один публичный IP-адрес для работы нескольких сервисов, распределяя трафик через разные порты. Например, на одном IP-адресе могут одновременно работать сайт, почтовый и файловый серверы — каждый со своим выделенным портом.
Когда компания использует один IP-адрес и разные порты для своих сервисов, протокол BGP не нужен — трафик проходит через стандартное подключение к провайдеру и его внутренние протоколы маршрутизации.
Если компания работает с одним провайдером, это создаёт риски для бизнеса. Ведь при выходе из строя единственного канала связи полностью пропадёт доступ в интернет. Такая ситуация может возникнуть из-за обрыва кабеля или различных технических неполадок.
Чтобы сделать подключение более надёжным, компании могут использовать второго провайдера как резервный канал связи. В такой схеме необходимо лишь настроить приоритеты каналов с помощью метрик маршрутизации:
- Основной провайдер: обрабатывает весь трафик за счёт низкого значения метрики маршрутизации — например, 10.
- Резервный провайдер: работает как запасной канал связи с более высокой метрикой (например, со значением 100), который автоматически включается только при выходе из строя основного канала.
При отказе основного канала внутренний протокол маршрутизации перенаправит трафик на резервный канал. Когда основной канал восстановится, трафик вернётся к нему благодаря более низкой метрике. В такой конфигурации внутренние протоколы справляются без BGP.
✅ Теперь рассмотрим ситуации, когда протокол BGP действительно необходим. В качестве примера возьмём компанию из сферы электронной коммерции, чей онлайн-магазин обслуживает миллионы пользователей.
Для крупного бизнеса важна бесперебойная работа через собственный IP-адрес, поскольку это гарантирует покупателям доступ к сайту даже при сбое у одного из провайдеров. Именно для этой задачи подходит BGP.
При использовании BGP компания получает собственную автономную систему и независимый блок IP-адресов. Это даёт возможность самостоятельно управлять маршрутизацией трафика и быстро переключаться между провайдерами. Важно, что все сервисы компании сохраняют свои публичные IP-адреса даже при смене провайдера. К примеру, если корпоративный сайт работает на IP-адресе 54.239.28.85, он останется доступен по этому же адресу через любого провайдера.
Как работает BGP
BGP-маршрутизация состоит из нескольких основных этапов: настройки маршрутизатора, установления соединений с соседними устройствами, определения оптимальных путей передачи данных и непосредственной маршрутизации трафика по выбранным маршрутам.
Этап 1: настройка маршрутизатора
Протокол BGP не может автоматически обнаруживать соседние устройства, поэтому перед началом работы нужно вручную настроить параметры соседних маршрутизаторов.
Настройка состоит из двух основных шагов:
- На вашем маршрутизаторе необходимо указать два обязательных параметра соседнего устройства: IP-адрес (например, 192.0.2.1) и номер автономной системы (AS) (например, AS12389 для «Ростелекома»).
- Провайдер также вносит данные вашего маршрутизатора в свою BGP-конфигурацию: указывает IP-адрес и номер автономной системы.
После настройки маршрутизатор получает доступ к глобальной таблице маршрутизации интернета, содержащей сотни тысяч маршрутов. Однако маршрутизатор передаёт пакеты только по маршрутам из своей локальной базы. Если маршрута до определённой сети нет в локальной базе, то пакеты не будут доставлены, даже если этот маршрут есть в глобальной таблице.
Этап 2: установка соседства
Для обмена информацией маршрутизатор создаёт сессии с соседними устройствами. Сессии работают поверх протоколов TCP/IP через порт 179, а их установление происходит в несколько последовательных стадий.
Idle — начальное состояние маршрутизатора, когда он готов установить соединение, но пока не выполняет активных действий. В это состояние маршрутизатор переходит при первом запуске или перезапуске протокола BGP — например, когда администратор сбрасывает все сессии для внесения изменений в конфигурацию.
Connect — на этом этапе маршрутизатор пытается установить TCP/IP-соединение с соседним устройством. Например, маршрутизатор с IP-адресом 192.0.2.1 пытается подключиться к соседу с IP-адресом 192.0.2.2. После успешного соединения маршрутизатор переходит в состояние OpenSent. Если соединение не удаётся (из-за закрытого порта или недоступности соседа), маршрутизатор переходит в состояние Active.
OpenSent — после перехода в это состояние маршрутизатор отправляет OPEN-сообщение соседу и ждёт ответа. В полученном OPEN-сообщении он проверяет версию BGP, номер автономной системы и другие параметры, а также определяет тип соединения. Если параметры не соответствуют локальным настройкам, соединение разрывается и маршрутизатор возвращается в состояние Idle. При корректных параметрах маршрутизатор переходит в состояние OpenConfirm.
Active — в этом состоянии маршрутизатор пытается восстановить разорванное соединение с соседом. Он периодически отправляет TCP-запросы на подключение, пока не получит ответ или не истечёт время ожидания. При получении ответа маршрутизатор переходит в состояние Connect и пытается повторно установить соединение. Если время ожидания истекло, маршрутизатор возвращается в состояние Idle.
OpenConfirm — на этом этапе маршрутизатор, отправив OPEN-сообщение с настройками и ожидает KEEPALIVE-сообщения от соседа. Это короткое сообщение подтверждает принятие переданных настроек. После его получения маршрутизатор переходит в состояние Established.
Established — это рабочее состояние сессии, когда маршрутизаторы установили соединение и обмениваются маршрутной информацией. Для поддержания соединения они обмениваются обновлениями маршрутов и регулярными KEEPALIVE-сообщениями. Если маршрутизатор не получает KEEPALIVE-сообщение в установленный период, соединение считается разорванным и сессия возвращается в состояние Idle.
Этап 3: определение маршрута
Протокол BGP выбирает не просто кратчайший, а оптимальный путь. Для этого он использует сложную систему характеристик, которые оценивает последовательно. К следующему параметру протокол переходит только в том случае, если значения предыдущих характеристик для сравниваемых маршрутов совпадают.
Разные производители сетевого оборудования применяют свои наборы характеристик для выбора оптимального пути. Мы рассмотрим этот процесс на примере инструкции от компании Cisco — одного из ведущих мировых производителей сетевого оборудования. Характеристики других производителей вы можете посмотреть в их официальной документации.
Для выбора оптимального маршрута протокол BGP анализирует следующие характеристики, расположенные в порядке убывания приоритета:
- Weight — предпочтение отдаётся маршруту с наибольшим весом. Например, если для маршрута через провайдера A установлен вес 100, а через провайдера B — 50, трафик будет направлен через провайдера A.
- LOCAL_PREF — это параметр управления маршрутизацией внутри автономной системы. Чем выше значение, тем приоритетнее направление. Если маршруту через Москву присвоено значение LOCAL_PREF 200, а через Санкт-Петербург — 100, трафик пойдёт через московский узел.
- Локально созданные пути — маршруты, созданные непосредственно на маршрутизаторе, получают более высокий приоритет. Например: команда network 192.168.1.0/24 создаёт прямой путь к локальной сети, что обеспечивает ему наивысший приоритет. А вот команда redistribute ospf имеет уже средний приоритет, поскольку импортирует маршруты из другого протокола маршрутизации.
- AS_PATH — предпочтение отдаётся маршруту с наименьшим количеством автономных систем (АС) в пути. Например, путь AS path 1 2 3 будет предпочтительнее, чем AS path 1 2 3 4 5.
- Тип источника — приоритет маршрутизации определяется надёжностью источника маршрутной информации. BGP различает три типа источников: маршруты от внутренних протоколов маршрутизации (IGP), маршруты от внешних протоколов (EGP) и маршруты с неопределённым источником (INCOMPLETE).
- MED — метрика для выбора оптимальной точки входа в автономную систему при наличии нескольких соединений с соседней AS. Чем меньше значение MED, тем предпочтительнее направление. Например, если у провайдера есть два канала связи — основной с MED 100 и резервный с MED 200, — трафик будет направлен через основной канал.
- Приоритет внешних маршрутов над внутренними — при сравнении двух идентичных путей маршрутизатор отдаёт предпочтение внешнему BGP (eBGP) перед внутренним (iBGP). Это связано с тем, что внешние маршруты поступают напрямую от других автономных систем и содержат более актуальные данные о сетевом пути.
- IGP-метрика — при наличии нескольких путей до следующего узла маршрутизатор выбирает путь с наименьшей метрикой во внутренних протоколах маршрутизации (IGP). Например, если есть два направления с метриками 10 и 20, маршрутизатор выберет первый.
- BGP Multipath — это технология балансировки нагрузки, позволяющая маршрутизатору использовать несколько путей передачи данных одновременно. Такая балансировка работает при совпадении основных параметров маршрутов и включённой функции BGP Multipath.
- Время получения маршрута — при наличии нескольких внешних направлений приоритет получает тот, который был получен первым. Это обеспечивает стабильность сети, поскольку предотвращает частые переключения между маршрутами и снижает нагрузку на оборудование.
- Router ID — при наличии нескольких маршрутов с идентичными параметрами BGP выбирает путь от маршрутизатора с наименьшим Router ID. Например, если поступают два маршрута с одинаковыми параметрами от маршрутизаторов с Router ID 1.1.1.1 и 2.2.2.2, система выберет направление от первого маршрутизатора. Такой механизм обеспечивает предсказуемую маршрутизацию, поскольку Router ID остаётся неизменным даже при перестроении сети.
- Длина списка кластеров — если несколько маршрутов имеют одинаковый Router ID, BGP выбирает тот, который прошёл через меньшее количество кластеров. Это важно в крупных сетях, где используются маршрутные рефлекторы BGP (RR) для упрощения обмена маршрутной информацией между узлами. Например, если один маршрут прошёл через два кластера (RR1 → RR2), а другой через три кластера (RR1 → RR2 → RR3), то BGP выберет первый.
- IP-адрес соседа — последний критерий выбора. Если все предыдущие параметры одинаковы, система выбирает маршрут через соседний маршрутизатор с наименьшим IP-адресом. Этот IP-адрес указывается при начальной настройке BGP и используется для создания защищённого TCP-соединения между маршрутизаторами.
Этап 4: передача данных
После выбора оптимального пути маршрутизатор передаёт данные по принципу «следующего получателя». Это значит, что он определяет не только конечный пункт назначения, но и ближайший промежуточный узел для передачи пакета. При этом система маршрутизации непрерывно отслеживает доставку пакетов и актуализирует информацию о состоянии маршрутов в базе данных.
Например, при передаче данных из Москвы в Новосибирск маршрутизатор отправляет пакет через ближайший узел — Нижний Новгород. Далее пакет следует через Казань и Екатеринбург до конечной точки в Новосибирске. Если один из узлов выходит из строя, система автоматически находит другой узел, что делает сеть надёжной и устойчивой к сбоям.
Типы и форматы сообщений в BGP
В предыдущем разделе вы заметили, что протокол BGP обменивается с маршрутизаторами различными сообщениями во время работы. Рассмотрим их подробнее.
В протоколе BGP каждое сообщение имеет стандартную структуру, которая включает в себя три основных компонента:
- Маркер — специальное 16-байтовое поле, в котором каждый байт содержит шестнадцатеричное значение 0xFF. Оно выполняет две функции: отделяет сообщения друг от друга и позволяет обнаружить потерю синхронизации между маршрутизаторами.
- Длина — двубайтовое поле, показывающее общий размер сообщения в байтах (включая заголовок и данные). Например, длина самого короткого сообщения составляет 19 байт, поскольку оно включает только заголовок: 16 байт обозначают маркер, 2 байта — длину и 1 байт — тип.
- Тип — однобайтовое поле, которое определяет способ обработки полученного сообщения. Например, при получении сообщения с кодом второго типа маршрутизатор подтверждает активность соединения и обновляет таймеры удержания. Если таймер был установлен на 180 секунд, каждое сообщение второго типа перезапускает этот отсчёт.
Читайте также:
В протоколе BGP используется пять типов сообщений:
- OPEN (тип 1) — для установления соседства между маршрутизаторами.
- KEEPALIVE (тип 2) — для поддержания соединения и проверки статуса соседних маршрутизаторов.
- UPDATE (тип 3) — для обновления информации о маршрутах.
- NOTIFICATION (тип 4) — для уведомления об ошибках.
- ROUTE-REFRESH (тип 5) — для обновления маршрутной информации.
У каждого типа сообщения есть своя структура, описанная в документации. Например, сообщение OPEN должно содержать следующие поля:
- Версия — определяет номер версии протокола.
- Автономная система — указывает номер автономной системы, к которой принадлежит отправитель сообщения.
- Время ожидания — период бездействия, после которого сессия автоматически закрывается. Это максимальное время, отведённое маршрутизатору на получение KEEPALIVE- или UPDATE-сообщений.
- Идентификатор — уникальный номер маршрутизатора, который позволяет другим участникам сети точно определить, с каким устройством они взаимодействуют.
- Длина поля необязательных параметров — показывает, сколько байт занимают дополнительные параметры в сообщении. Если дополнительных параметров нет, значение поля будет равно 0.
- Необязательные параметры — дополнительные настройки для расширения возможностей BGP. Например, параметр Capabilities информирует другие маршрутизаторы о поддерживаемых версиях IP.
Рассмотрим пример OPEN-сообщения маршрутизатора с такими характеристиками: IP-адрес 192.168.1.1, номер автономной системы 100, время ожидания 180 секунд, без дополнительных параметров.
А теперь проследим за диалогом между маршрутизаторами R1 и R2:
- R1 инициирует соединение и отправляет сообщение OPEN: «Привет, я R1, работаю с BGP версии 4».
- R2 отвечает своим OPEN-сообщением: «Привет, я R2, тоже работаю с этой версией».
- R1 и R2 отправляют KEEPALIVE и подтверждают установку соединения.
- R1 отправляет UPDATE с информацией о доступных маршрутах.
- R2 отвечает своим UPDATE.
- R1 отправляет ROUTE-REFRESH с запросом на обновление маршрутов для семейства адресов. Например, для конкретной страны.
- R2 отвечает новым UPDATE с запрошенными маршрутами.
- После этого маршрутизаторы периодически обмениваются KEEPALIVE-сообщениями для поддержания активности сессии.
- Если R1 обнаружит проблему, он отправит NOTIFICATION с кодом ошибки и разорвёт соединение. Например, если R1 не получает KEEPALIVE-сообщение от R2 в течение 180 секунд, он отправляет NOTIFICATION с кодом ошибки 4 («Истекло время ожидания»).
Обмен сообщениями — это непрерывный циклический процесс, который выполняется по заданному расписанию и обеспечивает актуальность маршрутной информации между маршрутизаторами.
Как настроить протокол BGP на оборудовании Cisco
В этом разделе мы рассмотрим базовую настройку протокола BGP и установление соседских отношений. В случае возникновения любых вопросов или сложностей обратитесь к официальной документации Cisco.
Для начала войдите в привилегированный режим через команду enable:
После ввода команды система может запросить пароль (если он настроен). В случае успешного входа приглашение командной строки изменится с Device> на Device#. Если изменения не произошло — повторите попытку.
Перейдите в режим глобальной конфигурации, а после этого — в режим конфигурации, указав номер автономной системы:
После входа в режим конфигурации вы можете настроить основные параметры протокола: идентификатор маршрутизатора, анонсирование сетей, таймеры keepalive и holddown, настройку соседства, логирование изменений состояния соседей и быстрое отключение при потере связи. После этого также можно активировать обмен маршрутной информацией.
После сохранения основных настроек вы можете использовать множество дополнительных параметров маршрутизации. Например, механизм весов позволяет задать приоритет маршрута при наличии нескольких путей:
После завершения настройки маршрутизации вы можете использовать различные команды для проверки корректной работы протокола:
Что дальше
Вы познакомились с основами протокола BGP и теперь можете углубить свои знания. Для этого мы собрали инструменты и сервисы, которые помогут вам изучить особенности протокола и начать с ним работать:
- RFC 4271 — спецификация и полное описание протокола BGP-4.
- Cisco BGP Guide — официальное руководство от компании Cisco по настройке и использованию BGP.
- RFC 4456 — описание механизма Route Reflection, который упрощает распространение маршрутов в крупных сетях.
- Juniper BGP Documentation — документация по BGP от Juniper Networks, включающая примеры настройки и объяснение базовых принципов.
- MRT Tools — инструменты для работы с MRT-форматом, в котором хранится история изменений маршрутов. Они позволяют отслеживать изменения маршрутов и выявлять сетевые проблемы.
- RIPEstat — подробная статистика и аналитика маршрутов.
- Hurricane Electric BGP Toolkit — инструменты для мониторинга BGP, позволяющие отслеживать трафик между автономными системами, например между сетями Москвы и Санкт-Петербурга.
- GoBGP — инструмент с открытым исходным кодом на языке Go для создания и тестирования BGP-маршрутизаторов. Позволяет быстро развернуть тестовую среду, моделировать различные сценарии маршрутизации и проводить эксперименты с конфигурациями.
- BGPlay — интерактивный инструмент визуализации, который показывает изменения маршрутизации между автономными системами в реальном времени. Например, с его помощью можно увидеть, как перенаправляется трафик при сбое основного канала.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!