4. Configurer les démons OSPF Bird

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.

Quels sont les fichiers de configuration à éditer pour activer les protocoles OSPFv2 et OSPFv3 sur le routeur ?

Une fois le paquet bird installé, deux démons distincts sont lancés : bird pour IPv4 et bird6 pour IPv6. Rechercher dans la liste des fichiers fournis avec le paquet, les exemples de fichiers de configuration.

Les fichiers de configuration sont au nombre de deux. Ils sont placés dans le dossier /etc/bird/. Deux exemples de ces fichiers sont données dans le dossier de documentation du paquet.

R1:~# dpkg -L bird | grep example
/usr/share/doc/bird/examples
/usr/share/doc/bird/examples/bird.conf.gz
/usr/share/doc/bird/examples/bird6.conf.gz

Q6.

Comment accéder à l'état des différents protocoles actifs pour chaque démon ?

À chaque édition d'un fichier de configuration, il faut relancer le démon correspondant. C'est à nouveau dans la liste des fichiers du paquet que l'on identifie les outils d'accès à la configuration active des deux démons.

Il faut consulter la section Remote control de la documentation Bird. Les commandes utiles pour cette question sont les suivantes.

show status
show protocols

Chaque démon dispose d'une console propre avec les outils birdc et birdc6. Ce sont ces deux consoles qui permettent de connaître le statut du démon, la liste des protocoles actifs et les informations relatives au fonctionnement de ces protocoles.

R1:~# birdc
BIRD 1.6.4 ready.
bird> sh status
BIRD 1.6.4
Router ID is 0.0.4.1
Current server time is 2018-10-20 20:59:04
Last reboot on 2018-10-20 16:54:04
Last reconfiguration on 2018-10-20 20:58:58
Daemon is up and running
R1:~# birdc6
BIRD 1.6.4 ready.
bird> sh status
BIRD 1.6.4
Router ID is 0.0.6.1
Current server time is 2018-10-20 21:00:22
Last reboot on 2018-10-20 17:18:49
Last reconfiguration on 2018-10-20 17:18:49
Daemon is up and running

De la même façon, on peut connaître la liste des protocoles actifs de chaque démon.

bird> sh protocols
name     proto    table    state  since       info
device1  Device   master   up     16:54:04
kernel1  Kernel   master   up     20:58:58

Q7.

Comment activer le protocole de routage OSPF et attribuer l'identifiant du routeur ?

Consulter le document BIRD User's Guide à la section OSPF pour activer le protocole. Consulter les tableaux des plans d'adressage pour obtenir la valeur de l'identifiant du routeur à configurer.

On édite les fichiers /etc/bird.conf et /etc/bird6.conf avec les paramètres suivants.

router id IPv4 address
protocol ospf <name>
area <id>

Voici une copie des fichiers du routeur R1.

R1:~# grep -v ^# /etc/bird/bird.conf

router id 0.0.1.4;

protocol kernel {
        scan time 10;
        import none;
}

protocol device {
        scan time 10;
}

protocol ospf OSPFv2R1 {
        area 0 {
        };
}
R1:~# grep -v ^# /etc/bird/bird6.conf

router id 0.0.1.6;

protocol kernel {
        scan time 10;
        import none;
}

protocol device {
        scan time 10;
}

protocol ospf OSPFv3R1 {
        area 0 {
        };
}

Une fois les deux services relancés, on peut vérifier que les éléments demandés sont bien présents dans la configuration des démons de routage OSPF.

R1:~# systemctl restart bird

R1:~# birdc sh protocols
BIRD 1.6.4 ready.
name     proto    table    state  since       info
kernel1  Kernel   master   up     09:38:34
device1  Device   master   up     09:38:34
OSPFv2R1 OSPF     master   up     09:38:34    Alone

R1:~# birdc sh ospf state
BIRD 1.6.4 ready.

area 0.0.0.0

        router 0.0.1.4
                distance 0
R1:~# systemctl restart bird6

R1:~# birdc6 sh protocols
BIRD 1.6.4 ready.
name     proto    table    state  since       info
kernel1  Kernel   master   up     09:42:33
device1  Device   master   up     09:42:33
OSPFv3R1 OSPF     master   up     09:42:33    Alone

R1:~# birdc6 sh ospf state
BIRD 1.6.4 ready.

area 0.0.0.0

        router 0.0.1.6
                distance 0

Q8.

Comment activer et valider le protocole de routage OSPF pour les réseaux IPv4 et IPv6 connus de chaque routeur ?

Consulter la section OSPF de la documentation BIRD User's Guide ainsi que l'exemple OSPF example. Il suffit d'adapter les exemples avec les noms d'interfaces en fonction du contexte.

On édite les fichiers /etc/bird.conf et /etc/bird6.conf avec les paramètres suivants.

interface <interface pattern>
authentication none|simple|cryptographic;

On vérifie au niveau console (Voir Remote control) l'état de la base de connaissance des deux processus OSPF avec la commande suivante.

show ospf state
Routeur R1 : OSPFv2 & interfaces
R1:~# grep -v ^# /etc/bird/bird.conf

router id 0.0.1.4;

protocol kernel {
        scan time 10;
        import none;
}

protocol device {
        scan time 10;
}

protocol ospf OSPFv2R1 {
        rfc1583compat yes;
        area 0 {
                interface "eth0.12", "eth0.13" {
                        authentication none;
                };
        };
}
Routeur R1 : base de connaissance OSPFv2

Dans la copie d'écran ci-dessous, on relève les deux routeurs voisins de R1 ainsi que le réseau distant 10.1.23.0/26.

R1:~# birdc sh ospf state
BIRD 1.6.4 ready.

area 0.0.0.0

        router 0.0.1.4
                distance 0
                network 10.1.12.0/26 metric 10
                network 10.1.13.0/26 metric 10

        router 0.0.2.4
                distance 10
                network 10.1.12.0/26 metric 10
                network 10.1.23.0/26 metric 10

        router 0.0.3.4
                distance 10
                network 10.1.13.0/26 metric 10
                network 10.1.23.0/26 metric 10

        network 10.1.12.0/26
                dr 0.0.2.4
                distance 10
                router 0.0.2.4
                router 0.0.1.4

        network 10.1.13.0/26
                dr 0.0.3.4
                distance 10
                router 0.0.3.4
                router 0.0.1.4

        network 10.1.23.0/26
                dr 0.0.2.4
                distance 20
                router 0.0.2.4
                router 0.0.3.4
Routeur R1 : OSPFv3 & interfaces
R1:~# grep -v ^# /etc/bird/bird6.conf

router id 0.0.1.6;

protocol kernel {
        scan time 10;
        import none;
}

protocol device {
        scan time 10;
}

protocol ospf OSPFv3R1 {
        area 0 {
                interface "eth0.12", "eth0.13" {
                        authentication none;
                };
        };
}
Routeur R1 : base de connaissance OSPFv3

Dans la copie d'écran ci-dessous, on relève les deux routeurs voisins de R1 ainsi que le réseau distant 2001:678:3fc:17::/64.

R1:~# birdc6 sh ospf state
BIRD 1.6.4 ready.

area 0.0.0.0

        router 0.0.1.6
                distance 0
                network [0.0.1.6-2] metric 10
                network [0.0.1.6-3] metric 10

        router 0.0.2.6
                distance 10
                network [0.0.1.6-2] metric 10
                network [0.0.3.6-3] metric 10

        router 0.0.3.6
                distance 10
                network [0.0.1.6-3] metric 10
                network [0.0.3.6-3] metric 10

        network [0.0.1.6-2]
                distance 10
                router 0.0.1.6
                router 0.0.2.6
                address 2001:678:3fc:c::/64

        network [0.0.1.6-3]
                distance 10
                router 0.0.1.6
                router 0.0.3.6
                address 2001:678:3fc:d::/64

        network [0.0.3.6-3]
                distance 20
                router 0.0.3.6
                router 0.0.2.6
                address 2001:678:3fc:17::/64

Q9.

Comment identifier le type de réseau des interfaces actives d'un routeur pour chaque version du protocole de routage OSPF ?

La question précédente montre que la configuration des deux processus bird et bird6 est basée sur l'activation du protocole par interface. Il faut donc rechercher dans la section Remote control l'instruction qui donne l'état des interfaces actives.

show ospf interface

Comme on utilise uniquement des liens Ethernet dans ce contexte de travaux pratiques, le type de réseau est nécessairement diffusion.

Routeur R1 : OSPFv2 & interfaces
R1:~# birdc sh ospf interface
BIRD 1.6.4 ready.
OSPFv2R1:
Interface eth0.12 (10.1.12.0/26)
        Type: broadcast
        Area: 0.0.0.0 (0)
        State: Backup
        Priority: 1
        Cost: 10
        Hello timer: 10
        Wait timer: 40
        Dead timer: 40
        Retransmit timer: 5
        Designated router (ID): 0.0.2.4
        Designated router (IP): 10.1.12.2
        Backup designated router (ID): 0.0.1.4
        Backup designated router (IP): 10.1.12.1
Interface eth0.13 (10.1.13.0/26)
        Type: broadcast
        Area: 0.0.0.0 (0)
        State: Backup
        Priority: 1
        Cost: 10
        Hello timer: 10
        Wait timer: 40
        Dead timer: 40
        Retransmit timer: 5
        Designated router (ID): 0.0.3.4
        Designated router (IP): 10.1.13.3
        Backup designated router (ID): 0.0.1.4
        Backup designated router (IP): 10.1.13.1
Routeur R1 : OSPFv3 & interfaces
R1:~# birdc6 sh ospf interface
BIRD 1.6.4 ready.
OSPFv3R1:
Interface eth0.12 (IID 0)
        Type: broadcast
        Area: 0.0.0.0 (0)
        State: DR
        Priority: 1
        Cost: 10
        Hello timer: 10
        Wait timer: 40
        Dead timer: 40
        Retransmit timer: 5
        Designated router (ID): 0.0.1.6
        Designated router (IP): fe80::70de:4fff:fe1d:68b4
        Backup designated router (ID): 0.0.2.6
        Backup designated router (IP): fe80::943a:41ff:fe65:7307
Interface eth0.13 (IID 0)
        Type: broadcast
        Area: 0.0.0.0 (0)
        State: DR
        Priority: 1
        Cost: 10
        Hello timer: 10
        Wait timer: 40
        Dead timer: 40
        Retransmit timer: 5
        Designated router (ID): 0.0.1.6
        Designated router (IP): fe80::70de:4fff:fe1d:68b4
        Backup designated router (ID): 0.0.3.6
        Backup designated router (IP): fe80::3032:e9ff:fe73:6322

Q10.

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 commande utile de la section Remote control est la suivante.

show ospf neighbors

À 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:~# birdc sh ospf neighbors
BIRD 1.6.4 ready.
OSPFv2R1:
Router ID       Pri          State      DTime   Interface  Router IP
0.0.2.4   1     Full/DR         00:31   eth0.12    10.1.12.2
0.0.3.4   1     Full/DR         00:34   eth0.13    10.1.13.3
R1:~# birdc6 sh ospf neighbors
BIRD 1.6.4 ready.
OSPFv3R1:
Router ID       Pri          State      DTime   Interface  Router IP
0.0.2.6   1     Full/BDR        00:33   eth0.12    fe80::943a:41ff:fe65:7307
0.0.3.6   1     Full/BDR        00:36   eth0.13    fe80::3032:e9ff:fe73:6322

Q11.

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.

Q12.

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 commande utile dans les deux consoles est la suivante.

show 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:~# birdc sh route
BIRD 1.6.4 ready.
10.1.12.0/26       dev eth0.12 [OSPFv2R1 16:47:15] * I (150/10) [0.0.2.4]
10.1.13.0/26       dev eth0.13 [OSPFv2R1 16:47:10] * I (150/10) [0.0.3.4]
10.1.23.0/26       via 10.1.13.3 on eth0.13 [OSPFv2R1 16:47:10] * I (150/20) [0.0.2.4]

Les valeurs notées entre parenthèses 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 du coût de lien par défaut pour chaque interface active. La valeur par défaut est 10

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

Pour les réseaux IPv6, on retrouve les mêmes métriques puisque la topologie est identique pour les deux version du protocole IP.

R1:~# birdc6 sh route
BIRD 1.6.4 ready.
2001:678:3fc:d::/64 dev eth0.13 [OSPFv3R1 10:01:30] * I (150/10) [0.0.1.6]
2001:678:3fc:c::/64 dev eth0.12 [OSPFv3R1 10:05:36] * I (150/10) [0.0.1.6]
2001:678:3fc:17::/64 via fe80::3032:e9ff:fe73:6322 on eth0.13 [OSPFv3R1 10:05:38] * I (150/20) [0.0.3.6]

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

Q13.

Comment utiliser toutes les solutions disponibles pour joindre le réseau distant depuis chacun des sommets de la topologie triangle ?

Avec la topologie logique triangle, le réseau du côté opposé à un sommet (au routeur) doit être joignable depuis les deux réseaux locaux raccordés à ce routeur. Nous sommes donc dans un contexte multi chemins.

Consulter la section OSPF de la documentation BIRD User's Guide et rechercher l'intsruction qui permet l'utilisation de plusieurs chemins à coût égal.

ecmp switch [limit number]

La fonction réseau du noyau Linux recherchée est connue sous le nom Equal Cost Multi Path ou ECMP.

Sur le routeur R1, la configuration du bloc d'instructions OSPF de chaque processus est la suivante.

R1:~# sed -n '/protocol ospf/,//p' /etc/bird/bird.conf
protocol ospf OSPFv2R1 {
        rfc1583compat yes;
        ecmp yes;
        area 0 {
                interface "eth0.12", "eth0.13" {
                        authentication none;
                };
        };
}
R1:~# sed -n '/protocol ospf/,//p' /etc/bird/bird6.conf
protocol ospf OSPFv3R1 {
        ecmp yes;
        area 0 {
                interface "eth0.12", "eth0.13" {
                        authentication none;
                };
        };
}

Relativement aux questions précédentes, les tables de routage proposées par les processus bird et bird6 font apparaître les deux chemins disponibles pour joindre le réseau distant du sommet de la topologie triangle.

R1:~# birdc sh route
BIRD 1.6.4 ready.
10.1.12.0/26       dev eth0.12 [OSPFv2R1 19:49:42] * I (150/10) [0.0.1.4]
10.1.13.0/26       dev eth0.13 [OSPFv2R1 19:50:37] * I (150/10) [0.0.1.4]
10.1.23.0/26       multipath [OSPFv2R1 19:50:48] * I (150/20) [0.0.2.4]
        via 10.1.12.2 on eth0.12 weight 1
        via 10.1.13.3 on eth0.13 weight 1
R1:~# birdc6 sh route
BIRD 1.6.4 ready.
2001:678:3fc:d::/64 dev eth0.13 [OSPFv3R1 19:50:38] * I (150/10) [0.0.1.6]
2001:678:3fc:c::/64 dev eth0.12 [OSPFv3R1 19:49:44] * I (150/10) [0.0.1.6]
2001:678:3fc:17::/64 multipath [OSPFv3R1 19:50:50] * I (150/20) [0.0.2.6]
        via fe80::3032:e9ff:fe73:6322 on eth0.13 weight 1
        via fe80::943a:41ff:fe65:7307 on eth0.12 weight 1