1 Virtualización
La virtualización es la utilización de un software para imitar las características de un hardware específico y utilizarlo para recrear un sistema real. Normalmente utilizamos la virtualización para crear “máquinas virtuales” simulando un equipo informático donde realizaremos la instalación de un sistema operativo.
El sistema de virtualización permite exprimir un único servidor hardware, ya que al crear distintas máquinas virtuales en él, nos va a permitir poder tener distintos sistemas, aplicaciones y servicios.
El software que ejecutamos en cada máquina virtual va a estar separada del hardware real, ya que se comunicará y usará el hardware virtual que se le ha asignado.
1.1 Conceptos en virtualización
A la hora de hacer uso de un sistema de virtualización existen dos conceptos básicos que debemos entender y no debemos de mezclar.
Anfitrión: Es el equipo donde se ejecuta el sistema de virtualización, que nos permitirá crear distintas máquinas virtualizadas.
Invitado/huésped: En inglés el guest machine, es la máquina virtual.
Hypervisor: También conocido como “virtualizador”, es el software que crea y ejecuta las máquinas virtuales. Existen dos tipos de hypervisores:
Type-1 o virtualización nativa: El hypervisor corre directamente sobre el hardware físico del anfitrión y las máquinas virtuales se ejecutarán sobre el hypervisor. Este tipo de hypervisores son capaces de permitir que una máquina virtual interactúe directamente sobre el hardware real. Ejemplos: KVM, Proxmox, VMware ESXi
Type-2: Sobre el hardware físico se ejecuta un sistema operativo anfitrión, y sobre él se ejecuta una aplicación virtualizadora, como cualquier otro proceso. Las máquinas virtuales en este tipo no conocen nada del hardware real.
Extensiones de virtualización: Son extensiones de virtualización que tienen los procesadores y permiten la ejecución de un huésped sin penalización en la virtualización. La extensión de Intel se llama Intel VT-x, y en AMD se llama AMD-V. Existen otras extensiones especializadas que se llaman Intel VT-d y AMD-Vi.
1.2 Tipos de virtualización
Cuando hablamos de virtualización podemos diferenciar distintos tipos, dependiendo de a qué nos refiramos, ya que existen virtualizaciones de todo tipo (plataformas hardware, recursos hardware, virtualización de almacenamiento, de red, ...).
Nos vamos a centrar en lo referente a virtualización de plataforma hardware, cuyo fin es el de crear máquinas virtuales. En este sentido podemos diferenciar dos tipos:
Virtualización completa
Paravirtualización
El tipo más habitual es el de la virtualización completa, para el que hacemos uso de las extensiones de virtualización y que conseguiremos que el rendimiento de la máquina sea mejor, ya que no va a haber prácticamente penalización.
Hoy día sólo podemos hacer uso de la paravirtualización con GNU/Linux.
2 Virtualbox y adaptadores de red
2.1 Introducción
Virtualbox es una herramienta de virtualización para crear máquinas virtuales de manera sencilla. Es multiplataforma por lo que se puede utilizar en Windows, MacOS y Linux y aparte, es Software Libre.
Este documento no va a entrar en detalle en cómo se crean las máquinas virtuales, sino que va a explicar los distintos modos y adaptadores de red que puede tener una máquina virtual en este sistema de virtualización.
2.2 Adaptadores de red
Virtualbox permite que cada máquina virtual cuente con hasta cuatro adaptadores de red, lo que comúnmente se llaman interfaces o NIC (network interface controller).
Al crear las máquinas virtuales sólo tienen un único adaptador activo y suele estar configurado en modo NAT, pero tal como se ve a continuación, en el desplegable se puede ver que existen otras opciones:
En la documentación oficial aparece la explicación de los distintos modos, y es buena práctica leer y entender la documentación del software que utilizamos. También hay que entender que cada tipo de adaptador contará con una serie de ventajas y una serie de limitaciones que aparecen reflejadas en la documentación. Estos modos son comunes a otros sistemas de virtualización (VmWare, Proxmox, …), pero el nombre o el modo de uso puede variar así como las posibles limitaciones que puedan existir.
A continuación se va a dar una pequeña introducción a cada tipo de adaptador.
2.2.1 Adaptador puente
Es el tipo de adaptador que se usará si queremos que las máquinas virtuales aparezcan en la red física como si fueran un equipo más. Para poder entenderlo de mejor manera, podríamos pensar que este tipo de adaptador lo que hace es crear un “switch virtual” entre las máquinas virtuales y el interfaz físico, por lo que es como si fueran un equipo más en la red física.
Si el equipo físico anfitrión cuenta con más de un NIC (por ejemplo, en un portátil el NIC por cable y el NIC wifi) tendremos que elegir en la máquina virtual sobre qué NIC queremos hacer el puente. En la siguiente imagen en el desplegable sólo se puede seleccionar un interfaz porque el equipo sólo cuenta con un NIC físico.
Es el método utilizado cuando virtualizamos servidores, ya que podrán dar sus servicios a toda la red.
2.2.2 NAT
Cada máquina virtual contará con su propio “router virtual” que hará NAT, y por eso todas las máquinas virtuales que usen este modo suelen tener la misma IP, pero no pertenecen a la misma red. Por defecto no se puede realizar conexión desde la red física al equipo virtualizado.
2.2.3 Red interna
Este tipo de adaptador lo que hace es “crear” un “switch virtual” que unirá las distintas máquinas virtuales que estén conectadas al nombre de esa red interna.
En el siguiente ejemplo la VM1 tiene 2 NICs, cada una con una red interna distinta. La VM2 tiene un NIC conectado a una de las redes internas creadas previamente y VM3 está conectada a la otra red interna.
Virtualbox no se encarga de dar IPs en estas redes, por lo que deberemos configurar cada interfaz de la máquina virtual con el direccionamiento que nos interese.
Este método se utiliza si queremos comunicar máquinas virtuales entre sí y que estén aisladas, ya que no podrán conectarse con el exterior, ni siquiera con el propio equipo físico.
2.2.4 Red NAT
Podría definirse como una mezcla de NAT y red interna. Las máquinas virtuales podrán pertenecer a una única red, se podrán comunicar entre ellas, estarán detrás de un NAT de la red física y se podrán comunicar con el exterior.
Para poder usar ese modo hay que crear la “red NAT” en Virtualbox yendo a “Archivo → Preferencias → Red” y ahí se creará las redes NAT que queramos con el direccionamiento interno que nos interese.
A la hora de crear la máquina virtual y elegir la opción “Red NAT” se podrá elegir entre las redes creadas en el paso anterior.
2.2.5 Adaptador sólo-anfitrión
Este tipo de adaptador es similar al de “red interna” pero con la posibilidad de comunicarse con el equipo físico anfitrión. En el equipo físico se crea un interfaz virtual y a través de él se podrá comunicar con las máquinas virtuales.
El direccionamiento que existe entre las VMs y el host se define en Virtualbox, dentro de “Archivo → Administrador de red de anfitrión”. Las máquinas virtuales podrán coger IP de ese direccionamiento por DHCP.
Mismo uso que “red interna” pero añadiendo la opción de comunicarnos con el host anfitrión.
2.3 Resumen de los adaptadores
A continuación se expone una tabla que resume los distintos tipos de adaptadores que existen y la conectividad posible entre las máquinas virtuales que usan esos adaptadores y el host anfitrión (fuente).
En la documentación se explica cómo realizar la redirección de puertos.