19. BGP
Определение
Border Gateway Protocol v4, RFC 4271 и много других
Протокол динамической маршрутизации класса EGP
Наследник протокола EGP (Exterior Gateway Protocol, RFC 827)
Работает между автономными системами
Multiporotocol Extensions (MP-BGP, RFC 4760)
Использует TCP-подключение на порт 179
Масштабируемый и безопасный
Создан для работы с миллионами маршрутов
Создан для работы с недоверенными пирами
Не создан для быстрой сходимости
Особенности IGP и EGP
В своей AS все устройства находятся под общим контролем
Любые устройства - доверенные
Разумное и предсказуемое количество префиксов
Трафик отправляется по оптимальному маршруту
Скорость сходимости сети важна и подконтрольна
Возможна перенастройка при необходимости
Конкретная зона ответственности
При стыке с чужими AS все наоборот
Номера AS
Важный параметр для работы BGP
Изначально определен как 16-битное число (0-65535)
В 2007 году расширен до 32 бит (поддержка обязательна с 2010 года)
Нотация ASPLAIN - одно десятичное число ( например, 65550)
Нотация ASDOT - два 16-битных десятичных числа через точку (например 1.14)
Распределяются IANA через региональные регистраторы (RIR)
Зарезервированы: 0, 65535, 65535.65535
Значения для использования документации: 64496-64511 и 1.1-1.15
Частные номера: 64512-65534, 64086.59904 - 65535.65534
Особенности BGP
BGP принимает "чужие" маршруты
BGP выбирает один лучший маршрут до сети (best path)
Выбор основывается на атрибутах пути, которые не отражают физические свойства маршрута; лучший - не обязательно самый быстрый
Исходящий трафик можно контролировать, выбирая лучший маршрут
BGP анонсирует "свои" префиксы
Пользуются анонсируемыми нами маршрутами наши пиры
Контролировать выбор маршрута пирами в общем случае нельзя
Самое главное в BGP - политики
Политики приема маршрутов от пира
Политики выбора маршрутов для отправки пиру
Политики модификации маршрутов и выбора лучшего маршрута
Принцип работы BGP
Path Vector Algorithm
Дистанционно-векторный алгоритм дополнен информацией о пути трафика
Роутеры получают часть информации о топологии (но не саму топологию)
BGP отправляет в анонсах лучшие пути трафика и их атрибуты
Префиксы, которые доступны по этому пути
Список автономных систем на пути
Характеристики BGP
Использует TCP, порт 179
Требует ручного прописывания соседей
Keepalive-сообщения для проверки соседства
Огромный вектор метрик (атрибутов)
AS-Path, Local Preference, MED, Nex-hop, Origin и т. д.
IP-адреса и номера AS соседей нужно прописывать вручную
Сообщения BGP
В TCP-сессии BGP обменивается следующими сообщениями:
Open: согласование параметров соседства
Keepalive: проверка соседства
Update: передача маршрутной информации
Notification: завершение сессии
eBGP и iBGP
BGP, как протокол EGP, рассчитан на работу в определенных условиях
Много маршрутов, в том числе от неподконтрольных соседей
Некоторые BGP-пиры могут быть из своей автономной системы
eBGP - сосед из чужой AS, режим тотального недоверия
iBGP - сосед из своей AS, режим частичного доверия
Протокол один и тот же, разные именно режимы работы
Характеристики EBGP и IBGP соседств
Exterior BGP Neighborship
Соседство между пирами разных AS
Должны быть в одном канале
Атрибуты модифицируются отправителем
В первую очередь AS-Path и Next-Hop
Interior BGP Neighborship
Соседство между пирами одной AS
Могут соединяться через транзитные роутеры
Требует IGP для нахождения пути до соседей
Требует полносвязность соседств (Full Mesh между всеми пирами)
Атрибуты не модифицируется при отправке
IBGP и Next-Hop
При отправке маршрутов IBGP-соседу атрибуты не меняются
Как следствие, атрибут Next Hop для внешних маршрутов будет сохраняться
Обычно у IBGP-соседей нет маршрутов до этих адресов
Два варианта решения проблемы
Импортировать адреса EBGP-соседей в IGP
Поменять адрес Next-Hop перед отправкой маршрутов IBGP-соседям
Дизайн соседства IBGP
Маршруты от IBGP-соседей не передаются другим IBGP-соседям
Между любыми двумя роутерами AS требуется соседство
На каждом роутере может быть много адресов
Сессии ставятся с адресов виртуальных интерфейсов
Адреса анонсируются в IGP
Отказ отдельного канала не влияет на связь
Одна сессия на каждую пару роутеров
По умолчанию IP-пакеты до EBGP-соседа отправляются с TTL=1
А принимаются - с любым
Иногда это неудобно (если нужно поднять сессию с loopback)
Иногда это небезопасно (можно устроить SYN DoS атаку)
Проблему можно решить двумя способами:
EBGP Multihop предписывает отправлять пакеты с заданным TTL
BGP TTL Security предписывает отправлять пакеты всегда с TTL=255
А вот принимать - только с указанным, это легко проверить и тяжело подделать
Generalized TTL Security Mechanism
Нужно включать с обеих сторон
Состояние соседства BGP
Idle - роутер не пытается установить соседство
Нет маршрута до соседа, наложенные санкции и т. д.
Active - отправлен TCP SYN, ждем корректный ACK для отправки Open
Connect - получен TCP SYN, ждем корректный ACK для отправки Open
OpenSent - отправлено Open
OpenConfirm - получено корректное Open, ждем Keepalive
Established - все в порядке, соседство установлено
Проблемы с установлением соседства
Неправильный IP-адрес соседа
Также недоизученный в IGP адрес IBGP-соседа
Неправильный IP-адрес источника
Также недопрописанное соседство на соседе
Ошибки в указании номеров AS
Open будет принято только от правильного IP-адреса и с правильной AS
Last updated