Configurando un entorno de simulación en Dynamips/Dynagen

Este es un proyecto en el que he venido trabajando desde hace un par de años, con diferentes propósitos. Básicamente, la intención es crear, a través de virtualización, un entorno de red completo que incluya varios tipos de dispositivos, y que pueda servir como escenario de pruebas para explotación de vulnerabilidades de protocolos de red, sin tener que usar equipos reales.

Dynamips/Dynagen/GNS3

Aunque en la web oficial de Dynamips se dice que es un emulador, a mí me gusta decir que es un motor para virtualizar sistemas operativos de las familias 1700, 2600, 3600, 3700 y 7200, y me gusta decirlo porque es posible conectar los sistemas virtualizados a máquinas reales, y a otras máquinas virtuales como VirtualBox y VMWare. Es importante aclarar que desafortunadamente Dynamips no tiene soporte para virtualizar switches de la familia Catalyst -una lástima-, a pesar de incluir un switch con características (muy) básicas.

Para trabajar con Dynamips se puede usar el front-end de texto Dynagen, o el entorno gráfico de GNS3, que es bastante similar a Packet Tracer visualmente, y que no hace otra cosa más que generar los mismos archivos de texto que utliza Dynagen a partir de una interfaz gráfica. Tanto Dynamips, como Dynagen y GNS3 están disponibles en los repositorios de las principales distribuciones de Linux, y es por esto que voy a obviar la instalación de todos estos paquetes. En general, voy a trabajar sin GNS3, porque la intención final es instalar todo en una máquina dedicada, probablemente sin interfaz gráfica.

Por muchas razones que no vale la pena aclarar, no puedo poner aquí las imágenes de IOS que estoy usando, pero sí voy a listarlas, simplemente por referencia:

c2600-ik2s-mz.121-27b.bin
c2800nm-advipservicesk9-mz.124-22.T.bin
c3640-jk9s-mz.124-16a.bin
c7200-ik9s-mz.123-17b.bin

Para trabajar con estas imágenes, es necesario descomprimirlas. Para esto unzip es más que suficiente:

$ unzip -p c7200-ik9s-mz.123-17b.bin > c7200-ik9s-mz.123-17b.image

Cliente Telnet

Cuando se hace la instalación desde repositorios, el archivo de configuración de Dynagen se encuentra en /etc/dynagen.ini, y dentro de este archivo están estas líneas para seleccionar el cliente de Telnet que se usará para la configuración de los dispositivos:

# Uncomment below for Linux
telnet = xterm -T %d -e telnet %h %p > /dev/null 2>&1 &

La instalación por defecto utiliza xterm como cliente para la consola de los dispositivos. En mi caso, uso XFCE como entorno de escritorio, entonces edité esa línea para usar xfce4-terminal (los parámetros funcionan exactamente igual):

telnet = xfce4-terminal -T %d -e telnet %h %p > /dev/null 2>&1 &

Archivos de Ejemplo

Cada topología de Dynagen se guarda como un archivo con extensión .net, en donde están descritos los dispositivos y las conexiones entre ellos. Con la instalación de Dynagen vienen algunos archivos de ejemplo para uso del programa en la carpeta /usr/share/doc/dynagen/examples/. De esta carpeta he tomado el archivo simple1.net y lo he editado de acuerdo a mi configuración y organización de archivos y carpetas:

# Simple lab
[localhost]
  [[7200]]
    image = /home/ht/Cisco IOS/images/c7200-ik9s-mz.123-17b.image
    npe = npe-400
    ram = 160
  [[ROUTER R1]]
    s1/0 = R2 s1/0
  [[router R2]]

Explicando el archivo un poco más en detalle:

  • [localhost]: Indica la ruta del servidor de Dynamips, es posible direccionarlo a una IP local.
  • [[7200]]:Las instrucciones bajo esta describen el modelo de dispositivo.
    • image = : Especifica la ruta del archivo de imagen usado para el dispositivo
    • npe = : NPE significa Network Processor Engine, es el motor de procesamiento que usa Cisco en sus dispositivos.
    • ram = : Cantidad de RAM asignada. Para cada caso es recomendable consultar el mínimo de RAM para cada familia de dispositivos.
  • [[ROUTER R1]], [[ROUTER R2]]: Son las instancias de dispositivo.

En este ejemplo, debido a que solamente existe una clase de dispositivo definida, los enrutadores R1 y R2 automáticamente seleccionan la clase [[7200]]. En otros casos es necesario especificar el modelo a utilizar, cuando se están usando varios tipos de enrutadores. Para efectos prácticos voy a trabajar con el mismo modelo en todos los ejemplos.

Adicionalmente, la línea “s1/0 = R2 s1/0″ describe la conexión entre ambos dispositivos, y solamente es necesario especificarla una vez, en cualquiera de las dos instancias. Más adelante haré ejemplos que incluyan más conexiones donde se verán las topologías más claramente.

Ejecución de un archivo

Un archivo .net se ejecuta en varios pasos. En primer lugar se ejecuta como root el motor de Dynamips, en este caso utilizando el puerto 7200:

# dynamips -H 7200
Cisco Router Simulation Platform (version 0.2.8-RC2-x86)
Copyright (c) 2005-2007 Christophe Fillot.
Build date: Sep 10 2010 23:14:58

ILT: loaded table "mips64j" from cache.
ILT: loaded table "mips64e" from cache.
ILT: loaded table "ppc32j" from cache.
ILT: loaded table "ppc32e" from cache.
Hypervisor TCP control server started (port 7200).

Después ejecutamos la consola de Dynagen, con el archivo de topología que hemos creado:

$ dynagen simple1.net 

Reading configuration file...

*** Warning: Starting R1 with no idle-pc value
*** Warning: Starting R2 with no idle-pc value
Network successfully loaded

Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa

=>

En este caso aparecen dos alertas relacionadas con el arranque de cada uno de los enrutadores, pero no hay que prestarles mucha atención. Adicionalmente, el comando list nos muestra los dispositivos contenidos en la topología, y el status general de cada uno de ellos:

=> list
Name     Type     State     Server            Console 
R1       7200     running   localhost:7200    2000 
R2       7200     running   localhost:7200    2001 
=>

Finalmente, el comando console R1 ejecuta la consola para el dispositivo R1, abre una nueva ventana de comandos para esto, y allí podemos ver los mensajes de configuración normales de inicio de un IOS Cisco completamente funcional y en blanco:

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connected to Dynamips VM "R1" (ID 0, type c7200) - Console port

--- System Configuration Dialog ---

Would you like to enter the initial configuration dialog? [yes/no]:

Conclusión

Para resumir rápidamente, en este post mostré la forma de configurar Dynamips y Dynagen para usar con una imagen de un dispositivo IOS Cisco, a partir de aquí pienso hacer algunos ejemplos con ejercicios y pruebas de uso del entorno, de manera que este post será referencia para las configuraciones posteriores.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s