Cómo montar una infraestructura de red virtualizada con dispositivos de red de Cisco. Mostraremos cómo instalar GNS3 y realizaremos un escenario sencillo virtualizando dos routers. Virtualizaremos los routers en un equipo con Linux Ubuntu 12.04.
- Introducción a GNS3.
- Instalación en la distribución Linux Ubuntu 12.04 LTS.
- Creación de un escenario en GNS3.
Introducción a GNS3
El despliegue de infraestructuras de red requiere una cantidad no despreciable de equipamiento, conexiones de red que suelen conllevar un coste elevado.
Esta herramienta de virtualización permite la creación de dispositivos de red virtuales así como interconectarlos para obtener una infraestructura de red.
GNS3 (Graphical Network Simulator) es un emulador de redes que permite la virtualización de redes complejas. Al igual que otros emuladores tales como VMWare o VirtualBox son empleados para la virtualizar sistemas operativos (Windows, Linux, …), GNS3 es usado para la emulación de imágenes IOS (Internetwork Operating System) de routers Cisco.
GNS3 es un front-end gráfico de Dynamips y Dynagen, los cuales son las herramientas que realmente permiten la emulación de IOS Cisco. Más, concretamente, Dynagen ofrece una interfaz de línea de comandos más simple a Dynamips, el cual es en última instancia, el responsable de la emulación de la IOS. Usando un simple editor de textos, un usuario podría crear su propio fichero de topología con la red a emular por Dynagen. Precisamente, GNS3 facilita este proceso creando para ello una sencilla interfaz gráfica que abstrae al usuario de los detalles de configuración del escenario:
GNS3 es un emulador de código abierto (Open Source) multiplataforma que está disponible para Linux, Windows y Mac OS X.
Para virtualizar los dispositivos de red (routers, switches, etc.) son necesarias las imágenes del sistema operativo IOS. Sin embargo, por restricciones de licencia, el simulador no viene con las IOS de routers Cisco, las cuales deben ser proporcionadas al simulador y pueden ser descargadas desde la URL: http:/software.cisco.com/download/navigator.html
Entre las características más importantes de GNS3, podemos destacar:
- Diseño gráfico de topologías de red a emular.
- Emulación de redes Ethernet, ATM y switches Frame Relay.
- Emulación de una gran variedad de IOS Cisco, JunOS, IPS y firewalls CISCO de tipo ASA y PIX.
- Conexión de la red simulada a un entorno real.
- Integración con Qemu y VirtualBox para emular hosts.
- Captura de paquetes integrada usando Wireshark.
En nuestro laboratorio, GNS3 nos permite estudiar protocolos de red, hacer mirrors de despliegues reales de infraestructuras de red para probar efectos en los cambios de configuración, hacer investigaciones de seguridad (ataques DDoS, MitM, honey pots, etc.).
Con GNS3 se pueden desplegar infraestructuras tan complejas como se necesite:
Instalar GNS3 en la distribución Linux Ubuntu 12.04 LTS
La instalación de GNS3 está completamente automatizada para los distintos sistemas operativos (Linux, Windows y Mac OS).
En Ubuntu podemos encontrar el paquete GNS3 directamente en el “Centro de Software de Ubuntu”:
Sin embargo la versión que instala es la 0.7.4-1 (a fecha de 12/05/2013).
En este tutorial instalaremos manualmente la última versión disponible (v0.8.3.1).
Descarga de paquetes necesarios para instalar GNS3
Es necesario descargar dos aplicaciones (GNS3 y Dynamips). Para este ejemplo las descargaremos en el subdirectorio GNS3 dentro la carpeta personal del usuario (/home/Alejandro/GNS3).
Accederemos a la URL: http://www.gns3.net/download
Y descargaremos el fichero que se ajuste al sistema operativo en que queramos instalar GNS3, en nuestro caso «GNS3 v0.8.3.1.tgz»:
Y accederemos a la URL: http://www.gns3.net/dynamips
Para descargar el fichero de instalación de Dynamips: «Dynamips 0.2.8-RC3-community binary for Linux (32 bit)»:
Instalar Dynamips y GNS3
Debemos activar el atributo de ejecución del ejecutable Dynamips. Para ello abrimos una consola y nos dirigimos al directorio /home/Alejandro/GNS3 y ejecutamos el comando:
chmod 764 dynamips-0.2.8-RC3-community-x86.bin
Descomprimimos GNS3 con el comando:
tar xzvf GNS3-0.8.3.1-src.tar.gz
Esto descomprime el fichero en la subcarpeta “GNS3-0.8.3.1-src”.
Movemos el ejecutable de Dynamips dentro de la subcarpeta “GNS3-0.8.3.1-src” que se ha creado al descomprimir el archivo anterior con el comando:
mv dynamips-0.2.8-RC3-community-x86.bin GNS3-0.8.3.1-src
Como último requisito necesitamos instalar QT4 ejecutando, como root, el comando:
apt-get install python-qt4
Ahora ya tenemos todo listo para ejecutar GNS3. Accedemos a la carpeta GNS3 y lo ejecutamos con los comandos:
cd GNS3-0.8.3.1-src
./gns3
Configuración de GNS3
La primera vez que se ejecuta GNS3 muestra un asistente de configuración. Pulsamos el botón “Ok” para cerrarlo puesto que configuraremos la aplicación del modo tradicional, desde el menú:
Para trabajar con GNS3 debemos especificar los siguientes parámetros:
- La ruta del ejecutable de Dynamips.
- Añadir la imagen IOS del router Cisco de la serie c3600 que vamos a utilizar.
- Configurar el parámetro IDLE PC de la imagen IOS c3600.
1. Ruta del ejecutable Dynamips
Accedemos al menú “Edit” – ”Preferences”, o pulsamos la combinación de teclas “Mayús + Ctrl + P”. En la sección de “Dynamips” configuramos el campo “Executable path to Dynamips”:
seleccionando el ejecutable de Dynamips que, en la sección anterior de este tutorial, habíamos movido dentro de la carpeta /home/Alejandro/GNS3/GNS3-0.8.3.1-src:
Marcamos las siguientes opciones:
- Automatic clean the working directory.
- Enable ghost IOS support.
- Enable mmap support.
- Enable sparse memory support.
Para comprobar que la configuración es correcta pulsamos en “Test Settings”. Si todo es correcto mostrará a la derecha de este botón “Dynamips 0.2.8-RC3 successfully started” en color verde. Procedemos a aplicar y a aceptar los cambios:
2. Añadir la imagen IOS del router Cisco de la serie c3600 que vamos a utilizar
Como comentamos al inicio de este tutorial, las imágenes IOS de Cisco no vienen con GNS3 por restricciones de licencia. Se pueden descargar de la página de Cisco, desde la URL: http://software.cisco.com/download/navigator.html
En nuestro caso hemos obtenido el fichero IOS “C3660-I-Mz_20121-5_20T8.bin”, en nuestro caso descargado en la carpeta:
/home/Alejandro/Descargas/Images
Para añadir la imagen IOS a GNS3 abrimos el menú “Edit” – ”IOS images and hypervisors” (Mayús + Ctrl + I). Mediante el campo “Image file” configuraremos la ruta de la imagen IOS:
Seleccionamos la imagen IOS que hemos descargado previamente:
GNS3 nos preguntará si queremos descomprimir la imagen, pulsamos en “Yes”:
Con el texto: The IOS image is compressed. Would you like to uncompress it? This will create C3660-I-Mz_20121-5_20T8.image.
Pulsamos el botón “Save”, que guardará la configuración y nos permitirá utilizar cuantas copias de este router virtual necesitemos, utilizando el mismo archivo de imagen de IOS:
Al guardar nos advierte que el atributo IDLE PC no está configurado (“Warning: IDLE PC will have to be configured!”):
3. Configurar el Parámetro IDLE PC
El parámetro IDLE PC especifica la dirección de memoria donde se encuentran las instrucciones que representan un bucle que mantiene la ejecución en estado ocioso (idle). Si este parámetro no se configura, la ejecución de un solo router virtual consumiría el 100% de CPU, incluso cuando este router no está procesando tráfico de red.
Los valores idlepc son particulares a una imagen IOS. Para encontrar el valor de la imagen IOS C3600 que estamos utilizando creamos una topología pulsando en el menú “File” – ”New blank topology”, y arrastramos desde la ventana “Node Types” un “Router c3600” hasta la ventana de trabajo:
Arrancamos el router pulsando en “Start/Resume all devices”:
Abrimos la consola del router. Cuando el sistema operativo IOS haya terminado de arrancar mostrará “Press enter to get the prompt”. Presionamos INTRO y esperamos a que termine de mostrar mensajes por la consola (unos dos o tres segundos):
Ahora que el router se encuentra en estado ocioso, dejamos de un lado la consola del router y volvemos a la ventana de trabajo. Sobre el router pulsamos con el botón secundario del ratón y hacemos clic en “Idle PC”. Este comando analiza la imagen IOS para determinar aquellos puntos de código que representan un bucle que mantiene la ejecución en estado ocioso (idle):
Tras terminar el proceso de análisis, GNS3 muestra una lista de posibles valores IDLE PC. Nos recomienda los valores de IDLE PC que van precedidos del símbolo asterisco (*). Abrimos el monitor del sistema y vamos aplicando uno a uno los valores IDLE PC, quedándonos con el que menos CPU consume:
Una vez aplicada la optimización idlepc, Dynamips “duerme” al router virtual ocasionalmente cuando estos puntos del código son alcanzados. Como se puede observar, esta optimización reduce el consumo de CPU en el router sin reducir la funcionalidad en el router virtual:
Si volvemos al menú “Edit”- ”IOS images and hypervisors” comprobamos que ha establecido el valor en el atributo “IDLE PC”:
Creación de un escenario en GNS3
Ya tenemos GNS3 listo para construir cuantos escenarios queramos utilizando el router virtual Cisco C3660. Vamos a construir el más simple de ellos, dos routers interconectados entre sí con IP estáticas, y comprobaremos que están conectados mediante paquetes ICMPv4 Echo Request.
Primero detenemos los routers que estén arrancados, mediante el menú “Control”- ”Stop all devices”. A continuación arrastramos un segundo Router C3600 a la ventana de trabajo (paso 1 en la imagen), y creamos un enlace entre los dos routers (paso 2) haciendo clic en el botón conmutable “Add a link”. Hacemos clic en el tipo de enlace «Manual»:
Hacemos clic sobre el router 1, y en el menú contextual que aparece seleccionamos el slot 0, puerto 0 (f0/0).
Ahora hacemos clic en el router 2, y en el menú contextual también seleccionamos el slot 0, puerto 0 (f0/0).
Una vez realizado el enlace hacemos clic, de nuevo, en “Add a link” para dejar de seguir creando enlaces.
Arrancamos todos los routers (botón Start ) y vemos que el color de las interfaces pasa de estar en rojo a verde. Esto indica que están activas.
Configuración del router R1
Para esta topología hemos diseñado una red punto a punto, con rango IP 192.168.100.0/30.
Abrimos la consola del router R1 pulsando sobre él con el botón secundario, y seleccionado “Console”:
Cuando esté listo pulsamos INTRO, y configuramos la IP estática en la interface FastEthernet0/0 introduciendo los siguientes comandos IOS (Cisco IOS tiene autocompletado al estilo UNIX, pulsando la tecla tabulador):
enable
configure terminal
interface FastEthernet 0/0
no shutdown
ip address 192.168.100.1 255.255.255.252
exit
exit
write
En IOS se dispone de 3 niveles de configuración, según el nivel estarán habilitados unos comandos u otros. “Enable” eleva el nivel de Usuario a Privilegiado, y “configure terminal” eleva el nivel de Privilegiado a Configurador. El nivel se puede ver observando el símbolo de prompt (R1>, R1#, y R1 (config) respectivamente):
A continuación explicamos brevemente los comandos utilizados:
- Con el comando “interface FastEthernet 0/0” entramos a configurar la interface fast ethernet del slot 0 puerto 0.
- “no shutdown” activa la interface y la mantiene activa tras el reinicio del router.
- “ip address” configura la IP estática, indicando la IP y la máscara de subred.
- “exit” desciende un nivel de privilegios.
- “write” guarda la configuración actual (alojada en la RAM del router) en la memoria no volátil NVRAM. Sin este comando perderíamos toda la configuración tras un reinicio del router virtual.
Configuración del router R2
Igualmente configuramos el router R2, sólo variando la IP asignada:
enable
configure terminal
interface FastEthernet 0/0
no shutdown
ip address 192.168.100.2 255.255.255.252
exit
exit
write
Comprobar la conexión entre los routers virtuales
Podemos comprobar que el router virtual R1 llega al R2 ejecutando el comando:
ping 192.168.100.2
en su consola. Del mismo modo, ejecutando el comando:
ping 192.168.100.1
comprobamos que R2 hace ping a R1:
Guardar escenario GNS3
Para guardar el escenario se necesitan dos pasos. El primero es guardar la topología (la distribución de los routers, la conexión entre ellos, las etiquetas textuales, etc.). Y el segundo es guardar el fichero de configuración de cada uno de los routers, de modo que, cuando abramos el escenario, los routers se arranquen con la configuración que persistimos en su momento.
Para este ejemplo, creamos las carpetas:
/home/Alejandro/.gns3/Topologia1
para guardar la topología, y la carpeta:
/home/Alejandro/.gns3/Topologia1/configs
donde guardaremos los ficheros de configuración de los routers.
Para guardar la topología abrimos el menú “File” – “Save As…”, abrimos la carpeta:
/home/Alejandro/.gns3/Topologia1
le damos nombre a la topología “topologia1” y hacemos clic en “Save”. Esto creará el fichero “topologia1.net”, un fichero en texto plano que describe la topología:
Para guardar las configuraciones de los routers Cisco, pulsamos en el botón “Import/Export Startup Configs” y seleccionamos “Extracting to a directory”:
Seleccionamos el subdirectorio “/home/Alejandro/.gns3/Topologia1/configs” que creamos anteriormente, y guardamos
GNS3 habrá creado un fichero de configuración por cada router virtual. Este fichero podríamos cargarlo en un router físico de Cisco (es perfectamente compatible):
Con esto ya podemos cerrar GNS3. La próxima vez que ejecutemos GNS3 y abramos el escenario, se cargarán automáticamente los ficheros de configuración de los routers.
Ejemplo de fichero de configuración de R1:
!
version 12.1
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname Router
!
logging rate-limit console 10 except errors
!
ip subnet-zero
!
no ip finger
!
interface FastEthernet0/0
ip address 192.168.100.1 255.255.255.252
duplex auto
speed auto
!
interface FastEthernet0/1
no ip address
shutdown
duplex auto
speed auto
!
interface Ethernet1/0
no ip address
shutdown
half-duplex
!
interface Ethernet1/1
no ip address
shutdown
half-duplex
!
interface Ethernet1/2
no ip address
shutdown
half-duplex
!
interface Ethernet1/3
no ip address
shutdown
half-duplex
!
ip classless
no ip http server
!
line con 0
transport input none
line aux 0
line vty 0 4
!
end