7. Ajouter un réseau de conteneurs à chaque routeur du triangle

Dans cette section, on créé un réseau de conteneur attaché à chaque routeur de la topologie triangle. L'objectif est de peupler les tables de routage en ajoutant un lien OSPF au delà des routeurs.

Une fois ces réseaux en place, il est possible de réaliser des tests de connectivité entre conteneurs et d'optimiser les métriques.

Cette partie reprend le contenu de la section Rôle serveur de conteneurs du support de travaux pratiques Routage inter-VLAN contexte cloud.

Q20.

Quelle est la suite de commande à exécuter pour mettre en place de gestionnaire de conteneurs LXD ?

consulter la section rôle serveur de conteneurs.

Voici un exemple pour le routeur R2-vert.

$ sudo apt install snapd
$ sudo snap install lxd
$ sudo adduser etu lxd
$ snap list
Name    Version   Rev    Tracking       Publisher   Notes
core20  20210928  1169   latest/stable  canonical✓  base
lxd     4.19      21780  latest/stable  canonical✓  -
snapd   2.52.1    13640  latest/stable  canonical✓  snapd

Après déconnexion - reconnexion, on peut passer à l'étape de définition du profil par défaut pour la création des conteneurs.

etu@R2-vert:~$ lxd init
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
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 (ceph, btrfs, dir, lvm) [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 GB of the new loop device (1GB minimum) [default=13GB]:
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-vlan294
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]:

etu@R2-vert:~$ lxc profile device set default eth0 nictype bridged

Voici une copie du profil après configuration.

etu@R2-vert:~$ lxc profile show default
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: sw-vlan294
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by: []

Q21.

Comment créer 3 conteneurs avec un adressage IPv4 et IPv6 conforme au plan défini ?

consulter la section rôle serveur de conteneurs.

On commence par la création des 3 conteneurs demandés.

etu@R2-vert:~$ for i in {0..2}
do
lxc launch images:debian/bullseye c$i
done
etu@R2-vert:~$ lxc ls
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
+------+---------+------+------+-----------+-----------+
| NAME |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------+------+-----------+-----------+
| c0   | RUNNING |      |      | CONTAINER | 0         |
+------+---------+------+------+-----------+-----------+
| c1   | RUNNING |      |      | CONTAINER | 0         |
+------+---------+------+------+-----------+-----------+
| c2   | RUNNING |      |      | CONTAINER | 0         |
+------+---------+------+------+-----------+-----------+

Les conteneurs sont bien lancés. On peut passer à l'adressage. On commence par IPv6 et le paquet radvd.

etu@R2-vert:~$ sudo apt install radvd
etu@R2-vert:~$ cat << EOF | sudo tee /etc/radvd.conf
interface sw-vlan294
{
        AdvSendAdvert on;

        prefix 2001:678:3fc:126::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };

        RDNSS 2620:fe::fe
        {
        };
};
EOF
etu@R2-vert:~$ sudo systemctl restart radvd
etu@R2-vert:~$ sudo systemctl status radvd

Pour terminer avec l'adressage IPv6, on désigne le resolver DNS.

$ for i in {0..2}
do
echo ">>>>>>>>>>>>>>>>> c$i"
lxc exec c$i -- sh -c "echo 'nameserver 2620:fe::fe' > /etc/resolv.conf"
done

Suivant le préfixe réseau attribué, on obtient le résultat analogue à la copie d'écran ci-dessous.

$ lxc ls
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
+------+---------+------+--------------------------------------------+-----------+-----------+
| NAME |  STATE  | IPV4 |                    IPV6                    |   TYPE    | SNAPSHOTS |
+------+---------+------+--------------------------------------------+-----------+-----------+
| c0   | RUNNING |      | 2001:678:3fc:126:216:3eff:fe41:6129 (eth0) | CONTAINER | 0         |
+------+---------+------+--------------------------------------------+-----------+-----------+
| c1   | RUNNING |      | 2001:678:3fc:126:216:3eff:fe10:c004 (eth0) | CONTAINER | 0         |
+------+---------+------+--------------------------------------------+-----------+-----------+
| c2   | RUNNING |      | 2001:678:3fc:126:216:3eff:fe82:ad5b (eth0) | CONTAINER | 0         |
+------+---------+------+--------------------------------------------+-----------+-----------+

Pour l'adressage IPv4, on passe en “mode manuel“ en définissant un nouveau contenu pour le fichier /etc/network/interfaces de chaque conteneur.

$ for i in {0..2}
do
echo ">>>>>>>>>>>>>>>>> c$i"
content=$(cat << EOF
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 10.2.94.$((i + 10))/24
        gateway 10.2.94.1
EOF
)
lxc exec c$i -- sh -c " echo \"${content}\" | tee /etc/network/interfaces"
done

Le résultat de cette nouvelle configuration n'est visible qu'après un redémarrage des conteneurs.

$ for i in {0..2}
do
echo ">>>>>>>>>>>>>>>>> c$i"
lxc restart c$i
done
$ lxc ls
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
+------+---------+-------------------+--------------------------------------------+-----------+-----------+
| NAME |  STATE  |       IPV4        |                    IPV6                    |   TYPE    | SNAPSHOTS |
+------+---------+-------------------+--------------------------------------------+-----------+-----------+
| c0   | RUNNING | 10.2.94.10 (eth0) | 2001:678:3fc:126:216:3eff:fe41:6129 (eth0) | CONTAINER | 0         |
+------+---------+-------------------+--------------------------------------------+-----------+-----------+
| c1   | RUNNING | 10.2.94.11 (eth0) | 2001:678:3fc:126:216:3eff:fe10:c004 (eth0) | CONTAINER | 0         |
+------+---------+-------------------+--------------------------------------------+-----------+-----------+
| c2   | RUNNING | 10.2.94.12 (eth0) | 2001:678:3fc:126:216:3eff:fe82:ad5b (eth0) | CONTAINER | 0         |
+------+---------+-------------------+--------------------------------------------+-----------+-----------+

Q22.

Comment publier les réseaux de conteneurs dans l'aire OSPF ?

Ajouter chaque interface SVI dans l'aire OSPF et s'assurer qu'aucune annonce de protocole de routage n'est émise en direction des conteneurs.

La liste des commandes utiles en mode console et en mode configuration dans vtysh est la suivante.

ip ospf area 0
ipv6 ospf6 area 0
ip ospf passive
ipv6 ospf6 passive

Voici un exemple de configuration pour le routeur R2-vert.

R2-vert# conf t
R2-vert(config)# int sw-vlan294
R2-vert(config-if)# ip ospf area 0
R2-vert(config-if)# ip ospf passive
R2-vert(config-if)# ipv6 ospf6 area 0
R2-vert(config-if)# ipv6 ospf6 passive
R2-vert(config-if)# ^Z
R2-vert#

On vérifie que l'interface est bien active pour chacun des deux protocoles de routage dynamique.

R2-vert# sh ip ospf interface sw-vlan294
sw-vlan294 is up
  ifindex 4, MTU 1500 bytes, BW 0 Mbit <UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.2.94.1/24, Broadcast 10.2.94.255, Area 0.0.0.0
  MTU mismatch detection: enabled
  Router ID 7.0.4.2, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 7.0.4.2 Interface Address 10.2.94.1/24
  No backup designated router on this network
  Multicast group memberships: <None>
  Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5
    No Hellos (Passive interface)
  Neighbor Count is 0, Adjacent neighbor count is 0
R2-vert# sh ipv6 ospf6 interface sw-vlan294
sw-vlan294 is up, type BROADCAST
  Interface ID: 4
  Internet Address:
    inet : 10.2.94.1/24
    inet6: fe80::106d:34ff:fe1e:7d4d/64
    inet6: 2001:678:3fc:126::1/64
  Instance ID 0, Interface MTU 1500 (autodetect: 1500)
  MTU mismatch detection: enabled
  Area ID 0.0.0.0, Cost 1
  State DR, Transmit Delay 1 sec, Priority 1
  Timer intervals configured:
   Hello 10, Dead 40, Retransmit 5
  DR: 7.0.6.2 BDR: 0.0.0.0
  Number of I/F scoped LSAs is 1
    0 Pending LSAs for LSUpdate in Time 00:00:00 [thread off]
    0 Pending LSAs for LSAck in Time 00:00:00 [thread off]

Q23.

Comment valider l'accès à l'Internet depuis les conteneurs ?

On reprend la liste des tests ICMP pour valider l'acheminement du trafic au niveau de la couche réseau et on lance une mise à jour du catalogue des paquets pour valider la résolution des noms.

À partir du routeur R2, on utilise les séquences suivantes :

  • Tests ICMP au niveau réseau :

    $ for i in {0..2}
    do
    echo ">>>>>>>>>>>>>>>>> c$i"
    lxc exec c$i -- ping -c2 9.9.9.9
    done
    $ for i in {0..2}
    do
    echo ">>>>>>>>>>>>>>>>> c$i"
    lxc exec c$i -- ping -c2 2620:fe::fe
    done
  • Tests au niveau application avec résolution des noms :

    $ for i in {0..2}
    do
    echo ">>>>>>>>>>>>>>>>> c$i"
    lxc exec c$i -- apt update
    done

Q24.

Comment vérifier que tous les réseaux de conteneurs sont bien visiblede la topologie OSPF ?

Afficher les tables de routage IPv4 et IPv6 de l'un des trois routeurs et vérifier la présence des trois réseaux de conteneurs.

Voici le résultat obtenu depuis la console du routeur R3-bleu.

R3-bleu# sh ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

O>* 0.0.0.0/0 [110/10] via 10.2.91.1, enp0s2.291, weight 1, 08:47:38
O>* 10.2.90.0/29 [110/2] via 10.2.91.1, enp0s2.291, weight 1, 09:18:07
  *                      via 10.2.93.2, enp0s2.293, weight 1, 09:18:07
O   10.2.91.0/29 [110/1] is directly connected, enp0s2.291, weight 1, 09:19:07
C>* 10.2.91.0/29 is directly connected, enp0s2.291, 09:19:07
O>* 10.2.92.0/24 [110/2] via 10.2.91.1, enp0s2.291, weight 1, 00:00:38
O   10.2.93.0/29 [110/1] is directly connected, enp0s2.293, weight 1, 09:19:07
C>* 10.2.93.0/29 is directly connected, enp0s2.293, 09:19:07
O>* 10.2.94.0/24 [110/2] via 10.2.93.2, enp0s2.293, weight 1, 09:18:17
O   10.2.95.0/24 [110/1] is directly connected, sw-vlan295, weight 1, 09:19:07
C>* 10.2.95.0/24 is directly connected, sw-vlan295, 09:19:07
R3-bleu# sh ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

O>* ::/0 [110/10] via fe80::baad:caff:fefe:64, enp0s2.291, weight 1, 08:56:32
O>* 2001:678:3fc:124::/64 [110/2] via fe80::baad:caff:fefe:64, enp0s2.291, weight 1, 00:09:40
O>* 2001:678:3fc:126::/64 [110/2] via fe80::baad:caff:fefe:65, enp0s2.293, weight 1, 09:27:27
O   2001:678:3fc:127::/64 [110/1] is directly connected, sw-vlan295, weight 1, 09:28:12
C>* 2001:678:3fc:127::/64 is directly connected, sw-vlan295, 09:28:12
C * fe80::/64 is directly connected, asw-host, 09:28:11
C * fe80::/64 is directly connected, enp0s2.293, 09:28:12
C * fe80::/64 is directly connected, enp0s2, 09:28:12
C * fe80::/64 is directly connected, enp0s2.291, 09:28:13
C>* fe80::/64 is directly connected, sw-vlan295, 09:28:13