5. Ajouter les réseaux de services distants

Dans cette section, on s'intéresse aux rôles et fonctionnalités suivantes :

  • Configurer un commutateur virtuel avec une interface commutée

  • Router les réseaux d'hébergement via OSPF

5.1. Ajouter un commutateur virtuel

Voici la liste des questions traitées dans le document Routage inter-VLAN et protocole PPPoE

Q36.

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

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

Voici un exemple de recherche.

apt search ^openvswitch

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

sudo apt -y install openvswitch-switch

Q37.

Comment déclarer un commutateur à l'aide de l'outil netplan.io ?

Consulter la documentation de Netplan pour obtenir les informations sur la configuration des commutateurs virtuels openvswitch à l'adresse Netplan documentation.

On peut aussi rechercher les informations dans les fichiers exemples fournis avec le paquet netplan.io.

Voici un exemple de recherche.

find /usr/share/doc/netplan* -type f -iname "openvswitch*"
/usr/share/doc/netplan/examples/openvswitch.yaml

Q38.

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

Voici une copie du fichier /etc/netplan/enp0s1.yaml qui contient les instructions de création du commutateur asw-host seul.

network:
  version: 2
  ethernets:
    enp0s1:
      dhcp4: false
      dhcp6: false
      accept-ra: false

    openvswitch: {}

  bridges:
    asw-host:
      openvswitch: {}

  vlans:
    enp0s1.440: # VLAN violet
      id: 440
      link: enp0s1
      addresses:
        - fe80:1b8::2/64
    enp0s1.441: # VLAN orange
      id: 441
      link: enp0s1
      addresses: []

On applique les nouvelles déclarations.

sudo netplan apply

On vérifie que le nouveau commutateur a bien été créé dans la base Open vSwitch.

sudo ovs-vsctl show
e288cc30-e290-44ae-8ed1-5e2a8d184033
    Bridge asw-host
        fail_mode: standalone
        Port asw-host
            Interface asw-host
                type: internal
    ovs_version: "3.4.0"

Q39.

Comment ajouter une nouvelle interface virtuelle commutée (Switched Virtual Interface) qui servira de passerelle par défaut pour tous les hôtes du réseau d'hébergement du site distant ?

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

Voici une nouvelle copie du fichier /etc/netplan/enp0s1.yaml auquel on ajouté la déclaration d'une interface vlan40 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

  openvswitch: {}

  bridges:
    asw-host:
      openvswitch: {}

  vlans:
    enp0s1.440: # VLAN violet
      id: 440
      link: enp0s1
      addresses:
        - fe80:1b8::2/64
    enp0s1.441: # VLAN orange
      id: 441
      link: enp0s1
      addresses: []
    vlan40:     # VLAN vert
      id: 40
      link: asw-host
      addresses:
        - 203.0.113.1/24
        - fda0:7a62:28::1/64
        - fe80:28::1/64

5.2. Router les réseaux d'hébergement depuis les Hubs

La configuration mise en place dans cette section conditionne le routage des réseaux d'hébergement des services des sites distants à l'ouverture de session PPP.

Q40.

Comment créer les routes statiques vers les réseaux d'hébergement sur le routeur Hub ?

Créer un script exécutable par protocole réseau dans lequel on utilise les noms d'interfaces PPP dérivés des options -u utilisées dans les paramètres de configuration des deux serveurs PPPoE.

Pour IPv4, c'est le répertoire est /etc/ppp/ip-up.d/ qui doit contenir le script exécutable staticroute.

cat << 'EOF' | sudo tee /etc/ppp/ip-up.d/staticroute
#!/bin/bash

if [ -z "${CONNECT_TIME}" ]; then
    case "${PPP_IFACE}" in
        "ppp0")
            ip route add 10.0.10.0/24 dev ${PPP_IFACE}
            ;;
        "ppp1")
            ip route add 10.0.20.0/24 dev ${PPP_IFACE}
            ;;
    esac
fi
EOF
sudo chmod +x /etc/ppp/ip-up.d/staticroute

Pour IPv6, c'est le répertoire est /etc/ppp/ipv6-up.d/ qui doit contenir le script exécutable appelé staticroute.

cat << 'EOF' | sudo tee /etc/ppp/ipv6-up.d/staticroute
#!/bin/bash

if [ -z "${CONNECT_TIME}" ]; then
    case "${PPP_IFACE}" in
        "ppp0")
            ip -6 route add fda0:7a62:a::/64 dev ${PPP_IFACE}
            ;;
        "ppp1")
            ip -6 route add fda0:7a62:14::/64 dev ${PPP_IFACE}
            ;;
    esac
fi
EOF
sudo chmod +x /etc/ppp/ipv6-up.d/staticroute

Une fois de plus, il faut relancer les sessions PPP pour observer les résultats et lancer les tests ICMP.

Auparavant, on peut afficher les tables de routages IPv4 et IPv6 du routeur Hub pour vérifier la présence des nouvelles routes statiques.

  • En direction du premier routeur Spoke.

    ip route ls dev ppp0
    10.0.10.0/24 scope link
    10.44.1.2 proto kernel scope link src 10.44.1.1
    ip -6 route ls dev ppp0
    fda0:7a62:a::/64 metric 1024 pref medium
    fe80::2c4a:3bb9:eead:8fa5 proto kernel metric 256 pref medium
    fe80::cca6:346e:80d0:20cf proto kernel metric 256 pref medium
  • En direction du second routeur Spoke.

    ip route ls dev ppp1
    10.0.20.0/24 scope link
    10.44.3.2 proto kernel scope link src 10.44.3.1
    ip -6 route ls dev ppp1
    fda0:7a62:14::/64 metric 1024 pref medium
    fe80::b4d6:f38c:a930:c8f5 proto kernel metric 256 pref medium
    fe80::f0fe:10bd:88f0:cb26 proto kernel metric 256 pref medium

Q41.

Comment l'ajout de route vers les réseaux d'hébergement est-il répercuté par FRR ?

Afficher les tables de routage des routeurs Hub après avoir relancé les ouvertures de sessions PPP sur les quatre routeurs Spoke.

Après redémarrage des services PPP sur les routeurs Spoke, les routes vers les réseaux d'hébergement sont marquées K>*. Ce sont des entrées appartenant à la catégorie kernel.

Voici deux extraits des tables de routage du routeur Hub numéro 1.

sh ip route kernel
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

K>* 0.0.0.0/0 [0/0] via 172.20.120.1, enp0s1.120, 07:19:49
K>* 10.0.1.0/24 [0/0] is directly connected, ppp0, 00:19:42
K>* 10.0.2.0/24 [0/0] is directly connected, ppp1, 00:18:21
sh ipv6 route kernel
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

K>* ::/0 [0/1024] via fe80:78::1, enp0s1.120 onlink, 07:21:03
K>* 2001:678:3fc:78::/64 [0/512] is directly connected, enp0s1.120, 07:21:03
K>* fda0:7a62:1::/64 [0/1024] is directly connected, ppp0, 00:20:56
K>* fda0:7a62:2::/64 [0/1024] is directly connected, ppp1, 00:19:35

Q42.

Comment redistribuer ces nouvelles routes dans le protocole OSPF ?

Reprendre la section sur la redistribution des routes connectées en l'adaptant à la catégorie kernel.

On ajoute une nouvelle instruction redistribute dans les configurations des démons OSPF de chacun des routeurs Hub.

Voici deux extraits de configuration pour le routeur Hub numéro 2.

sh run ospfd
Building configuration...

Current configuration:
!
frr version 10.1.1
frr defaults traditional
hostname hub2
log syslog informational
service integrated-vtysh-config
!
interface enp0s1.470
 ip ospf area 0
exit
!
router ospf
 ospf router-id 2.0.0.4
 log-adjacency-changes detail
 redistribute kernel
 redistribute connected
exit
!
end
sh run ospf6d
Building configuration...

Current configuration:
!
frr version 10.1.1
frr defaults traditional
hostname hub2
log syslog informational
service integrated-vtysh-config
!
interface enp0s1.470
 ipv6 ospf6 area 0
exit
!
router ospf6
 ospf6 router-id 2.0.0.6
 log-adjacency-changes
 redistribute kernel
 redistribute connected
exit
!
end

Q43.

Comment vérifier que la redistribution de route est effective ?

En affichant les entrées OSPF des tables de routage d'un routeur Hub, on doit voir apparaître les réseaux d'hébergement accessibles via le Hub opposé.

Voici deux exemples sur le routeurs Hub numéro 2.

sh ip route ospf
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>* 10.0.1.0/24 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 00:27:03
O>* 10.0.2.0/24 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 00:27:03
O>* 10.47.2.2/32 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 00:34:51
O>* 10.47.4.2/32 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 00:33:30
O   172.20.70.0/29 [110/10] is directly connected, enp0s1.470, weight 1, 06:22:48
O   172.20.120.0/23 [110/20] via 172.20.70.1, enp0s1.470, weight 1, 03:28:25
sh ipv6 route ospf6
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   2001:678:3fc:78::/64 [110/20] via fe80::baad:caff:fefe:5, enp0s1.470, weight 1, 00:29:02
O>* fda0:7a62:1::/64 [110/20] via fe80::baad:caff:fefe:5, enp0s1.470, weight 1, 00:29:02
O>* fda0:7a62:2::/64 [110/20] via fe80::baad:caff:fefe:5, enp0s1.470, weight 1, 00:29:02

5.3. Installer et configurer Incus

Dans cette section, on s'intéresse aux rôles et fonctionnalités suivantes :

  • Installer le gestionnaire de conteneurs système Incus

  • Appliquer une configuration initiale

  • Configurer l'adressage automatique pour les conteneurs

Pour la partie installation, on reprend les questions du document Routage inter-VLAN et protocole PPPoE.

Q44.

Comment installer le gestionnaire de conteneurs Incus ?

Lancer une recherche dans la liste des paquets Debian.

Le paquet s'appelle tout simplement incus.

apt search ^incus
sudo apt -y install incus

Q45.

Comment faire pour que l'utilisateur normal etu devienne administrateur et gestionnaire des conteneurs ?

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

Il faut que l'utilisateur normal appartienne au groupes systèmes incus et incus-admin pour qu'il ait tous les droits sur la gestion des conteneurs.

grep incus /etc/group
incus:x:990:
incus-admin:x:989:
sudo adduser etu incus
sudo adduser etu incus-admin
[Avertissement] Avertissement

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

groups
etu adm sudo users incus-admin incus

Pour la partie configuration initiale, on reprend l'utilisation d'un fichier YAML proposée dans le document Introduction au routage dynamique OSPF avec FRRouting.

Q46.

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.

Q47.

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.

Q48.

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         |
+------+---------+--------------------+---------------------------------------------+-----------+-----------+