Debian logo [inetdoc.LINUX]

6. Place à la pratique

Nous allons travailler avec le réseau suivant :

Figure 3. La topologie de travail


Le réseau a été découpé en trois zones. Vous remarquez que la zone 0 permet de fédérer l'ensemble du réseau. Il s'agit du backbone dont nous avons déjà discuté. Le découpage de ce réseau en trois zones est un cas d'école dont le but est d'examiner la configuration d'OSPF dans un contexte multi-zone.

Généralement, on considère qu'une zone peut accueillir plusieurs dizaines de routeurs.

Pour ne pas surcharger ces lignes inutilement, nous nous en tiendrons ici à la configuration de R1, R2 et R3. Vous verrez que la configuration n'est pas très complexe. Par symétrie, il est facile de l'adapter aux autres routeurs.

Pour votre service, chers lecteurs, j'ai mis en ligne une carte cliquable ( Zebra et OSPF) qui vous permettra de consulter l'état, la configuration complète et la table de routage des six routeurs.

Enfin, avant de commencer, vous trouverez une traduction partielle de la documentation de Zebra à la page : GNU Zebra.

6.1. Situation de départ

Vous devez créer des fichiers de configuration rudimentaires sur chaque routeur pour les services Zebraou Quagga :

  • Fichier /etc/zebra/zebra.conf ou /etc/quagga/zebra.conf pour le démon principal.

    Exemple pour R1 :

    hostname R1(ZEBRA)
    password foo
    
  • Fichier /etc/zebra/ospfd.conf ou /etc/quagga/ospfd.conf pour le démon ospfd

    Exemple pour R1 :

    hostname R1(OSPF)
    password foo
    

Vous devez ensuite démarrer (ou redémarrer) les deux démons zebra et ospfd sur chaque routeur.

[Note] Précaution avec une configuration manuelle

Veillez bien à respecter l'ordre d'exécution des services : d'abord zebra -d puis ospfd ensuite.

Enfin, sur R1 entrez dans le terminal de configuration de ospfd via telnet sur le port 2604 :

Linux# telnet localhost ospfd

Hello, this is zebra (version 0.91a).
Copyright 1996-2001 Kunihiro Ishiguro.

User Access Verification
Password:
R1(OSPF)> enable
R1(OSPF)#

Si vous avez envie de suivre précisément les échanges de messages entre routeurs, Zebra propose un puissant mécanisme de débogage grâce à la commande debug (je vous laisse découvrir tous ses paramètres). Supposons que je veuille garder une trace de tous les messages HELLO émis par R1 :

R1(OSPF)# conf t
R1(OSPF)(config)# log file /var/log/zebra/ospfd.log
R1(OSPF)(config)# debug ospf packet hello send detail

Il faut que le répertoire /var/log/zebra existe.

6.2. Activation du processus de routage

Dans le mode config, nous allons activer le processus OSPF :

R1(OSPF)(config)# router ospf
R1(OSPF)(config-router)#

6.3. Activation des annonces de routes

Le processus de routage OSPF est activé mais rien ne se passe. Comme pour RIP, il faut indiquer sur quel(s) réseau(x) on souhaite que le routage dynamique soit opérationnel. Ceci se fait par la commande network. Mais, nouveauté par rapport à RIP qui n'intègre pas le concept de zone, il faut indiquer à quelle zone sera rattaché le réseau. Sur la Figure 3, « La topologie de travail », on voit que R1 est relié à deux réseaux. Le réseau 30.0.0.0/8 est attaché à la zone 0 et le réseau 11.0.0.0/8 à la zone 1. La configuration se fait donc de cette manière :

R1(OSPF)(config-router)# network 30.0.0.0/8 area 0
R1(OSPF)(config-router)# network 11.0.0.0/8 area 1

Que se passe-t-il sur le réseau ? R1 envoie des paquets HELLO sur les interfaces pour lesquelles la commande network a été saisie. Mais personne n'est là pour les écouter. Activez le routage sur R2 en adaptant les commandes aux spécificités du routeur. Je vous aide un peu. Sur R2, vous réaliserez les configurations suivantes :

R2(OSPF)(config-router)# network 11.0.0.0/8 area 1
R2(OSPF)(config-router)# network 12.0.0.0/8 area 1

Enfin, sur R3, vous réaliserez les configurations suivantes :

R3(OSPF)(config-router)# network 12.0.0.0/8 area 1
R3(OSPF)(config-router)# network 192.168.3.0/24 area 1

Mais sur R3, il y a une particularité. Le réseau 192.168.3.0/24 contient des ordinateurs mais aucun routeur. La commande network va diffuser sur ce réseau des annonces de routes ce qui consomme inutilement de la bande passante. Par conséquent, nous allons désactiver cette diffusion :

R3(OSPF)(config-router)# passive-interface eth1

Ainsi, aucune route n'est diffusée sur cette interface. De même, aucune annonce de route ne sera prise en compte. Le réseau sera considéré comme étant d'extrémité (stub).

6.4. Affichage de la configuration

Affichons la configuration complète de R1 :

R1(OSPF)(config-router)# end
R1(OSPF)# show running-config

Current configuration:
!
hostname R1(OSPF)
password foo
!
!
!
interface lo
!
interface eth0
!
interface eth1
!
router ospf
network 11.0.0.0/8 area 1
network 30.0.0.0/8 area 0
!
line vty
!
end

Affichons la configuration complète de R3 :

R3(OSPF)# show running-config

Current configuration:
!
hostname R3(OSPF)
password foo
!
!
!
interface lo
!
interface eth0
!
interface eth1
!
router ospf
passive-interface eth1
network 12.0.0.0/8 area 1
network 192.168.3.0/24 area 1
!
line vty
!
end

J'espère que vous avez la même configuration. Si ce n'est pas le cas, vous pouvez annuler une ligne contenant une erreur en vous remettant au même endroit où vous avez saisi la commande et en saisissant à nouveau la commande, mais en la faisant précéder de no.

Pour enregistrer la configuration, je vous rappelle que l'on saisit :

R1(OSPF)# copy running-config startup-config

Reproduisez maintenant ces manipulations sur l'ensemble des routeurs du réseau.

6.5. État des routeurs

Nos petits routeurs ont, en principe, bien travaillé. Dans chaque zone, ils ont élu leur chef, le routeur désigné (DR), ils ont échangé leurs connaissances et calculé une magnifique table de routage, ultra-optimale. En résumé, les deux stations d'extrémité de la figure doivent pouvoir s'atteindre avec une commande ping. Si jamais ce n'est pas le cas, c'est que probablement vous vous êtes trompé dans une configuration. Dans ce cas, reprenez la configuration de chaque appareil. Utilisez les outils ping, tcpdump et traceroute pour contrôler votre configuration et suivre les paquets. Et n'oubliez pas que dans un ping, il y a un aller mais aussi un retour !

Afin d'illustrer ce dont nous avons discuté dans la toute première partie de cet article, examinons l'état du routeur R1. Nous pouvons faire un diagnostic très complet de l'appareil en utilisant les nombreuses sous-commandes de show ip ospf. Vous constaterez que les informations fournies par ospfd sur son état sont beaucoup plus conséquentes que celles que l'on pouvait extirper de ripd.

Dans un premier temps, je vous propose d'examiner l'état de santé général du routeur R3 :

R3(OSPF)# show ip ospf
 OSPF Routing Process, Router ID: 192.168.3.254
 Supports only single TOS (TOS0) routes
 This implementation conforms to RFC2328
 RFC1583Compatibility flag is disabled
 SPF schedule delay 5 secs, Hold time between two SPFs 10 secs
 Refresh timer 10 secs
 Number of external LSA 0
 Number of areas attached to this router: 1

 Area ID: 0.0.0.1
   Shortcutting mode: Default, S-bit consensus: no
   Number of interfaces in this area: Total: 2, Active: 2
   Number of fully adjacent neighbors in this area: 1
   Area has no authentication
   Number of full virtual adjacencies going through this area: 0
   SPF algorithm executed 13 times
   Number of LSA 9

Le premier bloc décrit le fonctionnement général du routeur : l'ID du routeur (égale à sa plus grande adresse IP), conformité aux RFC, valeurs des temporisateurs. Une seule zone est attachée à ce routeur. C'est la zone 1 (exprimée en notation décimale pointée). Notre routeur a deux interfaces dans la zone, il n'a qu'un seul voisin. L'algorithme du SPF a été exécuté 13 fois. La base de données topologique contient neuf états de liens (LSA). Si notre routeur était attaché à plusieurs zones, le deuxième bloc serait répété autant de fois que de zones. Vous pourrez le constater sur R1.

Maintenant, listons nos informations sur les routeurs voisins :

R3(OSPF)# show ip ospf neighbor

Neighbor ID  Pri  State       Dead Time Address   Interface  RXmtL  RqstL  DBsmL
12.0.0.1     1    Full/Backup 00:00:34  12.0.0.1  eth0       0      0      0

Déchiffrons ces informations. La différence entre la colonne ID et la colonne Address, c'est que l'ID identifie l'appareil dans le réseau alors que l'adresse correspond à l'interface à laquelle nous sommes relié avec ce routeur. La colonne State nous apprend deux choses : il est synchronisé avec le routeur désigné (DR) grâce à la mention Full, c'est le routeur désigné de secours (BDR) de la zone grâce à l'indicateur Backup. Ce routeur sera déclaré comme inactif si nous ne recevons pas de message HELLO d'ici 34 secondes (Dead Time).

Voyons le contenu de la base de données topologique de R3 :

R3(OSPF)# show ip ospf database
       OSPF Router with ID (192.168.3.254)
                Router Link States (Area 0.0.0.1)

Link ID         ADV Router      Age   Seq#       CkSum   Link count
12.0.0.1        12.0.0.1        981   0x80000006 0xf9e2  2
30.0.0.1        30.0.0.1        952   0x80000003 0xb13e  1
192.168.3.254   192.168.3.254   1063  0x80000005 0x15b7  2

       Net Link States (Area 0.0.0.1)

Link ID         ADV Router      Age   Seq#       CkSum
11.0.0.2        12.0.0.1        981   0x80000001 0xda39
12.0.0.2        192.168.3.254   1063  0x80000001 0x5d0b

       Summary Link States (Area 0.0.0.1)

Link ID         ADV Router      Age   Seq#       CkSum   Route
21.0.0.0        30.0.0.1        837   0x80000001 0x0d08  21.0.0.0/8
22.0.0.0        30.0.0.1        702   0x80000001 0x64a5  22.0.0.0/8
30.0.0.0        30.0.0.1        976   0x80000001 0x33e2  30.0.0.0/8
172.18.0.0      30.0.0.1        599   0x80000001 0x4a0d  172.18.0.0/24

Ces trois tableaux présentent de façon synthétique l'ensemble des LSA stockés dans la base topologique.

  • Le premier tableau contient des LSA diffusés par chaque routeur. Ils décrivent l'état des interfaces de chaque routeur.

  • Le deuxième tableau contient des LSA diffusés par le routeur désigné (DR). Ils décrivent la liste des routeurs présents dans chaque réseau.

  • Le dernier tableau contient un résumé des routes diffusées par le routeur de bordure de zone (ABR). Ce sont des routes qu'il a reçu via le réseau fédérateur (backbone) par les routeurs des autres zones.

L'âge et le numéro de séquence sont utilisés pour mettre à jour la base lorsque des LSA sont reçus. La somme de contrôle (checksum noté CkSum est utilisée pour contrôler l'intégrité des LSA.

Pour obtenir des informations détaillées sur chaque LSA, vous pouvez compléter la commande show ip ospf database par les options suivantes : router, network ou summary. Par exemple : show ip ospf database router 192.168.3.254 (qui correspond à la troisième ligne du premier tableau) vous apprendra que ce router est relié à deux réseaux : un de transit (12.0.0.0/8) et un d'extrémité (stub) 192.168.3.0/24.

Enfin, si vous voulez consulter la table de routage obtenue après traitement par SPF des différents LSA, vous n'aurez qu'à saisir un show ip ospf route.

[Note] Rappel important

Il existe une différence entre cette table et celle utilisée par le démon zebra pour le routage proprement dit. Souvenez-vous que Zebra et Quagga sont multi-protocole et qu'ils ont une architecture modulaire (voir LM 43 : 2ème partie, routage RIP). Chaque démon calcule une table de routage à partir des informations dont il dispose (et qui ne sont pas nécessairement les mêmes pour chaque démon). Ensuite, ils transmettent chacun leur table au démon zebra qui en fait la synthèse. Cette synthèse constitue la véritable table de routage utilisée pour router les paquets.

Nous avons fait un tour d'horizon des principales commandes de Zebra permettant de surveiller l'état de ospfd. Il y en a encore beaucoup d'autres que je vous laisse découvrir (faites un show ip ospf ? par exemple). Il nous reste à observer la table de routage obtenue par Zebra. Quittez ospfd et connectez-vous sur le démon zebra via la commande telnet localhost 2601 :

R3(Zebra)> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       B - BGP, > - selected route, * - FIB route

O>* 11.0.0.0/8 [110/20] via 12.0.0.1, eth0, 00:12:48
O      12.0.0.0/8 [110/10] is directly connected, eth0, 00:14:09
C>* 12.0.0.0/8 is directly connected, eth0
O>* 21.0.0.0/8 [110/40] via 12.0.0.1, eth0, 00:11:18
O>* 22.0.0.0/8 [110/50] via 12.0.0.1, eth0, 00:10:16
O>* 30.0.0.0/8 [110/30] via 12.0.0.1, eth0, 00:12:13
C>* 127.0.0.0/8 is directly connected, lo
O>* 172.18.0.0/24 [110/60] via 12.0.0.1, eth0, 00:08:48
O      192.168.3.0/24 [110/10] is directly connected, eth1, 00:14:19
C>* 192.168.3.0/24 is directly connected, eth1

Les routes notées 'O' ont été découvertes par OSPF. Entre crochets, on observe la distance administrative du protocole (110 par défaut pour OSPF) et le coût de la route pour accéder au réseau. Dans le cas de la topologie étudiée, il n'y a que des réseaux à 10 Mbits/s, donc avec un coût par défaut de 10 pour chaque lien.

6.6. Quelques éléments sur la sécurité

6.6.1. Filtrer la diffusion des routes

Le premier inconvénient d'un protocole de routage dynamique comme OSPF est sa volubilité. Il a tendance à dévoiler tout un tas d'informations sur les réseaux qu'un administrateur consciencieux n'a pas forcément envie de révéler. Pour limiter la diffusion des routes au strict minimum, ospfd intègre, à l'instar de ripd, un mécanisme de liste de contrôle d'accès (access-lists).

Reportez-vous à l'article 2ème partie, routage RIP publié dans le numéro 43 de Linux Magazine. La configuration est strictement identique. J'en profite pour faire un peu de publicité : si vous êtes intéressés par les problèmes de sécurité, je vous conseille l'excellent magazine Multi-system & Internet Security Cookbook (MISC). La série d'articles sur la «protection de l'infrastructure réseau IP» constitue sur certains points un approfondissement intéressant.

6.6.2. Protéger les annonces de routes

Le deuxième inconvénient d'un protocole de routage dynamique comme OSPF est sa naïveté. Il croit tout ce qu'on lui dit ! Un petit malin pourrait s'amuser à diffuser des routes farfelues à vos routeurs, ce qui pourrait provoquer des dénis de service. Pour pallier à cela, on peut activer l'authentification des annonces sur une zone. Voici les manipulations à réaliser sur chaque routeur :

Routeur(OSPF)(config-router)# area 1 authentication message-digest

Ensuite, pour chaque interface participant à la diffusion des routes :

Routeur(OSPF)(config)# int ethx
Routeur(OSPF)(config-if)# ospf message-digest-key 1 md5 motdepasse

Vous adapterez le «motdepasse» à vos besoins. Ce mot de passe doit bien sûr être connu de tous les routeurs.