Frr

De Wiki doc

Révision datée du 9 février 2023 à 18:52 par Ycharbi (discussion | contributions) (Page créée avec « Category:routage_dynamique [https://frrouting.org/ Free Range Routing] ou ''FRR'' est une bifurcation de Quagga. Il implémente donc, tout en suivant la même logique, divers protocoles de routages dynamiques et de gestion réseau dont : * BGP * OSPF * RIP / RIPNG * IS-IS * PIM * LDP * BFD * Babel * PBR * OpenFabric * VRRP * EIGRP * NHRP Fidèle a ses origines, le logiciels s’appuie sur un démon central nommé <syntaxhighlight lang="bash" inline>zebra</s... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)


Free Range Routing ou FRR est une bifurcation de Quagga. Il implémente donc, tout en suivant la même logique, divers protocoles de routages dynamiques et de gestion réseau dont :

  • BGP
  • OSPF
  • RIP / RIPNG
  • IS-IS
  • PIM
  • LDP
  • BFD
  • Babel
  • PBR
  • OpenFabric
  • VRRP
  • EIGRP
  • NHRP

Fidèle a ses origines, le logiciels s’appuie sur un démon central nommé zebra (du nom du premier logiciel à l'origine de toutes les bifurcations dont Quagga, Cumulus Quagga et FRR) qui s'interface entre le système d'exploitation et les démons de routages. Chaque protocole est implémenté dans un démon spécifique situé dans /usr/lib/frr/ qu'il convient d'activer manuellement via le fichier de configuration /etc/frr/daemons.

Leur socket de communication interne sont décrits ici.

Installation

FRR a remplacé Quagga dans Debian Stable depuis la version 11 de cette dernière. Il est donc présent dans les dépôts officiels

apt install --no-install-recommends frr

Configuration

Il n'est plus nécessaire d'utiliser un fichier de configuration par démon. Cette philosophie, jugée peu efficace par les développeurs, a laissée place à un unique fichier (/etc/frr/frr.conf) comme sur Cisco IOS dont il reprend la syntaxe.

Tout d'abord, il faut activer les démons de routage pour les protocoles souhaités en passant à yes les clés correspondantes dans /etc/frr/daemons.

Vous pouvez utiliser la commande suivante pour le faire sans éditeur de texte

DEMON="bgpd" sed -i "s/${DEMON}=no/${DEMON}=yes/" /etc/frr/daemons

Redémarrer le service pour prendre en compte la modification

systemctl restart frr.service

Vous constaterez avec un ss -ltn que les sockets des démons choisis ont étés créés (plus celui de zebra, indispensable au fonctionnement de la solution). Les sockets ouvrants les ports des protocoles se créeront à la configuration de chacun d'eux.

Afin de configurer ces protocoles, FRR propose deux solutions. Il est alors possible d'éditer directement le fichier de configuration principal comme avec n'importe quel programme ou alors d'utiliser le shell de connexion vtysh. Dans le premier cas, une vérification syntaxique pourra être effectuée avec la commande vtysh -C, dans le second, le shell informe de toute erreur en temps réel et propose une auto-completion (ne pas oublier un wr pour écrire les modification en dur). Dans les deux cas, le programme se réfèrera à /etc/frr/frr.conf pour fonctionner.

BGP

Dans la mesure où FRR reprend la syntaxe de Cisco IOS, cette section ne sera pas détaillée. Il y a cependant un delta de taille à prendre compte : le programme suit la RFC 8212 à la lettre et impose d'appliquer une politique d'importation et d'exportation à l'annonce des routes, sans quoi aucune action n'est exécuté par le démon. Dans la mesure où aucun exemple n'est fournis pour programmer ces fameuses politiques dans la documentation officielle (comme c'est malheureusement systématiquement le cas avec les documentations officielles...) et où cette notion ne pose strictement aucun problème sur IOS depuis 30 ans, nous allons simplement désactiver cette merde inutile afin de pouvoir utiliser notre programme (la meilleurs des sécurité étant d'éteindre définitivement la machine - rappel aux développeurs qui font chier les administrateurs...) avec la commande no bgp ebgp-requires-policy (nécessite un redémarrage du service).

Voici une configuration complète :

ip router-id 10.0.0.1
!
router bgp 64999
 no bgp ebgp-requires-policy
 neighbor 10.0.0.2 remote-as 65000
 !
 address-family ipv4 unicast
  network 10.0.0.0/30
  network 172.16.0.0/30
 exit-address-family
exit
!
end