Lab Environment 1

Introducción

En el 2020 comencé una serie de videos de automatización utilizando la librería de python para automatización de redes llamada NAPALM. Recientemente un seguidor me comentó en uno de los videos, que si podía proporcionar detalles sobre cuales software utilizo para crear mi ambiente local y cómo integro el sistema completo para que funcione como se muestra en los videos.

Para dar respuesta a esto he decidí redactar esta publicación para compartir la lista de softwares que uso y las configuraciones que les hice. Este ambiente no solo lo utilizo para practicar con NAPALM, sino también para practicar para todas las certificaciones de DevNet. Me sirvió mucho para obtener la certificación de DevNet Associate y para pasar los exámenes de DevNet DEVCOR 350-901 y DevNet SPAUTO 300-535. Con los cuales obtuve la certificación de Cisco DevNet Professional.

Para mi seguidores de habla hispana también trabajé un video en el que muestro con mas detalles lo que les comparto a continuación.

Software Instalados y Configuraciones

Sistema Operativo y recursos de mi PC

Lo primero que quiero compartirte es el sistema operativo. Mi computadora tiene Windows 11 Pro.

Esto no significa que si tienes una distribución de Linux, no puedas crear el mismo ambiente local que te mostrare. Al contrario, resultará más sencillo crear el ambiente en una distribución de linux.

En terminos de recursos las especificaciones básicas de procesamiento y memoria de mi computadora son las que se muestran en la siguiente imagen:

Listado de Softwares

VMWare Workstation 15 Pro

VMware Workstation Pro es un hipervisor de escritorio que te permite crear y correr una o múltiples máquinas virtuales en un computadora o host. Este host puede tener el sistema operativo Windows o Linux como base. Y las maquinas virtuales pueden correr Windows, Linux o BSD.

Para utilizar VMWare Workstation Pro permantemente se requiere comprar una licencia de uso. Todos los detalles lo puedes encontrar en la página oficial. Aquí te dejo el link:

VMware Workstation Pro

Notarás que actualmente va por la versión 17. Esta versión a diferencia de la 15, que es la que tengo, te permite correr contenedores y Kubernetes, pero ya esto es contenido para otra publicación. En fin, no importa la version que tengas, ambas te van a funcionar para construir mi ambiente local.

Configuraciones de Interfaces Virtuales de Red

Para comunicar todos mis ambientes virtuales configuré la VMnet0:

  • Como “Host-only”. Para permitir que el host y las maquinas virtuales se puedan comunicar entre si a través de una red privada.
  • Habilité la opción de “Connect a host virtual adapter to this network”, para que mi Windows 11 Pro tuviera una interfaz de red virtual por la cual comunicarse con las máquinas virtuales.
  • Habilité y configuré la opción de DHCP para asignación de dinámica de IPs para el rango 192.168.56.0/24

Emulated Virtual Environment(EVE) Next Generation(NG) 5

EVE-NG es un entorno virtual emulado para profesionales de redes, seguridad y DevOps. EVE-NG es un software de emulación de red multiproveedor sin cliente que brinda a los profesionales de redes y seguridad enormes oportunidades en el mundo de las redes.

EVE-ng se puede utilizar para estudiar todo tipo de tecnologías. Brinda herramientas para usar alrededor de dispositivos virtuales e interconectarlos con otros dispositivos físicos o virtuales. Muchas de sus características lo hacen simple: la usabilidad, la reutilización, la capacidad de administración, la interconectividad, la distribución y la capacidad de comprender y compartir topologías, trabajos, ideas, conceptos o laboratorios virtuales. Ayuda a reducir el costo y el tiempo incurrido en la configuración de lo que se necesita, y se simplificaría la realización de tareas difíciles.

Para descargar, instalar y configurar EVE-NG puedes entrar a la página oficial donde encontrarás los links de descargas y la documnetación necesaria para instalarlo y configurarlo. Aquí te dejo el link:

Emulated Virtual Environment(EVE) Next Generation(NG) 5

Configuración de la interfaz de red para fijar la dirección IP
nano /etc/network/interfaces
# The primary network interface
iface eth0 inet manual
auto pnet0
iface pnet0 inet static
address 192.168.56.56
netmask 255.255.255.0
pre-up ip link set dev eth0 up
bridge_ports eth0
bridge_stp off
Imagenes para los Nodos en EVE-NG

Las imagenes de plataformas Cisco se descargan desde Cisco Software Central. Es importante mencionar que tu cuenta de Cisco debe tener asociado un contrato de soporte para poder descargar las imagenes. Como yo trabajo para un Proveedor de Servicios de Internet(ISP) que utiliza dispositivos Cisco, mi cuenta tiene asociado un contrato de soporte. Lamentablemente no se tiene permitido compartir las imagenes y por esta razón no se las comparto.

Para las imagenes de plataformas de Huawei, te dejo dos links donde podras descargar las imagenes de dos plataformas que no requieren de licencias o contrato de soportes para descargarlas e utilizarlas.

  • Huawei CE12800. En este enlace podrán encontrar tanto la imagen como el paso a paso para instalarla en EVE-NG.
  • Huawei NE40E. En este enlace podrán encontrar la imagen solamente. Utilicen el paso a paso del enlace anterior para instalar esta imagen en EVE-NG.
Mi Laboratorio básico multifabricantes

Aquí te comparto una de las topologías que tengo. Las cual me permite probar facilmente NAPALM sobre Cisco y Huawei:

Puedes encontrar la configuración de cada uno de estos routers en el siguiente repositorio público en GitHub:

Network Topologies Configurations

Uso de Nombre de dominios para acceder a los dispositivos

Personalmente me gusta trabajar con nombres de dominios y no con direcciones IPs para acceder a mis dispositivos. Por eso modifico el archivo hosts para incluir mapeos de IP – Nombres. La ruta para encontrar el archivo hosts en Windows es la siguiente:

C:\Windows\System32\drivers\etc

Estos son los mapeos que tengo para acceder a EVE-NG y a los dispositivos de red.

192.168.56.56 eve.local
#
192.168.56.100 crouter1
192.168.56.101 crouter2
192.168.56.102 hrouter2
192.168.56.103 hrouter1

Ubuntu WSL

El Windows Subsystem for Linux o WSL es una herramienta de Microsoft que permite a los desarrolladores ejecutar un entorno GNU/Linux, incluidas la mayoría de las herramientas, utilidades y aplicaciones de línea de comandos, directamente en Windows, sin modificaciones, sin la sobrecarga de una máquina virtual tradicional o una configuración de arranque dual (Dual boot).

Conocer y dominar Linux es mandatorio en DevNet y en todo lo relacionado a automatización de redes. Es el sistema operativo preferido por la comunidad y sobre este se están creando todas las herramientas de automatización. Por esta razón uso Ubuntu WSL.

Si eres un usuario nativo de Linux no necesitas el WSL por razones obvias.

Ubuntu WSL se puede instalar fácilmente en Windows, solo ejecutando el siguiente comando en la consola de Power Shell:

wsl --install

También puedes instalarlo a través de la tienda de Microsoft:

Visual Studio Code

Visual Studio Code(VSCode) es un editor de código fuente ligero pero potente que se ejecuta en computadoras de escritorio y está disponible para Windows, macOS y Linux. Viene con soporte integrado para JavaScript, TypeScript y Node.js y tiene un rico ecosistema de extensiones para otros lenguajes y tiempos de ejecución (como C++, C#, Java, Python, PHP, Go, .NET).

Visual Studio Code se puede descargar e instalar facilmente desde su página oficial: Visual Studio Code

A mi me gusta correr Python sobre el WSL y por lo tanto integro Visual Studio Code para que modifique archivos sobre el WSL. A continuación te comparto dos extensiones de VSCode que utilizo:

Extensión WSL

Te permite abrir cualquier carpeta en el subsistema de Windows para Linux (WSL) y aprovechar el conjunto completo de funciones de Visual Studio Code.

Extensión Python

Es una extensión de Python que incluye múltiples herramientas, como formateadores de códigos, soporte para unit testing, debugging y linting.

Corriendo mi código con la librería NAPALM

Con todas los softwares ya instalados y configurados, podemos hacer copy-paste de los códigos que compartí en las publicaciones NAPALM Network Automation Python: Trabajando con Cisco IOS y IOS-XR y NAPALM Network Automation Python: Trabajando con Huawei VRP.

Iniciemos creando un nuevo ambiente virtual de python e instalando las librerías necesarias.

mkdir napalm_series && cd napalm_series
python3 -m venv venv_napalm
source venv_napalm/bin/activate
pip3 install napalm-huawei-vrp
pip3 install tabulate

Finalmente copia y pega los códigos de las publicaciones, actualiza la lista de los dispositivos con los nombres de tus dispositivos y listo. Solo tienes que correrlo. Aquí te pongo uno de los códigos para que no tengas que salir de esta publicación:

import napalm
from tabulate import tabulate

def main():

    driver_ios = napalm.get_network_driver("ios")
    driver_iosxr = napalm.get_network_driver("iosxr")

    device_list = [["crouter1","ios", "switch"],["crouter2", "ios", "router"]]

    network_devices = []
    for device in device_list:
        if device[1] == "ios":
            network_devices.append(
                            driver_ios(
                            hostname = device[0],
                            username = "codingnetworks",
                            password = "Coding.Networks1"
                            )
                              )
        elif device[1] == "iosxr":
            network_devices.append(
                            driver_iosxr(
                            hostname = device[0],
                            username = "codingnetworks",
                            password = "Coding.Networks1"
                            )
                              )

    devices_table = [["hostname", "vendor", "model", "uptime", "serial_number"]]

    for device in network_devices:
        print("Connecting to {} ...".format(device.hostname))
        device.open()

        print("Getting device facts")
        device_facts = device.get_facts()

        devices_table.append([device_facts["hostname"],
                              device_facts["vendor"],
                              device_facts["model"],
                              device_facts["uptime"],
                              device_facts["serial_number"]
                              ])

        device.close()
        print("Done.")
    print(tabulate(devices_table, headers="firstrow"))

if __name__ == '__main__':
    main()

Salida:

By Michael Alvarez