Les manipulations de ce support s'appuient sur la documentation du projet : FRRouting User Guide
La première étape consiste à installer les outils sur les trois routeurs, à appliquer une configuration commune et à mettre en place la topologie physique.
-
Si on respecte la topologie physique présentée dans la section précédente, chaque routeur virtuel est raccordé sur un port de commutateur en mode trunk. Il est donc nécessaire de définir une sous-interface réseau appartenant à un VLAN avec adressage automatique pour réaliser les opérations suivantes.
Voici un exemple de fichier
/etc/network/interfaces
avec une définition d'interface temporaire qui permet d'installer des paquets et de préparer la suite de la configuration.# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp0s1 iface enp0s1 inet manual up ip link set dev $IFACE up down ip link set dev $IFACE down # ---------- TEMPORAIRE auto enp0s1.20 iface enp0s1.20 inet dhcp iface enp0s1.20 inet6 auto
Avertissement Attention ! L'interface temporaire doit être désactivée dès que la partie préparation est terminée.
-
Pour installer le paquet frr, on doit ajouter un nouveau dépôt au système.
On commence par ajouter la clé de signature des paquets à la configuration du gestionnaire.
sudo apt -y install curl curl -s https://deb.frrouting.org/frr/keys.asc | \ sudo gpg -o /usr/share/keyrings/frr-keyring.gpg --dearmor
On créé une nouvelle entrée dans la liste des sources de paquets et on lance la mise à jour du catalogue.
echo "deb [signed-by=/usr/share/keyrings/frr-keyring.gpg] \ https://deb.frrouting.org/frr bullseye frr-stable" | \ sudo tee /etc/apt/sources.list.d/frr.list
sudo apt update sudo apt -y install frr frr-pythontools
apt search ^frr$ En train de trier... Fait Recherche en texte intégral... Fait frr/stable,now 8.3.1-0~deb11u1 amd64 [installé] FRRouting suite of internet protocols (BGP, OSPF, IS-IS, ...)
Sans configuration particulière, les services zebra et staticd sont lancés. Aucun protocole de routage dynamique n'est activé.
systemctl status frr • frr.service - FRRouting Loaded: loaded (/lib/systemd/system/frr.service; enabled; preset: enabled) Active: active (running) since Sun 2022-10-23 14:55:02 CEST; 1min 22s ago Docs: https://frrouting.readthedocs.io/en/latest/setup.html Process: 2369 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS) Main PID: 2378 (watchfrr) Status: "FRR Operational" Tasks: 7 (limit: 1114) Memory: 9.4M CPU: 201ms CGroup: /system.slice/frr.service ├─2378 /usr/lib/frr/watchfrr -d -F traditional zebra staticd ├─2389 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000 └─2394 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1 oct. 23 14:55:02 R1 watchfrr[2378]: [ZCJ3S-SPH5S] zebra state -> down : initial connection attempt failed oct. 23 14:55:02 R1 watchfrr[2378]: [ZCJ3S-SPH5S] staticd state -> down : initial connection attempt failed oct. 23 14:55:02 R1 watchfrr[2378]: [YFT0P-5Q5YX] Forked background command [pid 2379]: /usr/lib/frr/watchfrr.sh restart all oct. 23 14:55:02 R1 zebra[2389]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00 oct. 23 14:55:02 R1 staticd[2394]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00 oct. 23 14:55:02 R1 watchfrr[2378]: [QDG3Y-BY5TN] zebra state -> up : connect succeeded oct. 23 14:55:02 R1 watchfrr[2378]: [QDG3Y-BY5TN] staticd state -> up : connect succeeded oct. 23 14:55:02 R1 watchfrr[2378]: [KWE5Q-QNGFC] all daemons up, doing startup-complete notify oct. 23 14:55:02 R1 frrinit.sh[2369]: Started watchfrr. oct. 23 14:55:02 R1 systemd[1]: Started FRRouting.
-
Activer le routage IPv4 et IPv6 au niveau noyau.
Il faut éditer le fichier
/etc/sysctl.conf
pour fixer les valeurs des paramètres de configuration du routage. Voir la section Fonctions réseau d'une interface du support Configuration d'une interface de réseau local.egrep -v '(^#|^$)' /etc/sysctl.conf net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 net.ipv4.conf.all.log_martians = 1
sudo sysctl --system * Applying /usr/lib/sysctl.d/50-pid-max.conf ... kernel.pid_max = 4194304 * Applying /etc/sysctl.d/99-sysctl.conf ... net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.all.log_martians = 1 * Applying /usr/lib/sysctl.d/protect-links.conf ... fs.protected_fifos = 1 fs.protected_hardlinks = 1 fs.protected_regular = 2 fs.protected_symlinks = 1 * Applying /etc/sysctl.conf ... net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.all.log_martians = 1
-
Pour créer les interfaces associées aux VLANs sur chacun des routeurs
R1
,R2
etR3
, on édite le fichier/etc/network/interfaces
.Auparavant, on doit installer le paquet du commutateur virtuel qui sert à raccorder des conteneurs du VLAN “vert“ d'hébergement.
sudo apt -y install openvswitch-switch
Voici un exemple de fichier
/etc/network/interfaces
pour le routeurR1
de la maquette.# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp0s1 iface enp0s1 inet manual up ip link set dev $IFACE up down ip link set dev $IFACE down # uplink auto enp0s1.360 iface enp0s1.360 inet static address 192.168.104.130/27 gateway 192.168.104.129 dns-nameserver 172.16.0.2 iface enp0s1.360 inet6 static address 2001:678:3fc:168::2/64 gateway fe80:168::1 # R1 -> R2 auto enp0s1.480 iface enp0s1.480 inet static address 10.48.0.1/29 # R1 -> R3 auto enp0s1.481 iface enp0s1.481 inet static address 10.48.1.1/29 # R1 -> lxd auto asw-host iface asw-host inet manual ovs_type OVSBridge ovs_ports sw-vlan10 up ip link set dev $IFACE up down ip link set dev $IFACE down allow-asw-host sw-vlan10 iface sw-vlan10 inet static ovs_type OVSBridge ovs_bridge asw-host ovs_options asw-host 10 address 10.10.0.1/24 iface sw-vlan10 inet6 static ovs_type OVSBridge ovs_bridge asw-host ovs_options asw-host 10 address fd14:ca46:3864:a::1/64
On adapte la liste des interfaces pour les deux autres routeurs
R2
etR3
avec les numéros de VLANs concernés. -
Éditer le fichier de configuration de la console “unifiée“ vtysh de façon à ce qu'il contienne les informations minimales.
Voici un exemple pour le routeur
R1
de la maquette.echo service integrated-vtysh-config | \ sudo tee /etc/frr/vtysh.conf
Cet outil offre une console unifiée pour les trois démons : zebra, ospfd et ospf6d.
-
Ajouter l'utilisateur
etu
aux groupesfrr
etfrrvty
pour lui donner un accès direct à la console de configuration des démons et aux fichiers de configuration.sudo adduser etu frrvty sudo adduser etu frr
Il ne faut pas oublier de se déconnecter/reconnecter pour bénéficier de la nouvelle attribution de groupe.
-
Activer les deux démons relatifs au protocole OSPF dans le fichier de configuration :
/etc/frr/daemons
.sudo sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons sudo sed -i 's/ospf6d=no/ospf6d=yes/' /etc/frr/daemons sudo systemctl restart frr
On peut alors relancer le service et vérifier que les nouveaux démons de routage dynamique OSPF sont bien activés.
systemctl status frr • frr.service - FRRouting Loaded: loaded (/lib/systemd/system/frr.service; enabled; preset: enabled) Active: active (running) since Sun 2022-10-23 15:36:35 CEST; 8s ago Docs: https://frrouting.readthedocs.io/en/latest/setup.html Process: 3356 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS) Main PID: 3365 (watchfrr) Status: "FRR Operational" Tasks: 11 (limit: 1114) Memory: 16.0M CPU: 237ms CGroup: /system.slice/frr.service ├─3365 /usr/lib/frr/watchfrr -d -F traditional zebra ospfd ospf6d staticd ├─3381 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000 ├─3386 /usr/lib/frr/ospfd -d -F traditional -A 127.0.0.1 ├─3389 /usr/lib/frr/ospf6d -d -F traditional -A ::1 └─3392 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1 oct. 23 15:36:35 R1 ospfd[3386]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00 oct. 23 15:36:35 R1 ospf6d[3389]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00 oct. 23 15:36:35 R1 staticd[3392]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00 oct. 23 15:36:35 R1 watchfrr[3365]: [QDG3Y-BY5TN] zebra state -> up : connect succeeded oct. 23 15:36:35 R1 watchfrr[3365]: [QDG3Y-BY5TN] ospfd state -> up : connect succeeded oct. 23 15:36:35 R1 watchfrr[3365]: [QDG3Y-BY5TN] ospf6d state -> up : connect succeeded oct. 23 15:36:35 R1 watchfrr[3365]: [QDG3Y-BY5TN] staticd state -> up : connect succeeded oct. 23 15:36:35 R1 watchfrr[3365]: [KWE5Q-QNGFC] all daemons up, doing startup-complete notify oct. 23 15:36:35 R1 frrinit.sh[3356]: Started watchfrr. oct. 23 15:36:35 R1 systemd[1]: Started FRRouting.
On peut aussi lister les démons actifs à partir de la console du service.
vtysh Hello, this is FRRouting (version 8.3.1). Copyright 1996-2005 Kunihiro Ishiguro, et al.
R1#
sh daemons zebra ospfd ospf6d watchfrr staticd -
Compléter la configuration des interfaces dans la console unifiée vtysh de façon à fixer la bande passante de chaque interface active à 1Gbps.
Voici un exemple de séquence d'instructions pour configurer les interfaces du routeur rouge de la maquette.
On commence par lister les interfaces actives à partir de la console.
R1#
sh int brief Interface Status VRF Addresses --------- ------ --- --------- asw-host up default enp0s1 up default enp0s1.360 up default 192.168.104.130/27 + 2001:678:3fc:168::2/64 enp0s1.480 up default 10.48.0.1/29 enp0s1.481 up default 10.48.1.1/29 lo up default ovs-system down default sw-vlan10 up default 10.10.0.1/24 + fd14:ca46:3864:a::1/64Pour les interfaces
enp0s1.480
(lien R1 -> R2) etenp0s1.481
(lien R1 -> R3), on ajoute le paramètrebandwidth
qui permet de définir arbitrairement le débit binaire d'une interface.R1#
conf t R1(config)# int enp0s1.480 R1(config-if)# bandwidth ? (1-100000) Bandwidth in megabits R1(config-if)# bandwidth 100000 R1(config-if)# ^ZR1#
sh int enp0s1.480 Interface enp0s1.480 is up, line protocol is up Link ups: 1 last: 2022/10/24 09:25:42.65 Link downs: 0 last: (never) vrf: default index 4 metric 0 mtu 1500 speed 4294967295 flags: <UP,BROADCAST,RUNNING,MULTICAST> Type: Ethernet HWaddr: b8:ad:ca:fe:00:c8 bandwidth 100000 Mbps inet 10.48.0.1/29 inet6 fe80::baad:caff:fefe:c8/64 Interface Type Vlan Interface Slave Type None VLAN Id 480 protodown: off Parent interface: enp0s1On répète la même opération pour l'interface
enp0s1.481
. Ensuite, on peut sauvegarder la configuration.R1#
copy run start Note: this version of vtysh never writes vtysh.conf Building Configuration... Integrated configuration saved to /etc/frr/frr.conf [OK]Une fois la configuration complétée, les paramètres apparaissent dans la configuration du service.
R1#
sh run Building configuration... Current configuration: ! frr version 8.3.1 frr defaults traditional hostname R1 log syslog informational service integrated-vtysh-config ! interface enp0s1.480 bandwidth 100000 exit ! interface enp0s1.481 bandwidth 100000 exit ! endNote Contrairement à un routeur «intégré» avec un système d'exploitation dédié, le démon de routage statique n'a pas directement accès aux interfaces matérielles. Or, sur un système GNU/Linux, le débit d'une interface Ethernet filaire peut varier en fonction du débit proposé par le port du commutateur. Sans information spécifique du noyau, l'application «service de routage» n'a aucun moyen de connaître le débit exact de l'interface. C'est la raison pour laquelle il est nécessaire de paramétrer manuellement les débits de chaque interface dans la configuration.
Avertissement Sans configuration manuelle du coût de lien d'une interface, ce paramétrage de la bande passante est essentiel dans le calcul des métriques et le fonctionnement du protocole de routage OSPF. Si les calculs de métriques pour les liens actifs sont erronés, le choix des routes à emprunter pour faire transiter le trafic utilisateur entre deux routeurs peut lui aussi être erroné.
Une fois l'ensemble des opérations de cette section réalisées, chaque routeur dispose des outils pour mettre en œuvre la topologie physique et ensuite les protocoles de routage dynamique OSPF.