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

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

Q8.

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
etu@vm0:~$ sudo sed -i 's/vm0/bleu/g' /etc/hostname
sudo: impossible de résoudre l'hôte vm0: Échec temporaire dans la résolution du nom
etu@vm0:~$ sudo reboot

Q9.

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 tableau de la Section 4, « 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 enp0s6
iface enp0s6 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

# ---------- VLAN ROUGE ----------
auto enp0s6.300
iface enp0s6.300 inet static
        address 10.141.0.162/27
        gateway 10.141.0.161
        dns-nameserver 9.9.9.9

iface enp0s6.300 inet6 static
        address 2001:678:3fc:12c::2/64
        gateway 2001:678:3fc:12c::1

# ---------- VLAN VIOLET ----------
auto enp0s6.430
iface enp0s6.430 inet6 static
        address fe80:1ae::1/64

# ---------- VLAN ORANGE ----------
auto enp0s6.431
iface enp0s6.431 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.

Q10.

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: enp0s6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
3: enp0s6.300@enp0s6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
4: enp0s6.430@enp0s6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
6: enp0s6.431@enp0s6: <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. Classiquemt, 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 10.141.0.161
PING 10.141.0.161 (10.141.0.161) 56(84) bytes of data.

--- 10.141.0.161 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.990/1.188/1.387/0.198 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 1002ms
rtt min/avg/max/mdev = 12.218/12.227/12.237/0.009 ms
$ ping -q -c2 2001:678:3fc:12c::1
PING 2001:678:3fc:12c::1(2001:678:3fc:12c::1) 56 data bytes

--- 2001:678:3fc:12c::1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 1.023/1.164/1.306/0.141 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 1002ms
rtt min/avg/max/mdev = 39.999/40.391/40.784/0.392 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 20 mx2.quad9.net.
quad9.net mail is handled by 100 keriomail.pch.net.
quad9.net mail is handled by 5 mx1.quad9.net.

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

Q11.

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

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 = 4194304
* 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

Q12.

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 echeminé d'un réseau à l'autre.

$ tshark -i enp0s6.300
Capturing on 'enp0s6.300'
    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

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

Q13.

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.

$ aptitude search iptables
p   arno-iptables-firewall          - single- and multi-homed firewall script wi
p   golang-github-coreos-go-iptable - Go bindings for iptables utility
i   iptables                        - administration tools for packet filtering
p   iptables-converter              - convert iptables-commands from a file to i
p   iptables-converter-doc          - convert iptables-commands from a file to i
p   iptables-netflow-dkms           - iptables target which generates netflows
p   iptables-persistent             - boot-time loader for netfilter rules, ipta
p   libiptables-chainmgr-perl       - Perl extension for manipulating iptables p
p   libiptables-parse-perl          - Perl extension for parsing iptables firewa
p   python-iptables-doc             - documentation for the python-iptables libr
p   python3-iptables                - Python bindings for iptables (Python 3 int

On voit que le paquet iptables est déjà installé et qu'il ne manque que la gestion de la sauvegarde des règles de filtrage et traduction d'adresses.

$ sudo apt install iptables-persistent

Q14.

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 enp0s6.300 -j MASQUERADE
$ sudo sh -c "iptables-save >/etc/iptables/rules.v4"
$ sudo ip6tables -t nat -A POSTROUTING -o enp0s6.300 -j MASQUERADE
$ sudo sh -c "ip6tables-save >/etc/iptables/rules.v6"

Q15.

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  --  *      enp0s6.300  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

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

Q16.

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.

$ aptitude search pppoe
i   pppoe     - Pilote PPP sur Ethernet
p   pppoeconf - configures PPPoE/ADSL connections

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

Q17.

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.

Q18.

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.

pppd[3262]: sent [LCP ConfReq id=0x1 <mru 1492> <magic 0x46010ac>]
kernel: [  895.700115] NET: Registered protocol family 24
pppd[3262]: rcvd [LCP ConfReq id=0x1 <magic 0xcab9fecc>] 1
pppd[3262]: sent [LCP ConfAck id=0x1 <magic 0xcab9fecc>]
pppd[3262]: sent [LCP ConfReq id=0x1 <mru 1492> <magic 0x46010ac>]
pppd[3262]: rcvd [LCP ConfAck id=0x1 <mru 1492> <magic 0x46010ac>]
pppd[3262]: sent [LCP EchoReq id=0x0 magic=0x46010ac]
pppd[3262]: peer from calling number 52:54:00:12:34:05 authorized
pppd[3262]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0>] 2
pppd[3262]: rcvd [LCP EchoReq id=0x0 magic=0xcab9fecc]
pppd[3262]: sent [LCP EchoRep id=0x0 magic=0x46010ac]
pppd[3262]: rcvd [IPCP ConfReq id=0x1 <addr 10.0.0.1>]
pppd[3262]: sent [IPCP ConfAck id=0x1 <addr 10.0.0.1>]
pppd[3262]: rcvd [LCP EchoRep id=0x0 magic=0xcab9fecc]
pppd[3262]: rcvd [IPCP ConfNak id=0x1 <addr 10.67.15.1>]
pppd[3262]: sent [IPCP ConfReq id=0x2 <addr 10.67.15.1>]
pppd[3262]: rcvd [IPCP ConfAck id=0x2 <addr 10.67.15.1>]
pppd[3262]: local  IP address 10.67.15.1
pppd[3262]: remote IP address 10.0.0.1

1

La sous-couche Link Control Protocol (LCP) assure la configuration automatique des interfaces à chaque extrémité. Les paramètres négociés entre les deux hôtes en communication sont multiples : l'adaptation de la taille de datagramme, les caractères d'échappement, les numéros magiques et la sélection des options d'authentification.

2

La sous-couche Network Control Protocol (NCP) assure l'encapsulation de multiples protocoles de la couche réseau. Dans l'exemple donné, c'est le protocole IPv4 qui est utilisé ; d'où l'acronyme IPCP.

Q19.

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.

Q20.

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 exmple du contenu de ce fichier.

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

Q21.

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.

Q22.

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 du fichier /etc/ppp/pppoe-server-options qui contient la liste des paramètres demandés.

debug
login
require-chap
nodefaultroute
ms-dns 172.16.0.2
+ipv6

Q23.

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 --disabled-login --no-create-home green

Q24.

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 enp0s6.431 -C BRAS -L 10.4.31.1 -R 10.4.31.2 -N 1

Q25.

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 procsessus, 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.

    pppoe-server[2963]: Session 1 created for client b0:ad:ca:fe:00:65 (10.4.31.2) on enp0s6.431 using Service-Name ''
    pppd[2963]: pppd 2.4.7 started by etu, uid 0
    pppd[2963]: using channel 20
    pppd[2963]: Using interface ppp0
    pppd[2963]: Connect: ppp0 <--> /dev/pts/0
    pppd[2963]: sent [LCP ConfReq id=0x1 <mru 1492> <auth chap MD5> <magic 0xc4220b37>]
    pppd[2963]: rcvd [LCP ConfAck id=0x1 <mru 1492> <auth chap MD5> <magic 0xc4220b37>]
    pppd[2963]: rcvd [LCP ConfReq id=0x1 <mru 1492> <magic 0xcca979aa>]
    pppd[2963]: sent [LCP ConfAck id=0x1 <mru 1492> <magic 0xcca979aa>]
    pppd[2963]: sent [LCP EchoReq id=0x0 magic=0xc4220b37]
    pppd[2963]: sent [CHAP Challenge id=0x67 <439a0c7ee25d6eead987864a45fd1331>, name = "bleu"]
    pppd[2963]: rcvd [LCP EchoReq id=0x0 magic=0xcca979aa]
    pppd[2963]: sent [LCP EchoRep id=0x0 magic=0xc4220b37]
    pppd[2963]: rcvd [LCP EchoRep id=0x0 magic=0xcca979aa]
    pppd[2963]: rcvd [CHAP Response id=0x67 <dbe0795771fa077ec9010fb8efe13cee>, name = "green"]
    pppd[2963]: sent [CHAP Success id=0x67 "Access granted"]
    pppd[2963]: Initializing PAM (2) for user green
    pppd[2963]: ---> PAM INIT Result = 0
    pppd[2963]: Attempting PAM account checks
    pppd[2963]: PAM Account OK for green
    pppd[2963]: PAM Session opened for user green
    pppd[2963]: user green logged in on tty  intf ppp0
    pppd[2963]: local  LL address fe80::6c07:edbf:a0b4:f114
    pppd[2963]: remote LL address fe80::89f5:1241:ad65:3b22
    pppd[2963]: local  IP address 10.4.31.1
    pppd[2963]: remote IP address 10.4.31.2
  • Liste des processus.

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

    $ $ ip addr ls dev enp0s6.431
    6: enp0s6.431@enp0s6: <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.31.1 peer 10.4.31.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.31.2 proto kernel scope link src 10.4.31.1

Q26.

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 enp0s6
iface enp0s6 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

# ---------- VLAN ROUGE ----------
auto enp0s6.300
iface enp0s6.300 inet static
        address 10.141.0.162/27
        gateway 10.141.0.161
        dns-nameserver 9.9.9.9

iface enp0s6.300 inet6 static
        address 2001:678:3fc:12c::2/64
        gateway 2001:678:3fc:12c::1

# ---------- VLAN VIOLET ----------
auto enp0s6.430
iface enp0s6.430 inet6 static
        address fe80:1ae::1/64

# ---------- VLAN ORANGE ----------
auto enp0s6.431
iface enp0s6.431 inet manual
        up ip link set dev $IFACE up
        up pppoe-server -I $IFACE -C BRAS -L 10.4.31.1 -R 10.4.31.2 -N 1
        down killall pppoe-server
        down ip link set dev $IFACE down

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

Attention ! Les tests de connectivité vers le réseau des conteneurs supposent que ces conteneurs soient actifs et correctement configurés. Voici un exemple d'information sur l'état des conteneurs sur le site distant.

etu@vert:~$ lxc ls
+------------+---------+---------------------+------------------------------------------+-----------+-----------+
|    NAME    |  STATE  |        IPV4         |                   IPV6                   |   TYPE    | SNAPSHOTS |
+------------+---------+---------------------+------------------------------------------+-----------+-----------+
| container0 | RUNNING | 203.0.113.10 (eth0) | fda0:7a62:28:0:216:3eff:feda:e1a (eth0)  | CONTAINER | 0         |
+------------+---------+---------------------+------------------------------------------+-----------+-----------+
| container1 | RUNNING | 203.0.113.11 (eth0) | fda0:7a62:28:0:216:3eff:fec4:d325 (eth0) | CONTAINER | 0         |
+------------+---------+---------------------+------------------------------------------+-----------+-----------+
| container2 | RUNNING | 203.0.113.12 (eth0) | fda0:7a62:28:0:216:3eff:fe66:86fb (eth0) | CONTAINER | 0         |
+------------+---------+---------------------+------------------------------------------+-----------+-----------+

On peut aussi s'assurer que les tables de routage du routeur vert désignent bien le routeur bleu comme passerelle vers tous les autres réseaux.

etu@bleu:~$ ssh fe80:1ae::2%enp0s6.430 "ip route ls default"
default dev ppp0 scope link
etu@bleu:~$ ssh fe80:1ae::2%enp0s6.430 "ip -6 route ls default"
default dev ppp0 metric 1024 pref medium

Q27.

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

Q28.

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.

Voici un exemple de test pour IPv4.

$ for num in {10..12}; do ping -q -c2 203.0.113.$num; done

Voici un exemple plus “compliqué“ du fait de l'adressage automatique pour IPv6.

$ for addr in fda0:7a62:28:0:216:3eff:feda:e1a \
fda0:7a62:28:0:216:3eff:fec4:d325 \
fda0:7a62:28:0:216:3eff:fe66:86fb; \
do ping -q -c2 $addr; done

Q29.

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 une copie du script exécutable staticroute.

    #!/bin/sh
    
    if [ -z "${CONNECT_TIME}" ]; then
            ip route add 203.0.113.0/24 dev ${PPP_IFACE}
    fi
  • Pour IPv6, le répertoire est /etc/ppp/ipv6-up.d/. Voici une copie du script exécutable staticroute.

    #!/bin/sh
    
    if [ -z "${CONNECT_TIME}" ]; then
            ip -6 route add fda0:7a62:28::/64 dev ${PPP_IFACE}
    fi