3. Configurer les Routeurs Hub

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

  • Gérer les sessions PPPoE avec les Spoke

  • Filtrer et traduire les adresses sources (NAT) pour le trafic sortant vers l'Internet

  • Annoncer les routes vers les réseaux distants via OSPF

3.1. Configurer les serveurs PPPoE

Les tâches à réaliser sont :

  • Activer le routage

  • Activer la traduction des adresses sources vers l'Internet

  • Installer le paquet pppoe

  • Paramétrer le fichier /etc/ppp/pppoe-server-options.

  • Créer les unités systemd pour le lancement des serveurs PPPoE

Voici un extrait des questions du support de travaux pratiques Topologie Hub & Spoke avec le protocole PPPoE.

Q1.

Comment activer le routage dans le sous-système réseau du noyau Linux ?

Utiliser la commande sysctl pour effectuer des recherches et identifier les paramètres utiles. Par exemple :

sudo sysctl -a -r ".*forward.*"

Il est dorénavant recommandé de créer un fichier de configuration spécifique par fonction. C'est la raison pour laquelle on crée un nouveau fichier /etc/sysctl.d/10-routing.conf.

cat << EOF | sudo tee /etc/sysctl.d/10-routing.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.log_martians=1
EOF

Attention ! N'oubliez pas d'appliquer les nouvelles valeurs des paramètres de configuration.

sudo sysctl --system

Q2.

Comment assurer la traduction d'adresses sources pour tous les flux réseaux sortants sur le réseau d'infrastructure (VLAN rouge) ?

Rechercher dans des exemples de configuration nftables avec la fonction MASQUERADE.

Voici un exemple de création du fichier /etc/nftables.conf avec le jeu d'instructions qui assure la traduction d'adresses sources pour IPv4 et IPv6.

cat << 'EOF' | sudo tee /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset

# Define variables
define RED_VLAN = enp0s1.360

table inet nat {
    chain postrouting {
        type nat hook postrouting priority 100;
        oifname $RED_VLAN counter packets 0 bytes 0 masquerade
    }
}
EOF
[Avertissement] Avertissement

Il faut impérativement changer le nom d'interface en utilisant le numéro de VLAN attribué dans le plan d'adressage des travaux pratiques.

La création de ce fichier de règles n'est pas suffisante. Il faut appliquer les règles contenues dans le fichier.

sudo nft -f /etc/nftables.conf

Il faut aussi activer ce service pour assurer le chargement automatique des règles de filtrage au démarrage.

sudo systemctl enable --now nftables.service
sudo systemctl status nftables.service

Q3.

Quel paquet spécifique à la gestion du dialogue PPPoE à installer sur le routeur Hub ?

Rechercher dans le catalogue des paquets, la référence pppoe.

apt search ^pppoe

Le résultat de la commande apt show pppoe montre que c'est bien le paquet pppoe qui répond au besoin. On peut donc l'installer.

sudo apt -y install pppoe

Q4.

Dans quel fichier sont stockés les paramètres d'identité et d'authentification utilisés par le protocole EAP pour la méthode CHAP ?

Consulter les pages de manuels du démon pppd à la section AUTHENTICATION.

C'est le fichier /etc/ppp/chap-secrets qui contient les couples login/password utilisés lors de l'authentification.

Voici un exemple du contenu de ce fichier.

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"spoke_site1"   *               "0r4ng3_1"              *
"spoke_site2"   *               "0r4ng3_2"              *

Q5.

Dans quel fichier sont stockés les paramètres passés au démon pppd lors du lancement du serveur PPPoE ?

Consulter les pages de manuels de l'outil pppoe-server.

C'est le fichier /etc/ppp/pppoe-server-options qui contient la liste des paramètres utilisés lors du dialogue PPP.

Ce fichier contient tous les paramètres communs aux deux démons pppd qui sont lancés via pppoe-server. Voici comment créer le fichier.

cat << 'EOF' | sudo tee /etc/ppp/pppoe-server-options
# Gestion de session avec PAM
login
# Authentification EAP
require-eap
# Le Routeur Hub détient déjà une route par défaut
nodefaultroute
# Envoi de l'adresse de résolution DNS avec les adresses IPv4
ms-dns 172.16.0.2
# Ajout du protocole IPv6
+ipv6
# Informations détaillées dans la journalisation
debug
# Options préconisées par la documentation
noaccomp
default-asyncmap
nodeflate
nopcomp
novj
novjccomp
lcp-echo-interval 10
EOF

Q6.

Comment créer les comptes utilisateurs locaux sur le routeur Hub sachant qu'ils ne sont autorisés ni à se connecter ni à avoir un répertoire personnel ?

Consulter les options de la commande adduser.

Voici un exemple dans le contexte de la maquette.

sudo adduser --gecos 'Spoke 1' --disabled-login --no-create-home spoke_site1
sudo adduser --gecos 'Spoke 2' --disabled-login --no-create-home spoke_site2

Q7.

Quel paramètre supplémentaire doit être ajouté à la configuration de la commande pppoe-server pour distinguer les échanges entre les deux routeurs Spoke ?

Relativement au support Routage inter-VLAN et protocole PPPoE, il est essentiel de définir correctement les routes statiques vers les réseaux d'extrémité de chaque routeur Spoke.

Consulter les options de la commande pppoe-server.

L'option -u permet de désigner une “unité“ qui sert à nommer l'interface. Par exemple, -u 0 correspond à l'interface ppp0.

Q8.

Comment créer deux nouvelles unités systemd responsables du lancement des processus pppoe-server ?

Consulter la page systemd Services et rechercher la procédure à suivre pour ajouter un service au lancement du système.

On commence par la création du fichier de service appelé : /etc/systemd/system/pppoe-server.service qui contient toutes les directives de lancement du processus pppoe-server avec les paramètres d'adressage du lien point à point.

Voici un exemple de création du fichier d'unité systemd pour le premier service.

cat << 'EOF' | sudo tee /etc/systemd/system/pppoe-server1.service
[Unit]
Description=PPPoE Server
After=systemd-networkd.service
Wants=systemd-networkd.service
BindsTo=sys-subsystem-net-devices-enp0s1.441.device
After=sys-subsystem-net-devices-enp0s1.441.device

[Service]
Type=forking
ExecCondition=/bin/sh -c '[ "$(systemctl show --property MainPID --value pppoe-server1.service)" = "0" ]'
ExecStart=/usr/sbin/pppoe-server -I enp0s1.441 -C BRAS -L 10.44.1.1 -R 10.44.1.2 -N 1 -u 0
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Voici un exemple de création du fichier d'unité systemd pour le second service.

cat << 'EOF' | sudo tee /etc/systemd/system/pppoe-server2.service
[Unit]
Description=PPPoE Server
After=systemd-networkd.service
Wants=systemd-networkd.service
BindsTo=sys-subsystem-net-devices-enp0s1.443.device
After=sys-subsystem-net-devices-enp0s1.443.device

[Service]
Type=forking
ExecCondition=/bin/sh -c '[ "$(systemctl show --property MainPID --value pppoe-server2.service)" = "0" ]'
ExecStart=/usr/sbin/pppoe-server -I enp0s1.443 -C BRAS -L 10.44.3.1 -R 10.44.3.2 -N 1 -u 1
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Q9.

Comment activer les deux nouveaux services et contrôler leur état après lancement ?

Consulter la page systemd Services et rechercher la procédure à suivre pour activer et lancer un service.

On commence par la relecture de la liste des services disponibles par le gestionnaire systemd.

sudo systemctl daemon-reload

On active les nouveaux services.

for i in {1..2}; do sudo systemctl enable pppoe-server$i.service; done

On lance ce nouveau service.

for i in {1..2}; do sudo systemctl start pppoe-server$i.service; done

On vérifie que l'opération s'est déroulée correctement.

for i in {1..2}; do systemctl status pppoe-server$i.service; done

En l'état actuel de la configuration, aucune session PPP n'a encore été établie. Il faut maintenant passer à la configuration réseau du routeur Spoke pour avancer dans l'utilisation du protocole PPP.

3.2. Installer et configurer FRR

Les tâches à réaliser sont :

  • Installer et préparer les services FRRouting

  • Activer les démons des protocoles OSPFv2 pour IPv4 et OSPFv3 pour IPv6

Voici un extrait des questions du support de travaux pratiques Introduction au routage dynamique OSPF avec FRRouting.

Q10.

Comment installer le paquet frr à partir du dépôt du site FRRouting Project ?

Pour installer le paquet FRR, on doit ajouter un nouveau dépôt au système.

On commence par ajouter la clé de signature des paquets à la configuration du gestionnaire.

sudo apt -y install curl gpg
curl -s https://deb.frrouting.org/frr/keys.asc | \
sudo gpg -o /usr/share/keyrings/frr-keyring.gpg --dearmor

On créé ensuite un nouveau fichier de liste de sources de paquets qui fait référence à cette clé de signature.

echo "deb [signed-by=/usr/share/keyrings/frr-keyring.gpg] \
https://deb.frrouting.org/frr bookworm frr-stable" | \
sudo tee /etc/apt/sources.list.d/frr.list

Avant de lancer l'installation des paquets de la suite FRRouting, on doit mettre à jour le catalogue local.

sudo apt update
sudo apt -y install frr frr-pythontools

On peut afficher les informations sur le paquet frr.

apt show ^frr$

Sans configuration particulière, les services zebra et staticd sont lancés. Aucun protocole de routage dynamique n'est activé.

systemctl status frr
● frr.service - FRRouting
     Loaded: loaded (/usr/lib/systemd/system/frr.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-11-02 16:17:42 CET; 5min ago
 Invocation: a1d3f0e79647471bb1a17069f3f4c69a
       Docs: https://frrouting.readthedocs.io/en/latest/setup.html
    Process: 2098 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS)
   Main PID: 2107 (watchfrr)
     Status: "FRR Operational"
      Tasks: 8 (limit: 1032)
     Memory: 14.9M (peak: 28.2M)
        CPU: 416ms
     CGroup: /system.slice/frr.service
             ├─2107 /usr/lib/frr/watchfrr -d -F traditional zebra mgmtd staticd
             ├─2117 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000
             ├─2122 /usr/lib/frr/mgmtd -d -F traditional -A 127.0.0.1
             └─2124 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1

nov. 02 16:17:42 R2 staticd[2124]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
nov. 02 16:17:42 R2 frrinit.sh[2144]: [2144|staticd] done
nov. 02 16:17:42 R2 zebra[2117]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
nov. 02 16:17:42 R2 frrinit.sh[2128]: [2128|zebra] done
nov. 02 16:17:42 R2 watchfrr[2107]: [QDG3Y-BY5TN] zebra state -> up : connect succeeded
nov. 02 16:17:42 R2 watchfrr[2107]: [QDG3Y-BY5TN] mgmtd state -> up : connect succeeded
nov. 02 16:17:42 R2 watchfrr[2107]: [QDG3Y-BY5TN] staticd state -> up : connect succeeded
nov. 02 16:17:42 R2 watchfrr[2107]: [KWE5Q-QNGFC] all daemons up, doing startup-complete notify
nov. 02 16:17:42 R2 frrinit.sh[2098]: Started watchfrr.
nov. 02 16:17:42 R2 systemd[1]: Started frr.service - FRRouting.

Q11.

Comment vérifier que la console unifiée du service frr est active ?

Afficher le contenu du fichier /etc/frr/vtysh.conf et vérifier qu'il contient l'entrée service integrated-vtysh-config.

L'accès à cette console unifiée est important puisqu'il permet d'utiliser une console unique pour les trois démons qui sont utilisés dans la suite des manipulations : zebra, ospfd et ospf6d.

Voici un exemple pour un routeur de la maquette.

sudo grep "service integrated-vtysh-config" /etc/frr/vtysh.conf
service integrated-vtysh-config

Q12.

Comment ajouter l'utilisateur etu aux groupes frr et frrvty ?

Utiliser la commande adduser.

Une fois que l'utilisateur appartient à ces groupes, il a un accès direct à la console de configuration des protocoles actifs.

Comme dans les autres travaux pratiques de la série, on utilise une boucle.

for grp in frr frrvty
do
    sudo adduser etu $grp
done

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

On vérifie l'appartenance aux groupes avec la commande groups.

groups
etu adm sudo users frrvty frr

Q13.

Comment activer les deux démons des protocoles OSPFv2 et OSPFv3 ?

Consulter le fichier de configuration : /etc/frr/daemons.

Il faut remplacer les clés no en yes pour les démons des deux versions du protocole OSPF.

sudo sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons
sudo sed -i 's/ospf6d=no/ospf6d=yes/' /etc/frr/daemons
sudo systemctl restart frr

On peut alors afficher l'état du service frr et vérifier que les nouveaux démons de routage dynamique OSPF sont bien activés.

systemctl status frr
● frr.service - FRRouting
     Loaded: loaded (/usr/lib/systemd/system/frr.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-11-02 17:40:32 CET; 6s ago
 Invocation: 84e33888211f45f297c9135cace76751
       Docs: https://frrouting.readthedocs.io/en/latest/setup.html
    Process: 2467 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS)
   Main PID: 2476 (watchfrr)
     Status: "FRR Operational"
      Tasks: 12 (limit: 1032)
     Memory: 23M (peak: 34.8M)
        CPU: 380ms
     CGroup: /system.slice/frr.service
             ├─2476 /usr/lib/frr/watchfrr -d -F traditional zebra mgmtd ospfd ospf6d staticd
             ├─2488 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000
             ├─2493 /usr/lib/frr/mgmtd -d -F traditional -A 127.0.0.1
             ├─2495 /usr/lib/frr/ospfd -d -F traditional -A 127.0.0.1
             ├─2498 /usr/lib/frr/ospf6d -d -F traditional -A ::1
             └─2501 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1

nov. 02 17:40:32 R2 mgmtd[2493]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
nov. 02 17:40:32 R2 frrinit.sh[2504]: [2504|mgmtd] done
nov. 02 17:40:32 R2 watchfrr[2476]: [QDG3Y-BY5TN] zebra state -> up : connect succeeded
nov. 02 17:40:32 R2 watchfrr[2476]: [QDG3Y-BY5TN] mgmtd state -> up : connect succeeded
nov. 02 17:40:32 R2 watchfrr[2476]: [QDG3Y-BY5TN] ospfd state -> up : connect succeeded
nov. 02 17:40:32 R2 watchfrr[2476]: [QDG3Y-BY5TN] ospf6d state -> up : connect succeeded
nov. 02 17:40:32 R2 watchfrr[2476]: [QDG3Y-BY5TN] staticd state -> up : connect succeeded
nov. 02 17:40:32 R2 watchfrr[2476]: [KWE5Q-QNGFC] all daemons up, doing startup-complete notify
nov. 02 17:40:32 R2 frrinit.sh[2467]: Started watchfrr.
nov. 02 17:40:32 R2 systemd[1]: Started frr.service - FRRouting.

On peut aussi lister les démons actifs à partir de la console du service.

vtysh
Hello, this is FRRouting (version 10.1.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

R2# sh daemons
 mgmtd zebra ospfd ospf6d watchfrr staticd

Une fois la partie configuration initiale traitée, passons à la maquette de la synthèse.

Q14.

Quel est l'état courant du routage à ce stade de la configuration ?

Afficher les tables de routage des routeurs Hub avec les liens PPP actifs. Les échanges via le protocole OSPF ne sont pas encore configurés.

Dans le contexte de la maquette, l'affichage des deux tables de routage du routeur Hub numéro 1 montre des entrées codées avec les clés suivantes.

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

K>* 0.0.0.0/0 [0/0] via 172.20.120.1, enp0s1.120, 00:00:361
L>* 10.47.2.1/32 is directly connected, ppp0, 00:00:362
C>* 10.47.2.2/32 is directly connected, ppp0, 00:00:36
L>* 10.47.4.1/32 is directly connected, ppp1, 00:00:363
C>* 10.47.4.2/32 is directly connected, ppp1, 00:00:36
C>* 172.20.70.0/29 is directly connected, enp0s1.470, 00:00:364
L>* 172.20.70.1/32 is directly connected, enp0s1.470, 00:00:36
C>* 172.20.120.0/23 is directly connected, enp0s1.120, 00:00:365
L>* 172.20.120.2/32 is directly connected, enp0s1.120, 00:00:36
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

K>* ::/0 [0/1024] via fe80:78::1, enp0s1.120 onlink, 00:31:491
K>* 2001:678:3fc:78::/64 [0/512] is directly connected, enp0s1.120, 00:31:49
L>* 2001:678:3fc:78:baad:caff:fefe:5/128 is directly connected, enp0s1.120, 00:31:49
C * fe80::/64 is directly connected, enp0s1.120, 00:31:49
C * fe80::/64 is directly connected, enp0s1.474, 00:31:49
C * fe80::/64 is directly connected, enp0s1.471, 00:31:49
C * fe80::/64 is directly connected, enp0s1.472, 00:31:49
C * fe80::/64 is directly connected, enp0s1.473, 00:31:49
C * fe80::/64 is directly connected, enp0s1.470, 00:31:49
C>* fe80::/64 is directly connected, enp0s1, 00:31:49
C>* fe80::7188:100d:7562:f6d/128 is directly connected, ppp0, 00:31:492
C>* fe80::c00f:a3d0:f2c5:b154/128 is directly connected, ppp1, 00:31:493
C>* fe80:1d6::/64 is directly connected, enp0s1.470, 00:31:494
C>* fe80:1d7::/64 is directly connected, enp0s1.471, 00:31:49
C>* fe80:1d9::/64 is directly connected, enp0s1.473, 00:31:49

1 1

La route par défaut est marquée K>* (kernel) parce qu'elle est importée de la configuration système. Elle n'est pas gérée par un service FRR.

2 3 5

Avec IPv4, toutes les entrées des interfaces actives sont marquées C>* (connected). Le service FRR a importé les entrées du système et peut alimenter les démons de protocole de routage dynamique avec ces informations.

4 4

Le nouveau réseau de collecte qui va servir aux échanges OSPF doit être présent dès maintenant avant d'activer le protocole de routage dynamique sur les interfaces.

2 3 4

Avec IPv6, les réseaux d'interconnexion ou de transit n'utilisent que des adresses de lien local.

3.3. Configurer les démons OSPFv2 et OSPFv3

Les tâches à réaliser sont :

  • Configurer les identifiants de routeur

  • Activer OSPF sur les interfaces du réseau de collecte

Voici un jeu de questions extraites du support de travaux pratiques Introduction au routage dynamique OSPF avec FRRouting

Q15.

Quelles sont les opérations à effectuer pour activer les protocoles de routage OSPFv2 et OSPFv3 ? Comment affecter manuellement l'identifiant du routeur ?

[Avertissement] Avertissement

Les identifiants à utiliser lors de la séance de travaux pratiques sont donnés dans les tableaux des plans d'adressage.

La liste des commandes utiles en mode configuration dans la console vtysh est la suivante.

router ospf
router ospf6
ospf router-id X.X.X.X
ospf6 router-id X.X.X.X
log detail

Toujours à partir de la console vtysh, on accède au mode configuration à l'aide de la commande conf t. Voici un exemple de séquence sur le troisième routeur.

R1# conf t
R1(config)# router ospf
R1(config-router)# ospf router-id 1.0.0.4
R1(config-router)# log detail
R1(config-router)# ^Z
R1# conf t
R1(config)# router ospf6
R1(config-ospf6)# ospf6 router-id 1.0.0.6
R1(config-ospf6)# log detail
R1(config-ospf6)# ^Z

Une fois que chaque démon de routage OSPF possède un identifiant unique, on peut afficher les propriétés du protocole de routage dynamique même si aucun échange de route n'a encore eu lieu.

sh run ospfd
Building configuration...

Current configuration:
!
frr version 10.1.1
frr defaults traditional
hostname R1
log syslog informational
service integrated-vtysh-config
!
router ospf
 ospf router-id 1.0.0.4
 log-adjacency-changes detail
exit
!
end
sh run ospf6d
Building configuration...

Current configuration:
!
frr version 10.1.1
frr defaults traditional
hostname R1
log syslog informational
service integrated-vtysh-config
!
router ospf6
 ospf6 router-id 1.0.0.6
 log-adjacency-changes detail
exit
!
end

Le choix de codage des identifiants OSPF a pour but d'éviter une confusion avec les adresses des réseaux actifs sur chaque routeur.

Si on reprend les instructions de la question précédente, on obtient l'état de chacun des démons de protocole de routage dynamique.

sh ip ospf
 OSPF Routing Process, Router ID: 1.0.0.4
 Supports only single TOS (TOS0) routes
 This implementation conforms to RFC2328
 RFC1583Compatibility flag is disabled
 OpaqueCapability flag is disabled
 Initial SPF scheduling delay 0 millisec(s)
 Minimum hold time between consecutive SPFs 50 millisec(s)
 Maximum hold time between consecutive SPFs 5000 millisec(s)
 Hold time multiplier is currently 1
 SPF algorithm has not been run
 SPF timer is inactive
 LSA minimum interval 5000 msecs
 LSA minimum arrival 1000 msecs
 Write Multiplier set to 20
 Refresh timer 10 secs
 Maximum multiple paths(ECMP) supported 256
 Administrative distance 110
 Number of external LSA 0. Checksum Sum 0x00000000
 Number of opaque AS LSA 0. Checksum Sum 0x00000000
 Number of areas attached to this router: 0
 All adjacency changes are logged
sh ipv6 ospf
 OSPFv3 Routing Process (0) with Router-ID 1.0.0.6
 Running 00:09:20
 LSA minimum arrival 1000 msecs
 Maximum-paths 256
 Administrative distance 110
 Initial SPF scheduling delay 0 millisec(s)
 Minimum hold time between consecutive SPFs 50 millsecond(s)
 Maximum hold time between consecutive SPFs 5000 millsecond(s)
 Hold time multiplier is currently 1
 SPF algorithm has not been run
 SPF timer is inactive
 Number of AS scoped LSAs is 0
 Number of areas in this router is 0
 Authentication Sequence number info
  Higher sequence no 0, Lower sequence no 0
 All adjacency changes are logged

L'affectation des identifiants des démons de routage OSPF doit être réalisée sur les trois routeurs de la topologie. Ces identifiants seront très utiles et importants dès qu'il faudra afficher les listes de routeurs voisins au sens du protocole OSPF.

Q16.

Comment activer les protocoles de routage OSPFv2 et OSPFv3 pour les réseaux d'interconnexion de chaque routeur ?

Il faut activer le protocole de routage dynamique sur chaque interface de la topologie qui participe à la construction du triangle.

La liste des commandes utiles en mode console et en mode configuration dans vtysh est la suivante.

show ip route connected
show ip route ospf
show ipv6 route connected
show ipv6 route ospf
ip ospf area 0
ipv6 ospf6 area 0

Voici un exemple de séquence d'instructions pour le routeur R1.

On commence par lister les entrées marquées C ou connected des tables de routage IPv4 et IPv6 de façon à reconnaître les deux côtés de la topologie triangle connus du “sommet” R1.

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

C>* 10.44.0.0/29 is directly connected, enp0s1.440, 01:26:12
C>* 10.44.1.0/29 is directly connected, enp0s1.441, 01:26:12
C>* 192.168.104.128/29 is directly connected, enp0s1.360, 01:26:12
sh ipv6 route connected
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

C>* 2001:678:3fc:168::/64 is directly connected, enp0s1.360, 01:30:26
C * fe80::/64 is directly connected, enp0s1.360, 01:30:25
C * fe80::/64 is directly connected, enp0s1.440, 01:30:26
C * fe80::/64 is directly connected, enp0s1, 01:30:26
C>* fe80::/64 is directly connected, enp0s1.441, 01:30:26

À partir de ces affichages, on sait que l'on doit activer les protocoles OSPF pour les deux sous-interfaces : enp0s1.440 et enp0s1.441.

R1# conf t
R1(config)# int enp0s1.440
R1(config-if)# ip ospf area 0
R1(config-if)# ipv6 ospf6 area 0
R1(config-if)# int enp0s1.441
R1(config-if)# ip ospf area 0
R1(config-if)# ipv6 ospf6 area 0
R1(config-if)# ^Z

Ces opérations doivent être répétées sur les trois routeurs de la topologie.

Q17.

Comment visualiser l'état des interfaces actives pour chaque processus de protocole de routage dynamique OSPFv2 ou OSPFv3 ?

Les interfaces sont dites actives pour les protocoles OSPFv2 ou OSPFv3 dès qu'elles ont été ajoutées aux processus de routage dynamique en précisant l'aire à laquelle elles appartiennent.

La liste des commandes utiles dans la console vtysh est la suivante.

show ip ospf interface
show ipv6 ospf6 interface

En prenant l'exemple du routeur R2, on obtient les résultats suivants.

R2# sh ip ospf interface enp0s1.440
enp0s1.440 is up1
  ifindex 4, MTU 1500 bytes, BW 0 Mbit2 <UP,LOWER_UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.44.0.2/29, Broadcast 10.44.0.7, Area 0.0.0.0
  MTU mismatch detection: enabled
  Router ID 2.0.0.43, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State Backup, Priority 1
  Designated Router (ID) 1.0.0.4 Interface Address 10.44.0.1/294
  Backup Designated Router (ID) 2.0.0.4, Interface Address 10.44.0.25
  Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters
  Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5
    Hello due in 5.086s
  Neighbor Count is 1, Adjacent neighbor count is 16
  Graceful Restart hello delay: 10s

La copie d'écran ci-dessus permet d'identifier les éléments suivants :

1

L'indicateur is up confirme que l'interface est bien active pour le protocole de routage. Cela signifie que les messages du protocole OSPF sont transmis sur cette interface et que des échanges avec des routeurs OSPF voisins sur ce réseau peuvent avoir lieu.

2

Le fait que la bande passante soit “vue” comme étant nulle montre que le calcul de coût de lien ne prend pas en compte ce facteur. Ce point sera repris dans le calcul des coûts à partir d'une référence définie dans la configuration des démons OSPF.

3

On retrouve ici l'identifiant du routeur transmis vers les autres routeurs voisins.

4

Cette ligne identifie le routeur OSPF R1 comme étant le routeur de référence sur ce réseau IPv4. Dans notre cas, la topologie triangle ne comprend qu'un seul routeur voisin OSPF par réseau, ce qui limite l'utilité d'un routeur de référence pour les calculs des meilleurs routes. Si on avait plusieurs routeurs présents sur un même réseau, le rôle de référent serait essentiel pour limiter les échanges de bases de données de routage lors des calculs de tables de topologie.

5

Cette ligen identifie le routeur OSPF R2 comme étant le routeur de référence de secours sur ce réseau. Comme dans le cas précédent, l'utilisation d'une topologie triangle limite l'importance de ce rôle comme il n'y a que deux routeurs pour chaque côté de cette topologie.

6

Le routeur OSPF a un routeur voisin sur ce réseau. Il s'agit du routeur R1.

On reprend la même démarche pour le protocole OSPFv3.

R2# sh ipv6 ospf6 interface enp0s1.440
enp0s1.440 is up1, type BROADCAST
  Interface ID: 4
  Internet Address:
    inet : 10.44.0.2/29
    inet6: fe80::baad:caff:fefe:6/64
    inet6: fe80::1b8:2/64
  Instance ID 0, Interface MTU 1500 (autodetect: 1500)
  MTU mismatch detection: enabled
  Area ID 0.0.0.0, Cost 10
  State BDR, Transmit Delay 1 sec, Priority 1
  Timer intervals configured:
   Hello 10(8.803), Dead 40, Retransmit 5
  DR: 1.0.0.6 BDR: 2.0.0.42
  Number of I/F scoped LSAs is 2
    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

Relativement, à l'affichage des informations sur l'association entre une interface réseau et le démon de protocole OSPFv2 pour IPv4, l'affichage pour OSPFv3 et IPv6 est plus succinct.

1

Cette information est identique à celle du démon OSPFv2. L'interface est associée et active. Les messages du protocole OSPFv3 peuvent être échangés sur le réseau auquel cette interface appartient.

2

Les identifiants des routeurs référence et de secours sont affichés sur une seule ligne.

Q18.

Comment vérifier que l'identifiant de routeur a correctement été attribué ?

À partir des commandes proposées et de résultats des questions précédentes, rechercher l'information demandée.

Quelque soit la version du protocole OSPF, l'identifiant de routeur est toujours codé sous la forme d'une adresse IPv4.

Pour valider la conformité entre les identifiants définis dans le plan d'adressage des travaux pratiques et les valeurs effectivement utilisées par les deux démons de routage dynamique, on affiche le contenu des base de topologie du protocole.

Avec le démon OSPFv2, l'identification du routeur est immédiate.

R1# sh ip ospf database
       OSPF Router with ID (1.0.0.4)

                Router Link States (Area 0.0.0.0)

Link ID         ADV Router      Age  Seq#       CkSum  Link count
1.0.0.4        1.0.0.4          884 0x8000001f 0x3bee 2
2.0.0.4        2.0.0.4         1016 0x8000001d 0xab78 2
3.0.0.4        3.0.0.4          843 0x8000001d 0xd34a 2

                Net Link States (Area 0.0.0.0)

Link ID         ADV Router      Age  Seq#       CkSum
10.44.0.1      1.0.0.4          994 0x80000018 0xe61c
10.44.1.1      1.0.0.4          984 0x80000018 0xe61a
10.44.2.3      3.0.0.4          843 0x80000018 0xbc3e

En revanche, le démon OSPFv3 ne donne pas d'information sur l'identifiant du processus en cours. L'affichage est cependant beaucoup plus exhaustif avec les informations par interface.

R1# sh ipv6 ospf6 database
        Area Scoped Link State Database (Area 0)

Type LSId           AdvRouter       Age   SeqNum                        Payload
Rtr  0.0.0.0        1.0.0.6        1012 8000001b                1.0.0.6/0.0.0.5
Rtr  0.0.0.0        1.0.0.6        1012 8000001b                1.0.0.6/0.0.0.3
Rtr  0.0.0.0        2.0.0.4        1010 80000019                1.0.0.6/0.0.0.5
Rtr  0.0.0.0        2.0.0.4        1010 80000019                3.0.0.6/0.0.0.4
Rtr  0.0.0.0        3.0.0.6        1010 80000019                1.0.0.6/0.0.0.3
Rtr  0.0.0.0        3.0.0.6        1010 80000019                3.0.0.6/0.0.0.4
Net  0.0.0.3        1.0.0.6        1088 80000017                        1.0.0.6
Net  0.0.0.3        1.0.0.6        1088 80000017                        3.0.0.6
Net  0.0.0.5        1.0.0.6        1012 80000017                        1.0.0.6
Net  0.0.0.5        1.0.0.6        1012 80000017                        2.0.0.4
Net  0.0.0.4        3.0.0.6        1010 80000017                        3.0.0.6
Net  0.0.0.4        3.0.0.6        1010 80000017                        2.0.0.4

        I/F Scoped Link State Database (I/F enp0s1.440 in Area 0)1

Type LSId           AdvRouter       Age   SeqNum                        Payload
Lnk  0.0.0.5        1.0.0.6         303 8000001a                    fe80::1b8:1
Lnk  0.0.0.4        2.0.0.4        1019 80000017                    fe80::1b8:2

        I/F Scoped Link State Database (I/F enp0s1.441 in Area 0)2

Type LSId           AdvRouter       Age   SeqNum                        Payload
Lnk  0.0.0.3        1.0.0.6         288 8000001a                    fe80::1b9:1
Lnk  0.0.0.3        3.0.0.6        1090 80000017                    fe80::1b9:3

        AS Scoped Link State Database

Type LSId           AdvRouter       Age   SeqNum                        Payload

1

Sur le côté R1-R2 du triangle, on utilise le VLAN 440 et les identifiants de routeurs correspondent.

2

Sur le côté R1-R3 du triangle, on utilise le VLAN 441 et les identifiants de routeurs correspondent.

Q19.

Comment identifier le type de réseau d'une interface ?

À partir des résultats des questions précédentes, rechercher l'information demandée.

Comme on utilise des liens Ethernet dans ce contexte de travaux pratiques, le type le plus important est le réseau de diffusion ou BROADCAST.

R3# sh ip ospf interface enp0s1.442
enp0s1.442 is up
  ifindex 4, MTU 1500 bytes, BW 0 Mbit <UP,LOWER_UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.44.2.3/29, Broadcast 10.44.2.7, Area 0.0.0.0
  MTU mismatch detection: enabled
  Router ID 3.0.0.4, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 3.0.0.4 Interface Address 10.44.2.3/29
  Backup Designated Router (ID) 2.0.0.4, Interface Address 10.44.2.2
  Saved Network-LSA sequence number 0x80000019
  Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters
  Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5
    Hello due in 1.361s
  Neighbor Count is 1, Adjacent neighbor count is 1
  Graceful Restart hello delay: 10s
R3# sh ipv6 ospf6 interface enp0s1.442
enp0s1.442 is up, type BROADCAST
  Interface ID: 4
  Internet Address:
    inet : 10.44.2.3/29
    inet6: fe80::baad:caff:fefe:7/64
    inet6: fe80::1ba:3/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:
   Hello 10(9.055), Dead 40, Retransmit 5
  DR: 3.0.0.6 BDR: 2.0.0.4
  Number of I/F scoped LSAs is 2
    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

Q20.

Comment obtenir la liste du ou des routeurs voisins pour chaque processus de protocole de routage dynamique OSPFv2 ou OSPFv3 ?

Dès qu'une interface est active, il y a émission de paquets HELLO et si un autre routeur avec une interface active envoie aussi des paquets HELLO dans le même VLAN, les deux routeurs cherchent à former une adjacence.

La liste des commandes utiles dans la console vtysh est la suivante.

show ip ospf neighbor
show ipv6 ospf6 neighbor

À partir du routeur R1, voici un exemple de liste de routeurs OSPF voisins dans laquelle on reconnaît les identifiants des routeurs R2 et R3.

R1# sh ip ospf neighbor
Neighbor ID     Pri State           Up Time         Dead Time Address         Interface               RXmtL RqstL DBsmL
2.0.0.4           1 Full/Backup     11h34m21s         37.712s 10.44.0.2       enp0s1.440:10.44.0.1    0     0     0
3.0.0.4           1 Full/Backup     11h35m30s         33.792s 10.44.1.3       enp0s1.441:10.44.1.1    0     0     0
R1# sh ipv6 ospf6 neighbor
Neighbor ID     Pri    DeadTime    State/IfState         Duration I/F[State]
2.0.0.4           1    00:00:37     Full/BDR             11:36:00 enp0s1.440[DR]
3.0.0.6           1    00:00:37     Full/BDR             11:37:15 enp0s1.441[DR]

Les deux listes de voisins donnent une information essentielle sur l'état de protocole de routage avec le mot clé Full. Cet état indique que deux routeurs adjacents ont entièrement synchronisé leurs bases de données d’état de liens, permettant ainsi un échange complet des informations de routage.

Pour achever cette partie de la synthèse, il reste à étudier la redistribution des routes connectées dans les démons de routage OSPFv2 et OSPFv3.

Q21.

Quel est l'état des voisins OSPF à ce stade de la configuration ?

Afficher la liste des voisins OSPFv2 OSPFv3 sur l'un des deux routeurs Hub.

En se plaçant sur le second routeur Hub de la maquette, on obtient les informations suivantes.

sh ip ospf neighbor
Neighbor ID     Pri State     Up Time    Dead Time  Address      Interface              RXmtL RqstL DBsmL
1.0.0.4           1 Full/DR   23.841s      36.142s  172.20.70.1  enp0s1.470:172.20.70.2     0     0     0
sh ipv6 ospf6 neighbor
Neighbor ID     Pri    DeadTime    State/IfState         Duration I/F[State]
1.0.0.6           1    00:00:30     Full/DR              00:00:29 enp0s1.470[BDR]
[Note] Note

En l'état actuel des échanges OSPF, l'affichage des tables de routage ne montre aucune route apprise via routage dynamique. Il est donc nécessaire d'importer les routes des liaisons PPPoE dans la configuration des démons OSPF.

3.4. Redistribuer les routes connectées dans OSPF

Les tâches à réaliser sont :

  • Configurer la redistribution des routes connectées dans OSPF

  • Valider la présence des routes IPv4 de transit vers les routeurs Spoke

Q22.

Quelle est l'instruction qui permet de redistribuer les routes connectées dans les démons OSPF ?

Rechercher les options de l'instruction redistribute dans la documentation FRR à l'adresse FRRouting User Guide.

L'instruction redistribute est générique et s'emploie dans la configuration de tous les protocoles de routage. Voici un extrait de configuration pour chacun des deux démons OSPF.

sh run ospfd
Building configuration...

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

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

Q23.

Pourquoi choisir la redistribution des routes connectées ?

Il existe de nombreuses solutions pour intégrer des réseaux dans OSPF. Voici deux exemples :

  • Activer OSPF sur les interfaces PPP

  • Ajouter les adresses des réseaux de transit vers les routeurs Spoke.

Cela s'explique par les principes de la topologie Hub & Spoke. Un lien WAN sur lequel on établit une session PPPoE n'a pas de caractère permanent. Il faut donc trouver une solution qui permette au protocole de routage dynamique OSPF de fonctionner de façon optimale avec un nombre de routeurs Spoke variable.

Avec la maquette des travaux pratiques, chaque routeur Hub est relié à deux routeurs Spoke. Dans un contexte plus réaliste, le nombre de routeurs Spoke peut varier en fonction de l'ouverture ou de la fermeture de sites distants, et le fonctionnement du réseau de collecte ne doit pas être impacté par ces variations.

C'est la raison pour laquelle les variations du nombre de routes connectées sont gérées au niveau système avec les services PPP. Les changements sont automatiquement répercutés dans la base d'information FRR puis publiés par le protocole de routage dynamique OSPF. La redistribution des routes connectées répond parfaitement à ce besoin.

Q24.

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

Rechercher les entrées OSPF dans les tables de routage des deux routeurs Hub.

Voici ce que l'on observe sur le premier routeur de la maquette.

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.47.6.2/32 [110/20] via 172.20.70.2, enp0s1.470, weight 1, 00:46:51
O>* 10.47.8.2/32 [110/20] via 172.20.70.2, enp0s1.470, weight 1, 00:46:51
O   172.20.70.0/29 [110/10] is directly connected, enp0s1.470, weight 1, 03:43:32
O   172.20.120.0/23 [110/20] via 172.20.70.2, enp0s1.470, weight 1, 00:46:51

Dans le cas du protocole IPv6, la redistribution n'est pas visible puisque les réseaux de transit utilisent uniquement des adresses de lien local pour former les adjacences entre routeurs. La commande ci-dessous ne produit aucune sortie. Il faut attendre la mise en place des réseaux d'hébergement au delà des routeurs Spoke pour voir apparaître de nouvelles entrées dans la table de routage.

sh ipv6 route ospf