7. Ajouter un réseau d'hébergement à chaque routeur

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éseau d'hébergement de conteneurs du support de travaux pratiques Routage inter-VLAN et protocole PPPoE.

Q182.

Quels sont les paquets à installer pour mettre en place un commutateur d'accès et le gestionnaire de conteneurs Incus ?

Consulter la section Réseau d'hébergement de conteneurs du support Routage inter-VLAN et protocole PPPoE.

[Note] Note

Pour les routeurs R2 et R3, il faut rétablir l'accès temporaire à Internet pour installer les paquets demandés.

openvswitch-switch

Création d'un commutateur de raccordement des conteneurs et d'une interface virtuelle commutée

dnsmasq

Adressage automatique des conteneurs

incus

Gestion des conteneurs

sudo apt -y install openvswitch-switch dnsmasq incus

Q183.

Quelles sont les modifications à apporter au fichier de déclaration YAML /etc/netplan/enp0s1.yaml pour créer le commutateur asw-host ?

Voici un extrait du fichier /etc/netplan/enp0s1.yaml avec les instructions de création du commutateur asw-host.

    openvswitch: {}

  bridges:
    asw-host:
      openvswitch: {}

Q184.

Comment ajouter une nouvelle interface virtuelle commutée (Switched Virtual Interface) qui servira de passerelle par défaut pour tous les conteneurs hébergés ?

Rechercher dans la documentation Netplan des exemples de déclarations d'interfaces de type SVI appartenant à des VLANs.

Voici une copie complète du fichier /etc/netplan/enp0s1.yaml du routeur R2 auquel on ajouté la déclaration d'une interface vlan20 avec les adresses IPv4 et IPv6 conformes au contexte de la maquette utilisée pour la rédaction de ce document.

network:
    version: 2
    ethernets:
      enp0s1:
        dhcp4: false
        dhcp6: false
        accept-ra: false
        nameservers:
          addresses:
            - 172.16.0.2
            - 2001:678:3fc:3::2

    openvswitch: {}

    bridges:
      asw-host:
        openvswitch: {}

    vlans:
#      # Temporary Internet access
#      enp0s1.52:
#        id: 52
#        link: enp0s1
#        dhcp4: true
#        dhcp6: false
#        accept-ra: true
      # R2 -> R1
      enp0s1.440:
        id: 440
        link: enp0s1
        addresses:
          - 10.44.0.2/29
          - fe80::1b8:2/64
      # R2 -> R3
      enp0s1.442:
        id: 442
        link: enp0s1
        addresses:
          - 10.44.2.2/29
          - fe80::1ba:2/64
      vlan20:
        id: 20
        link: asw-host
        addresses:
          - 10.20.0.1/24
          - fd14:ca46:3864:14::1/64

Avec ce fichier de déclaration l'interface d'accès temporaire est commentée et ne servira plus dans la suite des manipulations. À partir de la question suivante, tout le trafic des routeurs R2 et R3 transite par le routeur R1.

Q185.

Comment publier le nouveau réseau d'hébergement via OSPF ?

Revoir la question Q : Q167 sur l'activation OSPF au niveau de chaque interface.

On active le protocole OSPF pour l'interface commutée virtuelle de chacun des trois routeurs. Voici un exemple pour le routeur R2.

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

Une fois cette opération réalisée, le routage dynamique est complet et le trafic des routeurs R2 et R3 est acheminé via R1. On peut lancer des tests ICMP.

ping -qc2 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 = 28.502/29.014/29.526/0.512 ms
ping -qc2 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 = 40.675/47.384/54.094/6.709 ms

Q186.

Comment administrer et initialiser le gestionnaire de conteneurs Incus ?

Consulter la section Réseau d'hébergement de conteneurs.

Pour commencer, l'utilisateur normal doit appartenir aux deux groupes système incus et incus-admin. On reprend la démarche précédente.

for grp in incus incus-admin
do
    sudo adduser etu $grp
done

Comme l'affectation de groupe se joue à la connexion, il faut se déconnecter/reconnecter pour rendre l'attribution effective.

groups
etu adm sudo users frrvty frr incus-admin incus

Pour l'initialisation du gestionnaire de conteneur, on utilise un fichier de déclaration préparé en amont. Voici une copie du fichier incus.yaml pour le routeur R2.

config: {}
networks: []
storage_pools:
- config: {}
  description: ""
  name: default
  driver: dir
profiles:
- config: {}
  description: ""
  devices:
    eth0:
      name: eth0
      nictype: bridged
      parent: asw-host
      type: nic
      vlan: 20
    root:
      path: /
      pool: default
      type: disk
  name: default
projects: []
cluster: null

L'initialisation se fait à partir de ce fichier.

cat incus.yaml | incus admin init --preseed

On peut afficher le résultat de cette initialisation du gestionnaire de conteneurs avec l'instruction suivante.

incus profile show default

En cas d'erreur, il est aussi possible d'éditer le profil par défaut.

incus profile edit default
[Important] Important

Les opérations de cette question doivent être réalisées sur les trois routeurs en adaptant les numéros de VLAN de réseau d'hébergement.

Q187.

Comment mettre en place l'adressage automatique IPv4 et IPv6 dans le réseau d'hébergement ?

Consulter la section Adressage automatique dans le réseau d'hébergement du document Routage inter-VLAN et protocole PPPoE

On créé un fichier de configuration pour le service dnsmasq en l'adaptant au contexte du plan d'adressage de chaque routeur. Voici un exemple pour le routeur R1 de la maquette.

cat << EOF | sudo tee /etc/dnsmasq.conf
# Specify Container VLAN interface
interface=vlan10

# Enable DHCPv4 on Container VLAN
dhcp-range=10.10.0.20,10.10.0.200,3h

# Enable IPv6 router advertisements
enable-ra

# Enable SLAAC
dhcp-range=::,constructor:vlan10,ra-names,slaac

# Optional: Specify DNS servers
dhcp-option=option:dns-server,172.16.0.2,9.9.9.9
dhcp-option=option6:dns-server,[2001:678:3fc:3::2],[2620:fe::fe]

# Avoid DNS listen port conflict between dnsmasq and systemd-resolved
port=0
EOF

Une fois le fichier de configuration en place, on peut relancer le service et afficher son état.

sudo systemctl restart dnsmasq
systemctl status dnsmasq
[Important] Important

Une fois encore, les opérations de cette question doivent être réalisées sur les trois routeurs en adaptant le nom de l'interface et les adresses IPv4 du réseau d'hébergement.

Q188.

Comment créer 3 conteneurs avec un adressage ?

Consulter la section Configuration et lancement des conteneurs du document Routage inter-VLAN et protocole PPPoE.

On lance la création des 3 conteneurs demandés avec une boucle.

for i in {0..2}; do incus launch images:debian/trixie c$i; done
incus ls
+------+---------+--------------------+---------------------------------------------+-----------+-----------+
| NAME |  STATE  |        IPV4        |                    IPV6                     |   TYPE    | SNAPSHOTS |
+------+---------+--------------------+---------------------------------------------+-----------+-----------+
| c0   | RUNNING | 10.20.0.33 (eth0)  | fd14:ca46:3864:14:216:3eff:fe2c:c5b9 (eth0) | CONTAINER | 0         |
+------+---------+--------------------+---------------------------------------------+-----------+-----------+
| c1   | RUNNING | 10.20.0.87 (eth0)  | fd14:ca46:3864:14:216:3eff:fe76:f0d0 (eth0) | CONTAINER | 0         |
+------+---------+--------------------+---------------------------------------------+-----------+-----------+
| c2   | RUNNING | 10.20.0.153 (eth0) | fd14:ca46:3864:14:216:3eff:fe2c:d169 (eth0) | CONTAINER | 0         |
+------+---------+--------------------+---------------------------------------------+-----------+-----------+

Q189.

Comment vérifier la publication des réseaux de conteneurs dans l'aire OSPF ?

On vérifie que l'interface commutée virtuelle (Switched Virtual Interface )est bien active pour chacune des deux versions du protocole de routage dynamique.

Voici un exemple de configuration pour le routeur R2.

R2# sh ip ospf interface vlan20
vlan20 is up
  ifindex 6, MTU 1500 bytes, BW 0 Mbit <UP,LOWER_UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.20.0.1/24, Broadcast 10.20.0.255, Area 0.0.0.0
  MTU mismatch detection: enabled
  Router ID 2.0.0.4, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 2.0.0.4 Interface Address 10.20.0.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
  Graceful Restart hello delay: 10s
R2# sh ipv6 ospf6 interface vlan20
vlan20 is up, type BROADCAST
  Interface ID: 6
  Internet Address:
    inet : 10.20.0.1/24
    inet6: fd14:ca46:3864:14::1/64
    inet6: fe80::2865:4aff:fe35:fdd0/64
  Instance ID 0, Interface MTU 1500 (autodetect: 1500)
  MTU mismatch detection: enabled
  Area ID 0.0.0.0, Cost 10
  State DR, Transmit Delay 1 sec, Priority 1
  Timer intervals configured:
   No Hellos (Passive interface)
  DR: 2.0.0.4 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]
  Graceful Restart hello delay: 10s
  Authentication Trailer is disabled

Q190.

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"
        incus exec c$i -- ping -qc2 9.9.9.9
    done
    for i in {0..2}
    do
        echo ">>>>>>>>>>>>>>>>> c$i"
        incus exec c$i -- ping -qc2 2620:fe::fe
    done
  • Tests au niveau application avec résolution des noms :

    for i in {0..2}
    do
        echo ">>>>>>>>>>>>>>>>> c$i"
        incus exec c$i -- apt update
        incus exec c$i -- apt -y full-upgrade
    done

Q191.

Comment vérifier que tous les réseaux de conteneurs sont bien visibles depuis les routeurs de la topologie triangle ?

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. On identifie les réseaux d'hébergement des routeurs R1 et R2 pour lesquels on trouve des entrées marquées O>*.

R3# sh ip route
Codes: K - kernel route, C - connected, L - local, 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, t - Table-Direct,
       > - 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.44.1.1, enp0s1.441, weight 1, 02:12:47
O>* 10.10.0.0/24 [110/20] via 10.44.1.1, enp0s1.441, weight 1, 02:12:48
O>* 10.20.0.0/24 [110/20] via 10.44.2.2, enp0s1.442, weight 1, 00:11:37
O   10.30.0.0/24 [110/10] is directly connected, vlan30, weight 1, 02:12:36
C>* 10.30.0.0/24 is directly connected, vlan30, 02:12:54
L>* 10.30.0.1/32 is directly connected, vlan30, 02:12:54
O>* 10.44.0.0/29 [110/20] via 10.44.1.1, enp0s1.441, weight 1, 00:11:37
  *                       via 10.44.2.2, enp0s1.442, weight 1, 00:11:37
O   10.44.1.0/29 [110/10] is directly connected, enp0s1.441, weight 1, 02:12:55
C>* 10.44.1.0/29 is directly connected, enp0s1.441, 02:12:55
L>* 10.44.1.3/32 is directly connected, enp0s1.441, 02:12:55
O   10.44.2.0/29 [110/10] is directly connected, enp0s1.442, weight 1, 01:18:48
C>* 10.44.2.0/29 is directly connected, enp0s1.442, 02:12:55
L>* 10.44.2.3/32 is directly connected, enp0s1.442, 02:12:55
R3# sh ipv6 route
Codes: K - kernel route, C - connected, L - local, 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, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

O>* ::/0 [110/10] via fe80::1b9:1, enp0s1.441, weight 1, 00:14:55
O>* fd14:ca46:3864:a::/64 [110/20] via fe80::1b9:1, enp0s1.441, weight 1, 02:21:04
O>* fd14:ca46:3864:14::/64 [110/20] via fe80::baad:caff:fefe:6, enp0s1.442, weight 1, 00:14:56
O   fd14:ca46:3864:1e::/64 [110/10] is directly connected, vlan30, weight 1, 02:14:55
C>* fd14:ca46:3864:1e::/64 is directly connected, vlan30, 02:15:27
L>* fd14:ca46:3864:1e::1/128 is directly connected, vlan30, 02:15:27
C * fe80::/64 is directly connected, vlan30, 02:15:28
C * fe80::/64 is directly connected, asw-host, 02:15:29
C * fe80::/64 is directly connected, enp0s1.52, 02:19:13
C * fe80::/64 is directly connected, enp0s1.441, 22:24:07
C * fe80::/64 is directly connected, enp0s1.442, 22:24:08
C>* fe80::/64 is directly connected, enp0s1, 22:24:08

Si on reprend, la même démarche sur chaque routeur, on doit trouver deux entrées OSPF relatives aux réseaux d'hébergement raccordés aux deux “sommets du triangle” dans les tables de routage.