Jump to content
Калькуляторы

FRR и устновка маршрутов в vrf (в bgp маршруты есть а в RIB нет, задача со звездочкой)

Доброго дня

Есть роутер FRR который я пытаюсь настроить в качестве External Router для Tangsten Fabric (это такая себе SDN)

Со стороны FRR настройки такие
 

debug vrf
!
vrf vrf-tf-public
 ip route 0.0.0.0/0 192.168.22.254 management
exit-vrf
!
!
router bgp 65000
 bgp router-id 192.168.32.101
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 10.80.3.55 remote-as 65000
 neighbor 10.80.3.56 remote-as 65000
 neighbor 10.80.3.57 remote-as 65000
 neighbor 10.80.3.58 remote-as 65000
 !
 !
 address-family ipv4 vpn
  neighbor 192.168.32.102 activate
  neighbor 10.80.3.55 activate
  neighbor 10.80.3.55 soft-reconfiguration inbound
  neighbor 10.80.3.55 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.56 activate
  neighbor 10.80.3.56 soft-reconfiguration inbound
  neighbor 10.80.3.56 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.57 activate
  neighbor 10.80.3.57 soft-reconfiguration inbound
  neighbor 10.80.3.57 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.58 activate
  neighbor 10.80.3.58 soft-reconfiguration inbound
  neighbor 10.80.3.58 route-map SET-NEX-THOP-TF out
 exit-address-family
exit
!
router bgp 65000 vrf vrf-tf-public
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute static
  label vpn export auto
  rd vpn export 65000:10001
  rt vpn both 65000:10001
  export vpn
  import vpn
 exit-address-family


Тут поясню

> ip route 0.0.0.0/0 192.168.22.254 management
Это маршрут из VRF  в интерфейс с именем  management

 >  neighbor 10.80.3.55 remote-as 65000
Этот и прочие пиры - это control nodes там поднят BGP

Роут-мап нужен что б назначать свой адрес (в сторону интерфейса по которому должен идти трафик, сессия поднята через другой интерфейс) 

route-map SET-NEX-THOP-TF permit 10
 set ip next-hop 10.80.6.253
exit


Для примера возмем один адрес 10.170.6.201 который используется как floating  виртуальной машиной

 

frr1# show bgp ipv4 vpn 10.170.6.201/32
BGP routing table entry for 10.80.6.54:3:10.170.6.201/32, version 3
not allocated
Paths: (2 available, best #1)
  Not advertised to any peer
  Local
    10.80.6.54 from 10.80.3.55 (10.80.3.55)
      Origin incomplete, metric 100, localpref 200, valid, internal, multipath, best (Router ID)
      Extended Community: RT:65000:10001 RT:65000:8000004 ET:2 ET:13 Rmac:fe:35:6b:ee:38:2c UNK:128, 113
      Remote label: 52
      Last update: Tue May 13 14:37:42 2025
  Local
    10.80.6.54 from 10.80.3.57 (10.80.3.57)
      Origin incomplete, metric 100, localpref 200, valid, internal, multipath
      Extended Community: RT:65000:10001 RT:65000:8000004 ET:2 ET:13 Rmac:fe:35:6b:ee:38:2c UNK:128, 113
      Remote label: 52
      Last update: Tue May 13 14:37:42 2025

 

Насколько я могу судить RT:65000:10001 правильный и я ожидаю что этот маршрут окажется в таблице маршрутизации

Однако в таблице маршрутизации я ничего не вижу
 

frr1# show ip route vrf vrf-tf-public
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF vrf-tf-public:
K>* 0.0.0.0/0 [0/0] via 192.168.22.254, management (vrf default), weight 1, 03:19:56
C>* 10.80.6.0/24 is directly connected, tenant, weight 1, 03:19:56
L>* 10.80.6.253/32 is directly connected, tenant, weight 1, 03:19:56


Из того что прповерил (по колесам постучал) :
VRF  существует
 

ip vrf
Name              Table
-----------------------
vrf-tf-public    10001


В нем есть интерфейс (с именем tenant) и некстхоп 10.80.6.54 через него доступен

Мак-вдреса видны, более того после того как на SDN уехал анонс дефолта я вижу трафик (пинг с ВМки)

18:01:36.454186 fe:35:6b:ee:38:2c > 00:99:00:00:00:01, ethertype IPv4 (0x0800), length 126: 10.80.6.54 > 10.80.6.253: GREv0, proto MPLS unicast (0x8847), length 92: MPLS (label 82, exp 0, [S], ttl 61) 10.170.6.201 > 10.10.10.10: ICMP echo request, id 36754, seq 11962, length 64


Такая инкапсуляция - MPLS over GRE это в данном случае ожидаемое поведение

Для декапсуляции используется такая конструкция - по сути тунели на каждую ноду где могут быть ВМки (трафик идет не с тех нод с которыми поднята сессия)
 

20: gre-hp-dl380g6@tenant: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/gre 10.80.6.253 peer 10.80.6.52 promiscuity 0  allmulti 0 minmtu 68 maxmtu 65511
    gre remote 10.80.6.52 local 10.80.6.253 dev tenant ttl 128 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536
21: gre-dell-r710@tenant: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/gre 10.80.6.253 peer 10.80.6.54 promiscuity 0  allmulti 0 minmtu 68 maxmtu 65511
    gre remote 10.80.6.54 local 10.80.6.253 dev tenant ttl 128 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536


Я вижу что трафик успешно уходит и возвращается в VRF

 

 "внешний" интерфейс FRR  в Global
tcpdump -n -i  management port ! 22

18:04:23.370666 IP 10.170.6.201 > 10.10.10.10: ICMP echo request, id 36754, seq 12125, length 64
18:04:23.370997 IP 10.10.10.10 > 10.170.6.201: ICMP echo reply, id 36754, seq 12125, length 64


Интерфейс VRF
tcpdump -n -i  vrf-tf-public
request, id 36754, seq 12466, length 64
18:10:12.572723 IP 10.170.6.201 > 10.10.10.10: ICMP echo request, id 36754, seq 12466, length 64
18:10:12.573037 IP 10.10.10.10 > 10.170.6.201: ICMP echo reply, id 36754, seq 12466, length 64


но на этом все - так как маршрута нет то дальше идти ему некуда

Куда блин копать?


 

 

Share this post


Link to post
Share on other sites

Posted (edited)
1 час назад, sirmax сказал:

Доброго дня

Есть роутер FRR который я пытаюсь настроить в качестве External Router для Tangsten Fabric (это такая себе SDN)

Со стороны FRR настройки такие
 

debug vrf
!
vrf vrf-tf-public
 ip route 0.0.0.0/0 192.168.22.254 management
exit-vrf
!
!
router bgp 65000
 bgp router-id 192.168.32.101
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 10.80.3.55 remote-as 65000
 neighbor 10.80.3.56 remote-as 65000
 neighbor 10.80.3.57 remote-as 65000
 neighbor 10.80.3.58 remote-as 65000
 !
 !
 address-family ipv4 vpn
  neighbor 192.168.32.102 activate
  neighbor 10.80.3.55 activate
  neighbor 10.80.3.55 soft-reconfiguration inbound
  neighbor 10.80.3.55 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.56 activate
  neighbor 10.80.3.56 soft-reconfiguration inbound
  neighbor 10.80.3.56 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.57 activate
  neighbor 10.80.3.57 soft-reconfiguration inbound
  neighbor 10.80.3.57 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.58 activate
  neighbor 10.80.3.58 soft-reconfiguration inbound
  neighbor 10.80.3.58 route-map SET-NEX-THOP-TF out
 exit-address-family
exit
!
router bgp 65000 vrf vrf-tf-public
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute static
  label vpn export auto
  rd vpn export 65000:10001
  rt vpn both 65000:10001
  export vpn
  import vpn
 exit-address-family


Тут поясню

> ip route 0.0.0.0/0 192.168.22.254 management
Это маршрут из VRF  в интерфейс с именем  management

 >  neighbor 10.80.3.55 remote-as 65000
Этот и прочие пиры - это control nodes там поднят BGP

Роут-мап нужен что б назначать свой адрес (в сторону интерфейса по которому должен идти трафик, сессия поднята через другой интерфейс) 

route-map SET-NEX-THOP-TF permit 10
 set ip next-hop 10.80.6.253
exit


Для примера возмем один адрес 10.170.6.201 который используется как floating  виртуальной машиной

 

frr1# show bgp ipv4 vpn 10.170.6.201/32
BGP routing table entry for 10.80.6.54:3:10.170.6.201/32, version 3
not allocated
Paths: (2 available, best #1)
  Not advertised to any peer
  Local
    10.80.6.54 from 10.80.3.55 (10.80.3.55)
      Origin incomplete, metric 100, localpref 200, valid, internal, multipath, best (Router ID)
      Extended Community: RT:65000:10001 RT:65000:8000004 ET:2 ET:13 Rmac:fe:35:6b:ee:38:2c UNK:128, 113
      Remote label: 52
      Last update: Tue May 13 14:37:42 2025
  Local
    10.80.6.54 from 10.80.3.57 (10.80.3.57)
      Origin incomplete, metric 100, localpref 200, valid, internal, multipath
      Extended Community: RT:65000:10001 RT:65000:8000004 ET:2 ET:13 Rmac:fe:35:6b:ee:38:2c UNK:128, 113
      Remote label: 52
      Last update: Tue May 13 14:37:42 2025

 

Насколько я могу судить RT:65000:10001 правильный и я ожидаю что этот маршрут окажется в таблице маршрутизации

Однако в таблице маршрутизации я ничего не вижу
 

frr1# show ip route vrf vrf-tf-public
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF vrf-tf-public:
K>* 0.0.0.0/0 [0/0] via 192.168.22.254, management (vrf default), weight 1, 03:19:56
C>* 10.80.6.0/24 is directly connected, tenant, weight 1, 03:19:56
L>* 10.80.6.253/32 is directly connected, tenant, weight 1, 03:19:56


Из того что прповерил (по колесам постучал) :
VRF  существует
 

ip vrf
Name              Table
-----------------------
vrf-tf-public    10001


В нем есть интерфейс (с именем tenant) и некстхоп 10.80.6.54 через него доступен

Мак-вдреса видны, более того после того как на SDN уехал анонс дефолта я вижу трафик (пинг с ВМки)

18:01:36.454186 fe:35:6b:ee:38:2c > 00:99:00:00:00:01, ethertype IPv4 (0x0800), length 126: 10.80.6.54 > 10.80.6.253: GREv0, proto MPLS unicast (0x8847), length 92: MPLS (label 82, exp 0, [S], ttl 61) 10.170.6.201 > 10.10.10.10: ICMP echo request, id 36754, seq 11962, length 64


Такая инкапсуляция - MPLS over GRE это в данном случае ожидаемое поведение

Для декапсуляции используется такая конструкция - по сути тунели на каждую ноду где могут быть ВМки (трафик идет не с тех нод с которыми поднята сессия)
 

20: gre-hp-dl380g6@tenant: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/gre 10.80.6.253 peer 10.80.6.52 promiscuity 0  allmulti 0 minmtu 68 maxmtu 65511
    gre remote 10.80.6.52 local 10.80.6.253 dev tenant ttl 128 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536
21: gre-dell-r710@tenant: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/gre 10.80.6.253 peer 10.80.6.54 promiscuity 0  allmulti 0 minmtu 68 maxmtu 65511
    gre remote 10.80.6.54 local 10.80.6.253 dev tenant ttl 128 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536


Я вижу что трафик успешно уходит и возвращается в VRF

 

 "внешний" интерфейс FRR  в Global
tcpdump -n -i  management port ! 22

18:04:23.370666 IP 10.170.6.201 > 10.10.10.10: ICMP echo request, id 36754, seq 12125, length 64
18:04:23.370997 IP 10.10.10.10 > 10.170.6.201: ICMP echo reply, id 36754, seq 12125, length 64


Интерфейс VRF
tcpdump -n -i  vrf-tf-public
request, id 36754, seq 12466, length 64
18:10:12.572723 IP 10.170.6.201 > 10.10.10.10: ICMP echo request, id 36754, seq 12466, length 64
18:10:12.573037 IP 10.10.10.10 > 10.170.6.201: ICMP echo reply, id 36754, seq 12466, length 64


но на этом все - так как маршрута нет то дальше идти ему некуда

Куда блин копать?


 

 



Если правильно понял, то вам надо получить маршрут из vrf-tf-public в default vrf.
Вроде так должно работать:

router bgp 65000
 address-family ipv4 unicast
  rt vpn import 65000:10001
  import vpn
!
router bgp 65000 vrf vrf-tf-public
 address-family ipv4 unicast
  redistribute kernel
  redistribute static
  rd vpn export 65000:10001
  rt vpn export 65000:10001
  export vpn

Edited by Morty

Share this post


Link to post
Share on other sites

7 минут назад, Morty сказал:

Если правильно понял, то вам надо получить маршрут

Нет, мне надо получить маршрут в vrf-tf-public но установленный в таблицу роутинга 

 

сейчас же он есть в bgp но не установлен в fib 

 

Route leaking пока не нужен, это отдельная задача 

Share this post


Link to post
Share on other sites

Продолжая это ебучее веселое исследование

Попробовал удалить все что связано с VRF  и попробовать в Global

 

Скрытый текст
router bgp 65000
 bgp router-id 192.168.32.101
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 10.80.3.55 remote-as 65000
 neighbor 10.80.3.56 remote-as 65000
 neighbor 10.80.3.57 remote-as 65000
 neighbor 10.80.3.58 remote-as 65000
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute static
  label vpn export auto
  rd vpn export 65000:10001
  rt vpn both 65000:10001
  export vpn
  import vpn
 exit-address-family
 !
 address-family ipv4 vpn
  neighbor 10.80.3.55 activate
  neighbor 10.80.3.55 soft-reconfiguration inbound
  neighbor 10.80.3.55 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.56 activate
  neighbor 10.80.3.56 soft-reconfiguration inbound
  neighbor 10.80.3.56 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.57 activate
  neighbor 10.80.3.57 soft-reconfiguration inbound
  neighbor 10.80.3.57 route-map SET-NEX-THOP-TF out
  neighbor 10.80.3.58 activate
  neighbor 10.80.3.58 soft-reconfiguration inbound
  neighbor 10.80.3.58 route-map SET-NEX-THOP-TF out
 exit-address-family
exit

 

 

 

То маршруты заехали 
 

frr1# show ip route
...
C>* 10.80.3.0/24 is directly connected, lcm-k8s, weight 1, 00:04:26
L>* 10.80.3.253/32 is directly connected, lcm-k8s, weight 1, 00:04:26
C>* 10.80.6.0/24 is directly connected, tenant, weight 1, 00:04:26
L>* 10.80.6.253/32 is directly connected, tenant, weight 1, 00:04:26
B>* 10.170.6.201/32 [200/100] via 10.80.6.54, tenant, label 52, weight 1, 00:03:55
B>* 10.170.6.202/32 [200/100] via 10.80.6.52, tenant, label 42, weight 1, 00:04:10
B>* 10.170.6.203/32 [200/100] via 10.80.6.54, tenant, label 62, weight 1, 00:03:55
C>* 192.168.22.0/24 [0/100] is directly connected, management, weight 1, 00:04:26
L>* 192.168.22.121/32 is directly connected, management, weight 1, 00:04:26
K>* 192.168.22.254/32 [0/100] is directly connected, management, weight 1, 00:04:26
K>* 192.168.32.1/32 [0/100] via 192.168.22.254, management, src 192.168.22.121, weight 1, 00:04:26
K>* 192.168.32.2/32 [0/100] via 192.168.22.254, management, src 192.168.22.121, weight 1, 00:04:26
L * 192.168.32.101/32 is directly connected, loopback0, weight 1, 00:04:26
C>* 192.168.32.101/32 is directly connected, loopback0, weight 1, 00:04:26
L * 192.168.32.201/32 is directly connected, loopback1, weight 1, 00:04:26
C>* 192.168.32.201/32 is directly connected, loopback1, weight 1, 00:04:26
O   192.168.40.0/30 [110/10] is directly connected, frr, weight 1, 00:04:25
C>* 192.168.40.0/30 is directly connected, frr, weight 1, 00:04:26
L>* 192.168.40.1/32 is directly connected, frr, weight 1, 00:04:26

 

 

root@frr1:~# ip ro s
10.80.3.0/24 dev lcm-k8s proto kernel scope link src 10.80.3.253
10.80.6.0/24 dev tenant proto kernel scope link src 10.80.6.253
10.170.6.201 nhid 22  encap mpls  52 via 10.80.6.54 dev tenant proto bgp metric 20
10.170.6.202 nhid 19  encap mpls  42 via 10.80.6.52 dev tenant proto bgp metric 20
10.170.6.203 nhid 23  encap mpls  62 via 10.80.6.54 dev tenant proto bgp metric 20
192.168.22.0/24 dev management proto kernel scope link src 192.168.22.121 metric 100
192.168.22.254 dev management proto dhcp scope link src 192.168.22.121 metric 100
192.168.32.1 via 192.168.22.254 dev management proto dhcp src 192.168.22.121 metric 100
192.168.32.2 via 192.168.22.254 dev management proto dhcp src 192.168.22.121 metric 100
192.168.40.0/30 dev frr proto kernel scope link src 192.168.40.1

 

Если добавить тунели для декапсуляции/инкапсуляции
то работает как ожидалось - трафик начал ходить в обе стороны

10.80.3.0/24 dev lcm-k8s proto kernel scope link src 10.80.3.253
10.80.6.0/24 dev tenant proto kernel scope link src 10.80.6.253
10.170.6.201 nhid 37  encap mpls  52 via 192.168.1.1 dev gre-dell-r710 proto bgp metric 20
10.170.6.202 nhid 40  encap mpls  42 via 192.168.1.2 dev gre-hp-dl380g6 proto bgp metric 20
192.168.22.0/24 dev management proto kernel scope link src 192.168.22.121 metric 100
192.168.22.254 dev management proto dhcp scope link src 192.168.22.121 metric 100
192.168.32.1 via 192.168.22.254 dev management proto dhcp src 192.168.22.121 metric 100
192.168.32.2 via 192.168.22.254 dev management proto dhcp src 192.168.22.121 metric 100
192.168.40.0/30 dev frr proto kernel scope link src 192.168.40.1


Что видно в дампе с правильной (двойной, мать его!) инкапсуляцией
 

08:35:29.316036 fe:35:6b:ee:38:2c > 00:99:00:00:00:01, ethertype IPv4 (0x0800), length 126: 10.80.6.54 > 10.80.6.253: GREv0, proto MPLS unicast (0x8847), length 92: MPLS (label 80, exp 0, [S], ttl 61) 10.170.6.201 > 10.10.10.10: ICMP echo request, id 19377, seq 2, length 64
08:35:29.316546 00:99:00:00:00:01 > fe:35:6b:ee:38:2c, ethertype IPv4 (0x0800), length 126: 10.80.6.253 > 10.80.6.54: GREv0, proto MPLS unicast (0x8847), length 92: MPLS (label 52, exp 0, [S], ttl 63) 10.10.10.10 > 10.170.6.201: ICMP echo reply, id 19377, seq 2, length 64



Осталось выяснить что не так с VRF 🙂

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.