Installer et configurer GNS3

68 minutes de lecture

Objectifs de certification

CCNA 200-301

  • 5.3 Configurer l’accès aux périphériques avec des mots de passe


Installer et configurer GNS3

Pour se rapprocher d’une expérience moderne des interfaces de configuration des produits Cisco Systems, on conseillera volontiers le projet Open Source GNS3 comme meilleur rapport qualité/prix pour se préparer aux examens de certification et à la pratique des systèmes Cisco. Voici une guide d’installation et de configuration.

Au sommaire de ce document, on développera les sujets suivants :

  1. Introduction à GNS3
  2. Architecture Client / Serveur
  3. Installation de GNS3 Server chez Scaleway
  4. Comment trouver des images Cisco IOS pour GNS3 ?
  5. Installation de GNS3 GUI et connexion au serveur
  6. Appliances GNS3
  7. Création et manipulation d’un projet GNS3
  8. Sujets avancés

1. Le logiciel GNS3

Logo de GNS3

1.1. Présentation de GNS3

GNS3, “Graphical Network Simulator-3”, est une interface graphique frontale et une plateforme de contrôle écrites en Python pour simuler des infrastructures informatiques. Les technologies de virtualisation utilisées par GNS3 sont Dynamips, VPCS, VMWare Workstation/ESXi, VirtualBox, QEMU/KVM, Docker, …

Le logiciel émule aussi des technologies LAN/WAN comme Ethernet, Frame-Relay, ATM, HDLC, … Il permet d’interconnecter les ordinateurs émulés sur des commutateurs virtuels ou des interfaces physiques du serveur.

Une topologie peut être distribuée sur plusieurs serveurs. Il permet de construire des topologies complexes.

Il est possible de capturer en temps réel le trafic qui passe par les interfaces des périphériques.

Les topologies créées (on parle de projets GNS3) sont importables/exportables. Pour se connecter aux périphériques d’une topologie, on utilise une console texte ou une console graphique.

On trouvera les fonctionnalités complètes sous ces liens :

1.2. Origine du projet

Le projet GNS3 (2008) trouve son origine dans le logiciel Open Source Dynamips.

Dynamips (2005) est un émulateur de routeur Cisco écrit par Christophe fillot. Il émule les plateformes matérielles C2691, C3620, C3640, C3660, C3725, C3745 et C7206 en faisant fonctionner de véritables images Cisco IOS.

Dynagen et Dynagui sont deux autres projets qui s’interfacent avec Dynamips. GNS3 est en quelque sorte le successeur de ces deux logiciels d’interface qui s’est étendu en supportant d’autres hyperviseurs / émulateurs matériels.

1.3. Considérations sur GNS3 et sur son usage

Un premier avantage est celui du logiciel libre offrant accès à son code, gratuitement, avec une communauté forte et professionnelle. Il se contrôle via une API HTTP REST. Aussi, il s’interface avec un grand nombre d’hyperviseurs qui émulent beaucoup de plateformes. Il permet de capturer du trafic. La charge peut être répartie sur plusieurs serveurs de calcul. Les topologies peuvent être interconnectées au réseau réel.

Si la solution est certainement la plus populaire chez les candidats aux certifications Cisco et autres, il peut être utilisé dans d’autres cas. Tout d’abord, c’est un outil d’apprentissage qui permet de faire tourner des infrastructures représentatives sans aucune contrainte physique. Dans ce cadre, il peut servir pour des PoC (des preuves de concept), pour des démonstrations à des fins de diagnostic ou pour de test d’intégration au réseau réel.

Attention, le soutien d’une charge réelle reste limité par les ressources attribuées aux topologies et à la nature des systèmes utilisés (pour du lab comme des vIOS ou de la production comme un CSR1000V).

1.4. Alternatives

GNS3 n’est jamais qu’une alternative parmi d’autres, citons-en au moins quatre.

Packet Tracer est un simulateur (tout a été prévu par des codeurs) qui va très loin. Il nécessite une inscription dans une Académie Cisco. Êtes-vous vous-même un “académicien” régulier ou un formateur d’Académie ? Tant mieux alors. Dans la misère, Packet Tracer est mieux que rien.

VIRL, veuillez prononcer “viral” est la solution grand public de plateforme de laboratoire du constructeur Cisco Systems (voir plus bas). Son coût est raisonnable par abonnement de plus ou moins 200 EUR par an. Il faut toutefois être riche pour exécuter les topologies : c’est l’usine à gaz Open Source OpenStack qui les exécute avec un client lourd spécifique. Il est alors conseillé de prendre un serveur distant chez le prestataire Packet. Son intérêt est de pouvoir récupérer légalement des images Cisco IOS.

Du vrai matériel, toujours idéal, mais de moins en moins réaliste.

Enfin, EVE-NG est certainement le concurrent le plus à la mesure de GNS3. Il dispose d’un modèle commercial différent avec des versions “personnelle” et “professionnelle”.

1.5. Fonctionnement

Le logiciel GNS3 peut s’installer en “standalone” avec une interface graphique client et un serveur en local. Mais la méthode actuellement préconisée est d’utiliser un serveur GNS3 installé localement dans une machine virtuelle ou dans le nuage chez un prestataire comme OVH ou Scaleway (mais aussi Packet, AWS, GCP, etc.). Le serveur est alors commandé à travers un tunnel VPN avec une installation locale du client GUI.

Le contrôle du serveur est assuré via un API REST HTTP.

Une interface Web client vise à terme à remplacer le client graphique lourd de telle sorte que le serveur se suffise à lui-même et que l’utilisateur puise manipuler les topologies et les consoles des périphériques uniquement avec un navigateur Web (Firefox ou Chrome).

Le serveur GNS3 commande les machines virtuelles exécutées par les logiciels de virtualisation et d’émulation.

GNS3 est développé en Python.

1.6. Versions de GNS3

La dernière version recommandée est la 2.2.8 pour GNS3-SERVER et GNS3-GUI.

La version 2.2 offre une interface web, une nouvelle manière d’intégrer les modèles d’appliances, une meilleure gestion des machines qemu/KVM et Hyper-V, de nouveaux diagrammes de périphériques et beaucoup d’autres fonctionnalités.

2. Architecture Client / Serveur

GNS3 fonctionne selon un modèle client / serveur (voir GNS3 Architecture)

Les deux logiciels client et serveur doivent fonctionner dans une version identique.

GNS3 évolue rapidement en plusieurs branches. Pour une meilleure expérience, on peut aisément installer les dernières versions en développement.

2.1. Composants GNS3

GNS3 est conçu sur base de quatre éléments :

  • Le GUI (projet gns3-gui, gns3-web), multiple(s), affiche les topologies, communique directement avec le “controller”.
  • Le “controller” (projet gns3-server), unique, pilote le projet, gère son état et le sauvegarde sur disque.
  • Noeuds “compute” (projet gns3-server), multiple(s), là où les images sont exécutées par les émulateurs.
  • Les émulateurs (qemu, KVM, iou, dynamips, …) associés au noeuds “compute”.
+---------------+                  +----------+     +------+
|               |                  | COMPUTE  +-----> QEMU |
|  GNS3 GUI     |              +---> SERVER 1 |     +------+
|  QT interface +-----+        |   +----------+
|               |     |        |                    +---+
+---------------+    +v--------++               +--->IOU|
                     |CONTROLLER|               |   +---+
      +---------+    +^--------++  +---------+  |
      | GNS3 WEB+-----+        |   | COMPUTE +--+
      +---------+              +---> SERVER 2+--+   +--------+
                                   +---------+  +--->DYNAMIPS|
                                                    +--------+

En plus des composants fondamentaux d’une architecture GNS3, d’autres logiciels seront nécessaires tels qu’une librairie et un logiciel de capture (Wireshark), un client VPN (OpenVPN), un logiciel de terminal (Putty), des clients VNC et Spice, …

2.2. Client GNS3 GUI

GNS3 GUI est le logiciel client qui offre une interface graphique à l’utilisateur final pour gérer ses déploiements. Il s’installe sur l’ordinateur de travail de l’utilisateur. À terme, on imagine se passer de l’installation d’un client “lourd” local au profit d’une interface Web.

2.3. Serveur GNS3 Server

Le serveur prend toute la charge des fonctionnalités du logiciel :

  • il s’interface avec les hyperviseurs et émulateurs (principalement Qemu/KVM, Docker et Dynamips) pour exécuter les topologies;
  • il fournit les services de connectivité, de configuration, de déploiement de modèles, de gestion des topologies.

Notons que les instructions de virtualisation “VT-x/AMD-V” du processeur doivent être vues ou activées.

2.4. Types de déploiements du serveur GNS3

S’il est évident que le client doit être installé sur l’ordinateur de travail de l’utilisateur (Windows, Mac OS X, Linux), le serveur peut être exécuté :

  • sur le client directement (peu recommandé).
  • ou dans une machine virtuelle locale (de moins en moins recommandé) exécutée avec VMware Workstation/Fusion ou VirtualBox.
  • ou dans une machine virtuelle hébergée sur un serveur VMware ESXi local ou distant.
  • ou sur un serveur “bare-metal” dédié ou équivalent, ce qui est (fortement recommandé).

2.5. Installation de type Bare-Metal

Pour une meilleure expérience, il sera donc recommandé d’utiliser une instance de type Bare-Metal avec un accès natif aux instructions de virtualisation du processeur “VT-x” ou “AMD-V”.

Aussi les performances du serveur GNS3 peuvent se mesurer en fonction du nombre de CPU, de la vitesse des disques (SATA, SSD direct ou non), de l’accès au réseau, de la quantité de mémoire RAM nécessaires pour faire fonctionner une topologie dont tous les éléments sont actifs.

2.6. Dimensionnement du serveur

Un sous-dimensionnement du rapport “machine à démarrer” / “vcpu disponibles” peut ralentir le lancement d’une topologie. De même que les ressources en RAM pourraient être réservées ou s’agréger. Dans cette perspective l’usage des IOSv et des images Docker1 s’avère être un choix judicieux pour un usage partagé des ressources.

Le dimensionnement nécessaire dépendra des topologies à déployer et des machines utilisées. Pour commencer en CCNA (200-301), on recommandera au minimum :

  • 16Go RAM,
  • 8 vcpu disponibles
  • et 50Go de stockage SSD et plus, le plus rapide possible, en NVMe par exemple.

2.7. Images pour GNS3

Aussi, le fournisseur doit offrir une image Ubuntu 18.04 LTS prête à l’emploi sur le serveur.

Pour des topologies GNS3 avec des périphériques Cisco, on recommandera les images suivantes qui fonctionnent très bien avec qemu/KVM :

  • IOSv (L3, 1 vCPU, 512 Mo RAM) pour les routeurs (uniquement L3) (Architecture “x86_64”)
  • IOSv-L2 (L2, 1 vCPU, 768 Mo RAM) pour les commutateurs (L2/L3) (Architecture “x86_64”)
  • des conteneurs Docker pour les stations de travail.

Dynamips

Il est toujours possible de lancer un IOS d’une plateforme originale (version IOS 12.4T) qui aurait dû fonctionner sur un routeur physique embarqué. Ce type de solution est très légère si on se contente d’un vieil IOS dans un contexte de ressources limitées.

Qemu/KVM

Pour des exercices qui nécessitent une reproduction plus fidèle de la réalité, on peut monter soi-même ou utiliser l’image d’une machine virtuelle Qemu/KVM. La plupart des “appliances” GNS3 sont des machines Intel 64 bits.

À condition de disposer de ressources suffisantes (plusieurs vCPU et 4G RAM par machine), il est possible de virtualiser Cisco IOS-XE, Cisco IOS-XR ou encore Cisco ASAv.

Conteneurs Docker

Les avantages de la virtualisation par conteneurs et de l’interfaçage de GNS3 avec Docker permettent de profiter pleinement des ressources physiques du serveur avec souplesse et efficience.

Imaginons le cas d’un grand nombre de stations de travail simples à simuler, des dizaines, et que l’on déploierait par “duplication” à partir d’un conteneur modèle. Chacun de ces éléments sera alors une instanciation logicielle qui partagera toutes les ressources restantes en CPU/RAM et dont la seule charge au démarrage sera un échange DHCP, des échanges Neighbor Discovery et éventuellement du trafic DNS et NTP. La charge disque de chacun de ces conteneurs est presque nulle, mais ce n’est pas un avantage unique de Docker.1

Démarrage de 24 conteneurs

Dans ce cas de figure, les services à offrir doivent avoir la capacité de répondre à cette charge.

Espace disque consommé par les périphériques émulés/simulés

Les machines virtuelles Qemu/KVM sont utilisées en tant que clones liés (selon la terminologie VMware). Les machines virtuelles déployées utilisent un disque “snapshot” qui est le différentiel d’une image de base présente sur le serveur. Cette solution est optimale pour sauvegarder et partager des topologies de lab à usage temporaire.

Par contre, il n’y a pas de différentiel pour les conteneurs déployés. Si l’image de base d’un conteneur est déployée dix fois, il y aura autant d’espace disque consommé.1

2.8. Périphériques intégrés

Parmi les périphériques intégrés, on trouvera :

  • Hub Ethernet.
  • Commutateur (switch) Ethernet compatible VLAN gérable en ligne de commande.
  • Un noeud NAT qui offre la connectivité à partir du réseau 192.168.122.0/24.
  • Un noeud VPCS qui offre une connectivité minimale en IPv4 et en IPv6.
  • Un commutateur ATM et un commutateur Frame-relay pour les anciennes topologies.

2.9. Exemples de topologies et de leur dimensionnement

Dans les exemples suivants, on fait l’hypothèse d’un démarrage de tous les éléments d’une topologie au même moment.

NombreImagesvCPURAM
4IOSv-L2 (switch)43072 Mo
8Docker (station)1 minimumquelque Mo
12total44 Go
NombreImagesvCPURAM
4IOSv-L2 (switch)43072 Mo
3IOSv (routeur)31536 Mo
2Dynamips (routeur)1 minimum512 Mo
4Docker (station)1 minimumquelque Mo
13total85,12 Go

2.10. Tableau comparatif des offres des fournisseurs IaaS

Si le prestataire de service Scaleway est illustré ici, il est parfaitement possible de faire la même chose chez d’autres prestataires comme OVH ou Packet.net avec d’autres prix, mais probablement un meilleur service.

Scaleway prépare une nouvelle offre Bare Metal Dedibox. Les instances virtuelles de Scaleway exposent les instructions de virtualisation de telle sorte que GNS3 Server soit fonctionnel sur ces VM, mais il est conseillé alors de prendre un disque NVMe natif comme l’offre Instances General Purpose (GP).

FournisseurOffrePrixAppréciation
Scaleway DEV1-L (8Go RAM, 4 vcpu, 80Go NVMe)15,99 EUR/mois ou 0,032 EUR/heure+ Choix minimal, mais très bon rapport qualité/prix, instance virtuelle
Scaleway GP1-XS (16Go RAM, 4 vcpu, 150Go NVMe)39 EUR/mois ou 0,078 EUR/heure++ Confortable, bon rapport qualité/prix
Scaleway GP1-S (32Go RAM, 8 vcpu, 300Go NVMe)79 EUR/mois ou 0,158 EUR/heure+++ Très confortable, bon rapport qualité/prix, instance virtuelle
OVH Serveur Dédié : SP-32-S (32Go RAM, ntel Xeon E3-1245 v5 - 4c/8t - 3,5GHz /3,9GHz, 2To SATA)59,99 EUR/mois++ Très bon service
Scaleway GP-BM1-S (64Go RAM, 1× Intel® Xeon E3 1240v6 4C 8T - 3,7 GHz, 2×250 Go SSD)119,99 EUR/mois ou 0,24 EUR/heure++ Bare-Metal
Packet.net c1.small.x86 (32Go RAM, 4 Physical Cores @ 3.5 GHz - 1 × E3-1240 V5, 50Go SSD)0,40 EUR/heure ou 10 EUR/jour+ Rolls du Bare-Metal-As-a-Service

3. Installation de GNS3 Server chez Scaleway

Nous partons du principe que vous avez les moyens de vos ambitions en prenant un serveur “Bare-Metal” (entendez “dédié”) chez Scaleway pour exécuter des topologies GNS3.

3.1. Procédure d’installation de GNS3 SERVER

  1. Inscription chez Scaleway
  2. Créer une instance GP-BM1-S
  3. Installation de GNS3 Server
  4. Acquisition des images Cisco IOSv
  5. Placement des images sur le serveur

3.2. Inscription chez Scaleway

Placement d'une clé publique SSH chez Scaleway

3.3. Créer une instance GP-BM1-S

Prendre une instance GP-BM1-S (64Go RAM, 8 cores, 250Go SSD) avec Ubuntu 18.04 (Bionic) comme système d’exploitation et la lancer.

3.4. Installation de GNS3 Server

Suivre la procédure décrite dans le document intitulé Install GNS3 on a remote server (le script d’installation est situé sur GitHub). Sur le serveur distant GNS3 (gns3-server) :

cd /tmp
curl https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh \
 > gns3-remote-install.sh
bash gns3-remote-install.sh --with-openvpn

A la fin de l’installation, un URL de téléchargement du fichier de connexion OpenVPN est fourni. Cet information fait partie de la bannière qui s’affichera à chaque connexion SSH au serveur.

[... sortie ommise ...]
=> Create client configuration
Setup HTTP server for serving client certificate
=> Restart OpenVPN
=> Download http://51.15.90.65:8003/fe718e72-dcb2-11e9-98e6-0007cb0b1f2f/gns3-server.ovpn to setup your OpenVPN client after rebooting the server

Selon ce message, on trouvera le fichier de connexion Openvpn au serveur sous l’URL suivant :

http://51.15.90.65:8003/fe718e72-dcb2-11e9-98e6-0007cb0b1f2f/gns3-server.ovpn

Veuillez récupérer ce fichier avec l’extension .ovpn sur votre station de travail. Ici avec la commande wget :

wget http://51.15.90.65:8003/fe718e72-dcb2-11e9-98e6-0007cb0b1f2f/gns3-server.ovpn

Enfin, il est recommandé de redémarrer le serveur (“Hard Reset” chez Scaleway).

3.5. Acquisition des images Cisco IOSv

Télécharger les images à partir de son compte Cisco VIRL (200 EUR/an).

3.6. Placement des images sur le serveur

Placer les images IOSv et Intel dans /opt/gns3/images/QEMU

3.7. Ultimes recommandations

Il y a certainement deux mesures de précaution à prendre si le serveur GNS3 est exposé avec une adresse IP publique : désactiver la mise à disposition du fichier de connexion VPN en HTTP sur le port TCP 8003 et contrer les tentatives harassantes de connexion sur le port SSH TCP 22. On prendra donc garde de désactiver nginx-light (ce qui est toujours réversible) qui offre ce service Web. Il est aussi recommandé d’activer le logiciel fail2ban pour diminuer la pollution des tentatives de connexions sur le port SSH.

apt-get -y install at fail2ban
at tomorrow <<< 'apt-get -y remove nginx-light'

3.8. Livre de jeu Ansible pour déployer GNS3 Server

La collection Ansible Deploy GNS3 Server reprend une série de rôles Ansible qui permettent d’approvisioner des serveurs chez Sclaleway ou Packet, de les configurer et d’envoyer les paramètres de connexion à l’utilisateur final par courrier électronique.

4. Comment trouver des images Cisco IOS pour GNS3 ?

Cette étape est facultative si vous n’avez pas besoin d’éprouver des produits Cisco Systems. Les images actuelles fonctionnent en format Intel x86_64, ce qui signifie qu’elles fonctionnent avec un hyperviseur comme qemu/KVM, VMWare ou VirtualBox. Ces images s’obtiennent en payant un abonnement chez Cisco Systems.

4.1. Abonnement Cisco VIRL

Le seul moyen d’obtenir des images IOSv légalement est de prendre un abonnement VIRL.

L’exploitation de la solution native Cisco VIRL nous semble particulièrement lourde et coûteuse. C’est la raison principale de l’exploitation des images Cisco avec GNS3.

4.2. Images Cisco VIRL

Un abonnement VIRL vous permet d’obtenir des images à exécuter dans GNS3. Il s’agit d’image que l’on peut utiliser légalement pour un usage de test et d’apprentissage à condition d’avoir acheté un abonnement Cisco VIRL.

Soit ces images ne sont pas destinées à supporter du trafic de production comme les images IOSv, soit elles démarreront avec un taux de transfert limité sur les interfaces, comme l’image du CSR 1000v.

On trouvera plus bas un tableau des plateformes avec la version du système d’exploitation et la version de l’abonnement VIRL.

PlateformeversionVIRL Release
IOSv15.6(2)TVIRL 1.3.296 (Aug. 2017 Release)
IOSv15.6(3)MVIRL 1.5.145 (March 2018 Release)
IOSv15.7(3)M (New)VIRL 1.6.65 (July 2019 Release)
IOSv L215.2 (03.2017)VIRL 1.3.296 (Aug. 2017 Release)
IOSv L215.2.1 (06.2018) (New)VIRL 1.6.65 (July 2019 Release)
IOS XRv6.1.3VIRL 1.3.296 (Aug. 2017 Release)
IOS XRv 90006.0.1VIRL 1.3.296 (Aug. 2017 Release)
IOS XRv 90006.2.2 image (New)VIRL 1.5.145 (March 2018 Release)
IOS XRv 90006.5.1 image (New)VIRL 1.6.65 (July 2019 Release)
CSR 1000v16.5.1b (XE based image)VIRL 1.3.296 (Aug. 2017 Release)
CSR 1000v16.6.1 XE-based image (New)VIRL 1.5.145 (March 2018 Release)
CSR 1000v16.9.1 XE-based image (New)VIRL 1.6.65 (July 2019 Release)
NXOSv 7k7.3.0.1VIRL 1.3.296 (Aug. 2017 Release)
NXOSv 9k7.0.3.I6.1VIRL 1.3.296 (Aug. 2017 Release)
NXOSv 9k9.2.3 (Nexus 9000)VIRL 1.6.65 (July 2019 Release)
ASAv9.7.1VIRL 1.3.296 (Aug. 2017 Release)
ASAv9.8.2 (New)VIRL 1.5.145 (March 2018 Release)
ASAv9.9.2 (New)VIRL 1.6.65 (July 2019 Release)

4.3. Images Cisco pour les Labs

Les images utilisées Qemu/KVM dans ce support sont les suivantes.

PériphériquesImages Qemu/KVMCommentaire
Routeur Cisco IOSv vios-adventerprisek9-m.vmdk.SPA.156-2.T ou vios-adventerprisek9-m.vmdk.SPA.157-3.M3 avec IOSv_startup_config.imgVIRL
Commutateur Cisco IOSv L2/L3 vios_l2-adventerprisek9-m.03.2017.qcow2 ou vios_l2-adventerprisek9-m.SSA.high_iron_20180619.qcow2VIRL
Poste de travail L2 à L7container Docker gns3/ubuntu:bionicUbuntu GNS3 Docker Hub
Pare-feu ASAvasav971.qcow2VIRL

4.4. Alternative avec des images Dynamips

Sans abonnement VIRL, il est difficile de prendre possession de ces images. Toutefois, il est possible d’obtenir un routeur IOS en version 12.4 plus facilement, car celui-ci n’est plus maintenu depuis longtemps. On fait alors fonctionner ces machines “virtuelles” avec l’émulateur Dynamips. Les images Dynamips suivantes sont fonctionnelles :

PériphériquesImages dynamips
Routeur IOS 12.4 (petit)c3725-adventerprisek9-mz.124-15.T14
Routeur IOS 12.4 + CME (VoIP)c3745-adventerprisek9_ivs-mz.124-15.t8
Routeur IOS 12.4 (Mainstream)c7200-adventerprisek9-mz.124-24.T5

5. Installation de GNS3 GUI et connexion au serveur

L’étape suivante est d’installer la solution “client” sur le poste de travail de l’utilisateur. En résumé, le logiciel client GNS3-GUI va se connecter au serveur GNS3-Server à travers un tunnel VPN OpenVPN. Pour que les deux éléments puissent communiquer ensemble, le tunnel VPN doit être monté.

5.1. Procédure d’installation de GNS3-GUI

La procédure consiste à suivre quatre étapes :

  1. Télécharger et installer le logiciel OpenVPN.
  2. Établir la connexion OpenVPN avec votre serveur GNS3
  3. Installer la version GUI de GNS3
  4. Importer des “appliances” (les modèles de machines virtuelles)

5.2. Téléchargement et installation d’OpenVPN

Il est probablement plus que nécessaire de redémarrer les stations Windows et Mac, car de nouveaux pilotes de périphériques ont été installés.

5.3. Connexion OpenVPN

Dans l’étape d’installation du serveur GNS3-Server, un fichier de connexion VPN a été produit et récupéré : http://$MY_IP_ADDR:8003/$UUID/$HOSTNAME.ovpn où la variable $MY_IP_ADDR est l’adresse IP du serveur.

Il est alors nécessaire de lancer le client Openvpn graphique ou en ligne de commande avec ce fichier de configuration pour établir la connexion.

Vous pouvez vérifier la connectivité vers votre serveur adressé en 172.16.253.1 à l’autre bout du tunnel :

ping -c1 172.16.253.1

Avec le résultat attendu :

PING 172.16.253.1 (172.16.253.1): 56 data bytes
64 bytes from 172.16.253.1: icmp_seq=0 ttl=64 time=41.023 ms

--- 172.16.253.1 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 41.023/41.023/41.023/0.000 ms

5.4. Téléchargement et installation de GNS3-GUI

Le logiciel se télécharge à partir de cette adresse : https://github.com/GNS3/gns3-gui/releases/ à partir de laquelle on trouve des différentes archives pour Windows, Mac, Linux et les fabrications des machines virtuelles GNS3-VM.

Pour Windows et Mac OS X

Sur des systèmes d’exploitation comme Windows et Mac OS X, l’installation est très intuitive, car elle consiste uniquement à choisir “Next”, excepté qu’il n’est pas nécessaire d’installer les produits commerciaux quand bien même ils sont très intéressants (SolarWinds Response Time Viewer).

On trouvera une aide dans le document intitulé Windows Installation.

Pour Linux (Debian)

Le document suivant indique la procédure d’installation de GNS3-gui sous Linux : GNS3 Installation on Linux.

On trouvera ici une procédure d’installation pour Centos 7 : Gist install-gns3-centos7.sh

Pour une installation de GNS3-GUI sous Linux, il est conseillé de vérifier la présence de Wireshark.

Choix de la configuration

Lors de l’installation choisir une configuration “Run everything on a remote server (advanced usage)”.

Fenêtre Run everything on a remote server (advanced usage)

Ce serveur distant est à l’autre bout du tunnel VPN. Les paramètres à indiquer sont :

  • Adresse : 172.16.253.1
  • Port : 3080
Connexion au serveur à travers le tunnel VPN

5.5. Connexion à l’interface Web

A partir de la version 2.2, on peut tester l’interface de gestion à travers un navigateur Web (Firefox ou Chrome) et même accéder aux consoles dans l’interface Web. Voyez vous-même : http://172.16.253.1:3080/static/web-ui/bundled.

6. Appliances GNS3

6.1. Définition d’une appliance GNS3

Un template (un modèle) d’appliance est un fichier de définition d’une machine virtuelle qui référence les paramètres d’interfaces, la RAM, les CPUs, la console et des images disque.

Depuis la version 2.1, les modèles des “appliances” sont directement disponibles à travers l’interface GNS3 GUI ce qui facilite le déploiement en classe de formation. Il est conseillé d’utiliser l’appliance Ubuntu Docker comme station de travail en attendant la disponibilité d’un Windows Core en image Docker par exemple.

Leur emplacement sur le serveur est situé ici :

/usr/share/gns3/gns3-server/lib/python3.6/site-packages/gns3server/appliances/

Pour utiliser une “appliance”, il est nécessaire que l’image soit placée sur le serveur.

Ces images pourraient être placées d’avance sur le serveur GNS3, ce qui est recommandé. Dans le cas contraire, le cas échéant le fichier d’appliance indique un URL de téléchargement avec la possibilité de la placer à travers le canal de contrôle HTTP éventuellement encapsulé dans le tunnel OpenVPN (bonne chance si l’image dépasse quelques dizaines de Mo).

[à compléter]

Ensuite, l’“appliance” devrait être “installée” …

6.2. Marketplace GNS3

Le Marketplace de GNS3 donne une très bonne idée de la diversité des plateformes que l’on peut émuler avec le logiciel.

Marketplace de GNS3

On remarquera :

7. Création et manipulation d’un projet GNS3

L’usage de GNS3 est très intuitif : On déplace des périphériques sur l’espace de travail, on tire les câbles de connexion, on allume les périphériques de la topologie et puis on peut accéder aux consoles de gestion.

Page d’aide : Your First GNS3 Topology

L’interface graphique est composée de six éléments :

  1. Espace de travail (Workspace)
  2. Barre d’outils principale (Toolbar)
  3. Barre de périphériques (Devices Toolbar)
  4. Panneau Résumé de la topologie
  5. Panneau Résumé des serveurs
  6. Panneau Console du contrôleur
Interface graphique de GNS3

7.1. Espace de travail (Workspace)

L’espace de travail représente la topologie et permet de contrôler à la souris les différents périphériques à partir d’un clic droit.

Espace de travail (Workspace) GNS3

7.2. Barre d’outils (Toolbar)

Cette barre d’outils générale permet de :

  • créer une nouvelle topologie
  • ouvrir une nouvelle topologie
  • gérer les instantanés
  • Ouvrir la console, démarrer, mettre en pause, arrêter tous les périphériques de la topologie
  • Ajouter du texte, des images, des figures à la topologie
  • Prendre une image graphique de la topologie
Barre d'outils (Toolbar) GNS3

7.3. Barre de périphériques (Devices Toolbar)

La barre de périphérique permet de gérer les appliances et de déployer les périphériques et les connexions :

  • Les routeurs
  • Les commutateurs
  • Les hôtes terminaux
  • Les pare-feux
  • Tous les périphériques
  • Les connexions
Barre de périphériques (Devices Toolbar) GNS3

7.4. Panneau Résumé de la topologie (Topology Node Summary Pane)

Ce panneau donne la liste des périphériques avec l’adresse et le port d’accès de la console texte (via telnet). Un clic droit sur un périphérique offre les options de contrôle.

On peut aussi visualiser les connexions entre les périphériques et lancer des captures à visualiser dans wireshark.

Panneau Résumé de la topologie (Topology Node Summary Pane) GNS3

7.5. Panneau Résumé des serveurs (Servers Summary Pane)

Le panneau Résumé des serveurs donne la liste des serveurs référencés dans la configuration GNS3-gui, leur capacité en CPU et en RAM.

Panneau Résumé des serveurs (Servers Summary Pane) GNS3

En voyant vos serveurs disponibles, vous pouvez déduire que la connectivité à travers le tunnel OpenVPN est établie et que le serveur est prêt à recevoir les commandes venant du client.

7.6. Panneau Console du contrôleur (Console Pane)

Il s’agit de la console texte qui permet de contrôler en ligne de commande la topologie.

Panneau Console du contrôleur (Console Pane) GNS3
GNS3 management console.
Running GNS3 version 2.1.21 on Darwin (64-bit) with Python 3.6.5 Qt 5.11.0 and PyQt 5.10.1.
Copyright (c) 2006-2019 GNS3 Technologies.
Use Help -> GNS3 Doctor to detect common issues.

=> help

Documented commands (type help <topic>):
========================================
console  debug  help  log  reload  show  start  stop  suspend  version

=> show ?

        Show detail information about every device in current lab:
        show device

        Show detail information about a device:
        show device <device_name>
=> show device
Nat device Internet is always-on
This is a node for external connections
Device run on gns3-baremetal
   Port nat0 connected to cisco-router on port Gi0/1

QEMU VM pc-1 is stopped
  Node ID is 2, server's node ID is 3b6840cf-d0f9-48dc-80b5-d0464baeea37
  QEMU VM's server runs on gns3-baremetal
  Console is on port 5001 and type is telnet
     Ethernet0 connected to cisco-switch on port Gi0/1

QEMU VM pc-2 is stopped
  Node ID is 3, server's node ID is 7bc22b33-4536-4050-8c6e-13c24a2cb979
  QEMU VM's server runs on gns3-baremetal
  Console is on port 5013 and type is telnet
     Ethernet0 connected to cisco-switch on port Gi0/2

QEMU VM pc-3 is stopped
  Node ID is 4, server's node ID is e40f3a4e-cfe7-44b8-9472-f3be26c3a6e3
  QEMU VM's server runs on gns3-baremetal
  Console is on port 5015 and type is telnet
     Ethernet0 connected to cisco-switch on port Gi0/3

QEMU VM pc-4 is stopped
  Node ID is 5, server's node ID is 6f803b43-dac0-4d9b-8807-d17504b0b749
  QEMU VM's server runs on gns3-baremetal
  Console is on port 5017 and type is telnet
     Ethernet0 connected to cisco-switch on port Gi1/0

QEMU VM cisco-switch is stopped
  Node ID is 6, server's node ID is 32889769-8376-491a-b0df-e48f470304a9
  QEMU VM's server runs on gns3-baremetal
  Console is on port 5019 and type is telnet
  Usage: There is no default password and enable password. There is no default configuration present.
     Gi0/0 connected to cisco-router on port Gi0/0
     Gi0/1 connected to pc-1 on port Ethernet0
     Gi0/2 connected to pc-2 on port Ethernet0
     Gi0/3 connected to pc-3 on port Ethernet0
     Gi1/0 connected to pc-4 on port Ethernet0
     Gi1/1 is empty
     Gi1/2 is empty
     Gi1/3 is empty
     Gi2/0 is empty
     Gi2/1 is empty
     Gi2/2 is empty
     Gi2/3 is empty
     Gi3/0 is empty
     Gi3/1 is empty
     Gi3/2 is empty
     Gi3/3 is empty

QEMU VM cisco-router is stopped
  Node ID is 7, server's node ID is a8fc8d8d-d50a-42eb-a416-75b692aa9ef1
  QEMU VM's server runs on gns3-baremetal
  Console is on port 5021 and type is telnet
  Usage: There is no default password and enable password. There is no default configuration present.
     Gi0/0 connected to cisco-switch on port Gi0/0
     Gi0/1 connected to Internet on port nat0
     Gi0/2 is empty
     Gi0/3 is empty

=>

7.9. Connexion à la console

Pour se connecter à la console d’un périphérique, il suffit de double-cliquer sur le périphérique ou de faire clic droit et choisir “Console”. Dans l’interface Web, un clic droit sur le périphérique permet de choisir une console locale ou dans le navigateur.

7.10. Option de gestion

Un clic droit sur un périphérique de type “Docker” par exemple offre ceci :

Clic droit sur un périphérique GNS3

On trouvera différentes options de gestion intéressantes :

  • Configuration et fichier de configuration
  • Changement de nom
  • Changement de diagramme
  • Duplication
  • Console
  • Démarrage, suspension, arrêt, suppression

8. Sujets avancés

8.1. Configuration de GNS3

Edit/Preferences :

[à compléter]

8.2. Configuration des consoles

  • Texte (Telnet)
  • Graphique (VNC)
  • Graphique (Spice)

8.3. Capture du trafic et analyse Wireshark

[à compléter]

8.4. Configurer les paramètres réseau d’un container Docker

[à compléter]

8.5. Construction d’une “appliance” et d’une image personnalisée

[à compléter]

  • Méthodes de création
  • Disques qcow2 ou vmdk
  • fichier d’appliance gns3a (xml)
  • Exemples Windows

8.6. Import / Export d’un projet “portable”

[à compléter]

8.7. Connexion du PC local à la topologie distante

Il existe un périphérique qui s’appelle “NAT node” et qui offre un service de connectivité vers l’Internet, avec DHCP et DNS. Il s’agit d’un routeur NAT virtuel natif par défaut à la solution Libvirt sous Linux. Normalement ce “nuage” est inaccessible de l’Internet, mais il est possible de le joindre assez facilement à travers le tunnel VPN.

Pour joindre le nuage “NAT” adressé en 192.168.122.0/24 dans une topologie, il faut que le client connaissance la route IPv4 à travers le tunnel OpenVPN. Soit le client crée sa route lui-même, soit la configuration est poussée à partir du serveur. Faut-il aussi que le routage entre le tunnel et ce commutateur virtuel soit activé sur le serveur GNS3.

Sur l’ordinateur client, on crée une route statique pour joindre le réseau NAT à travers le tunnel :

sudo ip route add 192.168.122.0/24 dev tun0

D’une autre manière, on peut indiquer les routes à pousser auprès du client dans le fichier de configuration du serveur Openvpn (/etc/openvpn/udp1194.conf) :

echo 'push "route 192.168.122.0 255.255.255.0"' >> /etc/openvpn/udp1194.conf

Pour activer le routage entre le tunnel Openvpn et le nuage NAT sur le serveur GNS3-Server, il est nécessaire d’exécuter quelques commandes iptables :

iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.122.0/24 -s 172.16.253.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.122.0/24 -d 172.16.253.0/24 -j ACCEPT

On peut alors à partir de l’ordinateur GNS3 client joindre le routeur/NAT du nuage et tout périphérique voisin dans le réseau 192.168.122.0/24, comme cela par exemple :

ping -c1 192.168.122.1
PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
64 bytes from 192.168.122.1: icmp_seq=1 ttl=64 time=1.12 ms

--- 192.168.122.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.122/1.122/1.122/0.000 ms

8.8. API HTTP REST de GNS3 Server

À partir de l’ordinateur client connecté au tunnel VPN, vous pouvez manipuler l’API HTTP REST du serveur GNS3, par exemple ici pour obtenir la version courante du serveur :

uri="http://172.16.253.1:3080/v2"
curl $uri/version
{
    "local": false,
    "version": "2.2.8"
}

De la même manière curl $uri/projects offrira en format JSON la liste des projets.

Voyez la documentation de l’API : GNS3 API Documentation : Sample sessions using curl.

Voici un exemple de script Bash2 qui permet de dupliquer un projet dont vous connaissez l’identifiant sur le serveur :

#!/bin/bash

project="$1"
name="$2"

curl --location --request POST "http://172.16.253.1:3080/v2/projects/${project}/duplicate" \
--header 'Content-Type: application/json' \
--data-raw '{"name": "'"$name"'"}'

Dans cet exemple, on propose la duplication du projet e0147533-1edf-4575-bc75-77fe0f281ee5 sous le nouveau nom project1 :

bash gns3-duplicate-project.sh e0147533-1edf-4575-bc75-77fe0f281ee5 project1

Cette dernière commande offre cette sortie :

{
    "auto_close": true,
    "auto_open": false,
    "auto_start": false,
    "drawing_grid_size": 25,
    "filename": "project1.gns3",
    "grid_size": 75,
    "name": "project1",
    "path": "/home/gns3/projects/c7740fba-576b-4a8e-b82e-ce3b0b9b7550",
    "project_id": "c7740fba-576b-4a8e-b82e-ce3b0b9b7550",
    "scene_height": 1000,
    "scene_width": 2000,
    "show_grid": false,
    "show_interface_labels": true,
    "show_layers": false,
    "snap_to_grid": false,
    "status": "closed",
    "supplier": null,
    "variables": null,
    "zoom": 120
}

8.9. GNS3 as a Service

Le seul fournisseur de service de serveurs GNS3 à la demande connu sur le marché est CloudMyLab. Le service est “tout compris”, notamment la fourniture d’images Cisco Systems.

Le coût peut toutefois être un frein. Voyez vous-même.

Offres GNS3 Hosted Service CloudMyLab
  1. Les projets qui contiennent des images Docker sont difficilement portables.  2 3

  2. gns3-duplicate-project.sh