7. Réseau d'hébergement de conteneurs

À ce stade des manipulations, le routeur Spoke utilise la session PPP et le routage IPv4 pour accéder à tous les réseaux.

On peut le vérifier en affichant les tables de routage IPv4 et IPv6.

Dans la table de routage IPv4, on trouve la route par défaut.

ip route ls
default dev ppp0 scope link
10.4.41.1 dev ppp0 proto kernel scope link src 10.4.41.2

Dans la table de routage IPv6, on ne trouve que des entrées de lien local correspondant au préfixe fe80::/10.

ip -6 route ls
fe80::d1b3:8c16:93d1:8370 dev ppp0 proto kernel metric 256 pref medium
fe80::f118:5b7b:cfb5:7b54 dev ppp0 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.441 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.440 proto kernel metric 256 pref medium
fe80:1b8::/64 dev enp0s1.440 proto kernel metric 256 pref medium

Dans cette partie, nous devons ajouter un commutateur pour raccorder les services hébergés sur le site distant et compléter la configuration du routage pour assurer les accès IPv4 et IPv6.

7.1. Ajout du commutateur virtuel

Dans le scénario étudié, les services sont hébergés dans un réseau de conteneurs propre au routeur Spoke. 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.

Q42.

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

Q43.

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

Q44.

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"

Q45.

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

7.2. Routage du réseau d'hébergement

L'objectif de cette section est de rendre le réseau d'hébergement accessible depuis le routeur Hub et que le protocole IPv6 soit utilisable depuis le routeur Spoke.

Pour rendre le réseau d'hébergement du site distant accessible depuis le routeur Hub, il est nécessaire d'ajouter des routes statiques IPv4 et IPv6 à l'ouverture de la session PPP.

Pour utiliser IPv6 depuis le routeur Spoke, il faut ajouter une route par défaut IPv6 aussi à l'ouverture de session PPP.

On commence par l'ajout de routes statiques IPv4 et IPv6 côté routeur Hub.

Q46.

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

Q47.

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 comment créer le script exécutable staticroute.

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

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

Q48.

Comment tester l'ajout de ces routes statiques et les communications vers le réseau d'hébergement depuis le routeur Hub ?

Afficher les tables de routage après réinitialisation d'une session PPP et lancer des tests ICMP vers les adresses de l'interface virtuelle commutée du routeur Spoke.

En redémarrant le service pppoe-server sur le routeur Hub ou le service ppp sur le routeur Spoke, on provoque un renouvellement de session PPP.

On peut ensuite afficher les tables de routage du routeur Hub.

ip route ls
default via 192.168.104.129 dev enp0s1.360 proto static
10.4.41.2 dev ppp0 proto kernel scope link src 10.4.41.1
192.168.104.128/29 dev enp0s1.360 proto kernel scope link src 192.168.104.130
203.0.113.0/24 dev ppp0 scope link
ip -6 route ls
2001:678:3fc:168::/64 dev enp0s1.360 proto kernel metric 256 pref medium
2001:678:3fc:168::/64 dev enp0s1.360 proto ra metric 512 expires 2591839sec pref high
fda0:7a62:28::/64 dev ppp0 metric 1024 pref medium
fe80::d580:e038:8d05:636e dev ppp0 proto kernel metric 256 pref medium
fe80::dcfe:544d:d6ac:8b0f dev ppp0 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.441 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.440 proto kernel metric 256 pref medium
fe80::/64 dev enp0s1.360 proto kernel metric 256 pref medium
fe80:1b8::/64 dev enp0s1.440 proto kernel metric 256 pref medium
default via fe80:168::1 dev enp0s1.360 proto static metric 1024 onlink pref medium

On peut aussi afficher la solution de routage pour une adresse destination.

ip route get 203.0.113.1
203.0.113.1 dev ppp0 src 10.4.41.1 uid 1000
    cache
ip -6 route get fda0:7a62:28::1
fda0:7a62:28::1 from :: dev ppp0 src 2001:678:3fc:168:baad:caff:fefe:5 metric 1024 pref medium

On peut maintenant passer au routeur Spoke pour effectuer le même travail sur les routes par défaut.

Q49.

Comment ajouter des routes par défaut 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é defaultroute.

    cat << 'EOF' | sudo tee /etc/ppp/ip-up.d/defaultroute
    #!/bin/sh
    
    if [ -z "${CONNECT_TIME}" ]; then
            ip route add default dev ${PPP_IFACE}
    fi
    EOF
    sudo chmod +x /etc/ppp/ip-up.d/defaultroute
  • Pour IPv6, le répertoire est /etc/ppp/ipv6-up.d/. Voici comment créer un script exécutable aussi appelédefaultroute.

    cat << 'EOF' | sudo tee /etc/ppp/ipv6-up.d/defaultroute
    #!/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/defaultroute

Q50.

Comment tester l'ajout des routes par défaut et les communications IPv6 depuis le routeur Spoke ?

Afficher les tables de routage après réinitialisation d'une session PPP et lancer des tests ICMP depuis les adresses de l'interface virtuelle commutée du routeur Spoke.

En redémarrant le service pppoe-server sur le routeur Hub ou le service ppp sur le routeur Spoke, on provoque un renouvellement de session PPP.

On peut ensuite afficher les tables de routage du routeur Spoke.

ip route ls default
default dev ppp0 scope link
ip -6 route ls default
default dev ppp0 metric 1024 pref medium

Il ne reste plus que le test ICMPv6 pour qualifier le routage complet au niveau du routeur Spoke.

ping -c2 2620:fe::fe
PING 2620:fe::fe (2620:fe::fe) 56 data bytes
64 bytes from 2620:fe::fe: icmp_seq=1 ttl=58 time=54.3 ms
64 bytes from 2620:fe::fe: icmp_seq=2 ttl=58 time=41.2 ms

--- 2620:fe::fe ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 41.208/47.735/54.262/6.527 ms

7.3. Adressage automatique dans le réseau d'hébergement

Pour que les hôtes du réseau de conteneurs obtiennent automatiquement une configuration IPv4 et IPv6, il faut ajouter le service dnsmasq sur le routeur Spoke. Il fournit les services DHCPv4 et SLAAC en un seul et unique fichier de configuration.

On débute par l'installation du paquet.

sudo apt -y install dnsmasq

Q51.

Comment remplacer le fichier de configuration fourni lors de l'installation du paquet par notre propre fichier de configuration ?

Consulter le contenu du fichier /etc/dnsmasq.conf et extraire les options de configuration utiles au contexte de ces manipulations.

Voici la commande de copie du fichier issu de l'installation.

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.dist

Voici un exemple de configuration adaptée à la maquette.

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

# Enable DHCPv4 on Container VLAN
dhcp-range=203.0.113.20,203.0.113.200,3h

# Enable IPv6 router advertisements
enable-ra

# Enable SLAAC
dhcp-range=::,constructor:vlan40,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
bind-interfaces
listen-address=203.0.113.1
EOF
[Avertissement] Avertissement

Il faut impérativement changer le numéro de VLAN ainsi que les adresses IPv4 de l'exemple ci-dessus par les informations données dans le plan d'adressage des travaux pratiques.

De plus, 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 dnsmasq
systemctl status dnsmasq