ProHoster > Blog > administración > Automatización de servicios de red o cómo construir un laboratorio virtual usando OpenDaylight, Postman y Vrnetlab
Automatización de servicios de red o cómo construir un laboratorio virtual usando OpenDaylight, Postman y Vrnetlab
En este artículo, le mostraré cómo configurar AbiertoLuz del día para trabajar con equipos de red, y también mostrar cómo usar Cartero y sencillo DESCANSO solicitudes, este equipo puede ser controlado. No trabajaremos con hardware, sino que desplegaremos pequeños laboratorios virtuales con un único router utilizando Vrnetlab encima Ubuntu LTS 20.04.
Primero mostraré la configuración detallada usando el ejemplo de un enrutador Enebro vMX 20.1R1.11, y luego lo comparamos con la configuración Cisco xRV9000 7.0.2.
contenido
Conocimiento requerido
Часть 1: discutir brevemente OpenDaylight (en adelante ODL), Cartero и Vrnetlab Y por qué los necesitamos
Часть 2: descripción del laboratorio virtual
Часть 3: personalizar AbiertoLuz del día
Часть 4: personalizar Vrnetlab
Часть 5: mediante el uso Cartero conectar enrutador virtual (Enebro vMX) a ODL
Часть 6: obtenga y cambie la configuración del enrutador usando Cartero и ODL
Часть 7: agregar Cisco xRV9000
Conclusión
PS
Bibliografía
Conocimiento requerido
Para que el artículo no se convierta en una hoja, omití algunos detalles técnicos (con enlaces a literatura donde puedes leer sobre ellos).
En este sentido, te ofrezco temas que sería bueno (pero casi no necesario) conocer antes de leer:
Una plataforma SDN abierta para gestionar y automatizar todo tipo de redes, soportada por Fundación Linux
Java dentro
Basado en el nivel de abstracción de servicios basado en modelos (MD-SAL)
Utiliza modelos YANG para generar automáticamente API RESTCONF para dispositivos de red
El módulo principal para la gestión de red. Es a través de ella que nos comunicaremos con los dispositivos conectados. Gestionado a través de su propia API.
En nuestro caso, nos interesa como medio para enviar solicitudes REST a la API de OpenDaylight. Por supuesto, puede enviar solicitudes manualmente, pero en Postman todo se ve muy claro y se adapta perfectamente a nuestros propósitos.
Para aquellos que quieran profundizar: se ha escrito una gran cantidad de materiales de capacitación (por ejemplo).
Herramienta para desplegar enrutadores virtuales en Docker
Admite: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR, etc.
Open Source
Un instrumento muy interesante pero poco conocido. En nuestro caso, lo usaremos para ejecutar Juniper vMX y Cisco xRV9000 en un Ubuntu 20.04 LTS normal.
En este tutorial, configuraremos el siguiente sistema:
¿Cómo funciona esto
Enebro vMX se eleva en Docker contenedor (mediante Vrnetlab) y funciona como el enrutador virtual más común.
ODL conectado al enrutador y le permite controlarlo.
Cartero lanzado en una máquina separada y a través de ella enviamos comandos ODL: para conectar/quitar el router, cambiar la configuración, etc.
Comentario sobre el dispositivo del sistema.
Enebro vMX и ODL requieren bastantes recursos para su funcionamiento estable. Sólo uno vMX pide 6 Gb de RAM y 4 cores. Por lo tanto, se decidió mover todos los "pesos pesados" a una máquina separada (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). El enrutador, por supuesto, no "vuela" sobre él, pero el rendimiento es suficiente para pequeños experimentos.
Parte 3: configurar OpenDaylight
La versión actual de ODL en el momento de escribir este artículo es Magnesium SR1
1) Instalar Java abierto JDK 11 (para una instalación más detallada aquí)
ubuntu:~$ sudo apt install default-jdk
2) Busque y descargue la última compilación ODLpor lo tanto
3) Descomprimir el archivo descargado
4) Ir al directorio resultante
5) Lanzamiento ./bin/karaf
en este paso ODL debe iniciar y nos encontraremos en la consola (el puerto 8181 se utiliza para el acceso desde el exterior, que usaremos más adelante).
A continuación, instale Funciones ODLdiseñado para trabajar con protocolos CONF.NET и DESCANSO. Para hacer esto en la consola ODL ejecutamos:
Cada enrutador compatible Vrnetlab, tiene su propio procedimiento de configuración único. Cuando Enebro vMX solo necesitamos cargar el archivo .tgz con el enrutador (puede descargarlo desde El sitio oficial) al directorio vmx y ejecute el comando make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make
Construyendo una imagen vMX tardará unos 10-20 minutos. ¡Es hora de ir a tomar un café!
"Esto se debe a que la primera vez que se inicia el VCP (Plano de control), lee un archivo de configuración que determina si se ejecutará como VRR VCP en vMX. Anteriormente, este lanzamiento se realizó durante el inicio de Docker, pero esto significaba que el VCP siempre se reiniciaba una vez antes de que el enrutador virtual estuviera disponible, lo que resultaba en un tiempo de arranque prolongado (alrededor de 5 minutos) Ahora, la primera ejecución del VCP se realiza durante la compilación de la imagen de Docker, y dado que la compilación de Docker no se puede ejecutar con - -opción privilegiada, esto significa que qemu funciona sin aceleración de hardware KVM y, por lo tanto, la compilación lleva mucho tiempo. Durante este proceso, se generan muchos registros, por lo que al menos puede ver lo que está sucediendo. Creo que una compilación larga es no da tanto miedo porque creamos una imagen una vez, pero lanzamos muchas".
Después de que pueda ver la imagen de nuestro enrutador en 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
Lanzar contenedor vr-vmx
Empezamos con el comando:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
A continuación, podemos ver información sobre los contenedores activos:
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
Conexión al enrutador
La dirección IP de la interfaz de red del enrutador se puede obtener con el siguiente comando:
Defecto, Vrnetlab crea un usuario en el router vrnetlab/VR-netlab9.
Conectando con 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
Esto completa la configuración del enrutador.
Las recomendaciones de instalación para enrutadores de varios proveedores se pueden encontrar en proyecto github en los respectivos directorios.
Parte 5: Cartero: conecte el enrutador a OpenDaylight
instalación de cartero
Para instalar, simplemente descargue la aplicación por lo tanto.
Conexión de un enrutador a ODL
Vamos a crear PUT consulta:
Cadena de consulta:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin. Esto es necesario para acceder a la ODL:
En la pestaña Encabezados, debe agregar dos encabezados:
Aceptar solicitud/xml
Aplicación de tipo de contenido / xml
Nuestra petición ha sido hecha. Nosotros enviamos. Si todo se configuró correctamente, entonces deberíamos devolver el estado "201 Creado":
¿Qué hace esta solicitud?
Creamos nodo dentro ODL con los parámetros del router real al que queremos acceder.
Estos son espacios de nombres internos XML (Espacio de nombres XML) para ODL según el cual crea node.
Además, respectivamente, el nombre del enrutador es ID de nodo, dirección del enrutador - fortaleza y así sucesivamente.
La línea más interesante es la última. directorio-caché-esquema crea un directorio donde se descargan todos los archivos Esquema YANG enrutador conectado. Los puedes encontrar en $ODL_ROOT/cache/jun01_cache.
Comprobación de la conexión del enrutador
Vamos a crear consulta:
Cadena de consulta:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
Nosotros enviamos. Debería recibir un estado de "200 OK" y una lista de todos los compatibles con el dispositivo Esquema YANG:
comentario: Para ver esto último, en mi caso fue necesario esperar unos 10 minutos después de la ejecución PUThasta que todo esquema YANG descargar en ODL. Hasta este punto, al realizar este consulta mostrará lo siguiente:
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
Parte 6: cambiar la configuración del enrutador
Obteniendo la configuración
Vamos a crear consulta:
Cadena de consulta:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
Nosotros enviamos. Debería recibir el estado "200 OK" y la configuración del enrutador:
Crear una configuración
Como ejemplo, vamos a crear la siguiente configuración y modificarla:
protocols {
bgp {
disable;
shutdown;
}
}
Vamos a crear PUBLICAR consulta:
Cadena de consulta:
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
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
En la pestaña Encabezados, debe agregar dos encabezados:
Aceptar solicitud/xml
Aplicación de tipo de contenido / xml
Después del envío, deberían recibir el estado "204 Sin contenido"
Para comprobar que la configuración ha cambiado, puede utilizar la consulta anterior. Pero, por ejemplo, crearemos otro que mostrará información solo sobre los protocolos configurados en el enrutador.
Vamos a crear consulta:
Cadena de consulta:
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
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
Luego de ejecutar la solicitud, veremos lo siguiente:
Cambiar la configuración
Cambiemos la información sobre el protocolo BGP. Después de nuestras acciones, se verá así:
protocols {
bgp {
disable;
}
}
Vamos a crear PUT consulta:
Cadena de consulta:
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
No olvide cambiar los encabezados en la pestaña Encabezados a:
Aceptar aplicación/json
Aplicación de tipo de contenido/json
Después de enviar, obtendremos el siguiente resultado (Vemos la respuesta usando pedido):
Parte 7: Agregar el Cisco xRV9000
¿Qué somos todos sobre Juniper, sí Juniper? ¡Hablemos de Cisco!
Encontré xRV9000 versión 7.0.2 (una bestia que necesita 8Gb de RAM y 4 núcleos. No está disponible gratuitamente, así que contacta Cisco) - vamos a ejecutarlo.
Ejecutar un contenedor
El proceso de creación de un contenedor Docker prácticamente no es diferente al de Juniper. Del mismo modo, soltamos el archivo .qcow2 con el enrutador en el directorio correspondiente a su nombre (en este caso, xrv9k) y ejecutamos el comando make docker-image.
Después de unos minutos, vemos que la imagen ha sido creada:
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
Arrancamos el contenedor:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
Después de un tiempo, vemos que el contenedor se ha iniciado:
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
Conéctese a través de 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
Conexión del enrutador a OpenDaylight
La adición ocurre de una manera completamente similar con vMX. Solo tenemos que cambiar los nombres. PUT consulta:
Llamar después de un tiempo consulta para comprobar que todo está conectado:
Cambiar la configuración
Vamos a configurar la siguiente configuración:
!
router ospf LAB
mpls ldp auto-config
!
Vamos a crear PUBLICAR consulta:
Cadena de consulta:
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
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
En la pestaña Encabezados, debe agregar dos encabezados:
Aceptar aplicación/json
Aplicación de tipo de contenido/json
Tras su ejecución, deberían recibir el estado "204 Sin contenido".
Veamos lo que tenemos.
Para ello, crearemos consulta:
Cadena de consulta:
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
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
Después de la ejecución, debería ver lo siguiente:
En la pestaña Autorización, debe configurar el parámetro Basic Auth e inicio de sesión/contraseña: admin/admin.
Conclusión
En total, como habrá notado, los procedimientos para conectar Cisco y Juniper a OpenDaylight no difieren; esto abre un amplio margen para la creatividad. Desde la gestión de la configuración de todos los componentes de la red hasta la creación de sus propias políticas de red.
En este tutorial, he dado los ejemplos más simples de cómo puede interactuar con equipos de red utilizando OpenDaylight. Sin duda, las consultas de los ejemplos anteriores se pueden hacer mucho más complejas y configurar servicios completos con un clic del mouse: todo está limitado solo por su imaginación *
To be continued ...
PS
Si de repente ya sabes todo esto o, por el contrario, has atravesado y hundido el alma de ODL, entonces te recomiendo mirar hacia el desarrollo de aplicaciones en el controlador ODL. Tu puedes empezar por lo tanto.