5. Routeur Hub (bleu)

Dans cette section, on étudie la machine virtuelle qui joue le rôle de routeur entre le réseau opérateur et le réseau étendu qui dessert le site distant.

5.1. Configuration des interfaces du routeur

Une fois la machine virtuelle routeur lancée, les premières étapes consistent à lui attribuer un nouveau nom et à configurer les interfaces réseau pour joindre les hôtes voisins.

Q6.

Comment changer le nom de la machine virtuelle ?

Il faut éditer les deux fichiers /etc/hosts et /etc/hostname en remplaçant le nom de l'image maître vm0 par le nom voulu. Il est ensuite nécessaire de redémarrer pour que le nouveau nom soit pris en compte par tous les outils du système.

etu@vm0:~$ sudo sed -i 's/vm0/bleu/g' /etc/hosts /etc/hostname
etu@vm0:~$ sudo reboot

Q7.

Comment appliquer les configurations réseau IPv4 et IPv6 à partir de l'unique interface du routeur ?

Consulter les pages de manuels du fichier de configuration système à l'aide de la commande man interfaces.

Il existe plusieurs possibilités pour configurer une interface réseau. Dans le contexte de ces manipulations, on utilise le fichier de configuration fourni par la distribution Debian GNU/Linux : /etc/network/interfaces.

La configuration de base fournie avec l'image maître suppose que l'interface obtienne un bail DHCP pour la partie IPv4 et une configuration automatique via SLAAC pour la partie IPv6. Cette configuration par défaut doit être éditée et remplacée. Il faut configurer trois interfaces.

Une interface doit être créée pour chacun des différents réseaux avec le numéro de VLAN désigné dans le plan d'adressage.

  • L'interface principale doit être placée en mode manuel (manual). Elle doit être activée/désactivée au niveau de la couche liaison.

  • Une interface doit être créée pour le VLAN rouge. Cette interface doit désigner les passerelles IPv4 et IPv6 de façon à joindre l'Internet.

  • Une interface doit être créée pour le VLAN violet avec une adresse de lien local IPv6 pour la supervision.

  • Une interface doit être créée pour le VLAN orange avec les adresses IPv4 et IPv6 de passerelle pour le réseau étendu.

Voici une copie du fichier /etc/network/interfaces de la maquette.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s1
iface enp0s1 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

# ---------- VLAN ROUGE ----------
auto enp0s1.360
iface enp0s1.360 inet static
        address 192.168.104.130
        gateway 192.168.104.129
        dns-nameserver 172.16.0.2

iface enp0s1.360 inet6 static
        address 2001:678:3fc:168::2/64
        gateway fe80:168::1

# ---------- VLAN VIOLET ----------
auto enp0s1.440
iface enp0s1.440 inet6 static
        address fe80:1b8::1/64

# ---------- VLAN ORANGE ----------
auto enp0s1.441
iface enp0s1.441 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

Une fois le fichier de configuration en place, il est préférable de redémarrer la machine virtuelle de façon à vérifier que la configuration des interfaces est bien appliquée après chaque réinitialisation.

Q8.

Quels sont les tests de connectivité réalisables après application de la nouvelle configuration des interfaces réseau ?

Relever l'état des trois interfaces et procédez aux tests en respectant les couches de la modélisation.

La commande ip addr ls permet de relever l'état de la configuration pour chaque interface.

ip addr ls | grep state
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
3: enp0s1.360@enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
4: enp0s1.440@enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
6: enp0s1.441@enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

Sans la confirmation que la configuration du routeur vert est prête, c'est du côté hébergement et accès Internet qu'il faut orienter les tests. Classiquement, on cherche à joindre la passerelle en premier puis l'Internet ensuite via des requêtes ICMP. Enfin, on effectue un test de couche application avec une requête DNS.

ping -q -c2 192.168.104.129
PING 192.168.104.129 (192.168.104.129) 56(84) bytes of data.

--- 192.168.104.129 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 1.190/1.712/2.235/0.522 ms
ping -q -c2 9.9.9.9
PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data.

--- 9.9.9.9 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 20.820/22.682/24.545/1.862 ms
ping -q -c2 fe80:168::1%enp0s1.360
PING fe80:168::1%enp0s1.360(fe80:168::1%enp0s1.360) 56 data bytes

--- fe80:168::1%enp0s1.360 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.631/1.911/2.192/0.280 ms
ping -q -c2 2620:fe::fe
PING 2620:fe::fe(2620:fe::fe) 56 data bytes

--- 2620:fe::fe ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 42.231/45.095/47.959/2.864 ms
host quad9.net
quad9.net has address 216.21.3.77
quad9.net has IPv6 address 2620:0:871:9000::77
quad9.net mail is handled by 5 mx1.quad9.net.
quad9.net mail is handled by 20 mx2.quad9.net.
quad9.net mail is handled by 100 keriomail.pch.net.

5.2. Activation de la fonction routage

Sans modification de la configuration par défaut, un système GNU/Linux n'assure pas la fonction de routage du trafic d'une interface réseau à une autre.

L'activation du routage correspond à un réglage de paramètres du sous-système réseau du noyau Linux. L'outil qui permet de consulter et modifier les réglages de paramètre sur le noyau est appelé sysctl. Son fichier de configuration principal est /etc/sysctl.conf.

Q9.

Comment activer le routage dans le sous-système réseau du noyau Linux ?

Utiliser la commande sysctl pour effectuer des recherches et identifier les paramètres utiles. Par exemple : sudo sysctl -a -r ".*forward.*".

Le fichier /etc/sysctl.conf contient des commentaires qui guident facilement vers les bons paramètres.

Attention ! Il ne faut pas oublier d'appliquer les nouvelles valeurs des paramètres de configuration.

Voici un extrait du fichier /etc/sysctl.conf du routeur de la maquette après édition.

egrep -v '(^#|^$)' /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.log_martians = 1

Voici une copie d'écran de l'application des nouveaux paramètres.

sudo sysctl --system
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
kernel.pid_max = 4194404
* Applying /etc/sysctl.d/99-sysctl.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.log_martians = 1
* Applying /usr/lib/sysctl.d/protect-links.conf ...
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
* Applying /etc/sysctl.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.log_martians = 1

Q10.

Quelles sont les conditions à réunir pour tester le fonctionnement du routage ?

Rechercher comment utiliser l'analyseur réseau tshark pour caractériser l'acheminement du trafic d'un réseau à l'autre.

Le plan d'adressage prévoit d'utiliser des préfixes ayant une portée locale pour les réseaux de conteneurs. Il n'est donc pas possible de passer par une requête ICMP pour caractériser l'accès aux réseaux distants. En effet, l'adresse source n'est pas reconnue par l'hôte distant et les routeurs de l'Internet ne disposent d'aucune solution pour joindre le réseau des conteneurs.

Voici un extrait de capture qui montre que le serveur de conteneur cherche à joindre un hôte sur l'Internet sans succès. Cette capture étant réalisée sur l'interface réseau côté hébergement, elle montre que le trafic est bien acheminé d'un réseau à l'autre.

tshark -i enp0s1.360
Capturing on 'enp0s1.360'
    1 0.000000000    192.0.2.2 → 9.9.9.9      DNS 81 Standard query 0xbdab A 1.debian.pool.ntp.org
    2 0.000056361    192.0.2.2 → 9.9.9.9      DNS 81 Standard query 0xab92 AAAA 1.debian.pool.ntp.org

5.3. Activation de la traduction d'adresses

Le résultat de la question ci-dessus montre que les hôtes situés dans le réseau des conteneurs ne peuvent pas joindre l'Internet puisque les préfixes réseau utilisés ont une portée limitée.

Q11.

Quels sont les paquets qui fournissent les outils de gestion de la traduction d'adresses ?

Rechercher les paquets relatifs au filtrage et à la gestion des règles de pare-feux.

Sur les systèmes GNU/Linux, le système de pare-feux comprend une partie "espace utilisateur" appelée iptables et une partie "noyau" appelée netfilter.

C'est la partie "espace utilisateur" qui nous intéresse ici.

apt search ^iptables
Sorting... Done
Full Text Search... Done
iptables/testing 1.8.8-1 amd64
  administration tools for packet filtering and NAT

iptables-netflow-dkms/testing 2.6-3 amd64
  iptables target which generates netflows

iptables-persistent/testing 1.0.16 all
  boot-time loader for netfilter rules, iptables plugin

rtpengine-iptables/testing 10.5.2.4-1+b1 amd64
  IPtables extension module for the kernel-space NGCP media proxy

rtpengine-kernel-dkms/testing 10.5.2.4-1 all
  IPtables kernel module for the NGCP media proxy - DKMS

On lance l'installation des deux paquets propres à notre contexte.

sudo apt -y install iptables iptables-persistent

Q12.

Quelles sont les règles à appliquer pour assurer une traduction des adresses sources en sortie sur le réseau hébergement ?

Rechercher dans les pages de manuel de la commande iptables.

C'est la cible MASQUERADE qui nous intéresse. Voici un exemple de règles de traduction des adresses sources pour la maquette.

sudo iptables -t nat -A POSTROUTING -o enp0s1.360 -j MASQUERADE
 sudo sh -c "iptables-save >/etc/iptables/rules.v4"
sudo ip6tables -t nat -A POSTROUTING -o enp0s1.360 -j MASQUERADE
 sudo sh -c "ip6tables-save >/etc/iptables/rules.v6"

Q13.

Comment caractériser le fonctionnement de la traduction d'adresses sources ?

Rechercher dans les pages de manuel de la commande iptables les options d'affichage du décompte du trafic traité.

Voici un exemple d'affichage pour le trafic IPv4 uniquement.

sudo iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    8   598 MASQUERADE  all  --  *      enp0s1.360  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

5.4. Activation du protocole PPPoE côté réseau étendu

Pour acheminer le trafic depuis et vers le site distant, il est nécessaire de passer par une authentification. Cette fonction est assurée à l'aide du protocole PPPoE.

Le protocole PPP n'a pas été conçu suivant le modèle Client/Serveur. Il suppose que deux processus pairs échangent des informations. Dans les questions qui suivent, le routeur bleu doit exiger que le routeur vert s'authentifie auprès de lui avant de délivrer les adresses de couche réseau.

Q14.

Quel paquet spécifique à la gestion du dialogue PPPoE à installer sur le routeur Hub ?

Rechercher dans le catalogue des paquets, la référence pppoe.

apt search ^pppoe
Sorting... Done
Full Text Search... Done
pppoe/testing 3.15-1+b1 amd64
  PPP over Ethernet driver

Le résultat de la commande apt show pppoe montre que c'est bien ce paquet qui répond au besoin.

sudo apt -y install pppoe

Q15.

Quel est le rôle de l'outil contenu dans le paquet demandé à la question précédente relativement au démon pppd fourni avec le paquet ppp ?

Rechercher dans les pages de manuels de l'outil demandé à la question précédente.

L'outil pppoe-server gère directement l'encapsulation des trames PPP dans les trames Ethernet. Il communique ensuite les paramètres utiles au démon pppd qui fonctionne de façon totalement transparente vis-à-vis de la technologie du réseau sous-jacent.

Q16.

Quels sont les noms des deux sous-couches du protocole PPP qui apparaissent dans les journaux systèmes ?

Quels sont les rôles respectifs de ces deux sous-couches ?

Consulter la page Point-to-Point Protocol.

La consultation des journaux système lors du dialogue PPP fait apparaître des informations du type suivant.

La Section 7, « Trace d'une transaction complète PPPoE » montre en détails les différentes phases de l'établissement de la session PPP.

Q17.

Quels sont les en-têtes du dialogue qui identifient les requêtes (émises|reçues), les rejets et les acquittements ?

Consulter les journaux système contenant les traces d'une connexion PPP.

La copie d'écran donnée ci-dessus fait apparaître les directives Conf* pour chaque paramètre négocié.

  • ConfReq indique une requête.

  • ConfAck indique un acquittement.

  • ConfNak indique un rejet.

Q18.

Dans quel fichier sont stockés les paramètres d'identité et d'authentification utilisés par le protocole CHAP ?

Consulter les pages de manuels du démon pppd à la section AUTHENTICATION.

C'est le fichier /etc/ppp/chap-secrets qui contient les couples login/password utilisés lors de l'authentification.

Voici un exemple du contenu de ce fichier.

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"green"         *               "5p0k3"                 *

Q19.

Dans quel fichier sont stockés les paramètres passés au démon pppd lors du lancement du serveur PPPoE ?

Consulter les pages de manuels de l'outil pppoe-server.

C'est le fichier /etc/ppp/pppoe-server-options qui contient la liste des paramètres utilisés lors du dialogue PPP.

Q20.

Quelles sont les options du protocole PPP qui doivent être implantées dans le fichier demandé à la question précédente ?

Consulter les pages de manuels du démon pppd et rechercher les paramètres correspondant à la liste suivante.

  • Afficher en détail toutes les étapes d'établissement de session dans les journaux système.

  • Référencer l'identifiant du compte utilisateur à utiliser lors de l'authentification du routeur vert. Cette option implique que le compte utilisateur existe sur le système et qu'il soit présent dans le fichier /etc/ppp/chap-secrets.

  • Imposer au routeur vert une authentification via le protocole CHAP (Challenge Handshake Authentication Protocol).

  • Préserver la route par défaut, et donc l'accès Internet, du routeur bleu.

  • Publier l'adresse IP du serveur DNS à utiliser pour la résolution des noms de domaines.

  • Activer l'utilisation des protocoles IPv6CP et IPv6.

Voici une copie de la commande de création du fichier /etc/ppp/pppoe-server-options qui contient la liste des paramètres demandés.

cat << EOF | sudo tee /etc/ppp/pppoe-server-options
login
require-chap
nodefaultroute
ms-dns 172.16.0.2
+ipv6
EOF

Q21.

Comment créer le compte utilisateur local sur le routeur bleu sachant qu'il n'est autorisé ni à se connecter ni à avoir un répertoire personnel ?

Consulter les options de la commande adduser.

Voici un exemple de commande adduser.

sudo adduser --gecos 'GREEN Router' --disabled-login --no-create-home green

Q22.

Quels sont les paramètres à donner au lancement de l'outil pppoe-server pour qu'il délivre les adresses au routeur vert après authentification de celui-ci ?

Consulter les options de la commande pppoe-server.

Voici un exemple de commande pppoe-server.

sudo pppoe-server -I enp0s1.441 -C BRAS -L 10.4.41.1 -R 10.4.41.2 -N 1

Q23.

Quels sont les résultats obtenus une fois que la session PPP est établie et que les adresses de couche réseau ont été délivrées ?

Consulter les journaux système, la liste des processus, l'état des interfaces réseau et de la table de routage.

Attention ! Les résultats ne sont pertinents que si le dialogue avec le routeur vert est effectif.

  • Consultation des journaux système.

    Voir la Section 7, « Trace d'une transaction complète PPPoE » pour le détail des phases de l'établissement de la session PPP.

  • Liste des processus.

    pppoe-server -I enp0s1.441 -C BRAS -L 10.4.41.1 -R 10.4.41.2 -N 1
            \_ pppd pty /usr/sbin/pppoe -n -I enp0s1.441 -e 1:b0:ad:ca:fe:00:65 -S '' \
               file /etc/ppp/pppoe-server-options 10.4.41.1:10.4.41.2 nodetach noaccomp \
               nopcomp default-asyncmap mru 1492 mtu 1492
                    \_ sh -c /usr/sbin/pppoe -n -I enp0s1.441 -e 1:b0:ad:ca:fe:00:65 -S ''
                            \_ /usr/sbin/pppoe -n -I enp0s1.441 -e 1:b0:ad:ca:fe:00:65 -S
  • État des interfaces.

    $ ip addr ls dev enp0s1.441
    6: enp0s1.441@enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether b0:ad:ca:fe:00:64 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::b2ad:caff:fefe:64/64 scope link
           valid_lft forever preferred_lft forever
    
     ip addr ls dev ppp0
    26: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN group default qlen 3
        link/ppp
        inet 10.4.41.1 peer 10.4.41.2/32 scope global ppp0
           valid_lft forever preferred_lft forever
        inet6 fe80::6c07:edbf:a0b4:f114/10 scope link
           valid_lft forever preferred_lft forever
  • Table de routage.

    ip route ls dev ppp0
    10.4.41.2 proto kernel scope link src 10.4.41.1

Q24.

Quelles sont les modifications à apporter au fichier de configuration système des interfaces réseau pour que l'ouverture de session PPP soit disponible après chaque réinitialisation ?

Consulter les pages de manuel du fichier /etc/network/interfaces : man interfaces.

Voici une copie du fichier dans le contexte de la maquette.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s1
iface enp0s1 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

# ---------- VLAN ROUGE ----------
auto enp0s1.360
iface enp0s1.360 inet static
        address 192.168.104.130/29
        gateway 192.168.104.129
        dns-nameserver 172.16.0.2

iface enp0s1.360 inet6 static
        address 2001:678:3fc:168::2/64
        gateway 2001:678:3fc:168::1

# ---------- VLAN VIOLET ----------
auto enp0s1.440
iface enp0s1.440 inet6 static
        address fe80:1b8::1/64

# ---------- VLAN ORANGE ----------
auto enp0s1.441
iface enp0s1.441 inet manual
        up ip link set dev $IFACE up
        up pppoe-server -I $IFACE -C BRAS -L 10.4.41.1 -R 10.4.41.2 -N 1
        down killall pppoe-server
        down ip link set dev $IFACE down

5.5. Ajout des routes statiques vers le réseau des conteneurs

Pour joindre le réseau des conteneurs situé au delà du routeur vert, il est nécessaire d'ajouter une route statique pour chaque protocole de la couche réseau IPv4 et IPv6. Le choix du routage statique est justifié par le fait que l'on adresse un site distant d'extrémité via un lien unique.

Q25.

Comment ajouter manuellement les routes IPv4 et IPv6 vers le réseau desservi par le routeur vert ?

Consulter les pages de manuel sur le routage avec la commande : man ip-route.

Sachant que le site distant est raccordé via une liaison point à point unique, on choisit de désigner la destination par l'interface de la liaison.

sudo ip route add 203.0.113.0/24 dev ppp0
sudo ip -6 route add fda0:7a62:28::/64 dev ppp0

Q26.

Quels sont les tests de connectivité qui permettent valider la communication à destination des conteneurs du réseau distant ?

Collecter les adresses IPv4 et IPv6 des conteneurs avant de lancer des requêtes ICMP.

Une fois que l'on est assuré que la question Q : Q53 a été traitée, on peut relever les adresses des conteneurs et lancer les tests ICMP.

  • Séquence de tests IPv4 :

    for addr in {10..12}
    do
            ping -q -c2 203.0.113.$addr
    done
  • Séquence de tests IPv6 :

    for addr in {10..12}
    do
            ping -q -c2 fda0:7a62:28::$(printf "%x" $addr)
    done

Q27.

Comment appliquer ces routes statiques dans la configuration système pour qu'elles soient activées à chaque établissement de session PPP ?

Il faut parcourir l'arborescence du répertoire /etc/ppp/ pour repérer les scripts exécutés lors de l'ouverture de session. Créer un script pour chaque protocole de couche réseau qui ajoute la route statique voulue.

  • Pour IPv4, le répertoire est /etc/ppp/ip-up.d/. Voici comment créer le script exécutable staticroute.

    cat << 'EOF' | sudo tee /etc/ppp/ip-up.d/staticroute
    #!/bin/sh
    
    if [ -z "${CONNECT_TIME}" ]; then
        ip route add 203.0.113.0/24 dev ${PPP_IFACE}
    fi
    EOF
    sudo chmod +x /etc/ppp/ip-up.d/staticroute
  • Pour IPv6, le répertoire est /etc/ppp/ipv6-up.d/. Voici comment créer le script exécutable staticroute.

    cat << 'EOF' | sudo tee /etc/ppp/ipv6-up.d/staticroute
    #!/bin/sh
    
    if [ -z "${CONNECT_TIME}" ]; then
        ip -6 route add fda0:7a62:28::/64 dev ${PPP_IFACE}
    fi
    EOF
    sudo chmod +x /etc/ppp/ipv6-up.d/staticroute