BGP EVPN FRR simple: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 312: Строка 312:
   
 
==Добавление конечных точек VTEP==
 
==Добавление конечных точек VTEP==
  +
```Для начала добвляются конечные точки только на одно роутере - FRR1```
  +
 
Для добавления VTEP используется скрипт, рассчитаный на добавление множества VTEP но в целях упрощения добавляем только один.
 
Для добавления VTEP используется скрипт, рассчитаный на добавление множества VTEP но в целях упрощения добавляем только один.
 
* seq 11025 11025 даст список из 1 элемента - 11025
 
* seq 11025 11025 даст список из 1 элемента - 11025
Строка 346: Строка 348:
 
br-vni11025 8000.5e240380730e no vxlan11025
 
br-vni11025 8000.5e240380730e no vxlan11025
 
</PRE>
 
</PRE>
  +
  +
==BGP после добавления конечных точек==
   
 
=Команды=
 
=Команды=

Версия 12:38, 13 февраля 2025

Минимальная конфигурация EVPN по шагам

Это документ о настройке абсолютно минимальной конфигурации EVPN

Схема сети

FRR BGP EVPN 1.drawio.png
Оригинал: Файл:FRR BGP EVPN 1.drawio

Тестовый стенд полностью виртуализирован.
На этой схеме:

  • 2 маршрутизатора FRR выполняют роли PE (Provider Edge, маршрутизатор куда подключены клиентские устройства)
    • Сеть tenant используется как транспортная сеть между маршрутизаторами (l2 сегмент)
    • Каждый из PE имеет по 1 подключеному CE (Client Edge, маршрутизатор клиента подключенный к оборудованию провайдера)
    • CE максимально упрощены - это просто IP адрес поднятый на бридже (но конечно ничто не мешает использовать отдельную виртуальную машину, разницы нет)
  • Используется 1 интерфейс для поддключения CE
  • Номер VNI (VxLAN Network Identifier) выбран абсолютно произвольно, такое значение взято что бы оно случайно не совпало ни с каким другим и было заведомо больше максимального номера влана
  • Management сеть используется только для управлени маршрутизаторами (без нее можно обойтись) Интерфейсы в этой сети названы external по историческим причинам.
  • Интерфейсы loopback изспользуются для построения сессий BGP

Настройка сети на маршрутизаторах

  • Настройки на обоих маршрутизаторах идентичны (с точностью до адресов)
  • dummy поддерживается в относительно новых версиях netplan (Убунту 24.04 поддерживает)

FRR1

network:
    version: 2
    dummy-devices:
        loopback0:
            addresses:
                - 192.168.32.101/32
    ethernets:
        ens3:
            dhcp4: false
            dhcp6: false
            addresses: ["10.80.6.253/24"]
            set-name: "tenant"
            match:
                macaddress: "00:99:00:00:00:01"


        ens5:
            dhcp4: true
            dhcp6: false
            match:
                macaddress: "00:99:00:00:00:03"
            set-name: "external"

FRR2

network:
    version: 2
    dummy-devices:
        loopback0:
            addresses:
                - 192.168.32.102/32
    ethernets:
        ens3:
            dhcp4: false
            dhcp6: false
            addresses: ["10.80.6.252/24"]
            set-name: "tenant"
            match:
                macaddress: "00:99:00:00:22:01"

        ens5:
            dhcp4: true
            dhcp6: false
            match:
                macaddress: "00:99:00:00:22:03"
            set-name: "external"

Настройка демона FRR

Эта часть разделена на 2 части - не относящееся к EVPN выжелено в отдельную часть

Подготовительная настройка

  • Запустить OSPF в сети tenant для того что бы получить доступность интерфейсов loopback
  • сделать редистрибьюцию маршрутов в OSPF (не уверене что нужно делать все три - static connected и kernel даже скорее всего нет)
  • тут можно вполне обойтись статикой без OSPF но так сделано для большей "достоверности"


Немного заметок про настройку OSPF:

  • prefix-list REDISTRIBUTE- ... - префикс-листы что бы ограничить редистрибьюцию в OSPF только /32 (ge) сетями из диапазона 192.168.32.0/24
  • В работе OSPF учавствует только интерфейс tenant ( no ip ospf passive, passive-interface defaul)

FRR1 OSPF

frr version 10.2.1
frr defaults traditional
hostname frr1
log file /var/log/frr.log
log syslog informational
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
ip prefix-list REDISTRIBUTE-KERNEL-TO-OSPF-LOOPBACK-BLOCK seq 10 permit 192.168.32.0/24 ge 32
ip prefix-list REDISTRIBUTE-STATIC-TO-OSPF-LOOPBACK-BLOCK seq 10 permit 192.168.32.0/24 ge 32
ip prefix-list REDISTRIBUTE-CONNECTED-TO-OSPF-LOOPBACK-BLOCK seq 10 permit 192.168.32.0/24 ge 32
!
interface tenant
 no ip ospf passive
exit
!
router ospf
 ospf router-id 192.168.32.101
 redistribute kernel route-map REDISTRIBUTE-KERNEL-TO-OSPF
 redistribute connected route-map REDISTRIBUTE-CONNECTED-TO-OSPF
 redistribute static route-map REDISTRIBUTE-STATIC-TO-OSPF
 passive-interface default
 network 10.80.6.0/24 area 0
exit
!
route-map REDISTRIBUTE-KERNEL-TO-OSPF permit 10
 match ip address prefix-list REDISTRIBUTE-KERNEL-TO-OSPF-LOOPBACK-BLOCK
exit
!
route-map REDISTRIBUTE-STATIC-TO-OSPF permit 10
 match ip address prefix-list REDISTRIBUTE-STATIC-TO-OSPF-LOOPBACK-BLOCK
exit
!
route-map REDISTRIBUTE-CONNECTED-TO-OSPF permit 10
 match ip address prefix-list REDISTRIBUTE-CONNECTED-TO-OSPF-LOOPBACK-BLOCK
exit
!
end

FRR2 OSPF

frr version 10.2.1
frr defaults traditional
hostname frr2
log file /var/log/frr.log
log syslog informational
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
ip prefix-list REDISTRIBUTE-KERNEL-TO-OSPF-LOOPBACK-BLOCK seq 10 permit 192.168.32.0/24 ge 32
ip prefix-list REDISTRIBUTE-STATIC-TO-OSPF-LOOPBACK-BLOCK seq 10 permit 192.168.32.0/24 ge 32
ip prefix-list REDISTRIBUTE-CONNECTED-TO-OSPF-LOOPBACK-BLOCK seq 10 permit 192.168.32.0/24 ge 32
!
!
interface tenant
 no ip ospf passive
exit
!
router ospf
 ospf router-id 192.168.32.102
 redistribute kernel route-map REDISTRIBUTE-KERNEL-TO-OSPF
 redistribute connected route-map REDISTRIBUTE-CONNECTED-TO-OSPF
 redistribute static route-map REDISTRIBUTE-STATIC-TO-OSPF
 passive-interface default
 network 10.80.6.0/24 area 0
exit
!
route-map REDISTRIBUTE-KERNEL-TO-OSPF permit 10
 match ip address prefix-list REDISTRIBUTE-KERNEL-TO-OSPF-LOOPBACK-BLOCK
exit
!
route-map REDISTRIBUTE-STATIC-TO-OSPF permit 10
 match ip address prefix-list REDISTRIBUTE-STATIC-TO-OSPF-LOOPBACK-BLOCK
exit
!
route-map REDISTRIBUTE-CONNECTED-TO-OSPF permit 10
 match ip address prefix-list REDISTRIBUTE-CONNECTED-TO-OSPF-LOOPBACK-BLOCK
exit
!
end

Проверка работы OSPF

Соседи видят друг-друга

frr1# show ip ospf neighbor

Neighbor ID     Pri State           Up Time         Dead Time Address         Interface                        RXmtL RqstL DBsmL
192.168.32.102    1 Full/DR         22h48m06s         30.094s 10.80.6.252     tenant:10.80.6.253                   0     0     0

frr2# show ip ospf neighbor

Neighbor ID     Pri State           Up Time         Dead Time Address         Interface                        RXmtL RqstL DBsmL
192.168.32.101    1 Full/Backup     22h48m23s         33.773s 10.80.6.253     tenant:10.80.6.252                   0     0     0

Просмотр базы данных OSPF (на примере frr2):

show ip ospf database

       OSPF Router with ID (192.168.32.102)

                Router Link States (Area 0.0.0.0)

Link ID         ADV Router      Age  Seq#       CkSum  Link count
192.168.32.101 192.168.32.101  1533 0x80000032 0x037a 1
192.168.32.102 192.168.32.102  1542 0x80000032 0xe497 1

                Net Link States (Area 0.0.0.0)

Link ID         ADV Router      Age  Seq#       CkSum
10.80.6.252    192.168.32.102  1692 0x80000030 0x6e90

                AS External Link States

Link ID         ADV Router      Age  Seq#       CkSum  Route
192.168.32.1   192.168.32.101  1683 0x80000030 0xe233 E2 192.168.32.1/32 [0x0]
192.168.32.1   192.168.32.102  1552 0x80000030 0xdc38 E2 192.168.32.1/32 [0x0]
192.168.32.2   192.168.32.101  1563 0x80000030 0xd83c E2 192.168.32.2/32 [0x0]
192.168.32.2   192.168.32.102  1612 0x80000030 0xd241 E2 192.168.32.2/32 [0x0]
192.168.32.101 192.168.32.101  1483 0x80000030 0xf6ba E2 192.168.32.101/32 [0x0]
192.168.32.102 192.168.32.102    12 0x80000031 0xe4c9 E2 192.168.32.102/32 [0x0]

Icon-caution.gif

Уточнение:
Тут присутвуют адреса 192.168.32.1 и 192.168.32.2 которых не должно быть.
Это не ошибка, в лабе они присутвуют в виде статических маршрутов (в моем случае выданных по DHCP) и в OSPF они попали через редистрибьюцию так как тоже относятся к блоку 192.168.32.0/24 и имеют маску /32. В контексте EVPN их можно игнорировать.

EVPN

Cхема работы (приблизительная

<TODO>

Существует два типа информации о доступности сети, которую VTEP передает через BGP EVPN:

  • VNI, в которых они заинтересованы (маршруты L3)
  • локальный MAC-адрес для каждого VNI (маршруты L2)

Начальная настройка BGP

На начальном этапе в конфигурации отсутствуют VxLAN интерфейсы, пока просто проверка что BGP-сессия поднимаются нормально.

  • В качестве адреса используется интерфейс loopback - так как он всегда поднят, не зависит от физического состояния линка (адрес на нем может быть доступен через несколько линков в общем случае, при наличии динамической маршрутизации, это общаяя практика)
  • Номер AS - 65000 из частного диапазона, одинаковый на обоих маршрутизаторах
  • neighbor fabric peer-group - не смотря на то что у нас всего один neighbor описываем группу - так проще будет расширять
  • bgp router-id 192.168.32.101 - задать идентификатор роутера (что бы он был однозначен а не выбран автоматически)
  • neighbor fabric update-source 192.168.32.101 - указать с какого адреса отправлять обновления. Если этого не сделать то будет выбран адрес интерфейса, в результате пакеты будут уходить не с тем адресом который ожидает сосед, и сессия не поднимется. ("костыль" тут это использовать адреса интерфейсов)

FRR1

router bgp 65000
 bgp router-id 192.168.32.101
 no bgp default ipv4-unicast
 neighbor fabric peer-group
 neighbor fabric remote-as 65000
 neighbor fabric update-source 192.168.32.101
 neighbor fabric capability extended-nexthop
 neighbor 192.168.32.102 peer-group fabric
 !
 address-family l2vpn evpn
  neighbor fabric activate
 exit-address-family
exit

FRR1

router bgp 65000
 bgp router-id 192.168.32.102
 no bgp default ipv4-unicast
 neighbor fabric peer-group
 neighbor fabric remote-as 65000
 neighbor fabric update-source 192.168.32.102
 neighbor fabric capability extended-nexthop
 neighbor 192.168.32.101 peer-group fabric
 !
 address-family l2vpn evpn
  neighbor fabric activate
 exit-address-family
exit

Проверка BGP

frr1# show bgp summary

L2VPN EVPN Summary:
BGP router identifier 192.168.32.101, local AS number 65000 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 24 KiB of memory
Peer groups 1, using 64 bytes of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
192.168.32.102  4      65000      1411      1411        0    0    0 23:28:54            0        0 FRRouting/10.2.1

Total number of neighbors 1

L2EVPN не является IP что можно видеть по ошибке ниже: <BRE> frr1# sho ip bgp summary

% No BGP neighbors found in VRF default


Никаких маршрутов пока нет frr1# show bgp

No BGP prefixes displayed, 0 exist

Добавление конечных точек VTEP

```Для начала добвляются конечные точки только на одно роутере - FRR1```

Для добавления VTEP используется скрипт, рассчитаный на добавление множества VTEP но в целях упрощения добавляем только один.

  • seq 11025 11025 даст список из 1 элемента - 11025
  • LOCAL_IP="192.168.32.101" - source-адрес VxLAN-тунелей (loopback, причины его использования такие же как и для BGP)
  • для FRR2 LOCAL_IP="192.168.32.102"
#!/bin/bash
LOCAL_IP="192.168.32.101"

for vni in $(seq 11025 11025) ; do
    # Create VXLAN interface
    ip link add vxlan${vni} type vxlan \
        id ${vni} \
        dstport 4789 \
        local ${LOCAL_IP} \
        nolearning

    brctl addbr br-vni${vni}
    brctl addif br-vni${vni} vxlan${vni}
    brctl stp br-vni${vni} off
    ip link set up dev br-vni${vni}
    ip link set up dev vxlan${vni}
done

В результате работы скрипта будет создан 1 VxLAN-тунель и добавлен в бридж

7: vxlan11025: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-vni11025 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 66:f8:b3:52:6b:af brd ff:ff:ff:ff:ff:ff
# brctl show

bridge name	bridge id		STP enabled	interfaces
br-vni11025		8000.5e240380730e	no		vxlan11025

BGP после добавления конечных точек

Команды

  • show bgp summary
  • show evpn mac vni all
  • show bgp evpn vni