3. 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.

    # sysctl -p
    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.secure_redirects = 1
    net.ipv4.conf.all.log_martians = 1
  3. Créer les sous-interfaces associées aux VLANs sur chacun des routeurs R1, R2 et R3 à l'aide du script suivant :

    #!/bin/bash
    
    for vlan in $*
    do
            ip link add link eth0 name eth0.$vlan type vlan id $vlan
            ip link set dev eth0.$vlan up
    done
    

    Sur le routeur R1, on utilise le script avec les numéros de VLANs 12 et 13 par exemple.

    R1:~# sh ./subinterfaces.sh 12 13

    On adapte l'utilisation du même script aux routeurs R2 et R3 avec les numéros de VLANs concernés.

  4. Créer les fichiers de configuration de base pour les différents démons et outils sur chaque routeur en utilisant les patrons livrés avec le paquet quagga-core.

    Créer aussi le dossier dédié aux journaux des trois démons de routage : /var/log/quagga.

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

    # cp /usr/share/doc/quagga-core/examples/zebra.conf.sample /etc/quagga/zebra.conf
    # cp /usr/share/doc/quagga-core/examples/ospfd.conf.sample /etc/quagga/ospfd.conf
    # cp /usr/share/doc/quagga-core/examples/ospf6d.conf.sample /etc/quagga/ospf6d.conf
    # cp /usr/share/doc/quagga-core/examples/vtysh.conf.sample /etc/quagga/vtysh.conf
    # chown quagga.quagga /etc/quagga/*.conf
    # mkdir /var/log/quagga
    # chown quagga.adm /var/log/quagga
    # chmod 2750 /var/log/quagga
  5. Éditer le patron du fichier de configuration de l'outil vtysh.

    # cat /etc/quagga/vtysh.conf
    !
    ! Configuration file for vtysh.
    !
    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. Dès que l'instruction service integrated-vtysh-config est active, le fichier /etc/quagga/Quagga.conf devient de fichier de configuration commun à l'ensemble des démons actifs. Pour autant, les fichiers de configuration individuels proposés ci-dessous sont toujours nécessaires ; notamment pour distinguer les fichiers de journalisations spécifiques à chaque protocole.

  6. Éditer le patron du fichier de configuration du démon zebra en fixant les paramètres de connexion à utiliser pour y accéder séparément de la console unifiée.

    # cat zebra.conf
    ! -*- zebra -*-
    !
    hostname R1-zebra
    password zebra
    enable password zebra
    !
    log file /var/log/quagga/zebra.log
  7. Éditer le patron du fichier de configuration du démon ospfd en fixant les paramètres de connexion à utiliser pour y accéder séparément de la console unifiée.

    # cat ospfd.conf
    ! -*- ospfv2 -*-
    !
    hostname R1-ospfd
    password zebra
    enable password zebra
    !
    log file /var/log/quagga/ospfd.log
  8. Éditer le patron du fichier de configuration du démon ospf6d en fixant les paramètres de connexion à utiliser pour y accéder séparément de la console unifiée.

    # cat ospf6d.conf
    ! -*- ospfv3 -*-
    !
    hostname R1-ospf6d
    password zebra
    enable password zebra
    !
    log file /var/log/quagga/ospf6d.log
  9. Activer et lancer les services correspondant aux trois démons : zebra, ospfd et ospf6d.

    # systemctl enable zebra
    
    # systemctl enable ospfd
    
    # systemctl enable ospf6d
    
    # systemctl start zebra
    
    # systemctl start ospfd
    
    # systemctl start ospf6d
  10. 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.
  11. 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...
    Integrated configuration saved to /etc/quagga/Quagga.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é.

    # grep -1 bandwidth /etc/quagga/Quagga.conf
    interface eth0
     bandwidth 1000000
    !
    interface eth0.12
     bandwidth 1000000
    !
    interface eth0.13
     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.