User-mode Linux: Emular una red de ordenadores

En la revista @rroba nº 150 (de marzo de 2010) encontré un interesante artículo de Ramiro Cano Gómez (quien hace referencia al mismo en su propio blog). El tema era la virtualización bajo GNU/Linux, algo que no puede parecer muy emocionante (al fin y al cabo es algo común), pero que toma color cuándo uno comprende que se puede virtualizar una red de múltiples terminales virtuales. Esto puede ser tremendamente útil para muchos propósitos: desde aprender un poco sobre redes hasta simular ataques entre máquinas, etc; ya que además es poco probable que dispongamos de tiempo, espacio y dinero para montarnos varias redes y subredes en nuestra propia casa.
Como en las versiones 2.6.x y superiores del Kernel de GNU/Linux ya se incluye el User-mode Linux, podemos valernos de esta herramienta. Entre otras bondades, User-mode Linux permite que ejecutemos instrucciones propias del Kernel en un espacio de memoria dedicado a los procesos que ejecuta el usuario (de ahí el nombre), y en el caso de que algo vaya mal, ese espacio de memoria puede limpiarse y el sistema anfitrión no se ve afectado. Esto es prácticamente la definición de virtualización de un sistema. Podemos ejecutar llamadas a un Kernel mientras otro se ejecuta como base. Por si pareciese poco, User-Mode Linux maneja el hardware de forma directa, con el beneficio de rendimiento que eso supone. Así, tan solo necesitaremos un par de herramientas más con las que ponernos en marcha.
Quiero aclarar antes que no voy a copiar todo el artículo de Cano Gómez aquí (no tiene sentido) pero sí quiero resaltar el primer ejemplo que explica; que es una sencilla toma de contacto con las posibilidades de estos programas. Quien busque más, puede dirijirse al sitio wiki de Netkit: http://wiki.netkit.org/
Lo primero será instalar el entorno de Java JRE para correr aplicaciones escritas con este lenguaje. También vamos a añadir un servidor de telnet (telnetd) y unas librerías para X11 (xwit), asi que abrimos una ventana de terminal y escribimos la siguiente orden:
$ sudo apt-get install sun-java6-jre xwit telnetd
Netkit es el programa que nos permitirá emular redes. Acompañado de NetGUI (de la Universidad Rey Juan Carlos de Madrid), nuestro fin será coser y cantar. Hay que bajar el paquete y descomprimirlo en /usr/local. Esto tardará un poco porque el archivo a descargar son 170 Mb aproximadamente y además hay que descomprimirlo. Estos tres comandos son los que deberemos introducir en nuestro terminal:
$ wget http://mobiquo.gsyc.es/netgui/netgui-v0.4.2b.tar.bz2
$ cd /usr/local
$ sudo tar -xvjf $HOME/netgui-v0.4.2b.tar.bz2

Cuando haya terminado, podremos lanzar la aplicación llamando a:
$ /usr/local/netkit2/netgui/bin/netgui.sh

Esto abre la ventana de la aplicación. Moverse por ella es algo trivial; por ejemplo, añadir un terminal es hacer un clic en el icono del ordenador, un clic en la parte en blanco en donde queremos situarlo y asignarle un nombre identificador en el cuadro de diálogo que se abre. Arrancar y detener las máquinas virtuales se hace con los dos iconos fácilmente identificables que hay a la derecha. Para conectar unos elementos con otros, haremos clic sobre el icono de cable y luego clic en los dos nodos a relacionar. Es poco más que un juego. Al encender uno de estos ordenadores virtualizados, se abre una ventana de terminal virtual con un sistema completo. Dejaré el resto de sorpresas sin desvelar.
Del artículo quiero extraer el ejemplo más sencillo de uso de todo esto. Cano cuenta que sobre un MacOSX con VMWare Fusion corrió un sistema Ubuntu 9.10 con solo un procesador y 512 Mb de RAM, y dentro de este sistema virtualizado logró correr hasta 10 maquinas virtuales; lo cual es una noticia aún mejor para quien disponga de procesadores con conjuntos de instrucciones de virtualización (actualmente Intel-VT y AMD-V, por ejemplo). No he probado esto en un eeePC (lo cual ya sería la locura máxima alrededor de uno de estos fantásticos netbooks, aunque el procesador Atom no sea el más adecuado) pero podríamos esperar cierta solvencia. Quizás lo intente, al fin y al cabo… ¿Porque no llevar una red de ordenadores propia en la palma de mi mano?
Para ver el manejo y las posibilidades de usar Netkit con User-mode Linux, basta sin embargo con dos PCs interconectados por un hub, tal y como se ve en la siguiente imagen:

Ahora configuremos la red en ambos sistemas. En la terminal del PC1 tecleamos:
$ ifconfig eth0 10.0.0.1 netmask 255.255.255.0
Y repetimos la operacion en la terminal del PC2 con la ip 10.0.0.2, sin variar el resto de los datos. Como ya están conectados; comprobemos que podemos llegar de uno a otro haciendo ping. Desde, por ejemplo, el PC1:
$ ping -c 5 10.0.0.2
Se enviarán los paquetes a la máquina nº2. Podemos comprobarlo si en esta vemos en contenido de la caché de paquetes entrantes ARP:
$ arp -a
Si queremos comprobar las direcciones, el comando “ifconfig” sin ningún parámetro puede ser usado para ver la MAC de la primera máquina, que deberá coincidir con la de la caché ARP de la segunda maquina.
Por ahora un simple “ping” puede saber a poco, pero seguiré con un ojo puesto sobre el tema…

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s