FRRouting (FRR) : sessions BGPv4 + BGPv6 vers VeryCloud (AS198825)

FRRouting (FRR) : sessions BGPv4 + BGPv6 vers VeryCloud (AS198825)

Configuration de FRR (fork moderne de Quagga) pour établir une session BGP dual-stack vers le backbone VeryCloud, avec syntaxe Cisco-like. Idéal si tu viens du monde Cisco IOS et veux ta CLI familière sous Linux

Introduction

FRRouting (FRR) est le démon de routage open source qui hérite de Quagga, lui-même héritier de Zebra. Sa particularité : une syntaxe CLI très proche de Cisco IOS. Sous le capot, FRR fait tourner Cumulus Linux, SONiC, et beaucoup de stacks DC/cloud.

Comparé à BIRD :

  • Syntaxe Cisco-like plutôt que déclarative
  • Multi-process (un par protocole : bgpd, ospfd, etc.)
  • Plus de protocoles supportés (LDP, IS-IS, EIGRP, etc.)
  • Légèrement plus consommateur de RAM

Pour un transit IP simple, les deux font le job. Choisis selon tes préférences.

Prérequis

  • Un serveur Linux avec un tunnel UP vers VeryCloud
  • Le mail technique VeryCloud avec : 169.254.X.1, 2a0e:XXXX:XXXX::0, MD5 si choisi
  • Ton ASN
  • Tes préfixes IPv4/IPv6 à annoncer
  • FRR installé

Étape 1 : Installer FRR

# Debian / Ubuntu : repo officiel FRR
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null
FRRVER="frr-stable"
echo "deb [signed-by=/usr/share/keyrings/frrouting.gpg] https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER" | \
    sudo tee /etc/apt/sources.list.d/frr.list
sudo apt update
sudo apt install -y frr frr-pythontools

# RHEL / Rocky / Alma
sudo dnf install -y frr

Étape 2 : Activer les démons

Édite /etc/frr/daemons :

bgpd=yes
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
pimd=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
bfdd=no

Seul bgpd (et zebra par défaut) suffisent.

sudo systemctl enable --now frr
sudo systemctl status frr

Étape 3 : Entrer dans la CLI FRR

sudo vtysh

Tu tombes sur un prompt familier routerXX#. Mêmes modes que Cisco :

  • routerXX# : enable mode
  • routerXX(config)# : après configure terminal
  • routerXX(config-router)# : config BGP

Étape 4 : Config de base BGP

configure terminal
!
router bgp 65000
 bgp router-id 192.0.2.1
 no bgp default ipv4-unicast
 bgp log-neighbor-changes
 timers bgp 30 90
!

no bgp default ipv4-unicast = on n'active pas auto v4 sur tous les neighbors, on choisit manuellement par address-family.

Étape 5 : Déclarer les neighbors

router bgp 65000
 !
 ! Neighbor IPv4
 neighbor 169.254.X.1 remote-as 198825
 neighbor 169.254.X.1 description "VeryCloud Transit v4"
 neighbor 169.254.X.1 password MD5_SECRET
 neighbor 169.254.X.1 timers 30 90
 !
 ! Neighbor IPv6
 neighbor 2a0e:XXXX:XXXX::0 remote-as 198825
 neighbor 2a0e:XXXX:XXXX::0 description "VeryCloud Transit v6"
 neighbor 2a0e:XXXX:XXXX::0 password MD5_SECRET
 neighbor 2a0e:XXXX:XXXX::0 timers 30 90
!

💡 Le mot de passe MD5 doit être identique des deux côtés.

Étape 6 : Address-families et préfixes

router bgp 65000
 !
 address-family ipv4 unicast
  network 192.0.2.0/24
  network 198.51.100.0/24
  neighbor 169.254.X.1 activate
  neighbor 169.254.X.1 soft-reconfiguration inbound
  neighbor 169.254.X.1 route-map FROM-VC in
  neighbor 169.254.X.1 route-map TO-VC out
  neighbor 169.254.X.1 maximum-prefix 5000
 exit-address-family
 !
 address-family ipv6 unicast
  network 2001:db8::/32
  neighbor 2a0e:XXXX:XXXX::0 activate
  neighbor 2a0e:XXXX:XXXX::0 soft-reconfiguration inbound
  neighbor 2a0e:XXXX:XXXX::0 route-map FROM-VC6 in
  neighbor 2a0e:XXXX:XXXX::0 route-map TO-VC6 out
  neighbor 2a0e:XXXX:XXXX::0 maximum-prefix 1000
 exit-address-family
!

Points clés :

  • network déclare ce qui sera annoncé (route doit exister dans la RIB locale)
  • activate est obligatoire par address-family
  • maximum-prefix protège contre fuite
  • route-map ... in/out applique les filtres

Étape 7 : Routes statiques pour les préfixes annoncés

Pour que network annonce, la route doit exister localement. Méthode propre :

ip route 192.0.2.0/24 Null0
ip route 198.51.100.0/24 Null0
ipv6 route 2001:db8::/32 Null0

Étape 8 : Prefix-lists et route-maps

Côté sortie (ce qu'on annonce) :

ip prefix-list MY-PREFIXES-V4 seq 10 permit 192.0.2.0/24
ip prefix-list MY-PREFIXES-V4 seq 20 permit 198.51.100.0/24

ipv6 prefix-list MY-PREFIXES-V6 seq 10 permit 2001:db8::/32

route-map TO-VC permit 10
 match ip address prefix-list MY-PREFIXES-V4
exit

route-map TO-VC permit 20
 ! Tout le reste : reject (implicite, route-map sans permit final = deny)

route-map TO-VC6 permit 10
 match ipv6 address prefix-list MY-PREFIXES-V6
exit

Côté entrée (ce qu'on accepte) :

ip prefix-list BOGON-V4 seq 5 deny 0.0.0.0/8 le 32
ip prefix-list BOGON-V4 seq 10 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-V4 seq 15 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-V4 seq 20 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-V4 seq 25 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-V4 seq 30 deny 192.0.2.0/24 le 32
ip prefix-list BOGON-V4 seq 35 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-V4 seq 40 deny 198.18.0.0/15 le 32
ip prefix-list BOGON-V4 seq 100 permit 0.0.0.0/0 le 24

route-map FROM-VC permit 10
 match ip address prefix-list BOGON-V4
exit

route-map FROM-VC6 permit 10
 ! Permettre tout v6 raisonnable
exit

Étape 9 : Sauvegarder la config

end
write memory

ou en CLI :

sudo vtysh -c "write memory"

Config écrite dans /etc/frr/frr.conf.

Étape 10 : Vérifier

routerXX# show bgp summary

IPv4 Unicast Summary:
BGP router identifier 192.0.2.1, local AS number 65000
Neighbor        V       AS   MsgRcvd   MsgSent  TblVer  InQ  OutQ  Up/Down  State/PfxRcd
169.254.X.1     4   198825      1234       567      45    0     0  01:23:45             1

State/PfxRcd qui affiche un nombre = session UP avec ce nombre de préfixes reçus.

Routes reçues :

show bgp ipv4 unicast neighbors 169.254.X.1 received-routes
show bgp ipv6 unicast neighbors 2a0e:XXXX:XXXX::0 received-routes

Routes annoncées :

show bgp ipv4 unicast neighbors 169.254.X.1 advertised-routes
show bgp ipv6 unicast neighbors 2a0e:XXXX:XXXX::0 advertised-routes

Table BGP complète :

show bgp ipv4
show bgp ipv6

Étape 11 : Pousser les routes au kernel

Par défaut FRR (via zebra) installe les routes BGP dans la FIB Linux automatiquement. Vérifie :

ip route show default
ip -6 route show default

Tu dois voir la default route via la peer-IP VeryCloud.

Dépannage

Session reste en Active

  • Ping sur la peer-IP du tunnel ? si non, tunnel cassé
  • TCP/179 ouvert ? sudo iptables -L | grep 179
  • MD5 password mauvais : show bgp neighbor 169.254.X.1 → log "MD5 auth failed"

Session UP mais 0 préfixes reçus

  • Côté VeryCloud, sessions activées ?
  • route-map FROM-VC trop restrictive : test sans pour debug

Tes préfixes pas annoncés

  • show bgp ipv4 unicast neighbors 169.254.X.1 advertised-routes vide
  • Cause classique : network 192.0.2.0/24 mais pas de route ip route 192.0.2.0/24 Null0 → BGP n'a rien à annoncer
  • Ou route-map TO-VC trop restrictive

No matching route in RIB

  • Tu fais network X.X.X.X/Y mais la route n'existe pas dans la table
  • Ajoute ip route X.X.X.X/Y Null0 ou une route directe

Commandes utiles

show ip bgp summary
show bgp ipv4 unicast neighbors 169.254.X.1
show bgp ipv4 unicast neighbors 169.254.X.1 received-routes
show bgp ipv4 unicast neighbors 169.254.X.1 advertised-routes
show ip bgp 0.0.0.0/0
show ip route bgp

! Clear session sans restart
clear bgp 169.254.X.1 soft in
clear bgp 169.254.X.1 soft out

! Hard reset
clear bgp 169.254.X.1

Et en bash :

sudo systemctl restart frr
sudo journalctl -u frr -f
sudo vtysh -c "show bgp summary"

Conclusion

FRR = ta passerelle entre le monde Cisco IOS et Linux. Si tu connais déjà la CLI Cisco, tu es opérationnel en 10 minutes. Les concepts (route-map, prefix-list, address-family) sont identiques. Pour un transit IP VeryCloud, cette config te couvre.

Pour aller plus loin : RPKI via rpki cache + validation in route-map, BFD pour failover rapide, communautés BGP, ECMP avec maximum-paths.

Ressources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members