5. Tests sur la topologie Hub & Spokes

Une fois la topologie décrite dans la Section 2, « Topologie Hub & Spoke - Protocole PPPoE » complète, on peut lancer une série des tests de connectivité et d'accès aux services Web depuis et vers les réseaux de conteneurs des deux routeurs Spoke.

Comme l'essentiel des tests qui suivent sont lancés depuis les conteneurs, il est nécessaire d'installer les outils dans ces mêmes conteneurs. Voici une exemple de traitement pour les 3 conteneurs d'un routeur Spoke.

for i in {0..2}
do
    echo ">>>>>>>>>>>>>>>>> c$i"
    lxc exec c$i -- apt -y update
    lxc exec c$i -- apt -y full-upgrade
    lxc exec c$i -- apt -y install iputils-tracepath wget
    lxc exec c$i -- apt clean
done

Q17.

Comment visualiser le chemin suivi par le trafic entre les réseaux IPv4 et IPv6 de chaque branche de la topologie à partir des tables de routage ?

Voici une série de copie d'écran valables dans le contexte de la maquette.

Si on se place sur le routeur Hub, on doit retrouver les deux routes statiques vers les réseaux des conteneurs de chaque branche.

ip route ls
default via 192.168.104.129 dev enp0s1.360 onlink
10.0.10.0/24 dev ppp0 scope link
10.0.20.0/24 dev ppp1 scope link
10.44.1.2 dev ppp0 proto kernel scope link src 10.44.1.1
10.44.3.2 dev ppp1 proto kernel scope link src 10.44.3.1
192.168.104.128/29 dev enp0s1.360 proto kernel scope link src 192.168.104.130
ip -6 route ls
::1 dev lo proto kernel metric 256 pref medium
2001:678:3fc:168::/64 dev enp0s1.360 proto kernel metric 256 pref medium
fda0:7a62:a::/64 dev ppp0 metric 1024 pref medium
fda0:7a62:14::/64 dev ppp1 metric 1024 pref medium
fe80::81:f421:dcb9:b115 dev ppp0 proto kernel metric 256 pref medium
fe80::7846:dae9:1c1f:4b7c dev ppp1 proto kernel metric 256 pref medium
fe80::a1d3:fb63:2582:f6eb dev ppp0 proto kernel metric 256 pref medium
fe80::e0b4:231f:92d4:524f dev ppp1 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.360 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.440 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.441 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.442 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.443 proto kernel metric 256 pref medium
fe80:1b8::/64 dev enp0s1.440 proto kernel metric 256 pref medium
fe80:1ba::/64 dev enp0s1.442 proto kernel metric 256 pref medium
default via fe80:168::1 dev enp0s1.360 metric 1024 onlink pref medium

Si on se place sur l'un des deux routeurs Spoke, on doit trouver des routes par défaut identiques puisqu'elles utilisent le nom de l'interface créée lors de l'établissement de la session PPP.

ip route ls default
default dev ppp0 scope link
ip -6 route ls default
default dev ppp0 metric 1024 pref medium

Q18.

Quels sont les tests ICMP à réaliser pour valider la connectivité d'un réseau de conteneurs de branche à l'autre ?

Voici un exemple de tests depuis le réseau des conteneurs desservi par le routeur Spoke-1.

for i in {0..2}
do
        echo ">>>>> from Spoke-1 c$i to Spoke-2 c$i"
        lxc exec c$i -- ping -q -c2 10.0.20.$(($i + 10))
done
>>>>> from Spoke-1 c0 to Spoke-2 c0
PING 10.0.20.10 (10.0.20.10) 56(84) bytes of data.

--- 10.0.20.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.508/4.768/6.029/1.260 ms
>>>>> from Spoke-1 c1 to Spoke-2 c1
PING 10.0.20.11 (10.0.20.11) 56(84) bytes of data.

--- 10.0.20.11 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.550/4.201/4.853/0.651 ms
>>>>> from Spoke-1 c2 to Spoke-2 c2
PING 10.0.20.12 (10.0.20.12) 56(84) bytes of data.

--- 10.0.20.12 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.346/4.194/5.042/0.848 ms
for i in {0..2}
do
        echo ">>>>> from Spoke-1 c$i to Spoke-2 c$i"
        lxc exec c$i -- ping -q -c2 fda0:7a62:14::$(printf "%x" $(($i + 10)))
done
>>>>> from Spoke-1 c0 to Spoke-2 c0
PING fda0:7a62:14::a(fda0:7a62:14::a) 56 data bytes

--- fda0:7a62:14::a ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 3.654/4.981/6.308/1.327 ms
>>>>> from Spoke-1 c1 to Spoke-2 c1
PING fda0:7a62:14::b(fda0:7a62:14::b) 56 data bytes

--- fda0:7a62:14::b ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.342/4.205/5.069/0.863 ms
>>>>> from Spoke-1 c2 to Spoke-2 c2
PING fda0:7a62:14::c(fda0:7a62:14::c) 56 data bytes

--- fda0:7a62:14::c ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.428/4.118/4.809/0.690 ms

Q19.

Comment visualiser le chemin emprunté par le trafic d'un réseau de conteneurs à l'autre ?

Installer le paquet iputils-tracepath pour faire appel à la commande tracepath.

Voici encore un exemple de tests depuis le réseau des conteneurs desservi par le routeur Spoke-1.

for i in {0..2}
do
        echo ">>>>>>>>>>>>>>>>> c$i"
        lxc exec c$i -- tracepath -n 10.0.20.$(($i + 10))
done
>>>>>>>>>>>>>>>>> c0
 1?: [LOCALHOST]                      pmtu 1492
 1:  10.0.10.1                                             0.931ms
 1:  10.0.10.1                                             0.091ms
 2:  10.44.1.1                                             2.042ms
 3:  10.44.3.2                                             3.474ms
 4:  10.0.20.10                                            4.306ms reached
     Resume: pmtu 1492 hops 4 back 4
>>>>>>>>>>>>>>>>> c1
 1?: [LOCALHOST]                      pmtu 1492
 1:  10.0.10.1                                             0.998ms
 1:  10.0.10.1                                             0.099ms
 2:  10.44.1.1                                             2.102ms
 3:  10.44.3.2                                             3.875ms
 4:  10.0.20.11                                            4.458ms reached
     Resume: pmtu 1492 hops 4 back 4
>>>>>>>>>>>>>>>>> c2
 1?: [LOCALHOST]                      pmtu 1492
 1:  10.0.10.1                                             0.120ms
 1:  10.0.10.1                                             0.034ms
 2:  10.44.1.1                                             1.856ms
 3:  10.44.3.2                                             3.658ms
 4:  10.0.20.12                                            4.080ms reached
     Resume: pmtu 1492 hops 4 back 4
for i in {0..2}
do
        echo ">>>>>>>>>>>>>>>>> c$i"
        lxc exec c$i -- tracepath -n fda0:7a62:14::$(printf "%x" $(($i + 10)))
done
>>>>>>>>>>>>>>>>> c0
 1?: [LOCALHOST]                        0.025ms pmtu 1500
 1:  fda0:7a62:a::1                                        0.917ms
 1:  fda0:7a62:a::1                                        0.150ms
 2:  fda0:7a62:a::1                                        0.076ms pmtu 1492
 2:  2001:678:3fc:168::2                                   1.838ms
 3:  fda0:7a62:14::1                                       3.295ms
 4:  fda0:7a62:14::a                                       4.349ms reached
     Resume: pmtu 1492 hops 4 back 4
>>>>>>>>>>>>>>>>> c1
 1?: [LOCALHOST]                        0.030ms pmtu 1500
 1:  fda0:7a62:a::1                                        2.830ms
 1:  fda0:7a62:a::1                                        0.129ms
 2:  fda0:7a62:a::1                                        0.063ms pmtu 1492
 2:  2001:678:3fc:168::2                                   2.190ms
 3:  fda0:7a62:14::1                                       3.764ms
 4:  fda0:7a62:14::b                                       4.759ms reached
     Resume: pmtu 1492 hops 4 back 4
>>>>>>>>>>>>>>>>> c2
 1?: [LOCALHOST]                        0.033ms pmtu 1500
 1:  fda0:7a62:a::1                                        2.422ms
 1:  fda0:7a62:a::1                                        0.056ms
 2:  fda0:7a62:a::1                                        0.030ms pmtu 1492
 2:  2001:678:3fc:168::2                                   1.970ms
 3:  fda0:7a62:14::1                                       3.310ms
 4:  fda0:7a62:14::c                                       4.532ms reached
     Resume: pmtu 1492 hops 4 back 4

Q20.

Comment valider les accès Web depuis le routeur Hub et depuis l'autre routeur Spoke ?

Il suffit de reprendre la même série de tests depuis les autres routeurs de la topologie.

Voici deux exemples de tests réalisés dans le contexte de la maquette à nouveau depuis les conteneurs du routeur Spoke-1.

for i in {0..2}
do
        echo ">>>>> from Spoke-1 c$i to Spoke-2 c$i"
        lxc exec c$i -- wget -O /dev/null http://10.0.20.$(($i + 10)) 2>&1 | grep "HTTP "
done
>>>>> from Spoke-1 c0 to Spoke-2 c0
HTTP request sent, awaiting response... 200 OK
>>>>> from Spoke-1 c1 to Spoke-2 c1
HTTP request sent, awaiting response... 200 OK
>>>>> from Spoke-1 c2 to Spoke-2 c2
HTTP request sent, awaiting response... 200 OK
for i in {0..2}
do
        echo ">>>>> from Spoke-1 c$i to Spoke-2 c$i"
        lxc exec c$i -- wget -O /dev/null http://[fda0:7a62:14::$(printf "%x" $(($i + 10)))] 2>&1 | grep "HTTP "
done
>>>>> from Spoke-1 c0 to Spoke-2 c0
HTTP request sent, awaiting response... 200 OK
>>>>> from Spoke-1 c1 to Spoke-2 c1
HTTP request sent, awaiting response... 200 OK
>>>>> from Spoke-1 c2 to Spoke-2 c2
HTTP request sent, awaiting response... 200 OK

Q21.

Est-il possible d'obtenir les mêmes résultats depuis un routeur extérieur au routeur Hub ?

Analyser la portée de la table de routage du routeur Hub.

La table de routage du routeur Hub sert uniquement à joindre les routeurs Spoke et à offrir une connectivité entre ces sites distants.

Comme les règles de traduction des adresses source IPv4 et IPv6 ont été implantées sur le routeur Hub, les réseaux de conteneurs ont accès à Internet mais ils ne sont pas accessibles depuis Internet.

Rendre ces services accessibles depuis l'Internet est un des objectifs du support de travaux pratiques suivant : Filtrage réseau avec netfilter/iptables.