ProHoster > Blog > administration > Automatisation des services réseaux ou comment construire un laboratoire virtuel avec OpenDaylight, Postman et Vrnetlab
Automatisation des services réseaux ou comment construire un laboratoire virtuel avec OpenDaylight, Postman et Vrnetlab
Dans cet article, je vais vous montrer comment mettre en place à la lumière du jour pour travailler avec des équipements réseau, et également montrer comment utiliser Facteur et simple RESTCONF demandes, cet équipement peut être contrôlé. Nous ne travaillerons pas avec du matériel, mais à la place nous déploierons de petits laboratoires virtuels avec un seul routeur utilisant Vrnetlab sur Ubuntu LTS 20.04.
Je vais d'abord montrer les paramètres détaillés en utilisant l'exemple d'un routeur Juniper vMX 20.1R1.11, puis nous le comparons avec le réglage Cisco xRV9000 7.0.2.
Teneur
Connaissances requises
Partie 1: discuter brièvement OpenDaylight (ci-après ODL), Facteur и Vrnetlab et pourquoi en avons-nous besoin
Partie 2: description du laboratoire virtuel
Partie 3: Personnaliser à la lumière du jour
Partie 4: Personnaliser Vrnetlab
Partie 5: en utilisant Facteur connecter un routeur virtuel (Genévrier vMX) à ODL
Partie 6: obtenez et modifiez la configuration du routeur à l'aide de Facteur и ODL
Partie 7: ajouter Cisco xRV9000
Conclusion
PS
Bibliographie
Connaissances requises
Pour que l'article ne se transforme pas en fiche, j'ai omis quelques détails techniques (avec des liens vers de la littérature où vous pouvez lire à leur sujet).
A ce propos, je vous propose des sujets qu'il serait bon (mais presque pas nécessaire) de connaître avant de lire :
Dans notre cas, nous nous y intéressons comme moyen d'envoyer des requêtes REST à l'API OpenDaylight. Vous pouvez, bien sûr, envoyer des demandes manuellement, mais dans Postman, tout semble très clair et convient parfaitement à nos besoins.
Pour ceux qui veulent creuser : de nombreux supports de formation y ont été rédigés (par exemple).
Outil de déploiement de routeurs virtuels dans Docker
Prend en charge : Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR, etc.
Open source
Un instrument très intéressant mais peu connu. Dans notre cas, nous l'utiliserons pour exécuter Juniper vMX et Cisco xRV9000 sur un Ubuntu 20.04 LTS standard.
Vous pouvez en savoir plus à ce sujet sur page du projet.
Partie 2 : Laboratoire
Dans ce tutoriel, nous allons mettre en place le système suivant :
Comment ça marche
Genévrier vMX monte en Docker conteneur (au moyen Vrnetlab) et fonctionne comme le routeur virtuel le plus courant.
ODL connecté au routeur et vous permet de le contrôler.
Facteur lancé sur une machine séparée et à travers elle nous envoyons des commandes ODL: pour connecter/déconnecter le routeur, modifier la configuration, etc.
Commentaire sur le dispositif du système
Genévrier vMX и ODL nécessitent beaucoup de ressources pour leur fonctionnement stable. Une seulement vMX demande 6 Go de RAM et 4 cœurs. Par conséquent, il a été décidé de déplacer tous les "poids lourds" vers une machine séparée (Heulett Packard Enterprise MicroServeur ProLiant Gen8, Ubuntu 20.04 LTS). Le routeur, bien sûr, ne "vole" pas dessus, mais les performances sont suffisantes pour de petites expériences.
Partie 3 : Configurer OpenDaylight
La version actuelle d'ODL au moment d'écrire ces lignes est Magnesium SR1
1) Installer Java Ouvrir JDK 11 (pour une installation plus détaillée ici)
ubuntu:~$ sudo apt install default-jdk
2) Trouvez et téléchargez la dernière version ODLpar conséquent,
3) Décompressez l'archive téléchargée
4) Allez dans le répertoire résultant
5) Lancement ./bin/karaf
A cette étape ODL devrait démarrer et nous nous retrouverons dans la console (le port 8181 est utilisé pour l'accès depuis l'extérieur, que nous utiliserons plus tard).
Ensuite, installez Fonctionnalités ODLconçu pour fonctionner avec des protocoles CONF NET и RESTCONF. Pour le faire dans la console ODL nous exécutons :
Pour l'installation Vrnetlab clonez le dépôt correspondant depuis github :
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git
Aller au répertoire vrnetlab:
ubuntu:~$ cd ~/vrnetlab
Ici vous pouvez voir tous les scripts nécessaires à l'exécution. Veuillez noter qu'un répertoire correspondant a été créé pour chaque type de routeur :
Chaque routeur pris en charge Vrnetlab, a sa propre procédure de configuration unique. Quand Genévrier vMX nous avons juste besoin de télécharger l'archive .tgz avec le routeur (vous pouvez la télécharger depuis site officiel) dans le répertoire vmx et exécutez la commande make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make
Construire une image vMX prendra environ 10-20 minutes. C'est l'heure d'aller prendre un café !
"En effet, la première fois que le VCP (Control Plane) est démarré, il lit un fichier de configuration qui détermine s'il s'exécutera en tant que VRR VCP dans vMX. Auparavant, ce lancement était effectué lors du démarrage de Docker, mais cela signifiait que le VCP était toujours redémarré une fois avant que le routeur virtuel ne devienne disponible, ce qui entraînait un long temps de démarrage (environ 5 minutes) Maintenant, la première exécution du VCP est effectuée lors de la construction de l'image Docker, et puisque la construction Docker ne peut pas être exécutée avec le - -option privilégiée, cela signifie que qemu fonctionne sans accélération matérielle KVM et que la construction prend donc beaucoup de temps. Au cours de ce processus, de nombreux journaux sont générés, vous pouvez donc au moins voir ce qui se passe. Je pense qu'une longue construction n'est pas si effrayant parce que nous créons une image une fois, mais nous en lançons plusieurs."
Après vous pouvez voir l'image de notre routeur dans Docker:
ubuntu:~$ sudo docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 3 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB
Lancer le conteneur vr-vmx
On commence par la commande :
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
Ensuite, nous pouvons voir des informations sur les conteneurs actifs :
ubuntu:~$ sudo docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
120f882c8712 b1b2369b453c "/launch.py" 2 minutes ago Up 2 minutes (unhealthy) 22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp jun01
Connexion au routeur
L'adresse IP de l'interface réseau du routeur peut être obtenue avec la commande suivante :
Défaut, Vrnetlab crée un utilisateur sur le routeur vrnetlab/VR-netlab9.
Se connecter avec ssh:
ubuntu:~$ ssh [email protected]
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Password:
--- JUNOS 20.1R1.11 Kernel 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11
Ceci termine la configuration du routeur.
Les recommandations d'installation pour les routeurs de divers fournisseurs sont disponibles sur projet github dans les répertoires respectifs.
Partie 5 : Postman - connecter le routeur à OpenDaylight
Pose du facteur
Pour l'installer, il suffit de télécharger l'application par conséquent,.
Connexion d'un routeur à ODL
créons PUT demande:
Chaîne de requête:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin. Ceci est nécessaire pour accéder à l'ODL :
Dans l'onglet En-têtes, vous devez ajouter deux en-têtes :
Accepter l'application/xml
Application/xml de type de contenu
Notre demande a été faite. Nous envoyons. Si tout a été configuré correctement, alors nous devrions renvoyer le statut "201 Created":
A quoi sert cette requête ?
Nous créons un nœud à l'intérieur ODL avec les paramètres du routeur réel auquel nous voulons accéder.
Ce sont des espaces de noms internes XML (Espace de noms XML) pour ODL selon lequel il crée le nœud.
De plus, respectivement, le nom du routeur est ID-nœud, adresse du routeur - hôte et ainsi de suite.
La ligne la plus intéressante est la dernière. Répertoire-cache-schéma crée un répertoire où tous les fichiers sont téléchargés Schéma YANG routeur connecté. Vous pouvez les trouver dans $ODL_ROOT/cache/jun01_cache.
Vérification de la connexion du routeur
créons ÉCONOMISEZ demande:
Chaîne de requête:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Nous envoyons. Devrait recevoir un statut de "200 OK" et une liste de tous ceux pris en charge par l'appareil Schéma YANG:
commentaire: Pour voir ce dernier, dans mon cas il a fallu attendre environ 10 minutes après l'exécution PUTjusqu'à ce que tout Schéma YANG décharger sur ODL. Jusqu'à ce point, lors de l'exécution de cette ÉCONOMISEZ requête affichera ce qui suit :
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Partie 6 : Modifier la configuration du routeur
Obtenir la configuration
créons ÉCONOMISEZ demande:
Chaîne de requête:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Nous envoyons. Doit recevoir le statut "200 OK" et la configuration du routeur :
Créer une configuration
À titre d'exemple, créons la configuration suivante et modifions-la :
protocols {
bgp {
disable;
shutdown;
}
}
créons POSTEZ demande:
Chaîne de requête:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Dans l'onglet En-têtes, vous devez ajouter deux en-têtes :
Accepter l'application/xml
Application/xml de type de contenu
Après l'envoi, ils devraient recevoir le statut "204 No Content"
Pour vérifier que la configuration a changé, vous pouvez utiliser la requête précédente. Mais par exemple, nous allons en créer un autre qui affichera des informations uniquement sur les protocoles configurés sur le routeur.
créons ÉCONOMISEZ demande:
Chaîne de requête:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Après avoir exécuté la requête, nous verrons ce qui suit :
Modifier la configuration
Modifions les informations sur le protocole BGP. Après nos actions, cela ressemblera à ceci:
protocols {
bgp {
disable;
}
}
créons PUT demande:
Chaîne de requête:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
N'oubliez pas de remplacer les en-têtes de l'onglet En-têtes par :
Accepter l'application/json
Application/json de type de contenu
Après l'envoi, nous obtiendrons le résultat suivant (Nous regardons la réponse en utilisant ÉCONOMISEZ demande):
Partie 7 : Ajout du Cisco xRV9000
Que sommes-nous tous à propos de Juniper, oui Juniper ? Parlons de Cisco !
J'ai trouvé xRV9000 version 7.0.2 (une bête qui a besoin de 8 Go de RAM et de 4 cœurs. Il n'est pas disponible gratuitement, alors contactez Cisco) - lançons-le.
Exécution d'un conteneur
Le processus de création d'un conteneur Docker n'est pratiquement pas différent de Juniper. De même, nous déposons le fichier .qcow2 avec le routeur dans le répertoire correspondant à son nom (dans ce cas, xrv9k) et exécutons la commande make docker-image.
Après quelques minutes, on voit que l'image a été créée :
ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-xrv9k 7.0.2 54debc7973fc 4 hours ago 1.7GB
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 4 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB
Nous commençons le conteneur :
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
Au bout d'un moment, on regarde que le container a démarré :
ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
058c5ecddae3 54debc7973fc "/launch.py" 4 hours ago Up 4 hours (healthy) 22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp xrv01
Connectez-vous en ssh :
ubuntu@ubuntu:~$ ssh [email protected]
Password:
RP/0/RP0/CPU0:ios#show version
Mon Jul 6 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Copyright (c) 2013-2020 by Cisco Systems, Inc.
Build Information:
Built By : ahoang
Built On : Fri Mar 13 22:27:54 PDT 2020
Built Host : iox-ucs-029
Workspace : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Version : 7.0.2
Location : /opt/cisco/XR/packages/
Label : 7.0.2
cisco IOS-XRv 9000 () processor
System uptime is 3 hours 22 minutes
Connexion du routeur à OpenDaylight
L'ajout se produit de manière complètement similaire avec vMX. Nous avons juste besoin de changer les noms. PUT demande:
Appel au bout d'un moment ÉCONOMISEZ query pour vérifier que tout est connecté :
Modifier la configuration
Mettons en place la configuration suivante :
!
router ospf LAB
mpls ldp auto-config
!
créons POSTEZ demande:
Chaîne de requête:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Dans l'onglet En-têtes, vous devez ajouter deux en-têtes :
Accepter l'application/json
Application/json de type de contenu
Après son exécution, ils devraient recevoir le statut "204 No Content".
Vérifions ce que nous avons.
Pour ce faire, nous allons créer ÉCONOMISEZ demande:
Chaîne de requête:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Après exécution, vous devriez voir ceci :
Pour supprimer la configuration, utilisez EFFACER:
Dans l'onglet Autorisation, vous devez définir le paramètre Basic Auth et identifiant/mot de passe : admin/admin.
Conclusion
Au total, comme vous l'avez peut-être remarqué, les procédures de connexion de Cisco et Juniper à OpenDaylight ne diffèrent pas - cela ouvre un champ de créativité assez large. En commençant par la gestion de la configuration de tous les composants du réseau et en terminant par la création de vos propres politiques de réseau.
Dans ce didacticiel, j'ai donné les exemples les plus simples de la manière dont vous pouvez interagir avec des équipements réseau à l'aide d'OpenDaylight. Sans aucun doute, les requêtes des exemples ci-dessus peuvent être rendues beaucoup plus complexes et configurer des services entiers en un seul clic de souris - tout n'est limité que par votre imagination *
A suivre ...
PS
Si vous savez tout à coup déjà tout cela ou, au contraire, êtes passé par là et avez plongé dans l'âme d'ODL, alors je vous recommande de vous tourner vers le développement d'applications sur le contrôleur ODL. Tu peux commencer par conséquent,.