6. Bilan et conclusion

Arrivé à cette étape, la totalité des outils nécessaires à l'interconnexion des réseaux LAN et WAN est en place et il est temps de dresser le bilan avec les ultimes tests de communication entre les services des réseaux distants.

6.1. Tester toutes les communications

Après avoir relevé les adresses attribuées aux conteneurs des quatre routeurs Spoke, on peut lancer une boucle de tests ICMP pour qualifier les communications.

Voici un exemple réalisé dans le contexte de la maquette utilisée pour rédiger ce document.

La commande suivante permet de liste les adresses attribuées au conteneurs sur chaque réseau d'extrémité.

incus ls -c 46 -f csv

Les résultats au format CSV peuvent être accumulés dans un fichier d'adresses qui sert pour les tests ICMP. Voici un extrait du fichier des adresses de conteneurs :

10.0.1.43 (eth0),fda0:7a62:1:0:216:3eff:fec9:2051 (eth0)
10.0.1.57 (eth0),fda0:7a62:1:0:216:3eff:fe4e:167c (eth0)
10.0.1.174 (eth0),fda0:7a62:1:0:216:3eff:fe18:3562 (eth0)

Pour qualifier l'accord de niveau de service ou Service Level Agreement (SLA), on peut utiliser un code comme celui du script ci-dessous qui teste la connectivité à partir de toutes les adresses fournies.

#!/bin/bash

# Test if input file exists
if [[ ! -f "$1" ]]; then
    echo "Error: missing or non-existent input file"
    exit 1
fi

file=$1
echo "------------------------------------------------------------"
echo "CSV input file must be generated from the following command:"
echo "   incus ls -c 46 -f csv"
echo "------------------------------------------------------------"

# Declare IPv4 and IPv6 array addresses
declare -a ipv4_addresses
declare -a ipv6_addresses

# Read CSV file content
mapfile -t lines < "$file"

# Extract IP addresses from each line
for line in "${lines[@]}"; do
     IFS=',' read -r ipv4 ipv6 <<< "$line"
     ipv4_addresses+=("${ipv4%% *}")
     ipv6_addresses+=("${ipv6%% *}")
done

echo "Launch pings..."
fail=false
for address in "${ipv4_addresses[@]}" "${ipv6_addresses[@]}"
do
     # Capture ping output
     ping_output=$(ping -qc2 "$address" | tr '\n' ' ')
     # Get packet loss number
     packets_lost=$(echo "$ping_output" |\
        grep -Eo '[[:digit:]]+\% packet loss' |\
        grep -Eo '[[:digit:]]+')

     if [[ $packets_lost != 0 ]]; then
        echo "Test failed : $packets_lost% lost packets for $address"
        fail=true
     else
        echo -n "."
     fi
done

if [[ fail==false ]]; then
        echo "Success!"
fi

exit 0

Voici un exemple du résultat d'exécution du script sur la maquette.

bash icmp-tests.sh addresses.csv
------------------------------------------------------------
CSV input file must be generated from the following command:
   incus ls -c 46 -f csv
------------------------------------------------------------
Launch pings...
........................Success!

6.2. Afficher les tables de routage complètes

Pour faire le bilan sur le routage dynamique avec les protocoles OSPFv2 et OSPFv3, on affiche les tables de routage dans lesquelles tous les réseaux doivent figurer.

En se plaçant sur le routeur Hub numéro 2, on obtient les entrées suivantes :

sh ip route
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

K>* 0.0.0.0/0 [0/0] via 172.20.120.1, enp0s1.120, 20:50:24
O>* 10.0.1.0/24 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 14:53:17
O>* 10.0.2.0/24 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 14:53:17
K>* 10.0.3.0/24 [0/0] is directly connected, ppp0, 14:48:53
K>* 10.0.4.0/24 [0/0] is directly connected, ppp1, 14:48:25
O>* 10.47.2.2/32 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 15:01:05
O>* 10.47.4.2/32 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 14:59:44
L>* 10.47.6.1/32 is directly connected, ppp0, 14:48:53
C>* 10.47.6.2/32 is directly connected, ppp0, 14:48:53
L>* 10.47.8.1/32 is directly connected, ppp1, 14:48:25
C>* 10.47.8.2/32 is directly connected, ppp1, 14:48:25
O   172.20.70.0/29 [110/10] is directly connected, enp0s1.470, weight 1, 20:49:02
C>* 172.20.70.0/29 is directly connected, enp0s1.470, 20:50:24
L>* 172.20.70.2/32 is directly connected, enp0s1.470, 20:50:24
O   172.20.120.0/23 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 17:54:39
C>* 172.20.120.0/23 is directly connected, enp0s1.120, 20:50:24
L>* 172.20.120.3/32 is directly connected, enp0s1.120, 20:50:24

Les entrées marquées O>* de la table de routage ci-dessus correspondent aux routes apprises via le protocole OSPF qui ont été retenues par le sous-système réseau du noyau du routeur. Vu du routeur Hub numéro 2, on identifie quatre routes de ce type : deux pour les réseaux d'hébergement et deux pour les réseaux de transit. Ces quatre entrées correspondent aux routeurs Spoke raccordés au Hub numéro 1.

sh ipv6 route
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIPng, O - OSPFv3, I - IS-IS, B - BGP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

K>* ::/0 [0/1024] via fe80:78::1, enp0s1.120 onlink, 20:53:20
O   2001:678:3fc:78::/64 [110/20] via fe80::baad:caff:fefe:5, enp0s1.470, weight 1, 14:56:06
K>* 2001:678:3fc:78::/64 [0/512] is directly connected, enp0s1.120, 20:53:20
L>* 2001:678:3fc:78:baad:caff:fefe:8/128 is directly connected, enp0s1.120, 20:53:20
O>* fda0:7a62:1::/64 [110/20] via fe80::baad:caff:fefe:5, enp0s1.470, weight 1, 14:56:06
O>* fda0:7a62:2::/64 [110/20] via fe80::baad:caff:fefe:5, enp0s1.470, weight 1, 14:56:06
K>* fda0:7a62:3::/64 [0/1024] is directly connected, ppp0, 14:51:49
K>* fda0:7a62:4::/64 [0/1024] is directly connected, ppp1, 14:51:21
C * fe80::/64 is directly connected, enp0s1.477, 20:53:20
C * fe80::/64 is directly connected, enp0s1.476, 20:53:20
C * fe80::/64 is directly connected, enp0s1.475, 20:53:20
C * fe80::/64 is directly connected, enp0s1.470, 20:53:20
C * fe80::/64 is directly connected, enp0s1.120, 20:53:20
C * fe80::/64 is directly connected, enp0s1.478, 20:53:20
C>* fe80::/64 is directly connected, enp0s1, 20:53:20
C>* fe80::4407:6511:26c1:58d1/128 is directly connected, ppp1, 14:51:21
C>* fe80::551a:aa5f:6325:8f85/128 is directly connected, ppp0, 14:51:49
C>* fe80:1d6::/64 is directly connected, enp0s1.470, 20:53:20
C>* fe80:1db::/64 is directly connected, enp0s1.475, 20:53:20
C>* fe80:1dd::/64 is directly connected, enp0s1.477, 20:53:20

Comme on l'a déjà vu, toutes les entrées marquées C>* correspondent aux interfaces actives ou connectées. On peut afficher le résumé de l'état des interfaces du routeur pour voir la correspondance.

 sh int brief
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
enp0s1          up      default         fe80::baad:caff:fefe:8/64
enp0s1.120      up      default         172.20.120.3/23
                                        + 2001:678:3fc:78:baad:caff:fefe:8/64
enp0s1.470      up      default         172.20.70.2/29
                                        + fe80:1d6::2/64
enp0s1.475      up      default         + fe80:1db::1/64
enp0s1.476      up      default         fe80::baad:caff:fefe:8/64
enp0s1.477      up      default         + fe80:1dd::1/64
enp0s1.478      up      default         fe80::baad:caff:fefe:8/64
lo              up      default
ppp0            up      default         10.47.6.1/32
                                        fe80::1cd0:13ee:bdd1:22bb/128
ppp1            up      default         10.47.8.1/32
                                        fe80::7993:fc0f:f5c8:d0c4/128

6.3. Pour conclure...

Maintenant que l'on a validé l'ensemble des échanges entre les conteneurs situés aux extrémités de la topologie d'interconnexion de réseaux, on peut passer à la conclusion.

Ce dernier document de la série des travaux pratiques fournit une synthèse détaillée de tous les modes d'interconnexion de réseaux locaux (LAN) et étendus (WAN) en utilisant des protocoles comme PPPoE et OSPF. Il couvre les principes de configuration des routeurs d'une architecture Hub & Spoke, l’installation et la configuration de la solution FRRouting avec la mise en place du routage dynamique OSPF pour IPv4 et IPv6.

On peut considérer que nous sommes arrivés à la limite de l'étude des interconnexions de réseaux sans automatisation. Pour aller plus loin, l'automatisation ainsi que l'intégration et le déploiement continu permettraient de déployer et gérer ces configurations à grande échelle, réduisant ainsi les erreurs manuelles et améliorant l'efficacité opérationnelle des réseaux d’entreprise.