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 moderouterXX(config)#: aprèsconfigure terminalrouterXX(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 :
networkdéclare ce qui sera annoncé (route doit exister dans la RIB locale)activateest obligatoire par address-familymaximum-prefixprotège contre fuiteroute-map ... in/outapplique 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-VCtrop restrictive : test sans pour debug
Tes préfixes pas annoncés
show bgp ipv4 unicast neighbors 169.254.X.1 advertised-routesvide- Cause classique :
network 192.0.2.0/24mais pas de routeip route 192.0.2.0/24 Null0→ BGP n'a rien à annoncer - Ou route-map
TO-VCtrop restrictive
No matching route in RIB
- Tu fais
network X.X.X.X/Ymais la route n'existe pas dans la table - Ajoute
ip route X.X.X.X/Y Null0ou 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.


















