2. Architecture réseau étudiée et filtrage

Les manipulations sur le système de filtrage réseau présentées ici s'appuient sur la topologie Hub and Spoke étudiée dans le support précédent de la série : Topologie Hub & Spoke avec le protocole PPPoE.

La topologie étudiée associe trois routeurs qui ont deux rôles distincts.

Routeur central, Hub, Broadband Remote Access Server, BRAS

Ce routeur réalise une interconnexion LAN/WAN. Il fournit un accès Internet aux routeurs de sites distants via ses interfaces WAN. Il dispose de son propre accès Internet via son interface LAN.

Routeur d'extrémité, Spoke, Customer Premises Equipment, CPE

Ce routeur réalise aussi une interconnexion LAN/WAN. À la différence du routeur Hub, il obtient l'accès Internet sur son interface WAN et il met cet accès à disposition d'un réseau local de site représenté par des conteneurs LXD.

Routage et traduction d'adresses (situation de départ)

Les manipulations qui suivent supposent que la topologie Hub & Spoke est en place et fonctionnelle. On s'appuie sur le support précédent de la série : Topologie Hub & Spoke avec le protocole PPPoE

  • Le routeur Hub doit s'assurer que le trafic réseau qu'il route vers et depuis l'Internet correspond bien au plan d'adressage défini. Dans ce but, il attribue les adresses du lien point à point ainsi qu'une route statique à destination du réseau d'extrémité distant.

    Le routeur Hub assure la traduction des adresses sources du réseau distant vers l'Internet.

  • Le routeur Spoke doit obtenir son adresse IPv4 de réseau étendu via PPP et assurer le routage de son réseau local. Il dispose d'une route par défaut qui désigne le lien point à point comme seul accès vers l'Internet.

Les questions ci-dessous ont pour objectif de valider le fonctionnement du routage et de la traduction des adresses sources en sortie du routeur Hub vers l'Internet.

Pour traiter les questions, on doit effectuer quelques opérations de vérification et de préparation.

  1. On doit d'abord s'assurer que les réseaux des conteneurs de chaque branche de la topologie sont en place. On affiche la liste des conteneurs de chaque routeur Spoke.

    etu@Spoke1Vert:~$ lxc ls
    WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
    +----------+---------+------------------+-----------------------+-----------+-----------+
    |   NAME   |  STATE  |       IPV4       |         IPV6          |   TYPE    | SNAPSHOTS |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    | spoke1C0 | RUNNING | 10.0.1.10 (eth0) | fda0:7a62:1::a (eth0) | CONTAINER | 0         |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    | spoke1C1 | RUNNING | 10.0.1.11 (eth0) | fda0:7a62:1::b (eth0) | CONTAINER | 0         |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    | spoke1C2 | RUNNING | 10.0.1.12 (eth0) | fda0:7a62:1::c (eth0) | CONTAINER | 0         |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    etu@Spoke2Vert:~$ lxc ls
    WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
    +----------+---------+------------------+-----------------------+-----------+-----------+
    |   NAME   |  STATE  |       IPV4       |         IPV6          |   TYPE    | SNAPSHOTS |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    | spoke2C0 | RUNNING | 10.0.2.10 (eth0) | fda0:7a62:2::a (eth0) | CONTAINER | 0         |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    | spoke2C1 | RUNNING | 10.0.2.11 (eth0) | fda0:7a62:2::b (eth0) | CONTAINER | 0         |
    +----------+---------+------------------+-----------------------+-----------+-----------+
    | spoke2C2 | RUNNING | 10.0.2.12 (eth0) | fda0:7a62:2::c (eth0) | CONTAINER | 0         |
    +----------+---------+------------------+-----------------------+-----------+-----------+
  2. On configure le shell par défaut dans les conteneurs des deux routeurs Spoke de façon à pouvoir exécuter des scripts dans ces conteneurs.

    • Création du script qui définit bash comme shell par défaut.

      etu@Spoke1Vert:~$ cat << EOF > setBashasSh.sh
      #!/bin/sh
      
      # make /bin/sh symlink to bash instead of dash:
      echo "dash dash/sh boolean false" | debconf-set-selections
      DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
      EOF
    • Copie du script dans chaque conteneur.

      etu@Spoke1Vert:~$ for i in {0..2}
      do
              lxc file push setBashasSh.sh spoke1C$i/root/
      done
    • Exécution du script dans chaque conteneur.

      etu@Spoke1Vert:~$ for i in {0..2}
      do
              lxc exec spoke1C$i -- sh /root/setBashasSh.sh
      done

Q1.

Comment tracer le chemin suivi par les paquets IPv4 et IPv6 d'un conteneur à un autre conteneur du site distant de l'autre branche de la topologie ?

Rechercher le paquet contenant la commande tracepath qui permet d'afficher le chemin suivi par le trafic réseau.

Par exemple, on se place sur le routeur Spoke2Vert et on installe le paquet iputils-tracepath dans les conteneurs avant de lancer les relevés du chemin de bout en bout.

etu@Spoke2Vert:~$ for i in {0..2}
do
        lxc exec spoke1C$i -- apt install iputils-tracepath
done

une fois le paquet installé, on doit pouvoir contacter les adresses IPv4 et IPv6 des conteneurs situés à l'autre extrémité de la topologie Hub & Spoke.

Par exemple, on relève le chemin entre les conteneurs spoke2C2 et spoke1C0.

etu@Spoke2Vert:~$ lxc exec spoke2C2 -- tracepath 10.0.1.10
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
 1?: [LOCALHOST]                      pmtu 1500
 1:  10.0.2.1                                              0.798ms
 1:  10.0.2.1                                              0.100ms
 2:  10.0.2.1                                              0.156ms pmtu 1492
 2:  10.47.3.1                                             1.086ms
 3:  10.47.1.2                                             1.489ms
 4:  10.0.1.10                                             2.518ms reached
     Resume: pmtu 1492 hops 4 back 4
etu@Spoke2Vert:~$ lxc exec spoke2C2 -- tracepath fda0:7a62:1::a
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
 1?: [LOCALHOST]                        0.043ms pmtu 1492
 1:  fda0:7a62:2::1                                        1.183ms
 1:  fda0:7a62:2::1                                        0.205ms
 2:  2001:678:3fc:12c::2                                   1.059ms
 3:  fda0:7a62:1::1                                        2.003ms
 4:  fda0:7a62:1::a                                        3.453ms reached
     Resume: pmtu 1492 hops 4 back 4

Les résultats obtenus avec l'exécution de la commande tracepath montrent que le routage des paquets IPv4 et IPv6 est fonctionnel.

Q2.

Comment caractériser la traduction d'adresses source en sortie du routeur Hub ?

La fonction de traduction d'adresse entre dans cadre du filtrage réseau et fait appel aux mêmes outils : netfilter/iptables.

Rechercher le paquet qui contient la commande conntrack puis rechercher les options de cette commande qui permettent d'afficher les états des enregistrements de la table NAT.

On ouvre une console sur le routeur Hub de la maquette et on installe le paquet conntrack.

etu@HubBleu:~$ sudo apt -y install conntrack

Dans le même temps, on ouvre une autre console sur le routeur Spoke1Vert. C'est à partir de cette console que l'on lance des téléchargements depuis le serveur inetdoc.net à l'aide de la commande wget.

etu@Spoke1Vert:~$ for i in {0..2}
do
        lxc exec spoke1C$i -- apt -y install wget
done

Sur le routeur Hub, on affiche la liste des enregistrements de la table NAT.

  • Requête IPv4 depuis le conteneur :

    root@container0:~# while true
    do
            wget -4 -O /dev/null https://inetdoc.net/pdf/iproute-cheatsheet.pdf
            sleep 3
    done

    Liste des enregistrements :

    etu@HubBleu:~$ sudo conntrack -f ipv4 -L
    udp      17 17 src=10.0.1.10 dst=9.9.9.9 sport=49165 dport=53
                                    src=9.9.9.9 dst=10.141.0.162 sport=53 dport=49165 mark=0 use=1
    tcp      6 432000 ESTABLISHED src=172.16.0.230 dst=10.141.0.162 sport=40278 dport=22
                                    src=10.141.0.162 dst=172.16.0.230 sport=22 dport=40278 [ASSURED] mark=0 use=1
    udp      17 20 src=10.0.1.10 dst=9.9.9.9 sport=36074 dport=53
                                    src=9.9.9.9 dst=10.141.0.162 sport=53 dport=36074 mark=0 use=1
    tcp      6 1 CLOSE src=10.0.1.10 dst=89.234.156.195 sport=44860 dport=443
                                    src=89.234.156.195 dst=10.141.0.162 sport=443 dport=44860 [ASSURED] mark=0 use=1
    tcp      6 7 CLOSE src=10.0.1.10 dst=89.234.156.195 sport=44864 dport=443
                                    src=89.234.156.195 dst=10.141.0.162 sport=443 dport=44864 [ASSURED] mark=0 use=1
    udp      17 27 src=10.0.1.10 dst=9.9.9.9 sport=45443 dport=53
                                    src=9.9.9.9 dst=10.141.0.162 sport=53 dport=45443 mark=0 use=1
    udp      17 24 src=10.0.1.10 dst=9.9.9.9 sport=33499 dport=53
                                    src=9.9.9.9 dst=10.141.0.162 sport=53 dport=33499 mark=0 use=1
    tcp      6 4 CLOSE src=10.0.1.10 dst=89.234.156.195 sport=44862 dport=443
                                    src=89.234.156.195 dst=10.141.0.162 sport=443 dport=44862 [ASSURED] mark=0 use=1
    conntrack v1.4.6 (conntrack-tools): 9 flow entries have been shown.
  • Requête IPv6 depuis le conteneur :

    root@container0:~# while true
    do
            wget -6 -O /dev/null https://inetdoc.net/pdf/iproute-cheatsheet.pdf
            sleep 3
    done

    Liste des enregistrements :

    etu@HubBleu:~$ sudo conntrack -f ipv6 -L
    tcp      6 5 CLOSE src=fda0:7a62:1:0:216:3eff:feda:e1a dst=2a03:7220:8083:c300::1 sport=47472 dport=443
                                    src=2a03:7220:8083:c300::1 dst=2001:678:3fc:12c::2 sport=443 dport=47472 [ASSURED] mark=0 use=1
    tcp      6 8 CLOSE src=fda0:7a62:1:0:216:3eff:feda:e1a dst=2a03:7220:8083:c300::1 sport=47474 dport=443
                                    src=2a03:7220:8083:c300::1 dst=2001:678:3fc:12c::2 sport=443 dport=47474 [ASSURED] mark=0 use=1
    tcp      6 431998 ESTABLISHED src=fe80:1d6::1 dst=fe80:1d6::2 sport=39218 dport=2222
                                    src=fe80:1d6::2 dst=fe80:1d6::1 sport=2222 dport=39218 [ASSURED] mark=0 use=1
    conntrack v1.4.6 (conntrack-tools): 3 flow entries have been shown.