BGP: Главный протокол межсетевой маршрутизации интернета
Хочется рассказать про что-то не заезженное. Последние несколько лет активно интересуюсь и работаю с сетью и вебом, и там как раз много про что можно рассказать интересно, с тонной-другой “удивительных” историй, произошедших в мире с 1969 года (да, прошло уже 57 лет, жуть). Поэтому сегодня о BGP (Border Gateway Protocol).
Что это вообще и зачем?
Начнем с БАЗЫ. BGP (Border Gateway Protocol) - это главный протокол межсетевой маршрутизации интернета. Он решает, через какие сети трафик пойдет от одного оператора, облака или крупной компании к другой. При этом сам BGP работает поверх TCP (порт 179), хотя управляет маршрутами на L3. В отличие от OSPF или IS-IS, BGP не строит полную карту сети и не ищет «самый короткий» путь. Это path-vector протокол: он оперирует не отдельными роутерами, а автономными системами (AS) - большими сетями провайдеров, облаков и корпораций. Маршрут в нем - это список AS, через которые прошел анонс (AS_PATH).
Ок, ну и что тут интересного то?
BGP почти не интересует, где канал толще или задержка меньше. Это в первую очередь протокол политик и бизнеса. Маршрут выбирается по набору атрибутов и правил - например, Local Preference, длине AS_PATH, MED и другим - чтобы трафик шел не туда, где «короче», а туда, где оператору выгоднее и правильнее с точки зрения политики. И современный BGP - это уже давно не только про IP-префиксы. Через MP-BGP он умеет распространять и другие типы reachability-информации:
☑️ в дата-центрах - MAC/IP-маршруты для EVPN/VXLAN;
☑️ у провайдеров - маршруты для MPLS VPN;
☑️ при защите от атак - правила фильтрации через BGP FlowSpec.
То есть BGP давно превратился в универсальный механизм обмена маршрутной информацией.
А теперь самое интересное: исторически BGP долгое время работал почти на доверии. Если какая-то сеть объявляла: «путь к этим адресам лежит через меня», остальные сети могли это принять и перестроить маршруты. Поэтому ошибка в одном месте иногда ломает связность по всему миру.
2008: в Пакистане хотели заблокировать YouTube только внутри страны, но провайдер случайно разослал этот маршрут наружу. Причем маршрут оказался более конкретным, а такие маршруты интернет обычно считает приоритетными. В итоге значительная часть мирового трафика к YouTube поехала не в Google, а в сторону пакистанского провайдера - и там исчезала.
2019: проблемы у Cloudflare из-за route leak. Небольшой провайдер по ошибке разослал в BGP чужие маршруты, а крупный оператор Verizon принял их и распространил дальше. В результате трафик к части сервисов и клиентов Cloudflare пошел по неправильному пути - через сеть, которая не была рассчитана на такой объем. Начались потери пакетов, задержки и сбои. Это хороший пример того, как одна ошибка в BGP может быстро стать глобальной проблемой.
В следующем посте расскажу о занятных приколах сети в кубе, так что подписывайтесь, если любите такое, буду рад.