5. Routeurs Spoke (vert)

Dans le scénario défini dans la Section 2, « Topologie Hub & Spoke - Protocole PPPoE », un routeur de site d'extrémité ou Spoke ne peut accéder aux autres réseaux que via le routeur Hub. Son interface WAN joue donc le rôle de route par défaut pour le réseau local des hôtes hébergé sur un site distant.

Dans le contexte de ces manipulations, le réseau local de site est représenté par des conteneurs LXD raccordés à un commutateur virtuel.

Cette section, comme la précédente, reprend la partie Routeur Spoke (vert) du support Routage inter-VLAN et protocole PPPoE “contexte Cloud“.

Les routeurs Spoke utilisent un démon pppd dans le VLAN Data (Orange) pour établir une session PPP avec le routeur Hub.

Q9.

Quelles sont les messages des journaux système qui montrent que la session PPP a bien été établie ?

Après avoir consulté la page Point-to-Point Protocol repérer les messages relatifs aux deux sous-couches LCP et NCP du protocole PPP.

sur le routeur Spoke1vert de la maquette, on relève les messages suivants à l'aide de la commande grep ppp /var/log/syslog :

  • Lancement du démon pppd.

    Spoke1Vert pppd[2452]: Plugin rp-pppoe.so loaded.
    Spoke1Vert pppd[2453]: pppd 2.4.7 started by etu, uid 0
  • Reconnaissance des extrémités de la liaison point à point avec le protocole PPPoE

    Spoke1Vert pppd[2453]: Send PPPOE Discovery V1T1 PADI session 0x0 length 4
    Spoke1Vert pppd[2453]:  dst ff:ff:ff:ff:ff:ff  src b0:ad:ca:fe:00:65
    Spoke1Vert pppd[2453]:  [service-name]
    Spoke1Vert pppd[2453]: Recv PPPOE Discovery V1T1 PADO session 0x0 length 36
    Spoke1Vert pppd[2453]:  dst b0:ad:ca:fe:00:65  src b0:ad:ca:fe:00:64
    Spoke1Vert pppd[2453]:  [AC-name BRAS] [service-name] [AC-cookie  6a f6 a2 45 86 95 b6 fa 0b 2c 52 13 fc d5 00 cf a5 09 00 00]
    Spoke1Vert pppd[2453]: Send PPPOE Discovery V1T1 PADR session 0x0 length 28
    Spoke1Vert pppd[2453]:  dst b0:ad:ca:fe:00:64  src b0:ad:ca:fe:00:65
    Spoke1Vert pppd[2453]:  [service-name] [AC-cookie  6a f6 a2 45 86 95 b6 fa 0b 2c 52 13 fc d5 00 cf a5 09 00 00]
    Spoke1Vert pppd[2453]: Recv PPPOE Discovery V1T1 PADS session 0x1 length 4
    Spoke1Vert pppd[2453]:  dst b0:ad:ca:fe:00:65  src b0:ad:ca:fe:00:64
    Spoke1Vert pppd[2453]:  [service-name]
    Spoke1Vert pppd[2453]: PADS: Service-Name: ''
    Spoke1Vert pppd[2453]: PPP session is 1
    Spoke1Vert pppd[2453]: Connected to b0:ad:ca:fe:00:64 via interface enp0s6.471
  • Négociation des paramètres et authentification dans la sous-couche LCP.

    Spoke1Vert pppd[2453]: using channel 6
    Spoke1Vert pppd[2453]: Using interface ppp0
    Spoke1Vert pppd[2453]: Connect: ppp0 <--> enp0s6.471
    Spoke1Vert pppd[2453]: sent [LCP ConfReq id=0x1 <mru 1492> <magic 0x4b398629>]
    Spoke1Vert pppd[2453]: rcvd [LCP ConfReq id=0x1 <mru 1492> <auth chap MD5> <magic 0x7473b69b>]
    Spoke1Vert pppd[2453]: sent [LCP ConfAck id=0x1 <mru 1492> <auth chap MD5> <magic 0x7473b69b>]
    Spoke1Vert pppd[2453]: sent [LCP ConfReq id=0x1 <mru 1492> <magic 0x4b398629>]
    Spoke1Vert pppd[2453]: rcvd [LCP ConfAck id=0x1 <mru 1492> <magic 0x4b398629>]
    Spoke1Vert pppd[2453]: sent [LCP EchoReq id=0x0 magic=0x4b398629]
    Spoke1Vert pppd[2453]: rcvd [LCP EchoReq id=0x0 magic=0x7473b69b]
    Spoke1Vert pppd[2453]: sent [LCP EchoRep id=0x0 magic=0x4b398629]
    Spoke1Vert pppd[2453]: rcvd [CHAP Challenge id=0x92 <fa8f749ff6b35e08fb00710e1f8e55a961>, name = "HubBleu"]
    Spoke1Vert pppd[2453]: sent [CHAP Response id=0x92 <7b0d6d2f67a7394183249dab9f414278>, name = "5p0k3_1"]
    Spoke1Vert pppd[2453]: rcvd [LCP EchoRep id=0x0 magic=0x7473b69b]
    Spoke1Vert pppd[2453]: rcvd [CHAP Success id=0x92 "Access granted"]
    Spoke1Vert pppd[2453]: CHAP authentication succeeded: Access granted
    Spoke1Vert pppd[2453]: CHAP authentication succeeded
    Spoke1Vert pppd[2453]: peer from calling number B0:AD:CA:FE:00:64 authorized
  • Attribution des adresses dans la sous-couche NCP. Ici, la lettre N est remplacée par IP pour le protocole IPv4 et IPV6 pour le protocole IPv6.

    En fin de copie d'écran, on relève le statut des scripts d'application des routes par défaut vers la liaison PPP.

    Spoke1Vert pppd[2453]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
    Spoke1Vert pppd[2453]: sent [IPV6CP ConfReq id=0x1 <addr fe80::9c61:b636:c47b:6da7>]
    Spoke1Vert pppd[2453]: rcvd [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
    Spoke1Vert pppd[2453]: sent [CCP ConfReq id=0x1]
    Spoke1Vert pppd[2453]: sent [CCP ConfRej id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
    Spoke1Vert pppd[2453]: rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 10.47.1.1>]
    Spoke1Vert pppd[2453]: sent [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
    Spoke1Vert pppd[2453]: rcvd [IPV6CP ConfReq id=0x1 <addr fe80::44e3:1233:8a57:4b9c>]
    Spoke1Vert pppd[2453]: sent [IPV6CP ConfAck id=0x1 <addr fe80::44e3:1233:8a57:4b9c>]
    Spoke1Vert pppd[2453]: rcvd [IPCP ConfNak id=0x1 <addr 10.47.1.2> <ms-dns1 172.16.0.2> <ms-dns2 172.16.0.2>]
    Spoke1Vert pppd[2453]: sent [IPCP ConfReq id=0x2 <addr 10.47.1.2> <ms-dns1 172.16.0.2> <ms-dns2 172.16.0.2>]
    Spoke1Vert pppd[2453]: rcvd [IPV6CP ConfAck id=0x1 <addr fe80::9c61:b636:c47b:6da7>]
    Spoke1Vert pppd[2453]: local  LL address fe80::9c61:b636:c47b:6da7
    Spoke1Vert pppd[2453]: remote LL address fe80::44e3:1233:8a57:4b9c
    Spoke1Vert pppd[2453]: Script /etc/ppp/ipv6-up started (pid 2490)
    Spoke1Vert pppd[2453]: rcvd [CCP ConfAck id=0x1]
    Spoke1Vert pppd[2453]: rcvd [CCP ConfReq id=0x2]
    Spoke1Vert pppd[2453]: sent [CCP ConfAck id=0x2]
    Spoke1Vert pppd[2453]: rcvd [IPCP ConfReq id=0x2 <addr 10.47.1.1>]
    Spoke1Vert pppd[2453]: sent [IPCP ConfAck id=0x2 <addr 10.47.1.1>]
    Spoke1Vert pppd[2453]: rcvd [IPCP ConfAck id=0x2 <addr 10.47.1.2> <ms-dns1 172.16.0.2> <ms-dns2 172.16.0.2>]
    Spoke1Vert pppd[2453]: local  IP address 10.47.1.2
    Spoke1Vert pppd[2453]: remote IP address 10.47.1.1
    Spoke1Vert pppd[2453]: primary   DNS address 172.16.0.2
    Spoke1Vert pppd[2453]: secondary DNS address 172.16.0.2
    Spoke1Vert pppd[2453]: Script /etc/ppp/ip-up started (pid 2494)
    Spoke1Vert pppd[2453]: Script /etc/ppp/ipv6-up finished (pid 2490), status = 0x0
    Spoke1Vert pppd[2453]: Script /etc/ppp/ip-up finished (pid 2494), status = 0x0

Q10.

Comment relever les adresses utilisées par les conteneurs LXD après installation et configuration ?

Rechercher dans la liste des options de la commande lxc, celle qui permet de lister les conteneurs présents sur le système.

Voici la liste des conteneurs actifs sur le premier site distant de la maquette. Les adresses IPv4 et IPv6 utilisées apparaissent directement.

etu@Spoke1Vert:~$ lxc ls
+------------+---------+------------------+-----------------------------------------+-----------+-----------+
|    NAME    |  STATE  |       IPV4       |                  IPV6                   |   TYPE    | SNAPSHOTS |
+------------+---------+------------------+-----------------------------------------+-----------+-----------+
| container0 | RUNNING | 10.0.1.10 (eth0) | fda0:7a62:1:0:216:3eff:feda:e1a (eth0)  | CONTAINER | 0         |
+------------+---------+------------------+-----------------------------------------+-----------+-----------+
| container1 | RUNNING | 10.0.1.11 (eth0) | fda0:7a62:1:0:216:3eff:fec4:d325 (eth0) | CONTAINER | 0         |
+------------+---------+------------------+-----------------------------------------+-----------+-----------+
| container2 | RUNNING | 10.0.1.12 (eth0) | fda0:7a62:1:0:216:3eff:fe66:86fb (eth0) | CONTAINER | 0         |
+------------+---------+------------------+-----------------------------------------+-----------+-----------+

Q11.

Quelles sont les opérations à effectuer pour installer un service Web dans chaque conteneur ? Une fois l'installation du service effectuée, comment obtenir la liste des adresses sur lesquelles le service est en écoute ?

Installer le paquet lighttpd dans chaque conteneur et donner la liste des ports en écoute dans chaque conteneur.

Partant de la liste des conteneurs obtenue à la question précédente, on installe les paquets lighttpd et lsof dans les conteneurs.

$ for i in {0..2}; do lxc exec container$i -- apt install -y lighttpd lsof; done

Les services Web sont démarrés directement lors de l'installation des paquets et on peut lister les services ouverts.

 etu@Spoke1Vert:~$ for i in {0..2}; do lxc exec container$i -- lsof -i; done
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
lighttpd 1311 www-data    4u  IPv4 1893171      0t0  TCP *:http (LISTEN)
lighttpd 1311 www-data    5u  IPv6 1893172      0t0  TCP *:http (LISTEN)
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
lighttpd 1310 www-data    4u  IPv4 1893336      0t0  TCP *:http (LISTEN)
lighttpd 1310 www-data    5u  IPv6 1896204      0t0  TCP *:http (LISTEN)
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
lighttpd 1310 www-data    4u  IPv4 1902888      0t0  TCP *:http (LISTEN)
lighttpd 1310 www-data    5u  IPv6 1902889      0t0  TCP *:http (LISTEN)

Dans chaque conteneur, le port TCP/80 est ouvert pour les protocoles réseau IPv4 et IPv6.

La même liste peut être obtenue à l'aide de la commande ss.

etu@Spoke1Vert:~$ for i in {0..2}; do lxc exec container$i -- ss -ta; done
State     Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
LISTEN    0       1024          0.0.0.0:http        0.0.0.0:*
LISTEN    0       1024             [::]:http           [::]:*
State     Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
LISTEN    0       1024          0.0.0.0:http        0.0.0.0:*
LISTEN    0       1024             [::]:http           [::]:*
State     Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
LISTEN    0       1024          0.0.0.0:http        0.0.0.0:*
LISTEN    0       1024             [::]:http           [::]:*

Q12.

Comment valider l'accès à ce service Web au niveau du routeur Spoke ?

Il s'agit de faire un test au niveau de la couche application. À la console, les deux outils adaptés sont wget et curl.

Voici un exemple de test pour chaque protocole de la couche réseau avec wget dans le contexte de la maquette.

etu@Spoke1Vert:~$ for addr in 10.0.1.10 10.0.1.11 10.0.1.12; \
do sh -c "wget -O /dev/null http://$addr 2>&1 | grep \"HTTP\" "; done
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK
etu@Spoke1Vert:~$ for addr in fda0:7a62:1:0:216:3eff:feda:e1a \
fda0:7a62:1:0:216:3eff:fec4:d325 \
fda0:7a62:1:0:216:3eff:fe66:86fb; \
do sh -c "wget -O /dev/null http://[$addr] 2>&1 | grep \"HTTP\" "; done
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK

Q13.

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.

etu@HubBleu:~$ for addr in fda0:7a62:1:0:216:3eff:feda:e1a \
fda0:7a62:1:0:216:3eff:fec4:d325 \
fda0:7a62:1:0:216:3eff:fe66:86fb; \
do sh -c "wget -O /dev/null http://[$addr] 2>&1 | grep \"HTTP\" "; done
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK
etu@Spoke2Vert:~$ for addr in fda0:7a62:1:0:216:3eff:feda:e1a \
fda0:7a62:1:0:216:3eff:fec4:d325 \
fda0:7a62:1:0:216:3eff:fe66:86fb; \
do sh -c "wget -O /dev/null http://[$addr] 2>&1 | grep \"HTTP\" "; done
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK
requête HTTP transmise, en attente de la réponse… 200 OK

Q14.

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.