Заметки к CCNP Route: BGP часть 1

BGP или border gateway protocol – протокол маршутизации всея Интернетов. В CCNP трэке о BGP речь идет с точки зрения ынтерпрайза, в том числе о тех случаях, когда у вас есть свой блок PI (Provider Independent) адресов и вам нужно анонсировать его через нескольких провайдеров интернета (ISP).

Сложно найти более-менее крупный бизнес, которых обходится в своей внутренней сети без протоколов динамический маршрутизации – IGP (interior gateway protocol). BGP был разработан IBM и Cisco и продолжал свою эволюцию (на данный момент версия 4), как EGP – exterior gateway protocol. А значит цели, которые он преследует будут в какой-то степени отличаться от используемых в IGP.

BGP, в отличии от EIGRP/OSPF, использует TCP протокол. Для формирования сессии используется 179 порт. В процессе работы BGP формирует следующие таблицы:

  • neighbor table – содержит в себе информацию о всех соседях;
  • BGP table – содержит в себе все возможные маршруты;
  • routing table – содержит только лучшие маршруты;

Для формирования соседства и в процессе работы имею место быть следующие типы пакетов:

  • Open – инициирует соседство и используется для обмена базовыми параметрами, такими как значения ASN и MD5.
  • Keepalive – отправляется время от времени, чтобы подтвердить факт того, что сосед все еще жив и здоров.
  • Update – используется для обмена PA и связанными с ними префиксами (NLRI)
  • Notification – случилось что-то ужасное. Notification используется как сигнализация о какой-либо ошибки. Например, закрытие сессии или не совпадение параметров.

Так же как и IGP BGP анонсирует сети и префиксы (Network Layer Reachability Information – NLRI), дополнительную информацию, по которой можно сделать выбор и предпочитать тот или иной маршрут. Так же как IGP BGP формирует соседства перед тем как начать обмен маршрутной информацией, однако соседи не обязаны находиться в одной подсети. Более того, они могут быть разделены десятками маршрутизаторов. Следующее различие заключается в выборе лучшего пути: вместо целочисленной метрики BGP использует целый набор данных, на основании которых происходит выбор. Этот набор данных носит название BGP path attributes (PA).

BGP PA: ASN и AS_SEQ

По умолчанию BGP маршрутизаторы будут использовать AS_PATH (autonomous system path) для выбора лучшего маршрута. AS_PATH сама по себе содержит множество компонентов. Один из них – AS_SEQ – последовательность автономных систем.

Каждой автономной системе присваивается уникальный номер – ASN. Когда маршрутизатор, использующий BGP анонсирует маршрут, то он ассоциируеться с несколькими PA, включая AS_PATH, как бы говоря: “если будет выбран этот маршрут, то путь до сети пройдет через следующие AS”.

BGP использует AS_PATH для двух целей:

  • предотвращение петель – если маршрутизатор видит свою автономную систему в AS_SEQ, то такой маршрут будет проигнорирован;
  • выбор лучшего маршрута, основываясь на самом коротком пути-последовательности AS;

Рассмотрим кусочек Интернетов и процесс анонса 18.202.1.0/24:

  1. Маршрутизатор в AS 200 рассказывает вся Интернетам о сети 18.202.1.0/24 и добавляет в AS_PATH PA свой ASN – 200.
  2. Маршрутизаторы в AS 12 анонсируют этот маршрут в AS 3400 и AS 809, добавляя в AS_PATH свой номер, получая [200,12] AS_SEQ.
  3. Маршрутизаторы в AS 809 и AS 3400 анонсируют маршрут дальше соседям (в том числе друг другу), не забывая добавить номер своей AS – [200,12,809] и [200,12,3400].
  4. В итоге маршрутизатор в AS 10 получает два пути до 18.202.1.0/24 – [200,12,3400] и [200,12,809,3400]. Маршрутизаторы в AS 12, увидев в пути номер своей автономной системы такие маршруты принимать во внимание не будет.
Internal и External BGP

В BGP существует два типа соседей – internal (iBGP) – соседи в рамках одной AS и external (eBGP) – соседи из разных AS. BGP маршрутизаторы ведут себя по разному в зависимости от того установлено соседство с iBGP или eBGP соседом. К примеру, когда маршрут анонсируется из одной AS в другую происходит замена next-hop адреса, а если в рамках одной, то нет. Более подробно о различиях iBGP и eBGP мы поговорим в следующих частях.

Публичные и приватные ASN

Публичные номера AS распределяются IANA (Internet Assigned Numbers Authority), что позволяет избежать дублирующий номеров AS.

16-битовые категории  ASN выглядят следующим образом:

значение назначение
0 в резерве
1-64495 публичные ASN, назначаются IANA
64496-65511 используются в примерах
64512-65534 приватные ASN
65535 в резерве

Тут есть нюанс, который не описываются в CCNP Route трэке. Если я правильно понял, то 16-битовые ASN не выдаются аж с 2010 года, а вместо них назначаются 32-битовые адреса. Оборудование, которое не имеет понятия о 32-битовых адреса видит такие AS как AS с номером 23456 (RFC 4893), что представляет собой механизм предоставления обратной совместимости. Судя по этому документу на март 2012 года выданы все 16-и битные AS номера, а те, которые не выданы, остались зарезервированы IANA.

32-bit ASN (ASN32)

Дают нам в итого 2^32 номеров. В 32-битных ASN номера с 0 до 65535 называются “mappable ASN”, первые 16 бит в таких ASN – нули. Что мешало поступить так же с IPv6 я отказываюсь понимать :)

Существует два метода отображения ASN32:

  • число от 0 до 4294967295;
  • как точка, разделяющая ASN32 на два 16 битовых значения. Старая ASN16 3200 в таком случае превращается в 0.3200, а “новая” ASN32 65545 как 1.10, 78960 как 1.13424 и т.д;

Обратная совместимость между ASN16 и ASN32

В процессе установления соседства маршрутизаторы обменяются, в том числе, списком поддерживаемых атрибутов (Capabilities Advertisement). Если маршрутизатор объявляет свой ASN32 в этом списке атрибутов, значит он способен с ними работать. В случае если от соседа получен такой же ответ с его ASN32, значит все ок, можно работать без использования ASN16. Если соседи являются членами AS с номерами из “старого” 16 битного пула, то в дополнению к ним, еще анонсируются и mappable ASN32 в Capabilities Advertisement.

В том случае если сосед всей этой радости не поддерживает, то, по понятным причинам, ASN32 ему анонсировать никто не будет. Вместо это будет использоваться зарезервированный в RFC 4893 номер автономной системы 23456, называемой AS_TRANS.

Обратная совместимость между PA

Когда маршруты анонструются соседу, поддерживающему ASN32 от соседа их не поддерживающего, первый модифицирует AS_PATH атрибуты. В обратном порядке такой фокус не пройдет. Вместо того, чтобы добавить собственный ASN32 добавляется своеобразный placeholder – AS23456 для собственного и любого другого номера в 32 битном формате. Так же добавляется новый атрибут AS4_PATH который содержит список все реальных ASN как 16, так и 32 битных, что позволяет избежать петель.

Заменяя ASN32 в AS_PATH на AS_TRANS маршрутизатор, который не поддерживает 32 битную нотацию, все равно сможет аккуратно рассчитать путь до той или иной сети основываясь на количестве автономных систем.

Больше в этом документе.

Исходящая маршрутизация в Интернеты

Исходящая маршрутизация может быть настроена тремя способами – маршрут по умолчанию, полные и частичные BGP анонсы.

Первый вариант совсем не плох. Он значительно экономит ресурсы маршутизатора, в разы проще в настройке. Он может задаваться как статическими маршрутами со стороны R1 и ISP1, так и с помощью BGP. В случае использования BGP провайдер станет анонсировать вам все тот же маршрут по умолчанию, но уже средствами протокола динамической маршрутизации. В дальнейшем происходит редистрибуция такого маршрута в IGP с тем, чтобы корпоративная сеть имела представление о точке выхода в интернет. Такой тип подключение – 1 канал до одного ISP называется single homed. Помимо него существуют еще dual homed (2+ канала, 1 ISP), single multihomed (один канал до каждого из 2+ ISP), dual multihomed (2+ канала для каждого из 2+ ISP).

Полные или частичные BGP анонсы

Частичные анонсы могут быть полезны когда у вас 2 ISP и две удаленных площадки. Рассмотрим схему:

ISP1 и 2 анонсируют специфичные маршруты до офисов в NY и Сиднее, а так же маршруты по умолчанию. В случае если маршрутизатору MSK понадобиться отправить пакет до NY или Сиднея, то он будет в состоянии выбрать лучший маршрут из предлагаемых двумя ISP.

В случае полного анонса маршрутизатор MSK получит информацию о всех сетях, доступных от всех четырех ISP. В двукратном размере. На этой картинке 4 автономные системы, а в Интернетах их десятки тысяч. Количество анонсируемых префиксов приближается к 500.000, а с большим проникновением IPv6 это цифра будет только лавинно расти. По этому на месте MSK должен быть маршрутизатор, способный пережевать весь этот объем и заботливо сложить 2+ полные BGP таблицы в оперативную память.