VirtualBox: creando un disco base

En mis clases utilizo habitualmente VirtualBox para crear las máquinas donde desplegar servicios de red, servidores, etc. A lo largo del curso los alumnos deben crear múltiples máquinas Ubuntu Server o Windows 10. Crear múltiples máquinas para resolver las diferentes prácticas tiene la ventaja que les permite aislar las soluciones, pero conlleva dos inconvenientes, por un lado, pierden tiempo instalando varias veces la misma máquina y por otro, ocupan el disco de su ordenador con cinco o seis máquinas que básicamente tienen el mismo sistema operativo y únicamente se diferencian en algunos de los paquetes instalados y obviamente en las configuraciones.

Por tanto, el objetivo es tener un disco base que contenga la instalación del sistema operativo y todos aquellos paquetes o programas que sean comunes a todas las diferentes máquinas. Este disco será utilizado por las diferentes máquinas, guardando en un disco diferencial las personalizaciones. Por este motivo, es muy importante asegurarse de no borrar o mover este disco porque perderíamos todas las máquinas que dependan de él.

El proceso a seguir es bastante sencillo, aunque a diferencia de otros virtualizadores implicará ejecutar comandos de la consola de VirtualBox.

El primer paso es crear una máquina virtual inicial, en nuestro caso será un Ubuntu Server 16.04. Una vez instalado, paramos la máquina y abrimos en Archivo -> Administrador de medios virtuales y buscamos el disco correspondiente a la máquina base que acabamos de crear, en nuestro caso ubuntuBase.

2016-09-07_1753

Seleccionamos el disco de nuestra recién creada máquina, ubuntuBase.vdi y marcamos la opción Liberar, de esta manera, desligamos este disco de la máquina virtual con el que se creó.

A continuación, clicamos en Modificar y marcamos el disco como Inmutable, esto significa que este disco no sufrirá modificaciones. Esto es muy importante para asegurar que las máquinas que usen este disco no sufran funcionamientos anómalos por el hecho de que otra máquina pueda modificar este disco.

2016-09-07_1754

El siguiente paso, será crear una nueva máquina virtual, en nuestro caso ubuntuDerived y en lugar de crear un disco virtual nuevo, utilizamos el disco anterior, tal como se observa en la imagen.

2016-09-07_1758

Esta nueva máquina inicialmente es idéntica a la original con la que creamos el disco. El problema, es que por defecto, los cambios que realicemos en ella se perderán al apagarla, porque por defecto la opción es que los discos diferenciales se borren. Lógicamente, queremos cambiar este comportamiento y que dichas modificaciones sean persistentes.

Lo primero que tendremos que hacer es conocer la UUID del disco diferencial, para ello hay diferentes métodos, uno de los más sencillos, es abrir la consola y ejecutar el gestor de VirtualBox por consola, VBoxManage y que nos muestre la información de la máquina:

VBoxManage showvminfo ubuntuDerived

De la información que nos muestra, nos tenemos que quedar con la correspondiente al disco diferencial que ha creado.

2016-09-07_2003

A continuación con el siguiente comando cambiamos el comportamiento del disco diferencial de autoreset de on a off.

2016-09-07_1826

Ahora cuando abrimos la máquina y realizamos un cambio, por ejemplo, el nombre del servidor y guardamos la máquina, comprobamos como esta modificación es persistente.

2016-09-07_1844

De esta manera podemos tener diversas máquinas virtuales Ubuntu Server, con diferentes configuraciones y servicios instalados, sin necesidad que cada una de ellas ocupe en nuestro disco físico el espacio correspondiente al sistema operativo.

Feliz entrada de curso!

Fuentes

VirtualBox

.NET Matters

Anuncios

Conceptos virtualización – Virtualization series (I)

Virtualización

En este post intentaré explicar brevemente la virtualización así como la finalidad de la misma.
La virtualización parte del concepto de “liberar” el software del hardware, es decir, en una máquina normal (ordenador) se suelen tener uno o más sistemas operativos, pero sólo se puede usar uno de ellos a la vez. La virtualización permite ejecutar y usar dos sistemas operativos simultáneamente. No sólo permite ejecutar varios sistemas operativos a la vez en una misma máquina, sino que también permite ejecutar aplicaciones virtualizadas, permitiendo usarlas en cualquier sistema operativo, eliminando así la barrera de la dependencia del sistema operativo para ejecutar una aplicación determinada.
La virtualización que cubriremos en este post, es la que se llama de tipo I o “bare metal”. Se utilizará un sistema Hypervisor que contendrá las máquinas virtuales.
VirtvsTraditional
El Hypervisor del que hablaré es VMware ESXi (anteriormente conocido como ESX). Cambió el nombre ya que también cambió su arquitectura interna. A lo largo de este post intentaré detallarlo lo máximo posible.

VMware ESX

VMware ESX opera con su propio kernel, llamado “vmkernel”. El kernel vmkernel es arrancado a través de un kernel Linux que arranca primero, el cual es usado para cargar diversos componentes de virtualización, incluyendo el vmkernel. Una vez se ha cargado vmkernel, el kernel Linux se convierte en la primera máquina virtual activa, llamada: “Service console”. Es decir una vez arrancado el kernel linux es ejecutado sobre vmkernel como una primera máquina virtual.
Vmkernel se encarga directamente de la CPU y la memoria, tiene tres interfaces que pueden ser vistas desde fuera:

  • Hardware
  • “Service console”
  • Sistemas virtualizados

vmkernel se encarga directamente de la CPU y la memoria, usando SBE (Scan Before Execution) para manejar instrucciones de CPU especiales o con prioridad. Además usa RAT (system Resurce Allocation Table) para llevar un control del uso y mapeo de memoria.Para acceder a otro hardware como podrían ser tarjetas de red o discos SCSI usa módulos del kernel. Para acceder a estos módulos se usa un módulo adicional llamado vmklinux el cual implementa la interfaz de módulos de Linux.
Service console se usa como ayuda para cargar el kernel Linux y luego pasa a segundo plano como consola de configuración y mantenimiento. Estas dos funciones ya no se usan para la nueva arquitectura de ESXi.
srvice console

VMware ESXi

La arquitectura ESX se quedó un poco anticuada con la necesidad de cargar 2 kernels y eso consumía recursos, la nueva arquitectura de ESXi, sólo carga un Kernel (vmkernel) y no necesita otro kernel linux para ser cargado.
Además ESXi permite que modulos de otros fabricantes se ejecuten directamente sobre VMkernel para proporcionar monitoraje y drivers. Los agentes de VMware se ejecutan directamente en el VMkernel, siendo más eficientes.
Ya que tiene un enfoque por imágenes (SO), permite revertir a la versión anterior si se obtienen resultados no deseados con una actualización determinada. Menor carga de memoria necesaria para arrancar el sistema operativo, y menor consumo de memoria durante la ejecución del mismo.

ESXi arch

En el siguiente post detallaré la instalación del Hypervisor VMware ESXi.

Router virtual con Vyatta y III: configuración

En este último post veremos como configurar nuestro Vyatta para que funcione como un router NAT entre nuestra red interna y la red pública.

Vyatta tiene un modo edición donde podremos configurar los parámetros del router, para entrar en este modo, hay que teclear configure, para salir del modo de edición teclearemos exit. Es muy importante tener en cuenta que para cargar las configuraciones que escribamos, habrá que teclear commit una vez realizada la configuración. Además antes de salir del modo de edición tenemos que guardar la configuración haciendo save.

En primer lugar, configuraremos las interfícies de red, para ver las interfícies que tenemos creadas:

# show interfaces

post4-01

Para configurar un adaptador utilizaremos el siguiente comando:

# set interfaces ethernet ethX address IP/máscara

# commit

post4-02

Observamos ahora como las interfícies han quedado correctamente configuradas:

post4-03Configuraremos ahora la puerta de enlace por defecto, que será donde se enviarán los paquetes con destino al exterior de la red:

# set system gateway-address IP de la puerta de enlace

Configuramos también el DNS forwarding, de manera que los clientes utilicen directamente como servidor de nombres nuestra puerta de enlace, siendo ésta la que  dirija las peticiones al servidor de nombres, usando un cache para ahorrar consultas ya realizadas.

# set system name-server IP del servidor de nombres

# set service dns forwarding cache-size 500 

# set service dns forwarding listen-on eth1

# set service dns forwarding system

post4-04Finalmente, configuraremos el servicio de NAT, que traducirá las direcciones privadas de nuestra red interna mediante IP masquerade, de forma que toda la red saldrá al exterior o red pública con la IP externa del router. Como únicamente queremos salir hacia el exterior, el NAT traduce direcciones internas pero no al revés.

# set nat source rule 1 outbound-interface eth0

# set nat source rule 1 source address 192.168.3.0/24

# set nat source rule 1 translation address masquerade

# commit

# save

post4-05Ya tenemos, nuestro router en funcionamiento. En posts siguientes iremos ampliando sus funciones con firewall, proxy, etc.