Введение в BGP

1. Почему нам нужен BGP?

Для начала давайте рассмотрим несколько сценариев которые помогут вам понять для чего нам нужен BGP:

В наше время практически всё подключено к Интернету. На рисунке выше мы видим клиентскую сеть, подключенную к провайдеру (ISP — Internet Service Provider). Провайдер и выделил нам один публичный 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 это возможно.

Дело в том, что в IGP-протоколах, таких как RIP, OSPF и ISIS, мы используем маршруты по умолчанию и совсем не знаем, где находится условный yandex, просто направляем весь трафик с назначением «интернет» в провайдера. Но когда мы используем BGP, мы уже можем изучить информацию о том, где находится то или иное назначение, получив от провайдера полную таблицу маршрутизации BGP (entire Internet routing table) или её часть.

Также в BGP есть большое количество различных атрибутов (weight, local preference, metric и т. д.), которые мы можем использовать для того, чтобы решить, какой путь использовать для определённых назначений. Используя трафик-инженеринг, мы можем направить определенное количество трафика в одного BGP-соседа, а всё остальное — в другого.

Ещё существует опция под названием «bgp dmzlink-bw». Она позволяет осуществлять балансировку нагрузки, опираясь на пропускную способность.

Этот сценарий немного интереснее. Вместо подключения к одному провайдеру мы подключаемся к двум. Для надежности важно иметь двух разных интернет-провайдеров. Это позволит вам всегда иметь резервный канал в случае сбоя у одного из них. А как обстоят дела с нашей клиентской сетью? У нас по-прежнему два сервера, которые должны оставаться доступными из интернета.

В предыдущих примерах мы получали публичные IP-адреса от своего провайдера. Теперь, если у нас два разных провайдера, какой IP-адрес использовать? От ISP1 или от ISP2? Если взять IP-адреса от одного провайдера, то при проблемах с подключением у другого сервера будут недоступны.

Вместо того чтобы использовать IP-адреса провайдера, мы получим собственные публичные IP-адреса. Учёт белых публичных IP-адресов поддерживается IANA (Internet Assigned Numbers Authority — http://www.iana.org/). IANA распределяет публичные IP-адреса между несколькими крупными региональными регистрирующими компаниями, такими как RIPE или ARIN. Каждый из них выделяет IP-адреса провайдерам или крупным организациям.

Получив собственное публичное адрестное пространство, мы сможем анонсировать его в Интернет через подключённых провайдеров. Такой анонс может осуществляться только с помощью BGP. 

Если вам интересно, вот обзор адресного пространства IPv4, которое было выделено IANA:

IANA IPv4 address space

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).

External BGP предназначен для обмена маршрутной информацией между различными автономными системами. В этом уроке я объясню, зачем нам нужен Internal BGP. Я бы рекомендовал прочитать его после завершения этого урока и сначала ознакомиться с внешним протоколом BGP.

3. Анонсы в BGP

Теперь мы имеем представление о том, зачем нам нужен BGP и что такое автономные системы. Интернет — большое место, на момент написания данной статьи в нём более 987 тыс. префиксов. Если вам любопытно, вы можете посмотреть размер таблицы маршрутизации всего интернета по ссылке:

CIDR Report

В Интернете есть несколько looking glass-серверов. Это маршутизаторы с которых вы можете посомтреть таблицу маршрутизации Интенета, Full view полученный по BGP. Посомтреть можно тут:

Looking glass servers

Пролистайте страницу вниз до “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 позволяет нам анонсировать наше адресное пространство провайдерам. Но что провайдеры будут анонсировать нам? Рассмотрим три варианта:

  • Анонсируют только маршрут по умолчанию
  • Анонсируют маршрут по умолчанию и частичную таблицу маршрутизации
  • Анонсируют полную таблицу маршрутизации Интернета (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. BGP — Дистанционно-векторный протокол

BGP — это дистанционно-векторный протокол маршрутизации. Что это значит? Рассмотрим пример:

У нас есть 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 есть автономные системы, которые принадлежат разным провайдерам или организациям. Мы хотим иметь возможность управлять тем, как данные передаются между этими системами. Давайте посмотрим на пример:

Значит ли это, что сетевой администратор в AS1 может выбрать путь, по которому будет идти трафик? Не совсем, по следующим причинам:

  • Вы можете выбрать пути выхода трафика… AS 1 может отправлять трафик в AS 3 или AS 4, но вы не принимаете решения о маршрутизации для других автономных систем.
  • Каждая автономная система будет анонсировать только лучший путь к нашей автономной системе. AS 1 узнает о наилучшем пути только от AS 2 и AS 4, если только их наилучший путь не отключится (при аварии)… Только тогда вы узнаете о втором лучшем пути.

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

6. Заключение

Надеюсь, этот урок помог понять основы BGP и то, зачем мы его используем. В других уроках мы более подробно рассмотрим настройку eBGP и iBGP, а также то, как работает выбор пути BGP.

Если у вас возникли вопросы, не стесняйтесь оставлять комментарии!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

ru_RURussian