5. Configurer les démons OSPF Quagga

Dans cette section, on introduit les premières commandes de configuration du protocole de routage dynamique OSPF qui permettent d'activer le protocole puis d'ajouter des entrées de réseau dans la base de données de ce protocole.

Q5.

Comment peut-on contrôler que le protocole OSPF est actif ou non sur un routeur ?

Une fois la console vtysh ouverte, lancer les commandes de visualisation de l'état du protocole listées ci-dessous. Ces commandes peuvent être lancées sur chacun des trois routeurs.

show ip ospf
show ipv6 ospf6

Dans les informations données dans la copie d'écran ci-dessous, il apparaît que l'algorithme de calcul de topologie n'a pas encore été activé.

# vtysh

Hello, this is Quagga (version 1.2.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

R1# show ip ospf
 OSPF Routing Process not enabled
R1# show ipv6 ospf6
OSPFv3 is not running

Q6.

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. Voir Section 2, « Topologie réseau étudiée ».

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

router ospf
router ospf6
router-id X.X.X.X
log-adjacency-changes

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 premier routeur.

R1# conf t
R1(config)# router ospf
R1(config-router)#  ospf router-id 0.0.1.4
R1(config-router)#  log-adjacency-changes
R1(config-router)# exit
R1(config)# router ospf6
R1(config-ospf6)#  router-id 0.0.1.6
R1(config-ospf6)#  log-adjacency-changes
R1(config-ospf6)# ^Z

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 l'instruction de la question précédente, on obtient l'état de chacun des démons de protocole de routage dynamique.

R1# show ip ospf
 OSPF Routing Process, Router ID: 0.0.1.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
 Refresh timer 10 secs
 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
 Adjacency changes are logged
R1# show ipv6 ospf6
 OSPFv3 Routing Process (0) with Router-ID 0.0.1.6
 Running 00:12:11
 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
 Adjacency changes are logged

Q7.

Quelles sont les opérations à effectuer pour activer le protocole de routage OSPFv2 pour les réseaux IPv4 connus de chaque routeur ?

Il faut ajouter une entrée pour chaque préfixe réseau IPv4 de la topologie logique connu du routeur. On peut lister les entrées marquées C de la table de routage.

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

show ip route connected
router ospf
network A.B.C.D/MM area 0

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

R1# show ip route connected
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel, N - NHRP,
       > - selected route, * - FIB route

C>* 10.1.12.0/26 is directly connected, eth0.12
C>* 10.1.13.0/26 is directly connected, eth0.13
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.0.2.0/27 is directly connected, eth0
R1# conf t
R1(config)# router ospf
R1(config-router)# network 10.1.12.0/26 area 0
R1(config-router)# network 10.1.13.0/26 area 0
R1(config-router)# ^Z

Q8.

Quelles sont les opérations à effectuer pour activer le protocole de routage OSPFv3 pour les réseaux IPv6 connus de chaque routeur ?

Il faut ajouter une entrée pour chaque interface active de la topologie logique connue du routeur.

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

show ipv6 route connected
router ospf6
interface eth0.XX area 0.0.0.0

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

R1# sh ipv6 route connected
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv6, I - IS-IS, B - BGP, A - Babel, N - NHRP,
       > - selected route, * - FIB route

C>* ::1/128 is directly connected, lo
C>* 2001:678:3fc:a::/64 is directly connected, eth0
C>* 2001:678:3fc:c::/64 is directly connected, eth0.12
C>* 2001:678:3fc:d::/64 is directly connected, eth0.13
C * fe80::/64 is directly connected, eth0
C * fe80::/64 is directly connected, eth0.13
C>* fe80::/64 is directly connected, eth0.12
R1# conf t
R1(config)# router ospf6
R1(config-ospf6)# interface eth0.12 area 0.0.0.0
R1(config-ospf6)# interface eth0.13 area 0.0.0.0
R1(config-ospf6)# ^Z

Q9.

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

Les interfaces sont dites actives pour OSPFv2 dès qu'une entrée de réseau correspondant à l'adresse IPv4 d'interface est présente dans la configuration du protocole de routage.

Pour OSPFv3, c'est plus simple. Les interfaces sont explicitement activées dans la configuration du protocole de routage.

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

show ip ospf interface
show ipv6 ospf6 interface

En reprenant l'exemple du routeur R1, on obtient les résultats suivants.

R1# show ip ospf interface
eth0 is up
  ifindex 19, MTU 1500 bytes, BW 1000000 Kbit <UP,BROADCAST,RUNNING,MULTICAST>
  OSPF not enabled on this interface
eth0.12 is up
  ifindex 2, MTU 1500 bytes, BW 1000000 Kbit <UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.1.12.1/26, Broadcast 10.1.12.63, Area 0.0.0.0
  MTU mismatch detection:enabled
  Router ID 0.0.1.4, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State Backup, Priority 1
  Designated Router (ID) 0.0.2.4, Interface Address 10.1.12.2
  Backup Designated Router (ID) 0.0.1.4, Interface Address 10.1.12.1
  Saved Network-LSA sequence number 0x80000039
  Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters
  Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5
    Hello due in 8.858s
  Neighbor Count is 1, Adjacent neighbor count is 1
eth0.13 is up
  ifindex 3, MTU 1500 bytes, BW 1000000 Kbit <UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.1.13.1/26, Broadcast 10.1.13.63, Area 0.0.0.0
  MTU mismatch detection:enabled
  Router ID 0.0.1.4, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State Backup, Priority 1
  Designated Router (ID) 0.0.3.4, Interface Address 10.1.13.3
  Backup Designated Router (ID) 0.0.1.4, Interface Address 10.1.13.1
  Saved Network-LSA sequence number 0x80000029
  Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters
  Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5
    Hello due in 1.767s
  Neighbor Count is 1, Adjacent neighbor count is 1
lo is up
  ifindex 1, MTU 65536 bytes, BW 0 Kbit <UP,LOOPBACK,RUNNING>
  OSPF not enabled on this interface
R1# show ipv6 ospf6 interface
eth0 is up, type BROADCAST
  Interface ID: 19
   OSPF not enabled on this interface
eth0.12 is up, type BROADCAST
  Interface ID: 2
  Internet Address:
    inet : 10.1.12.1/26
    inet6: fe80::c828:72ff:fedf:3608/64
    inet6: 2001:678:3fc:c::1/64
  Instance ID 0, Interface MTU 1500 (autodetect: 1500)
  MTU mismatch detection: enabled
  Area ID 0.0.0.0, Cost 1
  State BDR, Transmit Delay 1 sec, Priority 1
  Timer intervals configured:
   Hello 10, Dead 40, Retransmit 5
  DR: 0.0.2.6 BDR: 0.0.1.6
  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]
eth0.13 is up, type BROADCAST
  Interface ID: 3
  Internet Address:
    inet : 10.1.13.1/26
    inet6: fe80::c828:72ff:fedf:3608/64
    inet6: 2001:678:3fc:d::1/64
  Instance ID 0, Interface MTU 1500 (autodetect: 1500)
  MTU mismatch detection: enabled
  Area ID 0.0.0.0, Cost 1
  State BDR, Transmit Delay 1 sec, Priority 1
  Timer intervals configured:
   Hello 10, Dead 40, Retransmit 5
  DR: 0.0.3.6 BDR: 0.0.1.6
  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]
lo is up, type LOOPBACK
  Interface ID: 1
   OSPF not enabled on this interface

Q10.

Comment retrouver l'identifiant de routeur ?

À partir des 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.

R1# sh ip ospf
 OSPF Routing Process, Router ID: 0.0.1.4
R1# sh ipv6 ospf6
 OSPFv3 Routing Process (0) with Router-ID 0.0.1.6

Q11.

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 uniquement des liens Ethernet dans ce contexte de travaux pratiques, le type de réseau est nécessairement diffusion.

R1# show ip ospf interface eth0.12
eth0.12 is up
  ifindex 2, MTU 1500 bytes, BW 1000000 Kbit <UP,BROADCAST,RUNNING,MULTICAST>
  Internet Address 10.1.12.1/26, Broadcast 10.1.12.63, Area 0.0.0.0
  MTU mismatch detection:enabled
  Router ID 0.0.1.4, Network Type BROADCAST, Cost: 1
R1# show ipv6 ospf6 interface eth0.12
eth0.12 is up, type BROADCAST

Q12.

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 routeur avec un démon OSPF 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

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

R1# show ip ospf neighbor

Neighbor ID     Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
0.0.2.4           1 Full/DR           32.395s 10.1.12.2       eth0.12:10.1.12.1        0     0     0
0.0.3.4           1 Full/DR           38.317s 10.1.13.3       eth0.13:10.1.13.1        0     0     0
R1# show ipv6 ospf6 neighbor
Neighbor ID     Pri    DeadTime  State/IfState         Duration I/F[State]
0.0.2.6           1    00:00:31   Full/DR              02:04:11 eth0.12[BDR]
0.0.3.6           1    00:00:31   Full/DR              02:04:01 eth0.13[BDR]

Q13.

Comment identifier le rôle des différentes interfaces des routeurs pour chacun des liens du triangle de la topologie logique ?

[Avertissement] Avertissement

La réponse à cette question suppose que les démons OSPF des trois routeurs de la topologie logique en triangle aient convergé. On doit repérer l'état Full pour les listes de routeurs voisins.

De plus, la réponse varie en fonction de l'ordre d'activation des démons OSPF des différents routeurs. En effet, un routeur peut être élu routeur désigné (DR) en l'absence de routeurs voisins. Cette élection n'est pas remise en cause tant qu'il n'y pas de changement d'état de lien.

À partir des résultats des questions précédentes sur les interfaces actives, il est possible de compléter le schéma de la topologie étudiée avec l'état des interfaces pour chacun des trois liens.

Topologie logique OSPF et rôle des interfaces de routeurs

Sur un même réseau de diffusion, il est possible de trouver plusieurs routeurs OSPF. Établir une relation de voisinage et procéder aux échanges de bases de données topologiques entre chaque routeur revient à constituer un réseau de relations complètement maillé. À chaque recalcul de topologie, ce réseau complètement maillé est inefficace. C'est la raison pour laquelle la notion de routeur référent ou Designated Router a été introduite. Lors d'un recalcul de topologie, tous les routeurs s'adressent au référent qui correspond au cœur d'un réseau en topologie étoile.

Dans le contexte de la topologie triangle étudiée, il y a bien élection d'un routeur référent et d'un routeur référent de secours. Cependant, comme il n'y a que deux routeurs par domaine de diffusion ou VLAN, on ne peut pas caractériser l'utilité de cette élection.

Q14.

Quelles sont les réseaux IPv4 et IPv6 présents dans la base calcul du protocole OSPF ?

On cherche a visualiser la liste des préfixes des réseaux connus des deux démons OSPF.

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

show ip ospf route
show ipv6 ospf6 route

Une fois que les trois routeurs de la topologie ont convergé, chaque démon connaît les trois préfixes qui correspondent aux trois côtés du triangle. Un routeur correspond à un sommet du triangle et il doit apprendre le préfixe réseau du côté opposé via ses deux routeurs voisins.

Voici la vue depuis le routeur R1.

R1# sh ip ospf route
============ OSPF network routing table ============
N    10.1.12.0/26          [1] area: 0.0.0.0
                           directly attached to eth0.12
N    10.1.13.0/26          [1] area: 0.0.0.0
                           directly attached to eth0.13
N    10.1.23.0/26          [2] area: 0.0.0.0
                           via 10.1.12.2, eth0.12
                           via 10.1.13.3, eth0.13

============ OSPF router routing table =============

============ OSPF external routing table ===========

Les valeurs notées entre crochets correspondent à la métrique du lien pour joindre le réseau noté à gauche. Pour le protocole OSPF, le calcul de métrique se fait à partir de l'expression : 108 / Bande_Passante_du_lien.

La valeur du numérateur (108) correspond à un débit de 100Mbps. À l'époque de la rédaction du standard OSPFv2, ce débit a servi de référence. Aujourd'hui, cette valeur est complètement dépassée. C'est la raison pour laquelle on adapte le calcul de métrique en changeant le coefficient du numérateur. Voir la Section 10, « Adapter de la métrique de lien au débit ».

Les deux premiers réseaux de la table sont joignable via un lien Ethernet à 1000Mbps ; soit une métrique de 1. Le troisième réseau est joignable via deux liens Ethernet à 1000Mbps ; d'où la métrique de 2.

Pour les préfixes IPv6, les métriques n'apparaissent pas.

R1# sh ipv6 ospf6 route
*N IA 2001:678:3fc:c::/64            ::                        eth0.12 18:41:10
*N IA 2001:678:3fc:d::/64            ::                        eth0.13 18:41:00
*N IA 2001:678:3fc:17::/64           fe80::4c8c:2aff:fe42:b075 eth0.12 18:41:00
                                     fe80::440:39ff:fe30:710c  eth0.13

Avec OSPFv3, les relations de voisinage entre routeurs utilisent nécessairement les adresses de lien local appartenant au préfixe fe80::/10.

Q15.

Comment visualiser les tables de routage depuis la console vtysh ?

L'affichage demandé illustre les mécanismes de choix entre différentes solutions pour une même destination. Cet affichage est à comparer avec celui demandé à la question suivante.

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

show ip route
show ipv6 route
R1# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel, N - NHRP,
       > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.0.2.1, eth0
O   10.1.12.0/26 [110/1] is directly connected, eth0.12, 18:57:52
C>* 10.1.12.0/26 is directly connected, eth0.12
O   10.1.13.0/26 [110/1] is directly connected, eth0.13, 18:57:36
C>* 10.1.13.0/26 is directly connected, eth0.13
O>* 10.1.23.0/26 [110/2] via 10.1.12.2, eth0.12, 18:57:36
  *                      via 10.1.13.3, eth0.13, 18:57:36
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.0.2.0/27 is directly connected, eth0
R1# show ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv6, I - IS-IS, B - BGP, A - Babel, N - NHRP,
       > - selected route, * - FIB route

K>* ::/0 via fe80::dc02:44ff:fe64:4834, eth0
C>* ::1/128 is directly connected, lo
C>* 2001:678:3fc:a::/64 is directly connected, eth0
O   2001:678:3fc:c::/64 [110/1] is directly connected, eth0.12, 18:50:54
C>* 2001:678:3fc:c::/64 is directly connected, eth0.12
O   2001:678:3fc:d::/64 [110/1] is directly connected, eth0.13, 18:50:44
C>* 2001:678:3fc:d::/64 is directly connected, eth0.13
O>* 2001:678:3fc:17::/64 [110/2] via fe80::4c8c:2aff:fe42:b075, eth0.12, 18:50:44
  *                              via fe80::440:39ff:fe30:710c, eth0.13, 18:50:44
C * fe80::/64 is directly connected, eth0
C * fe80::/64 is directly connected, eth0.13
C>* fe80::/64 is directly connected, eth0.12
  • Les entrées avec le caractère * correspondent aux routes proposées par la suite Quagga au sous-système réseau du noyau. Les autres entrées sont placées en réserve au cas où la solution initialement proposée viendrait à faire défaut.

  • L'entrée notée K correspond à une route apprise via la configuration système.

  • Les entrées notées C correspondent à des routes pour lesquelles il existe une interface sur le routeur. Les métriques de ses routes ont la valeur 0. Ce sont les routes les plus prioritaires.

  • Les entrées notées O correspondent aux routes apprises via le protocole OSPF. La métrique de ces routes se décompose en deux parties. La valeur figée à 110 définit le niveau de priorité du protocole OSPF (Administrative Distance) relativement aux autres protocoles de routage. Les valeurs notées après le / sont les métriques de liens calculées comme indiqué ci-dessus.

Q16.

Comment visualiser les tables de routage au niveau système ?

Utiliser une commande usuelle de visualisation de la table de routage.

ip route ls
ip -6 route ls

Avec la commande ip, on voit apparaître les «sources» d'alimentation de la table de routage finale du système.

  • kernel pour les entrées connues du sous-système réseau du noyau. Ce sont les entrées avec le caractère C dans la console vtysh.

  • zebra pour les entrées apprises via la suite Quagga. Le réseau correspondant au côté opposé au sommet du triangle est appris via OSPF puisque le sous-système réseau du noyau ne le connaît pas.

  • ra pour la route par défaut IPv6. Le routeur R1 se distingue des deux autres routeurs par le fait qu'il dispose d'un accès vers l'Internet. Ici, la route par défaut a été apprise par auto configuration SLAAC.

R1:~# ip route ls
default via 192.0.2.1 dev eth0 onlink
10.1.12.0/26 dev eth0.12 proto kernel scope link src 10.1.12.1
10.1.13.0/26 dev eth0.13 proto kernel scope link src 10.1.13.1
10.1.23.0/26 proto zebra metric 20
        nexthop via 10.1.12.2 dev eth0.12 weight 1
        nexthop via 10.1.13.3 dev eth0.13 weight 1
192.0.2.0/27 dev eth0 proto kernel scope link src 192.0.2.9
R1:~# ip -6 route ls
2001:678:3fc:a::/64 dev eth0 proto kernel metric 256 expires 86285sec pref medium
2001:678:3fc:c::/64 dev eth0.12 proto kernel metric 256 pref medium
2001:678:3fc:d::/64 dev eth0.13 proto kernel metric 256 pref medium
2001:678:3fc:17::/64 proto zebra metric 20
        nexthop via fe80::4c8c:2aff:fe42:b075 dev eth0.12 weight 1
        nexthop via fe80::440:39ff:fe30:710c dev eth0.13 weight 1 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth0.12 proto kernel metric 256 pref medium
fe80::/64 dev eth0.13 proto kernel metric 256 pref medium
default via fe80::dc02:44ff:fe64:4834 dev eth0 proto ra metric 1024 expires 1685sec hoplimit 64 pref medium