1- Técnicas de virtualización

Imagen de Epe

Aunque no soy un expertísimo en las diversas técnicas de virtualización, trataré de exponer algunas de ellas y en breves palabras lo que hallo bien o mal de cada una.

Virtualización es un término bastante amplio, pero que en general podemos pensar que es separar las características físicas de el hardware donde corre el programa virtualizado para que pueda ejecutarse tal y como él lo desea o necesita.

La virtualización se divide en sí en dos formas o tipos:

- Virtualización de la plataforma
- Virtualización de los recursos

El tema que vamos a ver aqui es la virtualización de la plataforma que es una forma de crear una máquina virtual para que dentro de ella corra un determinado sistema operativo.

Ésta máquina virtual puede o no recibir ayuda por parte del hardware en que la corremos. En el caso específico nuestro veremos la virtualización basada en los procesadores i386 (Intel o AMD).

La virtualización de la plataforma (le llamaré virtualización de aquí en adelante). Se realiza mediante la intervención de un sistema operativo hospedero (host) el cuál se hará cargo de crear un sistema simulado para los huéspedes (Guests). Estos guests correrán tal y como si lo estuvieran haciendo sobre un hardware verdadero. Normalmente se les simula por parte del host una máquina de forma tal que los guests puedan correr. Sin embargo a veces no se les simula la máquina sino que se les modifica el kernel para que puedan correr de forma compartida en el host.

[b]Diferentes formas de hacer virtualización por plataforma:[/b]

[b]Emulación:[/b] Es cuando el host simula completamente la máquina virtual de forma que todas las llamadas que hagan los guests sean interpretadas y ejecutadas por parte del host hacia el verdadero hardware. De ésta forma se ha logrado la creación de software para hardware que no ha sido creado todavía. Así se puede avanzar en la salida al mercaro de nuevo hardware. La emulación incluso permite que un sistema operativo diseñado para algún una plataforma específica pueda correr sobre otra plataforma con la cuál técnicamente no es compatible.

Ejemplos de emulación tenemos el qemu sin aceleración, Virtual PC, Bochs y PearPC.

Por mi parte he probado el Qemu y de hecho veremos más adelante cómo implementarlo.

[b]Virtualización nativa:[/b] También conocida como virtualización completa. El host emula lo suficientemente bien el hardware como para que los guests puedan correr de forma nativa (sin cambios en el kernel) y además de forma completamente aislada.

Estos guests normalmente pueden correr varios en la misma máquina y compartir eficientemente sus recursos. Yo realmente lo veo como un caso de emulación un poco más avanzado.

El caso más conocido es el VMWare. Que es un producto comercial y no veremos aqui.

Xen y KVM son sistemas open source que permiten realizar éste tipo de virtualización de forma sumamente efectiva. Y por supuesto los veremos.

[b]Paravirtualización[/b] El host no ofrece una emulación del hardware. Pero sin embargo ofrece un API que permite que los guests puedan acceder a los recursos de la máquina, controlados por el hospedero por supuesto. Los guests corren de forma aislada y segura de forma tal que no se afectan en caso de problemas.

El kernel de los guests tiene que ser modificado para permitir acceder al API del host y poder manejar y acceder a los recursos del host (disco, red, usb, etc).

Ejemplos de paravirtualización incluyen el VMWare ESX Server y el XEN.

En nuestro caso dedicaremos un tiempo a estudiar el XEN.

[b]Virtualización a nivel del sistema operativo[/b] Los guests comparten el mismo sistema operativo que el hospedero. En verdad todos corren el mismo kernel y es el kernel el que se ocupa de determinar para quién trabaja en un momendo determinado. Los guests se ven como si estuvieran sólos pero en verdad todos comparten el mismo kernel cosa que hace que una vulnerabilidad en el kernel afecte a todos.

Ejemplos de éste tipo de virtualización incluyen al OpenVZ, virtuozzo, y las jaulas de freeBSD. Es una de las formas más antiguas de virtualizar en linux, pero para mi no son lo suficientemente seguras. Intenté el OpenVZ y no me pareció feo, pero gracias, no lo uso ni en su versión comercial (virtuozzo).

De todos estos sistemas, trataré de explicar cómo usar el qemu y el xen, aunque si el KVM toma suficiente fuerza lo pondré aqui también.