Принцип работы сети интернет строится на базовой системе адресации протокола IP, фундаментальной и наиболее значимой частью которого можно смело назвать BGP маршрутизацию (сокращение BGP состоит из первых букв английского словосочетания Border Gateway Protocol), пришедшей на смену EGP.
Обывателей редко интересует, как именно программы для просмотра web-страниц открывают те или иные сайты и что служит базой для их работы. Но если немного погрузиться в тематику, то перед нами откроется огромный мир IP сетей, где потоками информации управляют BGP-маршрутизаторы и DNS-сервера.
Информация! Являясь единственным в своём роде, протокол глобальной маршрутизации позволяет гибко фильтровать и модифицировать маршруты. Но за такие возможности и гибкость необходимо платить — настроить BGP довольно сложно, в параметрах можно быстро запутаться.
В этой статье мы покажем, что из себя представляет настройка BGP, какие проблемы являются наиболее критичными и как их обойти.
Чтобы контролировать исходящий трафик, существует множество разнообразных способов, которые работают с BGP. Но для мониторинга входящих пакетов в публичном интернет-пространстве нет прямых механизмов. Автономные системы действуют независимо и не могут навязывать правила маршрутизации друг другу.
Тем не менее существует косвенный инструмент регулирования — все автономные системы в исходящих анонсах контролируют параметр AS path.
Любой путь, где номер AS дублируется в нескольких местах (присутствует третий экземпляр между двумя блоками одинаковых номеров), является петлёй. При этом к закольцованным не относятся одинаковые номера, идущие друг за другом. Например, путь 64506 64506 64566 64507 вполне соответствует протоколу BGP, и дублирующиеся AS не делают его эквивалентным пути 64506 64566 64507, который короче.
Искусственное изменение длины пути — это AS path prepend. Его повсеместно применяют для воздействия на процесс определения пути другими сетями. Второй вариант из рассмотренного нами примера является более привлекательным.
При настройке BGP-маршрутизации удлинить путь на три номера AS можно следующим способом:
В show ip bgp на выходе вместо обычного для локальных анонсов отобразится путь, включающий три одинаковых элемента:
Важно! На практике гарантировать, что входящий трафик пойдёт через провайдера, анонсировавшего более короткий путь, нельзя.
Существует вероятность, что пришедшие от него через цепочку других провайдеров альтернативные пути будут длиннее, чем даже искусственно увеличенный рассматриваемый нами вариант. Более того, никому не запрещается установить в качестве приоритетного «неправильный» маршрут, чем и пользуются некоторые администраторы.
Поэтому рациональнее применять community strings при условии, что он поддерживается транзитным провайдером.
Одна из базовых настроек BGP даёт возможность оказывать влияние на политику маршрутизации соседнего провайдера. Для этого, правда, необходимо заручиться его согласием. Такого механизма нет в других протоколах.
Community strings используется в качестве названия для произвольных значений формата AS:NUMBER (например, 64506:111). Они могут быть присвоены анонсам на выходе и использованы в политике на входе как критерии. В обычной ситуации суть определённых значений обусловлена настраиваемыми параметрами, но также есть стандартные значения. Например, no-advertise даёт команду маршрутизатору не передавать анонс всем остальным.
Транзитные провайдеры зачастую позволяют клиентам воспользоваться такой возможностью.
Допустим, у нас есть необходимость разрешить соседям устанавливать на своей стороне local preference для их анонсов. Предположим, наша автономная система — 64507, клиентская — 64503.
Первым шагом определим, как направить провайдеру строку со стороны клиента. Направим гипотетическому провайдеру анонс, указав community 64507:50. Прописать это можно таким образом:
Затем подумаем, каким образом её использовать для отслеживания политик на стороне провайдера. Укажем 50 в качестве значения local preference для анонсов с такой строкой (это меньше значения по умолчанию):
Используя уже знакомую команду show ip bgp, удостоверимся, что на стороне провайдера всё функционирует:
Сделать ошибку при настройке протоколов BGP довольно просто. Во избежание повторяющихся и наиболее распространённых проблем, реализациями протоколов предусмотрены стандартные ограничения. При этом часто грань между осознанной нетривиальной настройкой и ошибкой почти незаметна.
Для примера возьмём опцию ebgp-multihop. Согласно политике BGP, установить коннект с соседом, который находится в другом сегменте канального уровня, нельзя. Для этого необходимо, чтобы между соседями не было промежуточных маршрутизаторов.
Информация! Являясь более абстрактным, чем другие протоколы, BGP даёт возможность установить свой шлюз для маршрутов. По этой причине BGP часто рассматривается как метод автоматической передачи списков сетей.
Например, сервер маршрутов расположен где-то далеко в интернет-пространстве и направить поток данных через него нельзя, условие присутствия соседей в одном сегменте для него не выполняется. Опция ebgp-multihop, устанавливающая предельно допустимое количество промежуточных маршрутизаторов, решает описанную проблему: