4. Préparer les systèmes pour le routage IPv4 et IPv6

La première étape consiste à installer les outils sur les trois routeurs, à appliquer une configuration commune et à mettre en place la topologie physique.

  1. Installer les paquets quagga-core, quagga-ospfd et quagga-ospf6d avant de brasser les postes sur les commutateurs désignés à la Section 2, « Topologie réseau étudiée ».

    $ aptitude search ~iquagga
    i   quagga-core         - network routing daemons (core abstraction layer)
    i   quagga-ospf6d       - OSPF6 routing daemon
    i   quagga-ospfd        - OSPF routing daemon

    Sans configuration particulière, les trois services correspondant aux paquets installés ne sont pas lancés.

    $ systemctl status zebra
    systemctl status zebra
    ● zebra.service - GNU Zebra routing manager
       Loaded: loaded (/lib/systemd/system/zebra.service; enabled; vendor preset: enabled)
       Active: inactive (dead)
         Docs: man:zebra
    
    $ systemctl status ospfd
    ● ospfd.service - OSPF routing daemon
       Loaded: loaded (/lib/systemd/system/ospfd.service; enabled; vendor preset: enabled)
       Active: inactive (dead)
         Docs: man:ospfd
    
    $ systemctl status ospf6d
    ● ospf6d.service - OSPF routing daemon for IPv6
       Loaded: loaded (/lib/systemd/system/ospf6d.service; enabled; vendor preset: enabled)
       Active: inactive (dead)
         Docs: man:ospf6d
  2. Activer le routage IPv4 et IPv6 au niveau noyau.

    Il faut éditer le fichier /etc/sysctl.conf pour fixer les valeurs des paramètres de configuration du routage. Voir la section Fonctions réseau d'une interface du support Configuration d'une interface de réseau local.

    $ sudo sysctl --system
    * Applying /usr/lib/sysctl.d/50-pid-max.conf ...
    kernel.pid_max = 4194304
    * 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
  3. Pour créer les interfaces associées aux VLANs sur chacun des routeurs R1, R2 et R3, on édite le fichier /etc/network/interfaces.

    Auparavant, on doit installer le paquet du commutateur virtuel qui sert à raccorder des conteneurs du VLAN “vert“ d'hébergement.

    $ sudo apt install openvswitch-switch

    Voici un exemple de fichier /etc/network/interfaces pour le routeur R1 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 enp0s6
    iface enp0s6 inet manual
            up ip link set dev $IFACE up
            down ip link set dev $IFACE down
    
    # uplink
    auto enp0s6.300
    iface enp0s6.300 inet static
            address 10.141.0.162/27
            gateway 10.141.0.161
            dns-nameserver 9.9.9.9
    
    iface enp0s6.300 inet6 static
            address 2001:678:3fc:12c::2/64
            gateway 2001:678:3fc:12c::1
    
    # R1 -> R2
    auto enp0s6.280
    iface enp0s6.280 inet static
            address 10.2.80.1/29
    
    # R1 -> R3
    auto enp0s6.281
    iface enp0s6.281 inet static
            address 10.2.81.1/29
    
    # R1 -> lxd
    allow-ovs asw-host
    iface asw-host inet manual
            ovs_type OVSBridge
            ovs_ports sw-vlan282
            up ip link set dev $IFACE up
            down ip link set dev $IFACE down
    
    allow-asw-host sw-vlan282
    iface sw-vlan282 inet static
            ovs_type OVSBridge
            ovs_bridge asw-host
            ovs_options asw-host 282
            address 10.2.82.1/24
    
    iface sw-vlan282 inet6 static
            ovs_type OVSBridge
            ovs_bridge asw-host
            ovs_options asw-host 282
            address 2001:678:3fc:11a::1/64

    On adapte la liste des interfaces pour les deux autres routeurs R2 et R3 avec les numéros de VLANs concernés.

  4. Créer des fichiers de configuration vides pour les différents démons.

    La présence d'un fichier de configuration par démon est une condition indispensable pour le lancement des services via systemd.

    $ sudo touch /etc/quagga/zebra.conf \
    /etc/quagga/ospfd.conf \
    /etc/quagga/ospf6d.conf \
    /etc/quagga/vtysh.conf
  5. Éditer le fichier de configuration de la console “unifiée“ vtysh de façon à ce qu'il contienne les informations minimales.

    Voici un exemple pour le routeur R1 de la maquette.

    !
    ! Configuration file for vtysh.
    !
    no service integrated-vtysh-config
    hostname R1
    username root nopassword

    Cet outil offre une console unifiée pour les trois démons : zebra, ospfd et ospf6d. Avec l'instruction no service integrated-vtysh-config les fichiers de configuration individuels sont utilisés pour la sauvegarde.

  6. Ajouter l'utilisateur etu au groupe quaggavty pour lui donner un accès direct à la console de configuration des démons.

    $ sudo adduser etu quaggavty

    Il ne faut pas oublier de se déconnecter/reconnecter pour bénéficier de la nouvelle attribution de groupe.

  7. Activer et relancer les services correspondant aux trois démons : zebra, ospfd et ospf6d.

    $  for daemon in zebra ospfd ospf6d
    do
            sudo systemctl enable $daemon
            sudo systemctl restart $daemon
    done
  8. Vérifier que les services sont correctement lancés.

    $ systemctl status zebra
    ● zebra.service - GNU Zebra routing manager
       Loaded: loaded (/lib/systemd/system/zebra.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2018-10-12 08:55:58 UTC; 3min 12s ago
         Docs: man:zebra
      Process: 2521 ExecStart=/usr/sbin/zebra -d -A 127.0.0.1 -f /etc/quagga/zebra.conf (code=exited, status=0/SUCCESS)
      Process: 2520 ExecStartPre=/bin/chown -f quagga:quaggavty /etc/quagga/vtysh.conf (code=exited, status=0/SUCCESS)
      Process: 2519 ExecStartPre=/bin/chown -f quagga:quagga /etc/quagga/zebra.conf (code=exited, status=0/SUCCESS)
      Process: 2518 ExecStartPre=/bin/chmod -f 640 /etc/quagga/vtysh.conf /etc/quagga/zebra.conf (code=exited, status=0/SUCCESS)
      Process: 2517 ExecStartPre=/sbin/ip route flush proto zebra (code=exited, status=0/SUCCESS)
     Main PID: 2522 (zebra)
       Memory: 1.3M
       CGroup: /system.slice/zebra.service
               └─2522 /usr/sbin/zebra -d -A 127.0.0.1 -f /etc/quagga/zebra.conf
    
    oct. 12 08:55:58 R3 systemd[1]: Starting GNU Zebra routing manager...
    oct. 12 08:55:58 R3 systemd[1]: Started GNU Zebra routing manager.
    
    $ systemctl status ospfd
    ● ospfd.service - OSPF routing daemon
       Loaded: loaded (/lib/systemd/system/ospfd.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2018-10-12 08:56:01 UTC; 4min 20s ago
         Docs: man:ospfd
      Process: 2527 ExecStart=/usr/sbin/ospfd -d -A 127.0.0.1 -f /etc/quagga/ospfd.conf (code=exited, status=0/SUCCESS)
      Process: 2526 ExecStartPre=/bin/chown -f quagga:quagga /etc/quagga/ospfd.conf (code=exited, status=0/SUCCESS)
      Process: 2525 ExecStartPre=/bin/chmod -f 640 /etc/quagga/ospfd.conf (code=exited, status=0/SUCCESS)
     Main PID: 2528 (ospfd)
       Memory: 1.1M
       CGroup: /system.slice/ospfd.service
               └─2528 /usr/sbin/ospfd -d -A 127.0.0.1 -f /etc/quagga/ospfd.conf
    
    oct. 12 08:56:01 R3 systemd[1]: Starting OSPF routing daemon...
    oct. 12 08:56:01 R3 systemd[1]: Started OSPF routing daemon.
    
    $ systemctl status ospf6d
    ● ospf6d.service - OSPF routing daemon for IPv6
       Loaded: loaded (/lib/systemd/system/ospf6d.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2018-10-12 08:56:05 UTC; 5min ago
         Docs: man:ospf6d
      Process: 2533 ExecStart=/usr/sbin/ospf6d -d -A ::1 -f /etc/quagga/ospf6d.conf (code=exited, status=0/SUCCESS)
      Process: 2532 ExecStartPre=/bin/chown -f quagga:quagga /etc/quagga/ospf6d.conf (code=exited, status=0/SUCCESS)
      Process: 2531 ExecStartPre=/bin/chmod -f 640 /etc/quagga/ospf6d.conf (code=exited, status=0/SUCCESS)
     Main PID: 2534 (ospf6d)
       Memory: 1.0M
       CGroup: /system.slice/ospf6d.service
               └─2534 /usr/sbin/ospf6d -d -A ::1 -f /etc/quagga/ospf6d.conf
    
    oct. 12 08:56:05 R3 systemd[1]: Starting OSPF routing daemon for IPv6...
    oct. 12 08:56:05 R3 systemd[1]: Started OSPF routing daemon for IPv6.
  9. Compléter la configuration des interfaces dans la console unifiée vtysh de façon à fixer la bande passante de chaque interface active à 1Gbps.

    Voici un exemple de séquence d'instructions pour configurer une interface.

    $ vtysh
    
    Hello, this is Quagga (version 1.2.4).
    Copyright 1996-2005 Kunihiro Ishiguro, et al.
    
    R1# conf t
    R1(config)# int eth0
    R1(config-if)# bandwidth 1000000
    R1(config-if)# ^Z
    R1# copy run start
    Building Configuration...
    Configuration saved to /etc/quagga/zebra.conf
    Configuration saved to /etc/quagga/ospfd.conf
    Configuration saved to /etc/quagga/ospf6d.conf
    [OK]

    Une fois revenu au système d'exploitation, on doit obtenir un résultat équivalent à celui présenté ci-dessous. Les noms d'interfaces dépendent du routeur concerné.

    etu@R2-vert:~$ sudo grep -1 bandwidth /etc/quagga/zebra.conf
    interface enp0s6.280
     bandwidth 1000000
    !
    interface enp0s6.283
     bandwidth 1000000
    !
    --
    interface sw-vlan284
     bandwidth 1000000
    !
    [Note] Note

    Contrairement à un routeur «intégré» avec un système d'exploitation dédié, le démon de routage statique n'a pas directement accès aux interfaces matérielles. Or, sur un système GNU/Linux, le débit d'une interface Ethernet filaire peut varier en fonction du débit proposé par le port du commutateur. Sans information spécifique du noyau, l'application «service de routage» n'a aucun moyen de connaître le débit exact de l'interface. C'est la raison pour laquelle il est nécessaire de paramétrer manuellement les débits de chaque interface dans la configuration du démon zebra.

    [Avertissement] Avertissement

    Sans configuration manuelle du coût de lien d'une interface, ce paramétrage de la bande passante est essentiel dans le calcul des métriques et le fonctionnement du protocole de routage OSPF. Si les calculs de métriques pour les liens actifs sont erronés, le choix des routes à emprunter pour faire transiter le trafic utilisateur entre deux routeurs peut lui aussi être erroné.

Une fois l'ensemble des opérations de cette section réalisées, chaque routeur dispose des outils pour mettre en œuvre la topologie physique et ensuite les protocoles de routage dynamique OSPF.