Frr

De Wiki doc

Version datée du 9 février 2023 à 17: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 | 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é <syntaxhighlight lang="bash" inline>zebra</syntaxhighlight> (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 <syntaxhighlight lang="bash" inline>/usr/lib/frr/</syntaxhighlight> qu'il convient d'activer manuellement via le fichier de configuration <syntaxhighlight lang="bash" inline>/etc/frr/daemons</syntaxhighlight>.

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 (<syntaxhighlight lang="bash" inline>/etc/frr/frr.conf</syntaxhighlight>) 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 à <syntaxhighlight lang="bash" inline>yes</syntaxhighlight> les clés correspondantes dans <syntaxhighlight lang="bash" inline>/etc/frr/daemons</syntaxhighlight>.

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 <syntaxhighlight lang="bash" inline>ss -ltn</syntaxhighlight> que les sockets des démons choisis ont étés créés (plus celui de <syntaxhighlight lang="bash" inline>zebra</syntaxhighlight>, 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 <syntaxhighlight lang="bash" inline>vtysh</syntaxhighlight>. Dans le premier cas, une vérification syntaxique pourra être effectuée avec la commande <syntaxhighlight lang="bash" inline>vtysh -C</syntaxhighlight>, dans le second, le shell informe de toute erreur en temps réel et propose une auto-completion (ne pas oublier un <syntaxhighlight lang="bash" inline>wr</syntaxhighlight> pour écrire les modification en dur). Dans les deux cas, le programme se réfèrera à <syntaxhighlight lang="bash" inline>/etc/frr/frr.conf</syntaxhighlight> 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 <syntaxhighlight lang="bash" inline>no bgp ebgp-requires-policy</syntaxhighlight> (nécessite un redémarrage du service).

Voici une configuration complète : <syntaxhighlight lang="bash"> 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 </syntaxhighlight>