BGP: базовый протокол интернета

Сергій Бондаренко

Сегодня речь пойдет о BGP — главной «шестеренке» в огромном сетевом механизме интернета. Border Gateway Protocol — это протокол граничного шлюза, разработанный для синхронизации сведений о маршрутизации и данных о связности между автономными системами (о том, что это такое, расскажем чуть ниже) в сети. Иными словами, BGP — это способ маршрутизации, благодаря которому возможно функционирование интернета. Напомним, что протоколы маршрутизации нужны для того, чтобы устройства-роутеры могли в автоматическом режиме, без участия администратора сети, составить карту сети и таблицу маршрутизации. 

Содержание:

Что такое Border Gateway Protocol
Причины несовместимости iBGP с автономными системами
Процедура установления BGP-сессии
Типы сообщений
Настройка маршрутизации BGP
Настройка BGP Community Strings
Заключение

Что такое Border Gateway Protocol

Как и DNS, BGP является одним из самых важных протоколов для инфраструктуры глобальной сети. Сбои в работе BGP не раз приводили к тому, что целые сегменты интернета оказывались недоступными. Помните, как осенью 2021 года Facebook, а также Instagram и WhatsApp оказались недоступными? Это произошло из-за того, что информация о маршрутах к серверам Facebook, которая рассылается по протоколам BGP, была ошибочно удалена и разрешение доменного имени Facebook по DNS стало невозможным.

Существует два типа Border Gateway Protocol: iBGP — для маршрутизации внутри сети (буква i обозначает internal — «внутренний») и eBGP для внешней маршрутизации (буква e расшифровывается как external — «внешний»). Когда-то в интернете было всего несколько сетей, связанных между собой статичными маршрутами. Системные администраторы самостоятельно указывали в конфигурации роутеров путь к нужной сети (такой маршрут называется «статичным»).

По мере роста инфраструктуры интернета, число сетей росло и в определенный момент возникла необходимость использования иного подхода для обмена информацией о маршрутах — динамического. В результате появился eBGP — протокол внешнего шлюза.  Это протокол маршрутизации, работающий под простой древовидной иерархической топологией. На данный момент актуальная версия BGP — четвертая, которая была опубликована как RFC 4271 в 2006 году.

Почему протоколы iBGP не совместимы с автономными системами

Протоколы IВGP (RIP, OSPF, ISIS) в отличие от BGP работают внутри корпоративных сетей (например, у провайдера). Каждая такая сеть, связанная протоколом IGP, называется автономной системой (AS) или, реже, доменом маршрутизации. Для объединения таких автономных систем используется BGP. 

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

Например, RIP имеет ограничение в 15 хопов, то есть узлов. OSPF работает со сложной зоной виртуальных линков. Протоколы Link-State используя алгоритм SPF должны знать всю топологию сети, а это сотни тысяч маршрутизаторов. Поэтому даже ISIS с хорошей масштабируемостью не справится с сотнями тысяч маршрутов.

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

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

Автономная система, по большому счету, понятие абстрактное. Но в BGP оно приобретает вполне конкретный смысл. Это некоторая структура IP-сетей и маршрутизаторов, под управлением одного или нескольких операторов, использующих общую политику маршрутизации с интернетом. Для идентификации автономным системам (AS) присваивается персональный номер.

В процессе передачи маршрута между двумя AS, в его атрибут AS-Path записывается идентификатор каждой транзитной автономной системы, через которую он прошел. Как RIP оперирует количеством маршрутизаторов до сети назначения, так BGP оценивает количество автономных систем (чем короче AS-Path, тем выше приоритет маршрута).

Процедура установления BGP-сессии

Рассмотрим механизм подключения сессии BGP. Алгоритмы динамической маршрутизации совершенно различны: RIP использует UDP, OSPF работает поверх IP, ISIS — поверх канального уровня. BGP же использует TCP, и перед тем, как начать взаимодействие, два узла-маршрутизатора устанавливают TCP-сессию.

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

При его наличии, маршрутизатор отправляет пакет TCP-SYN на TCP-порт 179 соседа и переходит в состояние Connect. Режим, при котором BGP ожидает TCP-SYN от соседа называется Active. В нем маршрутизатор может надолго «зависнуть» при отсутствии IP-связи с соседом или если не запущен процесс BGP. Когда обмен TCP-SYN и TCP-ACK состоялся, TCP-сессия считается установленной, а маршрутизатор посылает сообщение OPEN.

На этом этапе могут возникать проблемы при обмене значениями router ID, идентификаторами AS, версией протокола. Но эти состояния вы не успеете увидеть, так как в случае ошибки после отсылки error notification BGP сразу же переключается в режим IDLE, а в случае успеха — в ESTABLISHED, после чего происходит обмен маршрутами. 

После получения ответного OPEN от соседа, маршрутизатор переключается в режим Open confirm и начинает сканировать пути следования трафика в таблице маршрутизации для отправки соседнему узлу. После нахождения этих маршрутов BGP переключается в режим established и выполняет маршрутизацию между соседями.

Типы сообщений

Для синхронизации параметров сессии служит тип сообщений OPEN. Эта разновидность сообщений рассылается только в самом начале для установления активной сессии. OPEN является unicast’овым и несет в себе следующие данные: версию протокола, идентификатор автономной системы, значение Hold Time, router ID и дополнительные возможности поддерживаемые протоколом.

Следующий тип специальных сообщений — NOTIFICATION. Он призван информировать соседа о проблемах с BGP-сессией — совпадением AS, одинаковым значением router ID, разрыве сессии. 

Тип сообщений UPDATE используется для информации о доступности тех или иных подсетей (раздел Network Layer Reachability Information, NLRI). В атрибутах пути также указывается откуда произошел маршрут, список AS на пути следования данных, информация об адресе шлюза и значение метрики маршрута с точки зрения анонсирующего маршрут BGP-узла — MULTI_EXIT_DISC. В одном UPDATE-сообщении может передаваться только один новый маршрут или удаляться сразу группа старых. Соответственно, как только BGP перешел в режим ESTABLISH, начинается обмен сообщениями UPDATE.

Тип сообщений KEEPALIVE выполняет стандартную функцию — уведомляет о том, что все в порядке. Таймер KEEPALIVE — это частота отсылки уведомлений, как правило, это 60 секунд. HOLDTIMER — граничное время, по истечению которого маршрутизатор не получивший сообщения KEEPALIVE, считает соседа недоступным и BGP-сессия разрывается. Обычно HOLDTIMER составляет три периода KEEPALIVE.

Запрос ROUTE REFRESH дает возможность вызвать маршрутную информацию у соседей без разрыва сессии. 

Максимальная длина сообщения 4096 октетов, минимальная — 19. Посылаемые данные с помощью BGP включают в себя заголовок и тело сообщения. Длина заголовка составляет 19 октетов и включает в себя следующие поля:

  • 16 октетов — это маркер: всегда в сообщении OPEN и при работе без аутентификации — в других сообщениях заполнен единицами. В противном случае включает в себя информацию об аутентификации. Другая функция маркера — увеличение надежности выделения границы сообщения в потоке данных.
  • 2 октета — размер сообщения в октетах, включая заголовок.
  • 1 октет — тип сообщения:

1 — OPEN.
2 — KEEPALIVE.
3 — UPDATE.
4 — NOTIFICATION.

Принцип настройки маршрутизации BGP

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

Такая топология является отказоустойчивой и работает в том случае, если один из поставщиков интернета недоступен. Начать реализацию настройки следует с того, что необходимо получить как минимум два ресурса — номер автономной системы и блок IP-адресов, который вы можете маршрутизировать в интернете.

Данные ресурсы вы можете получить самостоятельно у компании RIPE NCC (www.ripe.net) — одного из пяти региональных интернет-регистраторов, выполняющих распределение интернет-ресурсов, а также связанную с этим регистрацию и координацию деятельности, направленную на глобальную поддержку функционирования интернета. 

Эта компания работает в Украине, Европе и части Азии, регулируя такие ресурсы как IP-адреса, номера автономных систем и так далее. Для этого вам потребуется пройти процедуру регистрации LIR — локальной интернет-регистратуры. Сами ресурсы RIPE NCC предоставляет бесплатно, однако собирает членские взносы около нескольких тысяч евро в год. Также вы можете взять в аренду адреса и номер автономной системы у любой организации, имеющей статус LIR. 

Предположим, у нас есть на руках необходимые нам ресурсы: номер автономной системы — AS 12345 и блок IP-адресов 100.50.0.0/22. Это адресное пространство вы можете использовать в своей сети, назначать его серверам, отдавать клиентам и распределять по вашему усмотрению. Но каким образом интернет узнает о том, что данный блок IP-адресов принадлежит именно вам?

Согласно схеме вы подключаетесь к интернету через двух вышестоящих провайдеров — провайдера А и провайдера Б. С помощью протокола BGP ваш пограничный маршрутизатор сообщает пограничным маршрутизаторам провайдера А и провайдера Б, что блок IP-адресов 100.50.0.0/22 доступен через ваш маршрутизатор. Затем пограничные маршрутизаторы провайдеров А и Б сообщают своим соседям в сети информацию о вашем блоке IP-адресов.

Т.е., в свою очередь, сообщают своим соседям, и в конце концов информация о вашей подсети 100.50.0.0/22 расходится по всем пограничным роутерам интернета, в том числе она приходит и на пограничный маршрутизатор, например, Google.

Напомним, что в терминологии протокола динамической маршрутизации одна такая запись о маршруте к блоку адресов называется префиксом. На текущий момент есть сотни и сотни тысяч префиксов, обеспечивающих работу интернета. Эти записи имеются в каждом пограничном маршрутизаторе. Аналогичным образом и Google сообщает своим сетям о своих сетях, а также своим соседям по интернету. Т.е. уже сообщают своим соседям, в том числе и вашим провайдерам, а потом ваши провайдеры сообщают эту информацию вам. 

Как вы можете заметить, информация о маршрутах Google приходит к вам от обоих операторов сразу. Это повышает доступность, поскольку при обрыве связи с одним из провайдеров, ваши сети все равно будут доступны через другого оператора. Мы имеем прямое соединение с пограничными маршрутизаторами провайдеров. Когда маршрутизатор передает информацию о маршруте своему соседу, то это называется анонсирование. Когда анонс вашего префикса попадает к вашему соседу, он уже знает, что ваша сеть доступна через то присоединение, с которого он получил данный префикс. 

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

Таким же образом и вы получаете анонсы сетей Google, но, поскольку к вам эти анонсы приходят через двух операторов, то будет выбран самый короткий маршрут. Основной критерий выбора маршрута — количество маршрутизаторов по пути следования пакетов (меньше, значит лучше). Приоритетный маршрут называется активным.

Все активные маршруты заносятся в таблицу маршрутизации роутера. Также все активные маршруты, при отсутствии фильтрации, распространяются между соседями. Кроме того, по BGP можно распространять default route — путь по умолчанию. Если у вас только один вышестоящий оператор либо ваш маршрутизатор не позволяет принять достаточное количество префиксов, то вы можете принимать только default route.

Чтобы настроить подключение по протоколу BGP от вас потребуется идентификатор вашей автономной системы, а также маршруты, которые вы будете применять, только Full-view или default. От вышестоящего оператора вы также узнаете идентификатор автономной системы и настройки IP-интерфейса. Сделано это для того, чтобы маршрутизаторы могли обмениваться пакетами. 

Итак, вы договорились с провайдером А о присоединении сетей, и он сообщил вам номер своей автономной системы и настройки IP-адресов для присоединения. Его адрес — 25.0.5.1/30, а ваш адрес 25.0.5.2/30. Этот адрес нужно настроить на том интерфейсе, с помощью которого вы будете присоединяться к провайдеру А. В точности то же самое вам нужно проделать с провайдером Б.

Настройка BGP Community Strings

Стандартная настройка BGP позволяет вносить коррективы в политику маршрутизации соседнего провайдера (разумеется, при условии его согласия). В других протоколах такой возможности нет.

Community strings — это случайные значения формата AS:NUMBER (например, 64505:111), которые присваиваются анонсам на выходе и используются в качестве критерия в политике на входе. Есть также и стандартные значения. Так, no-advertise запрещает маршрутизатору передавать анонс всем остальным. Иногда провайдеры позволяют клиентам использовать эту возможность.

Предположим, перед нами стоит задача разрешить соседям устанавливать на своей стороне local preference для их анонсов. Допустим, текущая автономная система — 64507, клиентская — 64503. Для начала определим, как направить провайдеру строку со стороны клиента. Пошлем провайдеру анонс, указав строку community 64507:50. Пропишем это так:

Выберем local preference = 50 для анонсов с такой строкой (это меньше значения по умолчанию):

Убедиться, что на стороне провайдера все функционирует, можно при помощи команды show ip bgp:

Заключение

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

Для закрепления навыков рекомендуем вам посмотреть видео с пояснениями как настроить BGP-протокол с подключением к двум интернет-провайдерам на маршрутизаторах Cisco:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023