Рассмотрим сценарии использования редистрибуции маршрутов из OSPF VRF lite в BGP VPNv4.

В качестве примера разберем схему на рисунке 1.

Рисунок 1 — Тестовая схема


На рисунке 1 изображено следующее оборудование:

R1, R2 — PE (Provider Edge) маршрутизаторы.

R3, R4 RR (Route Reflectors) маршрутизаторы.

CE — Customer Edge router, граничный маршрутизатор клиента и присоединенная к нему сеть 10.0.1.0/24.

На CE устройстве мы настраиваем редистрибуцию подключенных сетей в OSPF VRF Test и указываем формирование типа маршрута External Type 2.

Пример настройки OSPF на CE:

!
interface vlan 10
 ip vrf Test
 ip address 10.0.1.1 255.255.255.0
exit
!
router ospf 1 vrf Test
 network 10.11.0.0 area 0.0.0.0
 network 10.11.0.2 area 0.0.0.0                       
 network 10.11.15.12 area 0.0.0.0 
 router-id 10.11.15.12
 redistribute connected metric-type type-2 subnets
exit


CE рассылает маршрутную информацию своим соседям, а именно маршрутизатору R1 и R2.

Настройка OSPF на маршрутизаторе R1(на R2 аналогично):

outer ospfv2 Test 
   vrf Test 
    area 0.0.0.0 
      interface loopback 10 
        passive 
      exit
      interface tengigabitethernet 0/0/1.100 
        network point-to-point
      exit
    exit
    redistribution bgp 64500  < ======== редистрибуция в BGP
      priority 20
    exit
    router-id 10.0.1.12
  exit
exit


Маршрутизаторы получив маршруты от CE импортируют их в BGP, и отдают роут рефлекторам R3(RR) и R4(RR), как показано на рисунок 2.


Рисунок 2 — Распространение маршрутной информации BGP


Далее маршрутизаторы R3(RR) и R4(RR) отражают полученные маршруты на маршрутизаторы R2 и R1 соответственно. Таким образом на маршрутизаторах R1 и R2 присутствует по два одинаковых маршрута, один получен по BGP, другой по OSPF.

Проверяем на R1 полученные маршруты по BGP от R3 и R4:

0/ME5100:R1# show bgp vpnv4 unicast  rd 10.0.1.13:100 prefix 10.0.1.0/24 
Fri Mar 17 18:17:34 2023
  BGP router identifier 10.0.1.12, local AS number 65500 
  BGP routing table entry for 10.0.1.0/24
    Path #0
    AS path: 
    RD 10.0.1.13:100, 10.0.1.13 from 10.0.1.1 (10.0.1.1), Source VRF: Test
    Received Label: 16
      Origin incomplete, metric 21, local-pref 100, weight 0, not-tracked, internal, best
      Address family: ipv4/vpn
      NLRI pathID: 0
      Aggregator AS: 0, Address: 0.0.0.0, Atomic aggregate: absent
      Extended Community: RT 65200:10 (0.0.0.10), ospf-route-type area 0.0.0.0router-type:0x05, metric-type:E2E1
      Cluster List: 1.1.1.1
      Originator ID: 10.0.1.13
      Is not stale, is not history
      Route flap penalty: 0, flap count 0, is not suppressed
      Route flap time left: 00:00:00, time start: never
      Route is not ECMP

    Path #1
    AS path: 
    RD 10.0.1.13:100, 10.0.1.13 from 10.0.1.2 (10.0.1.2), Source VRF: Test
    Received Label: 16
      Origin incomplete, metric 21, local-pref 100, weight 0, not-tracked, internal
      Address family: ipv4/vpn
      NLRI pathID: 0
      Aggregator AS: 0, Address: 0.0.0.0, Atomic aggregate: absent
      Extended Community: RT 65200:10 (0.0.0.10), ospf-route-type area 0.0.0.0router-type:0x05, metric-type:E2E1
      Cluster List: 1.1.1.1
      Originator ID: 10.0.1.13
      Is not stale, is not history
      Route flap penalty: 0, flap count 0, is not suppressed
      Route flap time left: 00:00:00, time start: never
      Route is not ECMP
    Total entries: 2


по OSPF от CE:

0/ME5100:R1# show  ospfv2 vrf Test database detailed external
…
      LSA ID: 10.0.1.0
      Router-id: 10.11.15.12
      Age: 00:04:07
      Seq#: 0x800002A1
      Checksum: 0xede7
      Type: external-lsa
      Options: E
        LSA type: AS external link
        Length: 36
          Network Mask: 255.255.255.0
…


Смотрим какой маршрут был установлен в таблицу маршрутизации в VRF Test:

0/ME5100:R1# show  route vrf Test 10.0.1.0/24
Fri Mar 17 18:48:59 2023
  Routing entry for 10.0.1.0/24
    Last update: 01w04d00h
    Routing Descriptor Blocks
      10.0.1.13 
      Known via bgp, distance 200, metric 21 <===============================
        type bgp-vpn, protection none, route-type remote
  Entries: 1
	


Проверяем на маршрутизаторе R2. 

Маршрут по OSPF от CE:

0/ME5100:R2# show  ospfv2 vrf Test database detailed external
...
      LSA ID: 10.0.1.0
      Router-id: 10.11.15.12
      Age: 00:07:15
      Seq#: 0x800002A1
      Checksum: 0xede7
      Type: external-lsa
      Options: E
        LSA type: AS external link
        Length: 36
          Network Mask: 255.255.255.0
…


Смотрим какой маршрут был установлен в таблицу маршрутизации в VRF Test:

0/ME5100:R2# show  route vrf Test 10.0.1.0/24
Fri Mar 17 18:41:00 2023
  Routing entry for 10.0.1.0/24
    Last update: 02w00d01h
    Routing Descriptor Blocks
      10.11.0.2, via te0/0/12.12
      Known via ospf, distance 110, metric 20 <===============================
        type ospf-type2-external, protection none, route-type remote
  
  Entries: 1


Таким образом мы видим следующее: маршрутизатор R1 установил маршрут, полученный по BGP, а R2 маршрут, полученный по OSPF, в результате получаем неоптимальный маршрут.

На рисунке 3 показан пример прохождения трафика от сетей подключенных к R1 и R2 до CE.

Рисунок 3 — Направление движения трафика


Что произошло?

Маршрутизатор R1 получил маршрут по BGP, который оказался лучшим, и был установлен в таблицу маршрутизации vrf Test. Далее маршрутизатор R1 перестал распространять маршрутную информацию по правилу split horizon, и маршрутизатор R2 установил единственный маршрут, полученный по OSPF.

Почему маршрутизатор R1 выбрал маршрут полученный по BGP?

Во первых, в случае использования комбинации OSPF в VRF и BGP VPNv4 сравнение будет выполнятся по опции "vpn-pe-ce-support" (RFC 4577). То есть сравнение будет происходит по метрике, без учета AD (Administrative Distance) протокола.

В момент редистрибуции BGP унаследовал часть параметров OSPF маршрута , которые были записаны в Extended Communities attributes, один из данных параметров является MED (Multiexit Discriminator attribute), в который мигрировало значение метрики (cost ).

Во вторых, не смотря на то, что метрика BGP маршрута больше, по умолчанию у маршрута полученного по BGP, параметр MED не учитывается и при сравнении берется значение 0, в результате маршрут полученный по OSPF отбрасывается.

Для решения данной проблемы необходимо изменить дефолтное поведение маршрутизатора и учитывать параметр веса (MED). Это делается командой “metric-conversion same“. Также необходимо заметить, что по RFC 4577 к параметру веса прибавляется единица. Команду: “metric-conversion same“, мы прописываем на маршрутизаторах R1 и R2.

Пример конфигурации на R1:

router ospfv2 Test 
  vrf Test 
    redistribution bgp 65500 
      metric-conversion same <===============
    exit
  exit
exit


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

Проверяем маршрут до 10.0.1.0/24 на маршрутизаторе R1:

0/ME5100:R1# show  route  vrf Test  10.0.1.0/24
Fri Mar 17 19:27:24 2023
  Routing entry for 10.0.1.0/24
    Last update: 00h00m49s
    Routing Descriptor Blocks
      10.11.0.0, via te0/0/12.11
      Known via ospf, distance 110, metric 20 <=======
        type ospf-type2-external, protection none, route-type remote


На маршрутизаторе R2:

0/ME5100:R2# show  route  vrf Test  10.0.1.0/24
Fri Mar 17 19:29:38 2023
  Routing entry for 10.0.1.0/24
    Last update: 02w00d02h
    Routing Descriptor Blocks
      10.11.0.2, via te0/0/12.12
      Known via ospf, distance 110, metric 20 <=======
        type ospf-type2-external, protection none, route-type remote


Тем самым мы избавимся от неоптимального маршрута, и линк между R1 и CE будет задействован: рисунок 4.


Рисунок 4 — Направление движения трафика после изменения поведения маршрутизаторов.


Ниже, для иллюстрации, приведены дампы пакетов.

LSU OSPF пакет от CE в сторону маршрутизатора R1:

Frame 2: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: EltexEnt_10:ab:00 (e4:5a:d4:10:ab:00), Dst: IPv4mcast_05 (01:00:5e:00:00:05)
Internet Protocol Version 4, Src: 10.11.0.0, Dst: 224.0.0.5
Open Shortest Path First
    OSPF Header
    LS Update Packet
        Number of LSAs: 1
        LSA-type 5 (AS-External-LSA (ASBR)), len 36
            .000 1110 0001 0000 = LS Age (seconds): 3600
            0... .... .... .... = Do Not Age Flag: 0
            Options: 0x02, (E) External Routing
            LS Type: AS-External-LSA (ASBR) (5)
            Link State ID: 10.0.1.0
            Advertising Router: 10.11.15.12
            Sequence Number: 0x8000033c
            Checksum: 0xb584
            Length: 36
            Netmask: 255.255.255.0
            1... .... = External Type: Type 2 (metric is larger than any other link state path)
            .000 0000 = TOS: 0
            Metric: 20 <========================
            Forwarding Address: 0.0.0.0
            External Route Tag: 0


В данном пакете передается метрика 20.


BGP Update отправленный с маршрутизатора R2 в сторону R4(RR):

Frame 119: 598 bytes on wire (4784 bits), 598 bytes captured (4784 bits)
Ethernet II, Src: EltexEnt_de:01:e7 (e4:5a:d4:de:01:e7), Dst: EltexEnt_5b:2e:27 (e4:5a:d4:5b:2e:27)
Internet Protocol Version 4, Src: 10.0.1.13, Dst: 10.0.1.2
Transmission Control Protocol, Src Port: 42498, Dst Port: 179, Seq: 150, Ack: 175, Len: 532
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 99
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 76
    Path attributes
        Path Attribute - ORIGIN: INCOMPLETE
            Flags: 0x40, Transitive, Well-known, Complete
            Type Code: ORIGIN (1)
            Length: 1
            Origin: INCOMPLETE (2)
        Path Attribute - AS_PATH: empty
            Flags: 0x40, Transitive, Well-known, Complete
            Type Code: AS_PATH (2)
            Length: 0
        Path Attribute - MULTI_EXIT_DISC: 21
            Flags: 0x80, Optional, Non-transitive, Complete
            Type Code: MULTI_EXIT_DISC (4)
            Length: 4
            Multiple exit discriminator: 21 <============================
        Path Attribute - LOCAL_PREF: 100
            Flags: 0x40, Transitive, Well-known, Complete
            Type Code: LOCAL_PREF (5)
            Length: 4
            Local preference: 100
        Path Attribute - EXTENDED_COMMUNITIES
            Flags: 0xc0, Optional, Transitive, Complete
            Type Code: EXTENDED_COMMUNITIES (16)
            Length: 16
            Carried extended communities: (2 communities)
                Route Target: 65200:10 [Transitive 2-Octet AS-Specific]
                    Type: Transitive 2-Octet AS-Specific (0x00)
                    Subtype (AS2): Route Target (0x02)
                    2-Octet AS: 65200
                    4-Octet AN: 10
                OSPF Route Type: Area: 0.0.0.0, Type: External [Transitive Opaque]
                    Type: Transitive Opaque (0x03)
                    Subtype (Opaque): OSPF Route Type (0x06)
                    Area ID: 0.0.0.0
                    Route type: External (5)
                    Options: 0x01 (Metric: Type-2)
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
            Type Code: MP_REACH_NLRI (14)
            Length: 32
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Labeled VPN Unicast (128)
            Next hop:  RD=0:0 IPv4=10.0.1.13
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                BGP Prefix
                    Prefix Length: 112
                    Label Stack: 16 (bottom)
                    Route Distinguisher: 10.0.1.13:100
                    MP Reach NLRI IPv4 prefix: 10.0.1.0 <===================


В данном пакете передается метрика 21.