6. Routeur Spoke (vert)

6.1. Configuration des interfaces du routeur

Une fois la machine virtuelle serveur de conteneurs lancée, les premières étapes consistent à lui attribuer un nouveau nom et à configurer les interfaces réseau pour joindre le routeur voisin et l'Internet.

Q28.

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/vert/g' /etc/hosts /etc/hostname
etu@vm0:~$ sudo reboot

Q29.

Comment appliquer la configuration réseau IPv4 et IPv6 de l'interface du serveur ?

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.

La configuration par défaut doit être éditée et remplacée par une configuration manuelle pour l'interface enp0s1 et pour le VLAN orange. Pour la supervision dans le VLAN violet, l'adresse IPv6 de lien locale est fournie dans le tableau du plan d'adressage.

En attendant que la configuration du routeur bleu soit prête, on ajoute temporairement une interface enp0s1.60 avec une configuration automatique. Ainsi, il est possible d'installer et de configurer des services en parallèle. Cette interface doit être désactivée dès que tous les outils sont en place.

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 VIOLET ----------
auto enp0s1.440
iface enp0s1.440 inet6 static
        address fe80:1b8::2/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

# ---------- TEMPORAIRE -----------
auto enp0s1.60
iface enp0s1.60 inet dhcp

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.

Q30.

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

6.3. Activation du protocole PPP dans le VLAN orange

Le routeur vert utilise un démon pppd sur le VLAN Data pour établir une session PPP avec le routeur bleu. À la différence de ce dernier, il n'est pas à l'initiative du dialogue PPPoE mais il doit être capable de gérer l'encapsulation des trames PPP sur un réseau local Ethernet.

Q31.

Quel paquet fournit le démon de gestion des sessions du protocole PPP sur le routeur vert ?

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

apt search ^ppp
Sorting... Done
Full Text Search... Done
ppp/testing 2.4.9-1+1.1+b1 amd64
  Point-to-Point Protocol (PPP) - daemon

ppp-dev/testing 2.4.9-1+1.1 all
  Point-to-Point Protocol (PPP) - development files

ppp-gatekeeper/testing 0.1.0-201406111015-1.1 all
  PPP manager for handling balanced, redundant and failover links

pppconfig/testing 2.3.26 all
  Text menu based utility for configuring ppp

pppoe/testing 3.15-1+b1 amd64
  PPP over Ethernet driver

wmppp.app/testing 1.3.2-2 amd64
  PPP dial control and network load monitor w/ NeXTStep look

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

sudo apt -y install ppp

Q32.

Comment utiliser l'encapsulation des trames PPP dans Ethernet à partir du démon pppd fourni avec le paquet ppp ?

Rechercher dans le répertoire de documentation du paquet ppp.

Dans le répertoire /usr/share/doc/ppp/, on trouve le fichier README.pppoe qui indique que l'appel au module rp-pppoe.so permet d'encapsuler des trames PPP sur un réseau local Ethernet.

Toujours à partir du même répertoire, on trouve dans la liste des fichiers d'exemples de configuration un modèle adapté à notre contexte : peers-pppoe.

Q33.

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. Le nom du client ainsi que son mot de passe secret doivent être identiques à chaque extrémité de la session PPP.

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

Q34.

Quelles sont les options de configuration du démon pppd à placer dans le fichier /etc/ppp/peers/pppoe-provider pour assurer l'établissement de la session PPP entre les routeurs ?

Utiliser le fichier exemple PPPoE fourni avec la documentation du paquet ppp.

Voici comment créer un fichier /etc/ppp/peers/pppoe-provider avec les options correspondant au contexte de la maquette du routeur vert.

cat << 'EOF' | sudo tee /etc/ppp/peers/pppoe-provider
# There should be a matching entry with the password in /etc/ppp/chap-secrets.
user "green"

# Load the PPPoE plugin.
plugin rp-pppoe.so

# Ethernet interface to which the modem is connected.
enp0s1.441

# Assumes that your IP address is allocated dynamically by the ISP.
noipdefault
# Try to get the name server addresses from the ISP.
usepeerdns
# Use this connection as the default route.
defaultroute

# Makes pppd "dial again" when the connection is lost.
persist

# Do not ask the remote to authenticate.
noauth

debug
+ipv6
EOF

Q35.

Comment lancer le démon pppd pour qu'il prenne en compte les paramètres définis dans le fichier complété à la question précédente ?

Consulter les pages de manuels du démon pppd.

C'est l'option file qui permet de désigner le fichier de configuration à utiliser. Voici une copie d'écran du lancement de pppd.

sudo pppd file /etc/ppp/peers/pppoe-provider

Q36.

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 tous les détails. Voir la Section 7, « Trace d'une transaction complète PPPoE ».

Q37.

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.

Q38.

Quelles sont les modifications à apporter au fichier système de configuration des interfaces réseau pour ouvrir la session PPP à chaque réinitialisation système ?

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

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

Attention ! L'interface temporaire doit être impérativement désactivée au moment de l'activation de la session PPP.

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

# 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 VIOLET ----------
auto enp0s1.440
iface enp0s1.440 inet6 static
        address fe80:1b8::2/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

# ---------- PPPoE ---------------
auto pppoe-provider
iface pppoe-provider inet ppp
        pre-up ifup enp0s1.441
        provider pppoe-provider

# ---------- TEMPORAIRE -----------
#auto enp0s1.60
#iface enp0s1.60 inet dhcp

6.4. Activation du commutateur virtuel asw-host

Dans le scénario étudié, les services sont hébergés dans un réseau de conteneurs propre au routeur vert. La mise en œuvre de cette configuration passe par l'installation d'un commutateur virtuel appelé asw-host. On utilise Open vSwitch pour configurer ce commutateur.

Q39.

Quel est le paquet à installer pour pouvoir ajouter un commutateur virtuel au routeur vert ?

Rechercher le mot clé openvswitch dans la liste des paquets.

Voici un exemple de recherche.

apt search ^openvswitch
Sorting... Done
Full Text Search... Done
openvswitch-common/testing 2.17.2-5+b1 amd64
  Open vSwitch common components

openvswitch-doc/testing 2.17.2-5 all
  Open vSwitch documentation

openvswitch-ipsec/testing 2.17.2-5+b1 amd64
  Open vSwitch IPsec tunneling support

openvswitch-pki/testing 2.17.2-5 all
  Open vSwitch public key infrastructure dependency package

openvswitch-source/testing 2.17.2-5 all
  Open vSwitch source code

openvswitch-switch/testing 2.17.2-5+b1 amd64
  Open vSwitch switch implementations

openvswitch-switch-dpdk/testing 2.17.2-5+b1 amd64
  DPDK enabled Open vSwitch switch implementation

openvswitch-test/testing 2.17.2-5 all
  Open vSwitch test package

openvswitch-testcontroller/testing 2.17.2-5+b1 amd64
  Simple controller for testing OpenFlow setups

openvswitch-vtep/testing 2.17.2-5+b1 amd64
  Open vSwitch VTEP utilities

C'est le paquet openvswitch-switch qui nous intéresse.

sudo apt -y install openvswitch-switch

Q40.

Quel est le fichier de documentation qui fournit les directives de configuration d'un commutateur intégré au fichier système /etc/network/interfaces ?

Rechercher dans la liste des fichiers des paquets installés à la question précédente.

Voici un exemple de recherche.

dpkg -L openvswitch-switch | grep README
/usr/share/doc/openvswitch-switch/README.Debian.gz

Q41.

Quelles sont les modiifications à apporter au fichier /etc/network/interfaces pour configurer le commutateur asw-host ?

Voici une copie du fichier de configuration réseau système 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 VIOLET ----------
auto enp0s1.440
iface enp0s1.440 inet6 static
        address fe80:1b8::2/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

# ---------- PPPoE ----------------
auto pppoe-provider
iface pppoe-provider inet ppp
        pre-up ifup enp0s1.441
        provider pppoe-provider

# ---------- VLAN VERT ------------
auto asw-host
iface asw-host inet manual
        ovs_type OVSBridge
        ovs_ports sw-vlan40
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

allow-asw-host sw-vlan40
iface sw-vlan40 inet static
        ovs_type OVSBridge
        ovs_bridge asw-host
        ovs_options asw-host 40
        address 203.0.113.1/24

iface sw-vlan40 inet6 static
        ovs_type OVSBridge
        ovs_bridge asw-host
        ovs_options asw-host 40
        address fda0:7a62:28::1/64

6.5. Activation de la configuration IPv6 automatique pour le réseau de conteneurs

Pour que les hôtes du réseau de conteneurs obtiennent automatiquement une configuration IPv6, il faut que le routeur assure les annonces auprès de ces voisins. Un moyen simple pour assurer la configuration SLAAC des hôtes voisins du routeur consiste à utiliser le paquet radvd.

On débute par l'installation de ce paquet.

sudo apt install radvd

On voit que le lancement du service a échoué.

systemctl status radvd
○ radvd.service - Router advertisement daemon for IPv6
     Loaded: loaded (/lib/systemd/system/radvd.service; enabled; preset: enabled)
     Active: inactive (dead)
  Condition: start condition failed at Thu 2022-10-20 10:38:12 CEST; 38s ago
             └─ ConditionPathExists=/etc/radvd.conf was not met
       Docs: man:radvd(8)

Q42.

Comment configurer le service radvd pour publier les annonces côté conteneurs ?

Rechercher les options utiles dans les pages de manuel du service : man radvd.conf.

Voici comment créer le fichier de configuration /etc/radvd.conf de la maquette.

cat << 'EOF' | sudo tee /etc/radvd.conf
interface sw-vlan40
{
        AdvSendAdvert on;

        prefix fda0:7a62:28::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };

        RDNSS 2620:fe::fe
        {
        };
};
EOF

Attention ! Une fois le fichier créé, il ne faut pas oublier de redémarrer le service et de contrôler l'état de son fonctionnement.

sudo systemctl restart radvd
systemctl status radvd
• radvd.service - Router advertisement daemon for IPv6
     Loaded: loaded (/lib/systemd/system/radvd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2022-10-20 10:42:10 CEST; 13s ago
       Docs: man:radvd(8)
    Process: 1693 ExecStartPre=/usr/sbin/radvd --logmethod stderr_clean --configtest (code=exited, status=0/SUCCESS)
    Process: 1694 ExecStart=/usr/sbin/radvd --logmethod stderr_clean (code=exited, status=0/SUCCESS)
   Main PID: 1695 (radvd)
      Tasks: 2 (limit: 1114)
     Memory: 476.0K
        CPU: 30ms
     CGroup: /system.slice/radvd.service
             ├─1695 /usr/sbin/radvd --logmethod stderr_clean
             └─1696 /usr/sbin/radvd --logmethod stderr_clean

6.6. Validation des routes par défaut vers le réseau opérateur

Pour joindre l'Internet situé au delà du routeur bleu, il est nécessaire de vérifier la route par défaut pour chaque protocole de la couche réseau : IPv4 et IPv6.

Attention ! Les tests de connectivité vers l'Internet supposent que le routeur bleu soit fonctionnel.

Q43.

Comment tester la présence des routes par défaut IPv4 et IPv6 vers le routeur bleu ?

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 doit voir apparaître le nom de l'interface de la session PPP.

  • Table de routage IPv4 : la route par défaut est bien présente.

    ip route ls
    default dev ppp0 scope link
    10.4.41.1 dev ppp0 proto kernel scope link src 10.4.41.2
    203.0.113.0/24 dev sw-vlan40 proto kernel scope link src 203.0.113.1
  • Table de routage IPv6 : la route par défaut est absente.

    ip -6 route ls
    ::1 dev lo proto kernel metric 256 pref medium
    fda0:7a62:28::/64 dev sw-vlan40 proto kernel metric 256 pref medium
    fe80::5d72:1dd3:781a:ff02 dev ppp0 proto kernel metric 256 pref medium
    fe80::dd00:24bc:4b7d:f4df dev ppp0 proto kernel metric 256 pref medium
    fe80::/64 dev enp0s1 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 sw-vlan40 proto kernel metric 256 pref medium
    fe80::/64 dev asw-host proto kernel metric 256 pref medium
    fe80:1b8::/64 dev enp0s1.440 proto kernel metric 256 pref medium

Q44.

Comment ajouter des 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 un script exécutable appelé staticroute.

    cat << 'EOF' | sudo tee /etc/ppp/ip-up.d/staticroute
    #!/bin/sh
    
    if [ -z "${CONNECT_TIME}" ]; then
            ip route add default 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 un script exécutable aussi appeléstaticroute.

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

Q45.

Quels sont les tests de connectivité qui permettent valider la communication vers l'Internet en passant par le routeur bleu ?

Au niveau de la couche réseau, on lance les requêtes ICMP classques.

Les tests suivants doivent nécessairement se faire depuis le routeur Spoke après avoir réinitialisé la session PPP de façon à bien utiliser les routes par défaut imposées.

sudo ifdown pppoe-provider
sudo ifup pppoe-provider

Voici un exemple de test pour IPv4.

ip route get 9.9.9.9
9.9.9.9 dev ppp0 src 10.4.41.2 uid 1000
    cache
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 = 112.766/127.443/142.120/14.677 ms

On change l'adresse de destination IPv6.

ip -6 route get 2620:fe::fe
2620:fe::fe from :: dev ppp0 src fda0:7a62:28::1 metric 1024 pref medium
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 = 44.403/44.627/44.852/0.224 ms

6.7. Installation du gestionnaire de conteneurs LXD

Sur le routeur vert, la gestion des conteneurs est confiée à LXD. Pour des raisons de rapidité de mise en œuvre, on choisit de passer par le gestionnaire de paquets snapd pour l'installation des outils.

Q46.

Comment installer le gestionnaire de paquets snap sur une distribution Debian GNU/Linux ?

Effectuer une recherche dans les paquets fournis via APT.

Il existe tout simplement un paquet appelé snapd.

sudo apt -y install snapd

Q47.

Comment installer le gestionnaire de conteneurs LXD ?

Rechercher dans la liste des snaps.

Le snap s'appelle tout simplement lxd.

sudo snap install lxd
2022-10-20T11:14:38+02:00 INFO Waiting for automatic snapd restart...
lxd 5.6-794016a from Canonical✓ installed

On peut lister les snaps installés.

snap list
Name    Version      Rev    Tracking       Publisher   Notes
core20  20220826     1623   latest/stable  canonical✓  base
lxd     5.6-794016a  23680  latest/stable  canonical✓  -
snapd   2.57.4       17336  latest/stable  canonical✓  snapd

Q48.

Comment faire pour que l'utilisateur normal etu ait la capacité à gérer les conteneurs ?

Rechercher le nom du groupe système correspondant à l'utilisation des outils LXD.

Il faut que l'utilisteur normal appartienne au groupe système lxd pour qu'il est tous les droits sur la gestion des conteneurs.

sudo adduser etu lxd

Attention ! Il faut se déconnecter/reconnecter pour bénéficier de la nouvelle attribution de groupe. On peut utiliser la commande groups pour vérifier le résultats.

groups
etu adm cdrom floppy sudo audio dip video plugdev staff netdev lxd

6.8. Configuration du gestionnaire de conteneurs LXD

Q49.

Quelle est l'instruction de configuration initiale du gestionnaire LXD ?

Utiliser l'aide de la commande lxd.

C'est l'instruction lxd init qui nous intéresse.

Voici une copie d'écran de son exécution.

lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (lvm, btrfs, ceph, cephobject, dir) [default=btrfs]:
Create a new BTRFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GiB of the new loop device (1GiB minimum) [default=23GiB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: sw-vlan40
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

Q50.

Comment changer le type de raccordement défini par le paramètre nictype de macvlan à bridged ?

Rechercher dans les options d'édition des paramètres du profil avec la commande lxc.

Il faut suivre les champs du fichier yaml de description du profil.

lxc profile device set default eth0 nictype bridged
lxc profile device get default eth0 nictype
bridged

Q51.

Quelle est l'instruction qui permet d'afficher le profil par défaut des conteneur ?

Rechercher dans les options de la commande lxc.

Voici un exemple d'exécution.

lxc profile show default
config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: sw-vlan40
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by: []

Q52.

Quelle est l'instruction de lancement d'un conteneur ?

Rechercher dans les options de la commande lxc.

Tester son exécution avec un conteneur de type debian/bullseye.

Voici un exemple de création de 3 conteneurs.

for i in {0..2}
do
        lxc launch images:debian/12 c$i
done
lxc ls
+------+---------+------+------------------------------------------+-----------+-----------+
| NAME |  STATE  | IPV4 |                   IPV6                   |   TYPE    | SNAPSHOTS |
+------+---------+------+------------------------------------------+-----------+-----------+
| c0   | RUNNING |      | fda0:7a62:28:0:216:3eff:fe0d:3814 (eth0) | CONTAINER | 0         |
+------+---------+------+------------------------------------------+-----------+-----------+
| c1   | RUNNING |      | fda0:7a62:28:0:216:3eff:fe8e:dfbb (eth0) | CONTAINER | 0         |
+------+---------+------+------------------------------------------+-----------+-----------+
| c2   | RUNNING |      | fda0:7a62:28:0:216:3eff:fe48:e06f (eth0) | CONTAINER | 0         |
+------+---------+------+------------------------------------------+-----------+-----------+

Q53.

Comment appliquer une configuration IPv4 statique à chaque conteneur ?

Identifier le fichier de configuration système et modifier ce fichier pour chaque conteneur

Comme les conteneurs utilisent systemd-networkd comme gestionnaire de la configuration réseau, le fichier à identifier est : /etc/systemd/network/eth0.network.

for i in {0..2}
do
        echo ">>>>>>>>>>>>>>>>> c$i"
config=$(cat << EOF
[Match]
Name=eth0

[Network]
DHCP=false
Address=203.0.113.$((i + 10))/24
Address=fda0:7a62:28::$(printf "%x" $((i + 10)))/64
Gateway=203.0.113.1
DNS=172.16.0.2
EOF
)
        lxc exec c$i -- bash -c "echo \"${config}\" | tee /etc/systemd/network/eth0.network"
        lxc exec c$i -- systemctl restart systemd-networkd
done

On relève le résultat avec la commande lxc ls.

lxc ls
+------+---------+---------------------+------------------------------------------+-----------+-----------+
| NAME |  STATE  |        IPV4         |                   IPV6                   |   TYPE    | SNAPSHOTS |
+------+---------+---------------------+------------------------------------------+-----------+-----------+
| c0   | RUNNING | 203.0.113.10 (eth0) | fda0:7a62:28::a (eth0)                   | CONTAINER | 0         |
|      |         |                     | fda0:7a62:28:0:216:3eff:fe0d:3814 (eth0) |           |           |
+------+---------+---------------------+------------------------------------------+-----------+-----------+
| c1   | RUNNING | 203.0.113.11 (eth0) | fda0:7a62:28::b (eth0)                   | CONTAINER | 0         |
|      |         |                     | fda0:7a62:28:0:216:3eff:fe8e:dfbb (eth0) |           |           |
+------+---------+---------------------+------------------------------------------+-----------+-----------+
| c2   | RUNNING | 203.0.113.12 (eth0) | fda0:7a62:28::c (eth0)                   | CONTAINER | 0         |
|      |         |                     | fda0:7a62:28:0:216:3eff:fe48:e06f (eth0) |           |           |
+------+---------+---------------------+------------------------------------------+-----------+-----------+

Q54.

Comment vérifier la connectivité réseau depuis les conteneurs ?

La question précédente montre que la configuration réseau des conteneurs est complète. On doit donc lancer des tests IPv4 et IPv6.

Voici deux exemples de tests ICMP.

for i in {0..2}
do
        echo ">>>>>>>>>>>>>>>>> c$i"
        lxc exec c$i -- ping -c2 2620:fe::fe
done
for i in {0..2}
do
        echo ">>>>>>>>>>>>>>>>> c$i"
        lxc exec c$i -- ping -c2 9.9.9.9
done

On peut ensuite passer à la gestion de paquets pour valider les transactions de la couche application.

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 clean
done