lunes, 27 de septiembre de 2021

Recuperación de IOS y contraseñas en un switch

 

Recuperación de IOS y contraseñas en un switch

Publicado el 27 de setiembre del 2021

Si el switch no puede cargar el IOS se debe realizar un procedimiento para su recuperación.

El primer paso será conectar al switch una PC mediante el cable de consola.


Recuerde que el puerto de consola se encuentra en la parte posterior del switch.

La aplicación para convertir a la PC en un terminal puede ser variado, hay varias aplicaciones entre ellas Putty y Tera Term, para este cao la recomendable es HyperTerminal de Microsoft.
Los parámetros para la comunicación serial entre la PC y el switch son como se indica en el gráfico siguiente.

Para conseguir esta aplicación puedes buscarlo en Internet o bajarlo de aquí.

Inicie el Hyperterminal, pasará por algunas ventanas hasta que aparezca la ventana de la consola:


El siguiente paso es desconectar el cable de alimentación del switch, mantenemos presionando el botón Mode mientras volvemos a conectar el cable de energía.


Mantenga presionado el botón y observe si el led de sistema (SYST) emite brevemente una luz color ámbar y después verde sólido, en este momento suelte el botón Mode.

En la pantalla del Hyperterminal aparecerá los mensajes del sistema básico que nos permita acceder al switch y lograr recuperar su IOS si lo hubiese perdido.











Como se nota, el promt (switch: ) es especial de este modo de recuperación, no corresponde al modo de usuario o modo privilegiado, estamos con un sistema mínimo y para poder acceder a la memoria Flash se debe ejecutar el comando flash_init y el comando load_helperEn algunos switches solo pide ejecutar flash_init. El comando load_helper es para cargar cualquier imagen auxiliar de arranque.









Una vez ejecutados los comandos podemos acceder a la memoria flash con el comando dir:











Vemos que no aparece el IOS y deberíamos recuperarlo.

Para recuperar el IOS vamos a realizar una transferencia de archivos mediante Xmodem, esta transferencia puede durar varias horas, para el 2960 es aproximadamente 4 horas y media.

Debe tener almacenado el IOS en una carpeta de nuestra PC. Veamos un ejemplo, supongamos el siguiente IOS: c2950-i6q4l2-mz.121-12c.EA1.bin

En la consola ejecutamos el siguiente comando, indicando que queremos copiar el IOS ubicado mediante Xmodem y el destino la memoria flash con el nombre del IOS del switch.






En la parte superior de la ventana HyperTerminal, elija Transferir > enviar archivo.




Elija el protocolo Xmodem en el cuadro de diálogo Enviar archivo y haga clic en Examinar para seleccionar la imagen de Cisco IOS (archivo .bin) que descargó anteriormente y que se almacenó en alguna carpeta de nuestra computadora.



Haga clic en Enviar para comenzar la transferencia Xmodem.


Comienza la transferencia de archivos Xmodem. Esta transferencia puede tardar hasta 4 horas, lo que depende del tamaño de la imagen.










Vemos que la copia fue satisfactoria, lo único que queda es bootear o reiniciar así:






Burlar las contraseñas en el switch

En el caso de que el IOS esté correcto, pero no se puede ingresar al switch, por desconocimiento de los passwords, repetimos el proceso de arranque presionando el botón Mode.

Ejecutamos flash_init y visualizamos los archivos de la memoria flash, usemos la siguiente respuesta:








Para quitar las contraseñas, la forma más rápida es eliminar el archivo config.text, que corresponde al archivo de configuración de inicio: starup-config

Reiniciamos el switch y podrá acceder a el sin problemas, quedó como nuevo y tendremos que configurarlo de acuerdo a la topología.

Si no quieres que se pierda la configuración, cámbiale de nombre al archivo config.text, reinicias el switch y desde modo privilegiado copias el archivo renombrado en el running-config y modificas las contraseñas.


martes, 17 de agosto de 2021

 Automatización de la red con Napalm

Publicado el 17 de Agosto del 2021

Apoyando a mis alumnos en esta nueva tendencia de la automatización de las redes, les traigo otra alternativa de administración de los routers y switches, de forma remota y automatizada usando Napalm y programando las actividades con Python.

Napalm es una especie de API que permite administrar a los dispositivos independiente del fabricante, es una librería desarrollada con Python por dos programadores y se han acoplado muchos más, en la actualidad, se tiene desarrollado una variedad de métodos para algunos sistemas operativos de routers y switches de diferentes fabricantes.


El acceso a diferentes fabricantes implicaría el conocimiento variado de cada uno de ellos, lo interesante de Napalm, es que nos hace fácil el acceso, por que han desarrollado el  get_network_driver, al cual solo tenemos que decirle que IOS queremos que controle. 

Vamos a hacer una práctica automatización y para ello se debe levantar primero la VM de GNS3 en VMware.

Usaremos la siguiente topología de GNS3

El tipo de router y switch que tenía en mi GNS3 no me servían, no funcionaba para pruebas de automatización, esto es te va a resultar normal con el tiempo, no todo funciona y hay que ir investigando por nuevas alternativas. La versión 15.6 lo cambié por el de 15.7 para el caso del router.

Para este lab tuve que que agregar estos dos dispositivos, a continuación sus nombres completos, y navegando por Internet los podrás bajar.

    Switch IOS: vios_l2-adventerprisek9-m.ssa.high_iron_20190423.qcow2    IOS

    Router IOS: vios-adventerprisek9-m.vmdk.SPA.157-3.M3.qcow2   IOS

Para su configuración debes hacer una importación del dispositivo (Appliance)


Debes haber bajado tres archivos para el router y uno de ellos es el de GNS3 appliance

Next, Next, 


Con esto tendrás instalado el router, de forma similar puedes agregar al switch

Si te preguntas de donde se obtiene esta información, la respuesta la obtienes de GNS3 Marketplace



La topología tiene 4 elementos, en particular la 
nube o cloude1 nos va a permitir la conexión a Internet, además permite que nuestra PC real esté en contacto con los dispositivos de GNS3, esto permite que pueda usar una aplicación instalada en mi PC, Visual Studio Code (VSC), desde la cual estaremos corriendo las aplicaciones en Python, para controlar al router y switch de GNS3.


La configuración previa del switch y router es la necesaria para que sea administrada vía SSH, adjunto las dos configuraciones.

Configuración del switch
S1#sho runn
version 15.2
!
hostname S1
!
username user1 privilege 15 password 0 cisco
!
ip domain-name cisco.com
!
interface Vlan1
 ip address 192.168.1.41 255.255.255.0
 no shutdown
!
ip ssh version 2

line vty 0 4
 login local
 transport input ssh
!
end
S1#


Configuración del router R1
R1#sho runn
version 15.7
hostname R1
!
ip domain name cisco.com
username user1 privilege 15 password 0 cisco
!
interface GigabitEthernet0/0
 ip address 192.168.1.43 255.255.255.0
 no shutdown

line vty 0 4
 login local
 transport input ssh
!
end
R1#


Desde la consola o Terminal de VSC, verifique que ya tiene instalado la versión 3 de Python, para ello ejecute python --version









Instale napalm si no lo tiene instalado, con el comando pip install napalm




Se puede usar el comando napalm --help para conocer los comandos que podemos usar para interactuar con los router y switches, previo al uso de las aplicaciones en Python.



Con este comando puedo consultarle al router que interfaces tiene y su características, para ello se debe indicar el usuario, su password, el tipo de IOS (vendor), el host, en este caso la IP que identifica al host, puede ser también su nombre y finalmente se llama a un método, en este ejemplo lo haremos con get_interfaces.

napalm --user user1 --password cisco --vendor ios 192.168.1.43 call get_interfaces

Con este comando y usando napalm le consultamos al router sobre sus interfaces y nos devuelve los datos de cada interfaz usando el formato json.






















Usando el método 
get_interfaces_ip podemos ver las IP de las interfaces del router, se puede conocer la IP de una interfaz, la única que tiene IP, las otras 3 no aparecieron.

napalm --user user1 --password cisco --vendor ios 192.168.1.43 call get_interfaces_ip








Usando el método get_arp_table para ver la tabla ARP del router, se puede apreciar así.

napalm --user user1 --password cisco --vendor ios 192.168.1.43 call get_arp_table












Si usamos los comandos típicos del router para hacer las consultas, nos entrega los datos desordenados, ya no los presenta en el formato json.

napalm --user user1 --password cisco --vendor ios 192.168.1.43  call cli --method-kwargs "commands=['show ip route']"








Los métodos get_xx han sido desarrollados para la consulta de algunos datos y se los debe buscar en su documentación, para saber cuales están disponibles. Se muestra a continuación solo algunos de ellos.



Ahora vamos a trabajar con Python, lo primero que haremos es un pequeño programa (napalm01.py), que permita verificar si hay interacción con el router o switch. 


Previo a la ejecución, podemos presionar Terminal / Nuevo terminal











Luego usamos el comando clear para liberar más la consola y queda así.






A continuación vamos a ejecutar el programa napalm01.py y lo hacemos desde el mismo VSC.






La respuesta obtenida es la siguiente, donde se muestra que el test ha sido completado satisfactoriamente.



En la aplicación, primero se importa napalm, luego se define una función donde se invoca al método get_network_driver y le indicamos que vamos a usarlo con un ios tradicional.

Se crea un objeto ios_router y se le pasa los parámetros para acceder al dispositivo: IP, nombre de usuario y password.

Luego le aplicamos el método open al objeto, con lo cual se inicia la conexión hacia el dispositivo. Si no aparece ningún mensaje de error significa que la conexión es exitosa
Aplicamos a continuación el método is_alive para verificar el estado de esa conexión.
Finalmente, se usa el método close para cerrar la conexión


Para cerrar esta presentación, vamos a desarrollar un programa en Python (napalm04.py), usando napalm para logrando obtener datos de los equipos de la red, para esta prueba solo tendremos en cuenta a un router y un switch, podrían ser muchos mas, dependiendo de la lista que declaremos.

Solo haremos la aplicación para routers del tipo IOS clásico, no lo haremos con los IOSXR, para no complicar por ahora nuestro proceso de aprendizaje, como dicen. " menos es más".


Necesitamos la librería tabulate, si no lo tenemos, debemos instalarlo, por lo que desde la consola del Visual S.C. usamos el comando pip install tabulate

Iniciamos el programa importando napalm y tabulate, este último, para imprimir con facilidad los datos de los dispositivos.

Se define una función, luego un objeto mediante el método de napalm "get_network_driver" y seleccionamos al ios tradicional.

Se hace la lista de dispositivos que van a ser monitoreados, tomando tres parámetros para identificarlo: su IP, tipo de IOS y tipo de dispositivo.

Se crea la lista network_devices y se accede a cada dispositivo, para lo cual se debe indicar el usuario y password y se tomando nota de varios parámetros: hostname, vendor, etc

Si ejecutamos, este es el resultado:











lunes, 9 de agosto de 2021

 Configuración de TACACS en GNS3 con VM

GNS3
Publicado el 09 de Agosto del 2021

A continuación se muestra una topología que puedes implementarla, donde se configuran los componentes de tal forma que el router R1 sea administrado remotamente usando SSH y autenticando con el servidor TACACS.


Note que estoy usando el Main server, eso significa que primero he activado la máquina virtual de GNS3 en VMware.


Abrí el GNS3 y agregué los siguientes componentes:


En el caso de la nube (cloud1), lo agregamos para que podamos tener acceso a la red de nuestra casa y asigne direcciones IP en la dirección de red 192.168.1.0 /24, y con ello tengamos acceso a Internet.

Esta debe ser la configuración de la nube, donde se ve la presencia de interfaces virtuales virbr0, note que el switch debe de estar conectado a la interface eth0, tal como lo indica la figura.

AL webterm1 lo configuramos con dhcp, si ingresamos a Edit config, podemos ver que se ha realizado los siguientes cambios:


Con esta configuración y gracias a la nube, se puede ingresar a Internet mediante el browser:


Aunque el objetivo no es tener acceso a Internet desde este host, si no, acceder al servidor TacacsGUI y desde aquí realizar la configuración necesaria.

Al TacacsGUI le configuramos una IP fija igual a: 192.168.1.31 /24. Para ello debe ingresar los siguientes comandos:





    ifconfig eth0 192.168.1.31 netmask 255.255.255.0
    route add default gw 192.168.1.1 eth0

La otra alternativa es usar el editor vi.
    vi /etc/network/interfaces

    :w para grabar
    :q para salir

Para ver los resultados de la edición
    cat /etc/network/interfaces






Ahora podemos acceder al servidor desde webterm1


Estos son los cambios que debemos hacer en el servidor:

Add new Device grupo

Device group name: GNS3Devices    Check: set group
Tacas Key:  cisco
enable password: class       texto claro

        Clic en Add Device Group



Add new Device

Device name: R1 Device group: GNS3Devices
IP add: 192.168.1.30
Tacacs Key: cisco
enable password: class      texto claro

    Clic en Add Device 



Add new user 

username: user1      user group: defaultusergroup
login password: cisco     en texto plano
enable pass: class    en texto plano

Clic en Add User


                        Clic en Apply Changes

Tacacs Configuration File
    no check en Make backup ..
    Clic en Apply




Luego de esto ya tenemos configurado al servidor TacacsGUI

Solo falta configurar R1, al cual a demás de la IP fija en su interface G0/0, se debe configurar para que el acceso remoto sea controlado por el servidor de autenticación, a continuación la configuración más importante.

Configuración de R1
---------------------------
aaa new-model
!
aaa authentication login default group tacacs+
aaa authorization exec default if-authenticated
aaa accounting exec default start-stop group tacacs+
!
ip tacacs source-interface GigabitEthernet0/0
!
tacacs server tacacsgui
 address ipv4 192.168.1.31
 key cisco
!
line vty 0 4
 privilege level 15
 transport input ssh
 login authentication default

ip domain-name cisco.com
cryto key generate rsa     1024

---------------------------------------------
Si abrimos una sesión Putty desde nuestra PC real, podemos acceder al router R1:



Para verificar que está actuando el servidor, hemos habilitado en R1 el comando debug tacacs, mediante el cual vemos el trabajo de dicho servidor.