VxLAN iBGP vs eBGP

image-loader.svg

Предыдущие части цикла можно найти по ссылкам:

1 часть цикла — L2 связанность между серверами
2 часть цикла — Маршрутизация между VNI
2.5 часть цикла — Теоретическое отступление
3 часть цикла — Подключение внешнего маршрутизатора/firewall
4 часть цикла — Multipod
5 часть цикла — Multisite

До этого момента тема eBGP в overlay практически не затрагивалась, за исключением Multipod топологии, однако, и там все было довольно поверхностно и не хватает деталей для полной реализации в одном поде. Так что исправим это допущение и рассмотрим поближе eBGP.

Для начала предлагаю определиться для чего использовать eBGP и для чего iBGP (тут чисто субъективный взгляд. Ваше мнение может сильно отличаться от мнения автора):

  • iBGP — удобно использовать, когда в underlay сети настроен протокол семейства IGP, например, OSPF или IS-IS. В этом случае нет смысла усложнять топологию различными AS в BGP и вполне логично использовать только iBGP.

  • eBGP — используется, когда в underlay так же настроен BGP. При этом довольна частая ситуация, что сеть underlay разделяют на различные AS (возможно в данном случае удобно делать фильтры по AS-path). Тогда ничего не остается и приходится использовать eBGP еще и в Overlay (большая редкость, когда устройства позволяют запустить несколько процессов BGP с разным номер AS)

Перейдем непосредственно к сравнению различных реализаций протокола. Сеть underlay у нас остается неизменна и представлена ниже:

Underlay СетьUnderlay Сеть

При использовании eBGP в underlay сеть принято разделять на зоны следующим образом:

  1. Каждый Spine находится в одной автономной системе. Будем использовать AS 65000

  2. Каждый Leaf находится в своей автономной системе. Номера AS начинаются с 65500 и далее

Такой подход позволяет избежать петель в сети, так как update пришедший от одного Spine к другому Spine будет отброшен из-за одинаково номера AS:

Решение для без петлевой сети, при одинаковом номере AS на SpineРешение для без петлевой сети, при одинаковом номере AS на Spine

При этом Leaf находятся в разных AS и все update от одного Leaf спокойно дойдут до всех остальных:

Распространение update к Leaf в разных ASРаспространение update к Leaf в разных AS

Таким образом, underlay сеть может работать стабильно без дополнительных конфигураций и добавления роли Route-reflector в сеть. Но такая простота в одном месте способна усложнить жизнь в другом. Для начала рассмотрим конфигурации iBGP:

Spine:

feature bgp
nv overlay evpn
router bgp 65001
  template peer LEAF 
    remote-as 65001
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
      route-reflector-client
  neighbor 10.255.1.11
    inherit peer LEAF
  neighbor 10.255.1.12
    inherit peer LEAF
  neighbor 10.255.1.21
    inherit peer LEAF

И на Leaf:

feature bgp
nv overlay evpn
router bgp 65001
  template peer SPINE
    remote-as 65001
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
  neighbor 10.255.1.101
    inherit peer SPINE
  neighbor 10.255.1.102
    inherit peer SPINE

В целом все выглядит довольно просто и никаких сложностей тут не должно возникнуть. Далее рассмотрим конфигурации route-targer на Leaf коммутаторе для L2VNI, который используется при передаче update по overlay сети и позволяет отдельным VTEP добавлять только определенные update, а не update из всей в сети overlay.

evpn
  vni 10000 l2
    route-target import auto 
    route-target export auto

Как видно все довольно просто и не требует каких-либо сложностей и дополнительных вопросов.

Думаю с iBGP разобрались, все-таки большая часть цикла посвящена именно данной задаче и пора бы приступить к рассмотрению eBGP.

Для начала рассмотрим настройку BGP Spine:

feature bgp
nv overlay evpn
router bgp 65000
  template peer LEAF 
    address-family l2vpn evpn
      send-community
      send-community extended
  neighbor 10.255.1.11
    remote-as 65501
    inherit peer LEAF
  neighbor 10.255.1.12
    remote-as 65502
    inherit peer LEAF
  neighbor 10.255.1.21
    remote-as 65503
    inherit peer LEAF

Leaf:

feature bgp
nv overlay evpn
router bgp 65501
  template peer SPINE
    address-family l2vpn evpn
      send-community
      send-community extended
  neighbor 10.255.1.101
    remote-as 65000
    inherit peer SPINE
  neighbor 10.255.1.102
    remote-as 65000
    inherit peer SPINE

Настройка eBGP особо не отличается от iBGP, за исключением номеров AS и удаление Route-reflector. Однако, попробуйте остановиться и подумать что может пойти не так, если мы оставим настройку в таком состоянии.

А пойти не так может следующее:

Первая проблема — в отличии от iBGP в eBGP меняется Next-hop при переходе из одной AS в другую, то есть Leaf в AS 65502 увидит не NH Leaf в 65501, а адрес Spine из AS 65000 и попытается построить VxLAN до этого NH. Вполне логично, что это не заработает:

  1. На Spine нет того клиента к которому обращается Leaf

  2. Spine не имеет включенных фич для работы с VxLAN и не может выступать в роли VTEP.

Такая задача решается принудительным запретов Spine менять адрес Next-hop в сторону leaf коммутаторов. Необходимо создать route-map в котором будет следующая настройка:

route-map UNCHANCHED_NH permit 10
    set ip next-hop unchanged  

Далее применяем это все к соседям Leaf:

template peer LEAF 
    route-map UNCHANCHED_NH out

После применения команды Spine перестанет менять NH. Дополнительно замечу, что на Cisco Nexus не предусмотрена отдельная команда для запрета смены NH. Этот вопрос можно решить только с помощью route-map, что в свою очередь дает возможность применять команду только к отдельным update (например, использовать различные ACL или Prefix-list и т.п. для выбора определенного update).

Вторая проблема, на первый взгляд, не такая явная и связана она с route-target и будет основным не удобством eBGP в Overlay. Тут появляется сразу два неудобства:

Первое неочевидное неудобство заключается в невозможности использовать параметр auto, так как в этом случае route-target берет значения AS: VNI, в eBGP же AS всегда будет разный, а значит route-target не совпадет между разными Leaf. Решается проблема довольно просто — заданием данной настройки вручную:

evpn
  vni 10000 l2
    route-target import 9999:10000 
    route-target export 9999:10000

Под каждый VNI необходимо задавать свои настройки и соблюдать идентичность RT между VTEP. Это задача довольно просто решается автоматизацией настройки VTEP, вручную вполне можно запутаться. Можно сказать, что тут наступает момент когда сетевику надо пойти в автоматизацию.

Второе неочевидное неудобство, как ни странно, находится на Spine. Все дело в том, что Spine тоже смотрит в поле RT и если значение пришло не из внутренней AS — update отбрасывается. Тут придется немного схитрить и добавить команды:

router bgp 65000
    address-family l2vpn evpn
      retain route-target all

Подведем некий итог. Если посмотрим более внимательно на логику работы Spine, то получается он берет на себя некую роль Route-reflector и просто пересылает update без какой-либо обработки. То есть:

  • Не меняется NH, как при использовании RR.

  • На Spine принимаются абсолютно все update, даже если устройство не знает путь до хоста назначения, и передается на Leaf, что нарушает логику выбора лучшего маршрута BGP (маршрут должен быть валидным. При неопределённом route-target, маршрут никогда таковым не станет)

На Leaf же настройки особо не меняются, за исключением ручной записи RT, что, опять же, решает автоматизацией такой задачи.

В результате, выбирая между iBGP и eBGP в unerlay, нет точного решения что использовать. Однако, я в своих проектах придерживаюсь логики:

  1. iBGP, если в underlay работает протокол IGP

  2. eBGP, если в underlay работает eBGP.

И тут наверняка могут возникнуть споры по поводу больших сетей и, что протоколы IGP не смогут обеспечить необходимую скорость сходимости сети. Тут отвечу просто — сегментируйте сеть. Используйте Multisite и делайте независимые поды.

И, конечно же, не используйте Overlay. Используйте только маршрутизацию.

Данная статья написана специально для курса «Дизайн сетей ЦОД». В преддверии старта курса приглашаем всех желающих на бесплатный демоурок в рамках которого мы рассмотрим плюсы и минусы реализации iBGP. Преимущества перед eBGP.

© Habrahabr.ru