Этот урок будет интересным! BGP (Border Gateway Protocol) — это протокол маршрутизации, который связывает весь Интернет. Попытаемся разобраться, в каких ситуациях нам нужен BGP и как он работает.
Прежде чем мы продолжим, я должен настоятельно порекомендовать вам, чтобы вы забыли всё, что вы знали о протоколах маршрутизации, таких как RIP, OSPF и EIGRP… Эти три протокола маршрутизации имеют одну общую черту: все они являются IGP (Interior Gateway Protocols). Мы используем их только в пределах нашей автономной системы(AS), но они не масштабируемы для использования в такой большой сети, как Интернет.
RIP, OSPF и EIGRP отличаются друг от друга, но у них есть одна общая цель… они стремятся определить кратчайший путь по которому будут отправленны данные. В случае такой большой сети как Интернет, нам не так важно найти кратчайший путь, гораздо важнее возможность гибко управлять трафиком. На сегодняшний день в Интернете используется всего один протокол маршрутизации и это- BGP.
1.Почему нам нужен BGP?
Для начала давайте рассмотрим несколько сценариев которые помогут вам понять для чего нам нужен BGP:

В наше время практически все подключено к Интернету. На рисунке выше мы видим клиентскую сеть, подключенную к провайлеру (ISP — Internet Service Provider). Провайдер следит за тем, чтобы у нас был доступ в Интернет и выделил нам oдин публичный IP-адрес, который мы можем использовать для доступа в Интернет. Чтобы убедиться, что все пользователи нашей локальной сети на клиентской стороне могут получить доступ к Интернету, мы используем NAT/PAT(Network / Port address translation) для преобразования наших внутренних частных IP-адресов в этот единственный публичный IP-адрес. Этот сценарий отлично подходит, если у вас есть только клиенты, которым нужен доступ в Интернет. В нашей клиентской локальной сети нам нужен только маршрут по умолчанию, указывающий на шлюз провайдера, и все готово. Для этого сценария нам не нужен BGP…

Возможно, у клиента есть несколько серверов, которые должны быть доступны из Интернета… возможно, почтовый или веб-сервер. Мы можем использовать NAT Port forwarding и пробросить нужные порты на эти серверы, так что нам все равно понадобится только один IP-адрес. Другой вариант — получить несколько публичных IP-адресов от нашего провайдера и использовать их для настройки Static NAT к серверам. Для этого сценария нам всё ещё не нужен BGP…

А что если нам нужно организовать резервирование? Иметь одну точку отказа — не самая лучшая идея. Мы можем добавить еще один маршрутизатор на стороне клиента и подключить его к провайдеру, тем самым использовать основной канал для всего трафика, а в случае его отказа перестроить маршрут на резервный. В этой ситуации нам всё ещё не нужен BGP, манипулировать трафиком мы сможем с помощью маршрута по умолчанию:
- Анонсируйте маршрут по умолчанию в IGP на основном маршрутизаторе с низкой метрикой используя отслеживаение падения канала с помощью IP SLA и track.
- Анонсируйте маршрут по умолчанию в IGP на резервном маршрутизаторе с высокой метрикой.
Это гарантирует, что IGP направит весь трафик по основному каналу. Но когда канал выйдет из строя, IGP перенаправит поток трафика на резервный канал. Но давайте подумаем над одним вопросом… Можем ли мы балансировать нагрузку между этими двумя каналами? Будет ли это проблемой?
Мы можем использовать ECMP(Equal-cost multi-path routing) — анонсировать маршрут по умолчанию с одинаковой метрикой, но у вас все равно будет что-то вроде распределения нагрузки 50/50%. Но что если мы хотим отправлять 80% исходящего трафика по основному каналу, а 20% — по резервному? С IGP этого не добиться, а с BGP это возможно.

Этот сценарий немного интереснее. Вместо подключения к одному провайдеру у нас теперь два разных провайдера. По соображениям избыточности важно иметь двух разных провайдеров, чтобы в случае аварии у одного из них у вас всегда был резервный канал. А что с нашей клиентской сетью? У нас по-прежнему есть два сервера, которые должны быть доступны из Интернета.
В предыдущих примерах мы получали публичные IP-адреса от нашего провайдера. Теперь, если мы подключены к двум разным провайдерам, тогда какие публичные IP-адреса мне следует использовать? От ISP1 или ISP2? Если мы используем публичные IP-адреса от ISP1 (или ISP2), то серверы с этой адресацией будут недоступны, если у провайдера возникнут проблемы с подключением.
Вместо того чтобы использовать IP-адреса провайдера, мы получим собственные публичные IP-адреса. Учёт белых публичных IP-адресов поддерживается IANA (Internet Assigned Numbers Authority — http://www.iana.org/ ). IANA распределяет публичные IP-адреса между несколькими крупными региональными регистрирующими компаниями, такими как RIPE или ARIN. Каждый из них выделяет IP-адреса провайдерам или крупным организациям.
Получив собственное публичное адрестное пространство, мы сможем анонсировать его в Интернет через подключённых провайдеров. Такой анонс может осуществляться только с помощью BGP.
Если вам интересно, вот обзор адресного пространства IPv4, которое было выделено IANA:
2. Автономные системы
Помимо получения публичного адресного пространства, мы должны подумать об собственной AS (Autonomous System):

AS — это коллекция сетей в одном административном домене, иными словами сети под единым управлением организации. Интернет — это не что иное, как совокупность автономных систем соединённых между собой. Внутри автономной системы мы используем IGP, например OSPF или ISIS.
Для маршрутизации между автономными системами мы используем EGP (external gateway protocol). На сегодняшний день существует единственный EGP, и это BGP.
Так как же получить собственную автономную систему с номером? Точно так же как и с публичным адрессным пространством — нужно зарегестрировать её.
Номер автономной системы 16-битный, из этого следует что у нас есть всего 65535
номеров AS. Как и у IP-адресов, у AS есть частные и публичные диапазоны:
- 1-64512 — это публичные уникальные номера AS
- 64512-65535 — это частные номера AS
Если вам интересно, то можете попробовать найти номер AS вашего интернет-провайдера:
UltraTools AS Information Lookup
У BGP есть две разновидности:
- External BGP: используется для маршрутизации между разными автономными системами
- Internal BGP: используется для марщрутизации внутри автономной системы(как IGP)
3. BGP анонсы
Теперь мы имеем представление о том, зачем нам нужен BGP и что такое автономные системы. Интернет — большое место, на момент написания данной статьи в нём более 987 тыс. префиксов. Если вам любопытно, вы можете посмотреть размер таблицы маршрутизации всего интернета по ссылке:
В Интернете есть несколько looking glass-серверов. Это маршутизаторы, которые имеют полный публичный доступ, с которых вы можете посомтреть таблицу маршрутизации Интенета. Посомтреть можно тут:
Пролистайте страницу вниз до “Category 2 – IPv4 and IPv6 BGP Route Servers by region (TELNET access)”. Там вы сможете подключиться к этим устройствам и посмотреть BGP и таблицы маршурутизации с помощью комманд show ip route
/ show ip bgp
.
Итак, значит когда мы включаем BGP на нашем маршрутизаторе мы сразу полкчаем всю таблицу маршрутизации интернета (987 тыс. префиксов)? Ну взависимости от настроек.. Давайте рассмотрим несколько примеров:

На рисунке выше наша клиентская сеть имеет номер автономной системы (AS 1) и адрестное пространство 11.11.11.0/24. Мы подключены к двум разным провайдерам с разными автонономными системами( AS2 и AS3) и адресным пространством (30.0.0.0/24 и 20.0.0.0/24). Мы можем взаиможействовать с остальной частью интернета через обоих провайдеров.
Используя BGP мы анонсаируем наше адресное пространство провайдерам. Но что будут анонсировать провайдеры в сторону нашего клиента по BGP? Есть несколько вариантов:
- Анонсируют только маршрут по умолчанию
- Анонсируют маршрут по умолчанию и частичную таблицу маршрутизации
- Анонсируют полную таблицу маршрутизации Интернета (full view)
Давайте рассмотрим все три варианта.
3.1 Маршрут по умолчанию

Получение маршрута по умолчанию требует меньше всего ресурсов на клиентских маршрутизаторах, поскольку есть только одна запись в таблице маршрутизации для связи с внешним миром. Клиентский маршрутизатор будет анонсировать в сторону обоих провадйеров всю свою сеть 11.11.11.0/24, которые в свою очредь будут анонсировать её в другие AS. Недостатком этой конфигурации является то, что наша клиентская сеть не знает, что находится за ISP1 и ISP2, связь есть за счёт маршрута по умолчанию, но это может привести к неоптимальной маршрутизации.Если у нас есть только маршруты по умолчанию, то мы будем направлять весь трафик к одному из провайдеров.
Вот что может случиться, если вы используете только маршруты по умолчанию:

Наша клиентская сеть получила маршруты по умолчанию от обоих провайдеров и выбрала ISP1 для отправки всего трафика. Это означает что если нам нужно будет отправить трафик до подсети 30.0.0.0/24 (ISP2), он сначала пойдёт на ISP1, а уже потом на ISP2. Это не проблема, но это просто не оптимально.
3.2 Частичная таблица маршрутизации

Также мы можем получить частичную таблицу маршрутизации вместе с маршрутом по умолчанию. Частичная таблица маршрутизации, например, может включать в себя все IP-адреса, которые провайдеры назначили своим клиентам.
Как и в реальной жизни, чем больше вы знаете, тем лучше для вас(Поговорка «Меньше знаешь, крепче спишь» тут не подходит 🙂 ). В мире машрутизации чем больше маршрутной информации есть, тем лучше и оптимальнее будет выбор направления трафика. Ну и, что логично, будет меньше проблем с неоптимальной маршрутизацией, по сравнению с тем, когда мы получаем только маршрут по умолчанию.
3.3 Полная таблица маршрутизации Интернета

Последний вариант, который у нас есть, — это получение полной таблицы маршрутизации Интернета от обоих провайдеров. Это потребует больше ресурсов(нужны более мощные и дорогие маршрутизаторы), но мы сможем принимать наилучшие решения по маршрутизации.
4. Дистанционно-векторный

У нас есть 4 автономные системы которые запустили у себя BGP, чтобы обмениваться маршрутной информацией. В AS 1 есть сеть 11.11.11.0/24 которая анонсируется в AS 2, AS 3 и AS 4.
Если мы посмотрим на таблицу BGP на роутере AS 4, то мы увидимо не тольок подсеть 11.11.11.0/24, но путь (Path
) через который нужно пройти, чтобы до неё добраться:
AS4#sh ip bgp
BGP table version is 2, local router ID is 10.10.10.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 11.11.11.0/24 10.10.1.1 0 3 2 1 i
С помощью команды show ip bgp
мы можем увидеть что роутер знает о подсети 11.11.11.0/24, next-hop
для достижения маршрута это 10.10.1.1 и Path - 3 2 1
— это автономные системы, через которые мы должны пройти, чтобы попасть в эту сеть.
5. Выбор маршрута в BGP
Общим для всех IGP является то, что все они стремятся найти кратчайший путь к месту назначения. BGP работает по-другому, поскольку автономные системы принадлежат различным провайдерам или организациям, мы хотим иметь возможность управлять маршрутизацией. Взгляните на этот пример:

BGP ползволяет нам использовать политики маршрутизации на уровне автономных систем. На рисунке выше изображены 9 автономных систем, в AS 9 у нас есть сеть 22.22.22.0/24. Если мы посмотрим на AS 1, то можем увидеть что есть большое колличество путей по которым мы сможем добравть до подсети 22.22.22.0/24.
Значит ли это, что сетевой администратор в AS 1 может выбрать путь по которому будет идти трафик? Не совсем, по следующим причинам:
- Вы можете выбрать пути выхода трафика… AS 1 может отправялть трафик в AS 3 или AS 4, но вы не принимаете решения о маршрутизации для других автономных сиситем.
- Каждая автономная система будет анонсировать только лучший путь к нашей автономной системе. AS 1 узнает о наилучшем пути только от AS 2 и AS 4, если только их наилучший путь не отключится(при авариии).. только тогда вы узнаете о втором лучшем пути.
BGP использует BGP-атрибуты для выбора лучшего пути, прочитать об этом можете прочитать в уроке [[BGP-атрибуты и выбор пути]].
6. Заключение
Надеюсь, этот урок помог понять основы BGP и то, зачем мы его используем. В других уроках мы более подробно рассмотрим настройку eBGP и iBGP, а также то, как работает выбор пути BGP.
Если у вас возникли вопросы, не стесняйтесь оставлять комментарии!
#bgp #routing #cisco
Добавить комментарий