Ce billet est une version entièrement revue et corrigée
d'un premier billet publié en Mars 2008. À l'époque l'utilisation de dynamips
et de dynagen m'a permis passer le niveau CCNP BSCI (devenu ROUTE depuis) du
programme Cisco Networking Academy. En 2011, ces deux outils sont toujours aussi
essentiels sur le plan pédagogique. S'ils sont très connus «dans le milieu»,
ils le sont beaucoup moins chez les étudiants. Les étudiants font pourtant
partie du public qui a le plus intérêt à les utiliser dans la mesure où les
entreprises anglo saxonnes exigent une bonne maîtrise de l'IOS pour accéder
aux emplois qu'elles proposent. Voici donc une présentation de ces outils
intégrés sur un système Debian GNU/Linux.
Depuis 2001, je progresse lentement dans le programme formation Cisco Networking Academy. Sans vouloir faire de la promotion
pour un système propriétaire, il est pertinent pour un enseignant de
comprendre comment fonctionnent les systèmes de formation étrangers. Dans le
cas présent, nous avons affaire à une offre particulièrement intéressante au
vu de la qualité de l'offre et de son évolution continue.
Après avoir passé les 4 niveaux de la préparation à la certification CCNA
(Cisco Certified Network Associate) et obtenu le niveau CCAI (Cisco Certified
Academy Instructor) correspondant, je me suis attaqué au niveau CCNP (Cisco
Certified Network Professional) en 2008. Après plus d'une dizaine d'années
d'enseignement sur les réseaux, il était temps que je devienne un
«professionnel».
Comme les nombreux autres candidats aux certifications professionnelles,
c'est dans ce contexte de préparation que j'ai découvert tous les avantages
que présente l'utilisation de l'émulateur dynamips et son gestionnaire de configuration
dynagen. Face à un très gros volume de
manipulations à réaliser, le fait de pouvoir travailler sur un (trans)portable
dans lequel on peut émuler et interconnecter plusieurs routeurs constitue un
avantage déterminant. Il n'est plus nécessaire d'attendre que le rack de
routeurs soit libéré par mes propres étudiants pour réaliser d'autres
manipulations. L'architecture émulée peut aussi être arrêtée et reprise
ultérieurement sans recâblage fastidieux.
Il existe d'autres solutions d'émulation que je n'ai pas retenues. La
première est GNS3. Cet outil s'appuie aussi sur l'émulateur dynamips et propose un gestionnaire graphique pour la
composition de l'interconnexion réseau. Sans reprendre les poncifs sur les
interfaces graphiques, mon souci c'est la dissociation entre topologie
physique et topologique logique de l'interconnexion des réseaux. La
configuration décrite dans le fichier texte de dynagen se limite fort justement à la topologie
physique : quelle interface est raccordée à quel port ? De plus en
plus souvent, une même topologie physique peut correspondre à plusieurs
topologies logiques. Libre à vous de penser qu'il s'agit là d'une «marotte de
prof», mais j'aime bien disposer des deux vues bien distinctes : la
topologie physique qui représente le câblage entre les équipements et la
topologie logique qui est une représentation plus conceptuelle des rôles des
mêmes équipements. La seconde solution c'est PacketTracer, l'outil fourni via le programme Networking Academy. C'est un outil très intéressant du point
de vue du vrai débutant et l'évolution de son développement année après année
est prometteuse. Cependant, PacketTracer n'exécute
pas un véritable instance de système d'exploitation et n'émule qu'un
sous-ensemble de fonctions de l'IOS. Ses
limites apparaissent rapidement dès que l'on aborde la commutation de trames
au niveau liaison. On touche là un problème récurrent avec toute solution de
virtualisation. La commutation de trame a historiquement toujours été réalisée
à l'aide de composants spécialisés. Émuler un commutateur revient à développer
un logiciel complet de zéro, ce qui n'est pas le cas d'un logiciel de routage.
Enfin, le gros problème avec PacketTracer, c'est
qu'il n'est pas possible de l'interconnecter avec un vrai réseau.
Fort heureusement, dans le monde GNU/Linux on dispose du commutateur
logiciel Virtual Distributed Ethernet qui offre toutes les fonctions de base
utiles : une vraie table CAM, une
programmation de VLAN par port et la
configuration de trunks dans lesquels circule le
trafic de plusieurs VLANs.
Avec l'association de dynamips, de
dynagen, de vde et des instances de machines virtuelles
KVM, on dispose d'un ensemble cohérent
permettant de réaliser n'importe quelle interconnexion réseau.
Avant de passer à l'utilisation de ces outils, voyons comment on prépare le
système hôte sur lequel on va travailler.
Le programme dynamips est intrinsèquement
un émulateur de processeur MIPS. On ne
peut donc exécuter une instance de système d'exploitation Cisco
IOS que pour les modèles de routeurs basés
sur cette famille de processeurs. À priori, cette contrainte limite le choix
des routeurs utilisables. L'auteur de dynamips s'est maintes fois expliqué sur la durée de vie
de son logiciel. Au fur et à mesure où les routeurs sont retirés de la vente,
l'intérêt de l'émulateur décroit sensiblement. À ce jour, il ne reste plus que
la famille des routeurs 7200 qui soit basée sur les processeurs
MIPS et qui soit encore fabriquée et
vendue.
Au delà de la plate-forme matérielle, le véritable critère d'obsolescence
vient de la maintenance logicielle du système d'exploitation. Tant que
l'IOS est maintenu, l'émulateur reste
pérenne et son utilisation correspond bien au contexte réel d'exploitation des
architectures d'interconnexion de réseaux. Prenons justement le cas de mon
routeur favori pour les maquettes de travaux pratiques : le 2621XM. Cette famille de routeurs est obsolète
depuis des années. Elle a été remplacée par les Integrated Services Routers (ISRs). Pourtant, on dispose de versions récentes du
d'IOS 12.4T que l'on n'oserait même pas
implanter sur un vrai routeur tellement les ressources matérielles sont
limitées relativement à la puissance de calcul requise. L'émulateur, lui, est
nettement moins limité en capacité de traitement. Il exécute le système
d'exploitation assez «confortablement» dans la mesure où le système hôte le
permet ; ce qui est pratiquement toujours le cas aujourd'hui avec un
PC.
À mon niveau d'expérience, il est nécessaire de passer à la famille des
routeurs 7200 dès que l'on a besoin d'un dispositif de stockage autre que la
traditionnelle mémoire flash dans laquelle on
place le fichier image de l'IOS. C'est
notamment le cas de toutes les manipulations sur le thème de la sécurité qui
utilisent les fichiers de signatures des fonctions de détection d'intrusion.
Ce type de besoin apparaît dans le cursus CCNA
Security. Dans ce cas, le gestionnaire de configuration dynagen permet la création d'un disque CompactFlash
fictif (disk0
) qui sert à stocker ces
fichiers.
Dans la suite de ce billet, on se contentera d'utiliser un routeur
2621XM. Les images de système
d'exploitation Cisco ne sont pas libres. Il faut posséder un routeur avec un
système d'exploitation ou disposer d'un compte utilisateur sur le site Cisco
avec les droits d'accès au téléchargement pour obtenir une image
d'IOS.
Une fois le fichier image obtenu, il est conseillé de le décompresser pour
décharger l'émulateur de ce travail. J'ai l'habitude de stocker les images
système dans le même répertoire. J'ai donc décompressé l'image dans ce même
répertoire.
$
cd ~/ios.images/
$
unzip -p c2600-ipbase-mz.124-15.T14.bin >\
c2600-ipbase-mz.124-15.T14.image
warning [c2600-ipbase-mz.124-15.T14.bin]: 17812 extra bytes at beginning or within zipfile
(attempting to process anyway)
C'est le seul travail préparatoire à effectuer sur l'image du système
d'exploitation à exécuter.
Cette question est une provocation à 2€cts. Les outils sont bien sûr
fournis sous forme de paquets de la distribution Debian GNU/Linux. Les paquets
dynamips et dynagen appartiennent à la catégorie non-free
puisqu'ils servent à mettre en œuvre un logiciel non
libre. Voici les informations relatives au paquet dynamips.
$
aptitude show dynamips
Paquet : dynamips
État: installé
Automatiquement installé: oui
Version : 0.2.7-0.2.8RC2-4
Priorité : optionnel
Section : non-free/net
Responsable : Erik Wenzel
Taille décompressée : 995 k
Dépend: libc6 (>= 2.3.2), libpcap0.8 (>= 1.0.0-1)
Description : Cisco 7200/3600/3725/3745/2600/1700 Router Emulator
Dynamips emulates Cisco 7200/3600/3725/3745/2600/1700 Routers on a traditional
PC. You can use dynamips to create labs. It uses IOS Images (which are not
part of this package). Of course, this emulator cannot replace a real router.
It is simply a complementary tool to real labs for administrators of Cisco
networks or people wanting to pass their CCNA/CCNP/CCIE exams. For a Command
Line Interface for dynamips see dynagen or gns3 package.
Site : http://www.ipflow.utc.fr/
Étiquettes: hardware::emulation, implemented-in::c, interface::commandline,
interface::daemon, interface::shell, network::routing, network::server,
protocol::atm, protocol::ethernet, protocol::ip, protocol::ipv6, role::program,
scope::utility, use::checking, use::learning, use::routing,
works-with::network-traffic
Une fois les deux paquets installés, on obtient les informations
suivantes.
$
aptitude search ~idynamips ~idynagen
i dynagen - Cisco 7200 Router Emulator Command Line Interface
i A dynamips - Cisco 7200/3600/3725/3745/2600/1700 Router Emulator
La documentation du paquet dynagen
contient un tutoriel indispensable pour la description de la configuration
matérielle des routeurs émulés. Le fichier à consulter est /usr/share/doc/dynagen/docs/tutorial.htm
.
Les deux autres outils sont aussi disponibles sous forme de paquets de la
catégorie principale de la distribution.
$
aptitude search ~ivde2 ~iqemu-kvm
i qemu-kvm - Full virtualization on x86 hardware
i vde2 - Virtual Distributed Ethernet
Le fonctionnement du commutateur et le raccordement d'une ou plusieurs
instances de machines virtuelles sont décrits dans l'article Virtualisation système et enseignements
pratiques.
Le fonctionnement de l'émulateur et du
gestionnaire de configuration
La première opération consiste à lancer l'émulateur proprement dit avant de
passer au gestionnaire de configuration.
$
nice dynamips -H 7200 &
[1] 3450
$
Cisco Router Simulation Platform (version 0.2.8-RC2-amd64)
Copyright (c) 2005-2007 Christophe Fillot.
Build date: Feb 22 2009 14:35:39
Hypervisor TCP control server started (port 7200).
Avec l'instruction ci-dessus, l'émulateur de processeur MIPS est un démon en écoute sur le port 7200 via le
protocole de transport TCP.
$
lsof -i | grep dynamips
dynamips 16355 phil 4u IPv4 48565 0t0 TCP *:7200 (LISTEN)
C'est ce numéro de port qui correspond au canal de communication entre
l'émulateur et le gestionnaire de configuration qui met en œuvre la topologie
physique du réseau étudié. Avec dynagen, la
topologie physique est décrite dans un fichier texte dont voici un exemple
type.
[localhost]
ghostios = true
sparsemem = true
[[7200]]
[[router R1]]
model = 2621XM
ram = 128
image = /home/phil/ios.images/c2600-ipbase-mz.124-15.T14.image
s0/0 = R2 s0/0
f0/0 = LAN 1
f0/1 = NIO_vde:/var/run/vde2/tap0.ctl/ctl:/var/run/vde2/tap0.ctl/r1
[[router R2]]
model = 2621XM
ram = 128
image = /home/phil/ios.images/c2600-ipbase-mz.124-15.T14.image
s0/1 = R3 s0/1
f0/0 = LAN 1
[[router R3]]
model = 2621XM
ram = 128
image = /home/phil/ios.images/c2600-ipbase-mz.124-15.T14.image
s0/0 = R1 s0/1
f0/0 = LAN 1
L'ensemble des paramètres donnés dans ce patron de fichier de configuration
est décrit dans le tutoriel dynagen cité plus haut.

|
La directive entre crochets localhost indique
que les deux outils dynamips et dynagen sont exécutés sur le même système hôte.
|

|
L'option ghostios autorise le partage de la
mémoire système allouée à chaque instance de routeur dans la mesure où les
routeurs utilisent le même fichier image IOS.
|

|
L'option sparsemem réduit la quantité de
mémoire virtuelle requise par chaque instance de routeur en
fonctionnement.
|

|
La directive entre double crochet 7200 désigne
le numéro de port du protocole TCP qui
permet de communiquer avec l'émulateur. Dans cet exemple, on utilise une seule
instance d'émulateur pour trois routeurs : R1, R1 et R3.
|

|
La directive entre double crochets router
définit une nouvelle instance de routeur en donnant son identifiant. Sous
cette directive, on trouve tous les paramètre de la configuration de cette
instance de routeur.
|

|
L'option model désigne le modèle de routeur
utilisé. Comme indiqué plus haut, le choix du modèle 2621XM est un bon compromis entre les
fonctionnalités des différentes versions de système d'exploitation et les
possibilités d'interconnexion via les modules introduits dans les différents
slots disponibles.
Par défaut, le modèle 2621XM dispose
de deux interfaces FastEthernet et le gestionnaire dynagen ajoute un module WIC-2T qui fournit deux liaisons
WAN.
Router#sh inventory
NAME: "2621XM chassis", DESCR: "2621XM chassis"
PID: C2621XM-2FE , VID: 2.2, SN: 00000000000
NAME: "WAN Interface Card - Serial 2T on Slot 0 Subslot 0", DESCR: "WAN Interface Card - Serial 2T"
PID: WIC-2T= , VID: 1.0, SN:
NAME: "Unknown on Slot 1", DESCR: "Unknown"
PID: , VID: , SN:
|

|
L'option ram définit la quantité de
RAM en Mo allouée à l'instance de routeur.
Cette quantité se retrouve au niveau de l'IOS.
Router#sh ver
Cisco IOS Software, C2600 Software (C2600-IPBASE-M), Version 12.4(15)T14, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.
Compiled Tue 17-Aug-10 05:40 by prod_rel_team
ROM: ROMMON Emulation Microcode
ROM: C2600 Software (C2600-IPBASE-M), Version 12.4(15)T14, RELEASE SOFTWARE (fc2)
Router uptime is 55 minutes
System returned to ROM by unknown reload cause - suspect boot_data[BOOT_COUNT] 0x0, BOOT_COUNT 0, BOOTDATA 19
System image file is "tftp://255.255.255.255/unknown"
Cisco 2621XM (MPC860P) processor (revision 2.2) with 111616K/19456K bytes of memory.
Processor board ID 00000000000
M860 processor: part number 0, mask 0
2 FastEthernet interfaces
2 Serial(sync/async) interfaces
32K bytes of NVRAM.
16384K bytes of processor board System flash (Read/Write)
Configuration register is 0x2142
|

|
L'option image désigne le fichier image du
système d'exploitation à utiliser avec l'instance de routeur. Ce fichier a été
préparé à la la section intitulée « Quel modèle de routeur
? ». Dans cet exemple, les trois routeurs utilisent la même version
de système d'exploitation.
|

|
Avec les trois lignes suivantes, on aborde la topologie physique du réseau
avec le brassage des interfaces WAN entre
routeurs et avec les fonctions de commutation LAN.
-
Brassage entre la première interface WAN
du routeur R1 et la première interface WAN
du routeur R2.
-
Brassage de la première interface LAN du
routeur R1 à un réseau local numéroté 1. Dans ce cas, c'est le gestionnaire
dynagen qui assure la fonction de commutation
des trames Ethernet. Cette fonction de commutation offre les fonctions
usuelles de gestion des VLANs et permet de
définir des ports de commutateur en mode accès ou en mode trunk.
-
Brassage de la seconde interface LAN du
routeur R1 au premier port disponible du commutateur virtuel vde. En plus des fonctions usuelles de gestion des
VLANs, ce commutateur offre une protection
contre les boucles au niveau liaison avec une implémentation du protocole
Spanning Tree.
![[Important]](local/cache-vignettes/L24xH24/importantpng60b3-c6108.png?1643566424) |
Important |
L'argument déterminant pour l'utilisation de ce commutateur virtuel, c'est
qu'il offre une véritable table CAM. On est
ainsi en mesure de connaître l'association entre un numéro de port de
commutateur et la liste des adresses MAC
vues de ce port. C'est une fonction très importante et assez peu courante même
chez les «ténors» de la virtualisation.
|
Côté routeur R1, les informations sur l'interface LAN sont données par l'instruction suivante.
Router#sh int fa0/1
FastEthernet0/1 is up, line protocol is up
Hardware is AmdFE, address is c800.6010.0001 (bia c800.6010.0001)
Internet address is 192.200.0.17/27
MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Full-duplex, 100Mb/s, 100BaseTX/FX
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:00, output 00:00:05, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
29 packets input, 4975 bytes
Received 21 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog
0 input packets with dribble condition detected
29 packets output, 4549 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
3 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
Côté commutateur vde, on peut consulter la
table CAM à l'aide de la commande
suivante.
vde$ hash/print
0000 DATA END WITH '.'
Hash: 0063 Addr: 32:37:ce:2a:10:87 VLAN 0000 to port: 001 age 5 secs
Hash: 0083 Addr: c8:00:60:10:00:01 VLAN 0000 to port: 002 age 10 secs
.
1000 Success
|
En plus de la gestion de la topologie réseau, dynagen offre une console de contrôle d'exécution des
instances de routeurs émulés par dynamips.
$
dynagen lab.net
Reading configuration file...
Network successfully loaded
Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa
=> list
Name Type State Server Console
R1 2621XM running localhost:7200 2000
R2 2621XM running localhost:7200 2001
R3 2621XM running localhost:7200 2002
=>
Sur les différentes colonnes on reconnaît : la liste des routeurs en
cours de fonctionnement dans la catégorie Name
,
l'émulateur auquel ils sont associés dans la catégorie Server
et le port d'accès dans la catégorie Console
.
C'est à partir de ce port d'accès console que l'on accède à l'interface en
ligne de commande (CLI) du système
d'exploitation émulé (IOS). On ouvre un
Shell et on lance la session telnet.
$
telnet localhost 2001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connected to Dynamips VM "R2" (ID 1, type c2600) - Console port
% Please answer 'yes' or 'no'.
Would you like to enter the initial configuration dialog? [yes/no]: no
Press RETURN to get started!
En pratique, on ouvre autant de Shell que de
routeur à configurer. Pour quitter une session telnet, on utilise la séquence d'échappement :
Ctrl + Alt Gr + ].
Router>
telnet> close
Connection closed.
:~$
Le patron de fichier de configuration présenté ci-dessus correspond à la
topologie suivante.
Une fois ce fichier type au point, toutes les manipulations suivantes ne
nécessitent que des ajustements marginaux et le fait de devoir saisir
graphiquement toutes les interconnexions à chaque changement d'exercice
devient très fastidieux en comparaison.
Sur une préparation du type de la certification CCNP
Route, il suffit de faire une copie de l'arborescence de la manipulation
précédente pour démarrer la suivante immédiatement.
La sauvegarde des configurations IOS
Il est possible de sauvegarder les configurations des routeurs sous forme
de fichiers texte à partir de la console du gestionnaire dynagen.
=> export /all
export {/all | router1 [router2] ...} "directory"
saves router configs individual files in "directory"
Enclose the directory in quotes if there are spaces in the filespec.
=> export /all confg
START = 0x00000025, LEN = 0x00000346
END = 0x0000036a
Exporting R1 to confg/R1.cfg
START = 0x00000025, LEN = 0x00000346
END = 0x0000036a
Exporting R2 to confg/R2.cfg
START = 0x00000025, LEN = 0x000003a1
END = 0x000003c5
Exporting R3 to confg/R3.cfg
L'optimisation des ressources du système
hôte
Le gestionnaire dynagen doit être
configuré pour optimiser l'occupation mémoire et la gestion du temps
processeur sur le système hôte. Sans réglage, chaque instance de routeur
mobilise autant de mémoire vive que celle indiquée dans le fichier de
description de la topologie réseau et la consommation de temps processeur
monte à 100%.
L'opération décrite ici est a effectuer au premier lancement de
dynagen avec une nouvelle version
d'IOS. La marche à suivre est donnée dans
le tutoriel dynagen.
Une fois le gestionnaire lancé avec un fichier de configuration de
topologie réseau, on relève le message ***
Warning: Starting R(1|2|3) with no idle-pc value
.
On ne conserve qu'une seule instance de routeur active.
=> list
Name Type State Server Console
R1 2621XM running localhost:7200 2000
R2 2621XM running localhost:7200 2001
R3 2621XM running localhost:7200 2002
=> stop R2
C2600 'R2': stopping simulation.
100-VM 'R2' stopped
=> stop R3
C2600 'R3': stopping simulation.
100-VM 'R3' stopped
=> list
Name Type State Server Console
R1 2621XM running localhost:7200 2000
R2 2621XM stopped localhost:7200 2001
R3 2621XM stopped localhost:7200 2002
=>
On collecte les informations sur la consommation des ressources du système
hôte et on sauvegarde une valeur de liste pour tous les autres routeurs
faisant appel à la version d'IOS
retenue.
=> idlepc get R1
Please wait while gathering statistics...
Please wait while gathering statistics...
Done. Suggested idling PC:
0x806a82c0 (count=30)
0x801c835c (count=24)
0x806a86c0 (count=22)
0x806a8704 (count=30)
0x806a87dc (count=76)
0x806a8ce8 (count=38)
0x806a8e28 (count=24)
0x80a04940 (count=34)
0x80a0499c (count=35)
0x806ae0b8 (count=21)
Restart the emulator with "--idle-pc=0x806a82c0" (for example)
1: 0x806a82c0 [30]
2: 0x801c835c [24]
3: 0x806a86c0 [22]
4: 0x806a8704 [30]
5: 0x806a87dc [76]
6: 0x806a8ce8 [38]
7: 0x806a8e28 [24]
8: 0x80a04940 [34]
9: 0x80a0499c [35]
10: 0x806ae0b8 [21]
Potentially better idlepc values marked with "*"
Enter the number of the idlepc value to apply [1-10] or ENTER for no change: 1
Applied idlepc value 0x806a82c0 to R1
=> idlepc save R1 db
idlepc value for image "c2600-ipbase-mz.124-15.T14.image" written to the database
=>
La sauvegarde est effectuée dans le fichier ~/dynagenidledb.ini
dont on peut consulter le contenu.
$
cat ~/dynagenidledb.ini
c2600-ipbase-mz.124-15.T14.image = 0x806a82c0
Et voilà ! Après toutes ces opérations de préparation, on dispose
maintenant d'une infrastructure complète qui permet la mise en œuvre de
pratiquement n'importe quelle interconnexion réseau sans «compromis sordide»
sur les conditions d'exploitation réelles. Chaque instance de routeur émulé
utilise un véritable système d'exploitation IOS avec toutes ses fonctionnalités. Avec le commutateur
virtuel vde, chaque instance de routeur peut
être connectée avec une ou plusieurs machines virtuelles et faire appels à des
services applicatifs.
Si vous êtes arrivés jusqu'à la lecture de ces lignes, j'espère que ce
(trop) long billet vous aura permis d'avancer dans l'acquisition de
compétences dans l'univers (impitoyable) des technologies réseau.
Ce billet est disponible en version imprimable au format PDF :
dynamips-dynagen.pdf.
$Id: dynamips-dynagen.xml 1601 2011-02-28 23:22:32Z
latu $