Conectando Dynamips con máquinas virtuales en VirtualBox

En el post anterior de esta serie hablamos sobre los modos de operación y configuración del IOS de Cisco. En este post vamos a conectar una imagen de IOS a una máquina virtual en VirtualBox. Esto nos va a servir para hacer pruebas con diferentes hosts y servidores en nuestro entorno de trabajo.

Topología

Para este ejemplo solo vamos a usar un enrutador y un PC, conectados entre sí a través de una interfaz FastEthernet. El PC es una máquina virtual con Windows XP.

Hay que tener en cuenta que, para este escenario, vamos a virtualizar 2 sistemas simultáneamente en nuestra máquina host. En mi caso mi máquina host tiene 4 GB en RAM, de manera que lo ideal sería no gastar más de 2GB en total para las 2 máquinas. Esto se vuelve especialmente delicado cuando queremos virtualizar o conectar más de 2 PCs o servidores. Más adelante veremos cómo podemos enlazar además la topología con nuestra máquina host, y la red externa.

Valor Idle-PC

Si bien este escenario es bastante simple, es importante notar que a medida que agregamos elementos a nuestra simulación, vamos a estar consumiendo recursos. En mi caso mi máquina host tiene 4 GB en RAM, de manera que lo ideal sería no gastar más de 2GB en total para cualquier simulación.

Durante la ejecución de prueba del post anterior, vimos algunos warnings al iniciar la simulación:

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

Dynamips no puede determinar cuándo un dispositivo está procesando y cuándo no, de manera que ocupa toda la memoria disponible de la máquina host para los dispositivos que esté corriendo. Para esto lo que vamos a hacer es calcular un valor “idle-pc”, que sirve para darle a Dynamips un tiempo razonable a partir del cuál puede pausar la ejecución del S.O. del dispositivo, para desocupar la memoria del host.

Para calcular posibles valores, vamos a usar el comando “idlepc” de Dynagen sobre una imagen en ejecución. En la mayoría de ejercicios he usado la imagen de 7200, de manera que el ejemplo que muestro aquí es con esa imagen, es importante aclarar que el valor Idle-PC es diferente para cada combinación de imagen/host que hagamos.

El primer paso para calcular, consiste en iniciar el dispositivo hasta un punto de reposo, esto es,  después de haberse ejecutado la rutina de inicialización y tener un prompt:

=> start R1
Warning: Starting R1 with no idle-pc value
100-VM 'R1' started
=> console R1

Cisco Internetwork Operating System Software
IOS (tm) 7200 Software (C7200-IK9S-M), Version 12.3(17b), RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2006 by cisco Systems, Inc.
Compiled Tue 07-Mar-06 06:02 by dchih
*Sep 2 23:22:33.115: %SNMP-5-COLDSTART: SNMP agent on host Router is undergoing 
a cold start
Router>

Una vez tengamos este prompt, lo que sigue es calcular posibles valores Idle-PC con la instrucción “idlepc get router“, donde router es el nombre del enrutador que estamos usando. Esta instrucción nos arroja varios posibles resultados, con los mejores marcados con un asterisco.

=> idlepc get R1
Please wait while gathering statistics...
1: 0x60729ac0 [70]
2: 0x60729b20 [75]
3: 0x60729b54 [31]
* 4: 0x60729b64 [52]
5: 0x6080ac48 [60]
6: 0x6080c788 [38]
7: 0x6080c794 [50]
8: 0x6080d2cc [44]
9: 0x6080deac [61]
* 10: 0x6080dee4 [51]
Potentially better idlepc values marked with "*"
Enter the number of the idlepc value to apply [1-10] or ENTER for no change: 10
Applied idlepc value 0x6080dee4 to R1

=>

Lo único que hacemos entonces es ingresar uno de los valores marcados con asterisco, sin embargo, para que este valor sea constante cada vez que se ejecute la simulación, será necesario agregar una línea al archivo .net:

[localhost]

    [[7200]]
    image = /home/ht/Cisco IOS/images/c7200-ik9s-mz.123-17b.image
    npe = npe-400
    ram = 160
    idlepc = 0x6080ac48

Conectando con VirtualBox

Para el enlace vamos a usar una interfaz tap, la cual conectaremos directamente al enrutador especificándola en el archivo .net, y usaremos como puente para la interfaz de VirtualBox. Por si acaso, para esta configuración necesitaremos tener instalado el paquete uml-utilities:

# sudo apt-get install uml-utilities
# modprobe tun

Ahora sí, configuramos la interfaz con la IP que queremos. En este caso lo estoy haciendo con una IP en un segmento de red separado de mi LAN física:

# tunctl
Set 'tap0' persistent and owned by uid 0
# ifconfig tap0 10.10.10.101 netmask 255.255.255.0 up
# ifconfig tap0
tap0      Link encap:Ethernet  HWaddr f2:c4:cb:82:70:6d  
          inet addr:10.10.10.101  Bcast:10.10.10.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Ya tenemos nuestra interfaz funcionando, ahora la conectamos al enrutador en el archivo .net, usando el descriptor NIO_tap:

# Conectando Dynamips con VirtualBox

[localhost]

    [[7200]]
    image = /home/ht/Cisco IOS/images/c7200-ik9s-mz.123-17b.image
    npe = npe-400
    ram = 160
    idlepc = 0x6080ac48

    [[ROUTER R1]]
    model = 7200
    f0/0 = NIO_tap:tap0

Ahora configuramos en VirtualBox la interfaz de red como “Bridged Adapter”, asociado a la interfaz tap0, y ejecutamos la máquina virtual:

A la máquina virtual le asigno la IP 10.10.10.102/24, y al enrutador la 10.10.10.101/24. Después de configuradas ambas interfaces, con un ping se verifica la conexión entre ellas:

Router>enable
Router#conf term
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#inter f0/0
Router(config-if)#ip add 10.10.10.101 255.255.255.0
Router(config-if)#no sh
Router(config-if)#
*Nov 25 23:13:26.355: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed 
state to up
*Nov 25 23:13:27.355: %LINEPROTO-5-UPDOWN: Line protocol on Interface 
FastEthernet0/0, changed state to up
Router(config-if)#exit
Router(config)#exit
Router#
*Nov 25 23:13:34.603: %SYS-5-CONFIG_I: Configured from console by console
Router#ping 10.10.10.102

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.10.102, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/8/16 ms
Router#

Conclusión

Ya tenemos la forma de configurar interfaces más elaboradas, que incluyan varios enrutadores y sistemas operativos reales virtualizados. En los siguientes posts estaremos analizando un poco mejor las configuraciones de los enrutadores, sus tablas de enrutamiento, y comenzaremos a explorar los tipos de protocolos de enrutamiento que se usan para construir estas tablas. Gracias por leer.

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