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.
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!
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
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.