Introducción á Virtualización: Diferenzas entre revisións

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura
Sen resumo de edición
 
(Non se amosan 190 revisións do historial feitas polo mesmo usuario.)
Liña 1: Liña 1:
= Introducción á Virtualización =
{{boxinfo|A virtualización consiste na creación a través de software dunha versión virtual de algún recurso tecnolóxico, como pode ser unha plataforma hardware, un dispositivo de almacenamento ou outros recursos de rede.}}
{{boxinfo|A virtualización consiste na creación a través de software dunha versión virtual de algún recurso tecnolóxico, como pode ser unha plataforma hardware, un dispositivo de almacenamento ou outros recursos de rede.}}
A virtualización é moi diversa. Exemplos de virtualización, son a memoria virtual (na que se mapea no espacio de direccións de memoria RAM espazo de almacenamento situado fora de ella de xeito que o sistema a recoñece como espacio RAM normal), as VPN (Virtual Private Network) na que se emula unha rede local entre equipos situados en redes distintas, ou software que emula determinado hardware no que se poden executar aplicacións nativas como os emuladores de consolas. En xeral, podemos distinguir entre varios tipos de virtualización:
A virtualización é moi diversa. Exemplos de virtualización, son a memoria virtual (na que se mapea no espacio de direccións de memoria RAM espazo de almacenamento situado fora de ella de xeito que o sistema a recoñece como espacio RAM normal), as VPN (Virtual Private Network) na que se emula unha rede local entre equipos situados en redes distintas, ou software que emula determinado hardware no que se poden executar aplicacións nativas como os emuladores de consolas. En xeral, podemos distinguir entre varios tipos de virtualización:
;[[wikipedia:Hardware_virtualization|Virtualización Hardware]]:
*;<u>[[wikipedia:Hardware_virtualization|Virtualización Hardware]]</u>:
Tamén coñecido como ''virtualización de plataformas'', fai referencia á creación de máquinas virtuais que actúan como ordenadores normais co seu propio sistema operativo. O software que se executa nesas máquinas virtuais non accede directamente aos recursos hardware, se non que o fai a través dun software chamado '''[[wikipedia:hypervisor|hypervisor]]''' ou ''virtual machine monitor'', que é o que vai a determiñar o modo no que o sistema virtualizado actúa co hardware real da máquina.
Tamén coñecido como ''virtualización de plataformas'', fai referencia á creación de máquinas virtuais que actúan como ordenadores normais co seu propio sistema operativo. O software que se executa nesas máquinas virtuais non accede directamente aos recursos hardware, se non que o fai a través dun software chamado '''[[wikipedia:hypervisor|hypervisor]]''' ou ''virtual machine monitor'', que é o que vai a determiñar o modo no que o sistema virtualizado actúa co hardware real da máquina.


Liña 18: Liña 19:
{{boxinfo|Debido á crecente importancia da virtualización hardware, as modernas CPU proporcionan asistencia hardware para a virtualización (como [[wikipedia:AMD-V|AMD-V]] ou [[wikipedia:VT-X|VT-X]]) que proporcionan aos sistemas de Virtualización Hardware un gran rendimento, muy próximo aos sistemas paravirtualizados.}}
{{boxinfo|Debido á crecente importancia da virtualización hardware, as modernas CPU proporcionan asistencia hardware para a virtualización (como [[wikipedia:AMD-V|AMD-V]] ou [[wikipedia:VT-X|VT-X]]) que proporcionan aos sistemas de Virtualización Hardware un gran rendimento, muy próximo aos sistemas paravirtualizados.}}


;[[wikipedia:Desktop_virtualization|Virtualización de Desktop (VDI)]]:
*;<u>[[wikipedia:Desktop_virtualization|Virtualización de Desktop (VDI)]]</u>:
Consiste en separar o escritorio sobre o que traballa o usuario do sistema físico. O usuario interactúa co seu sistema utilizando outro ordenador mediante unha conexión de rede, como unha LAN ou a través de Internet. O sistema Host será normalmente un servidor capaz de almacenar e executar múltiples máquinas virtuais ao mesmo tempo para distintos usuarios, e o usuario mediante a conexión de rede obten acceso a unha de elas.
Consiste en separar o escritorio sobre o que traballa o usuario do sistema físico. O usuario interactúa co seu sistema utilizando outro ordenador mediante unha conexión de rede, como unha LAN ou a través de Internet. O sistema Host será normalmente un servidor capaz de almacenar e executar múltiples máquinas virtuais ao mesmo tempo para distintos usuarios, e o usuario mediante a conexión de rede obten acceso a unha de elas.


;[[wikipedia:Operating_system-level_virtualization|Virtualizacion a nivel de Sistema Operativo]]:
*;<u>[[wikipedia:Operating_system-level_virtualization|Virtualizacion a nivel de Sistema Operativo]]</u>:
Consiste en que baixo un kernel común se divide o sistema en varias partes que se comportarán como máquinas individuais. O sistema operativo proporciona entornos aillados baixo os que executarán as distintas aplicacións de usuario. Exemplos son [[wikipedia:Solaris Zones|Solaris Zones]], [[wikipedia:OpenVZ|OpenVZ]]/[[wikipedia:Virtuozzo|Virtuozzo]] ou [[wikipedia:LXC|LXC]].
Consiste en que baixo un kernel común se divide o sistema en varias partes que se comportarán como máquinas individuais. O sistema operativo proporciona entornos aillados baixo os que executarán as distintas aplicacións de usuario. Exemplos son [[wikipedia:Solaris Zones|Solaris Zones]], [[wikipedia:OpenVZ|OpenVZ]]/[[wikipedia:Virtuozzo|Virtuozzo]] ou [[wikipedia:LXC|LXC]].


;[[wikipedia:Memory_virtualization|Virtualización de Memoria]]:
*;<u>[[wikipedia:Memory_virtualization|Virtualización de Memoria]]</u>:
Os servizos de virtualización de memoria permiten que o sistema acceda a un rango de direccións de memoria que non se corresponden coa realmente instalada, este rango é mapeado logo por un xestor de memoria ás direccións físicas. Deste xeito se pode por exemplo, utilizar máis RAM da dispoñible simulándoa en outro tipo de dispositivos, ou facilitar que varios programas accedan as mesmas direccións de memoria sen interferir, o que permite a multitarefa real.
Os servizos de virtualización de memoria permiten que o sistema acceda a un rango de direccións de memoria que non se corresponden coa realmente instalada, este rango é mapeado logo por un xestor de memoria ás direccións físicas. Deste xeito se pode por exemplo, utilizar máis RAM da dispoñible simulándoa en outro tipo de dispositivos, ou facilitar que varios programas accedan as mesmas direccións de memoria sen interferir, o que permite a multitarefa real.
Outro tipo de virtualización de memoria consiste no uso da memoria RAM de ordenadores de un [[wikipedia:cluster|cluster]] para crear un ''Pool'' de memoria que poderán utilizar todos os equipos e aplicacións do cluster.
Outro tipo de virtualización de memoria consiste no uso da memoria RAM de ordenadores de un [[wikipedia:Cluster_(computing)|cluster]] para crear un ''Pool'' de memoria que poderán utilizar todos os equipos e aplicacións do cluster.


*;<u>[[wikipedia:Storage_virtualization| Virtualización do Almacenamento]]</u>:
Almacenamento
Se trata de separar o almacenamento lóxico dos datos do seu almacenamento físico, de xeito que se poda acceder á información sen preocuparse dos dispositivos de almacenamento físicos nin da súa localización. Exemplos de este tipo de virtualización son o manexo lóxico de volumes (LVM en Linux, LDM ou discos dinámicos en Windows), sistemas RAID e JBOD, ou sistemas de rede como iSCSI ou Fiber Channel.
Se trata de separar o almacenamento lóxico dos datos do seu almacenamento físico, de xeito que se poda acceder á información sen preocuparse dos dispositivos de almacenamento físicos nin da súa localización. Exemplos de este tipo de virtualización son o manexo lóxico de volumes (LVM en Linux, LDM ou discos dinámicos en Windows), sistemas RAID e JBOD, ou sistemas de rede como iSCSI ou Fiber Channel.

Virtualización de Datos
*;<u>[[wikipedia:Data_virtualization|Virtualización de Acceso aos Datos]]</u>:
Trátase de facilitar o acceso a fontes de datos diversas a través dunha única capa que nos permite non ter en conta o seu sistema de almacenamento real, como ODBC ou JDBC.
Trátase de facilitar o acceso a fontes de datos diversas a través dunha única capa que nos permite non ter en conta o seu sistema de almacenamento empregado realmente, como ODBC ou JDBC.
Virtualización de Redes

*;<u>[[wikipedia:Network virtualization|Virtualización de Redes]]</u>:
A virtualización de redes consiste na combinacíón de recursos de rede hardware e software nunha única entidade basada en software chamada rede virtual.
A virtualización de redes consiste na combinacíón de recursos de rede hardware e software nunha única entidade basada en software chamada rede virtual.
A rede virtual pode ser externa, combinando múltples redes ou partes de redes nunha unidade virtual, ou interna, proporcionando funcionalidade de rede a contenedores software nun único sistema.
A rede virtual pode ser externa, combinando múltples redes ou partes de redes nunha unidade virtual, ou interna, proporcionando funcionalidade de rede a contenedores software nun único sistema.

Ferramentas de Virtualización
==Ferramentas de Virtualización==
Existen distintos sistemas que implementan Full Virtualization dispoñibles. Os máis importantes son Xen, VMWare, VirtualBox, Qemu (kvm) e Microsoft Hyper-V, sendo VMWare, Qemu e VirtualBox multiplataforma. A maior parte de estes sistemas implementan certo grado de paravirtualización mediante drivers especiais que permiten un acceso máis directo ao hardware real da máquina.
Existen distintos sistemas que implementan ''Virtualization Hardware''. Os máis importantes son [[wikipedia:Xen|Xen]], [[wikipedia:VMWare|VMWare]], [[wikipedia:VirtualBox|VirtualBox]], [[wikipedia:KVM|KVM/Qemu]] e [[wikipedia:Microsoft Hyper-V|Microsoft Hyper-V]]. A maior parte de estes sistemas implementan certo grado de paravirtualización mediante drivers especiais que permiten un acceso máis directo ao hardware real da máquina.
Entre as características principais de estes sistemas de máquinas virtuais atópanse o snapshotting (crear imáxes do estado da máquina virtual nun instante determiñado, permitindo parar e reanudar a mesma) e a migración que permite mover unha máquina virtual dun host a outro, prácticamente sen interrupción da mesma.

Xen
Entre as características principais de estes sistemas de máquinas virtuais atópanse o <u>''snapshotting''</u> (crear imáxes do estado da máquina virtual nun instante determiñado, permitindo parar e reanudar a mesma) e a <u>''migración''</u> que permite mover unha máquina virtual dun host a outro, prácticamente sen interrupción da mesma.
Xen é un sistema principalmente de paravirtualización, na que o sistema operativo accede directamente ao hardware do sistema a través dunha API facilitada polo sistema. Esto ofrece una velocidade de execución prácticamente nativa, pero a cambio, o sistema guest debe ser modificado para soportalo, o que na práctica impide a virtualización de sistemas propietarios como Windows (aínda que existen versións modificadas de proba completamente funcionais, a súa distribución non está permitida).
=== Software de Virtualización de CPU ===
Para sistemas como Windows, Xen ofrece tamén Full Virtualization a través das extensións de virtualización da CPU. Un guest Xen pode funcionar polo tanto en modo paravirtualizado (coas modificacións pertinentes) e en Full-Virtualization. Os modernos Kernels Linux incorporan as modificacións necesarias para funcionar como guests PV, que ofrecen un rendimento óptimo.
*;<u>Xen</u>:
Xen é un dos sistemas de virtualización máis extendido e a competencia máis directa con VMWare, soportando infraestructuras complexas como os servizos ofrecidos por Amazon EC2, una das empresas máis importantes de servizos na nube.
''Xen'' é un ''hypervisor'' de tipo 1 ou ''bare-metal'' capaz de executar máquinas virtuais en modo hardware (''HVM'' ou ''Full Virtualization'') e paravirtualizadas (PVM) si o kernel ten soporte, como é o caso de Linux. No caso das máquinas virtuais ''HVM'' Xen precisa de soporte de virtualización na CPU, e dispon de drivers paravirtualizados para disco, rede e memoria.
Xen foi adquirido pola empresa Citrix, aínda que debido a súa licenza atópase dispoñible en múltiples sistemas. Todos os kernels Linux actuais están preparados para funcionar en Xen en modo de paravirtualización.

VMWare
Xen é un dos sistemas de virtualización máis extendido e a competencia máis directa con VMWare ESXi, soportando infraestructuras complexas como os servizos ofrecidos por Amazon EC2, una das empresas máis importantes de servizos na nube. Citrix ofrece varios productos comerciais basados en Xen, que como maior ventaxa aportan un panel de control de virtualización chamado '''XenCenter''', de funcionalidade similar a '''vCenter''' de VMWare.
VMWare é a empresa líder en virtualización de sistemas. Dispón de numerosos productos, gratuitos e de pago, que proporcionan sistemas de virtualización e paravirtualización permitindo a implantación e xestión de servidores virtualizados (virtualización de infraestructuras facilitando servidores e escritorios) e servizos na nube. Os seus productos principais son:

VMWare WorkStation/Fusion/Player. Son sistemas que permiten a execución de máquinas virtuais baixo o sistema operativo anfitrión.
{{boxinfo|Xen foi adquirido pola empresa ''Citrix'', aínda que debido a súa licenza atópase dispoñible en múltiples sistemas. Todos os kernels Linux actuais están preparados para funcionar en Xen en modo de paravirtualización.}}
VMWare ESXi (VMware vSphere Hypervisor), e un sistema que sustitúe ao sistema operativo proporcionando un entorno para a execución de máquinas virtuais. Estas máquinas se xestionan a través da rede mediante outros productos como VMWare vSphere e VMWare vCenter. Esta aproximación é similar a utilizada por Xen.

VirtualBox
*;<u>VMWare</u>:
VirtualBox proporciona virtualización multiplataforma (funcionando baixo Windows e Linux) de xeito similar ao ofrecido por VMware Workstation/Player. Proporciona ademáis certograo de paravirtualización instalando os virtualbox guest addons, o que porporciona unha maior velocidade e o acceso a máis características do hardware real.
''VMWare'' é a empresa líder en virtualización de sistemas. Dispón de numerosos productos, gratuitos e de pago, que proporcionan sistemas de virtualización e paravirtualización permitindo a implantación e xestión de servidores virtualizados (virtualización de infraestructuras facilitando servidores e escritorios) e servizos na nube. Os seus productos principais son:
KVM

O KVM (Kernel Virtual Machine) e o heredeiro do qemu, un sistema de máquina virtual multiplataforma. KVM é un dos pilares sobre os que se pretende asentar a nova infraestructura virtual baseada en Linux, en sustitución de Xen, que era a alternativa máis utilizada, xa que é a adoptada por RedHat na súa plataforma de virtualizacion Red Hat Virtualization Server. KVM proporciona certo grado de virtualización gracias aos seus drivers paravirtualizados VirtIO para rede, almacenamento e memoria RAM.
:- '''VMWare WorkStation/Fusion/Player''': Permiten a execución de máquinas virtuais baixo o sistema operativo anfitrión (Type 2 Hypervisors).
De xeito similar ao ofrecido por plataformas como Citrix XenServer, ou VMWare vServer, Red Hat Virtualization Server proporciona un entorno sobre o que se xestionan as distintas máquinas e servidores virtuais.
:- '''VMWare ESXi (''VMware vSphere Hypervisor'')''': É un sistema que sustitúe ao sistema operativo proporcionando un entorno para a execución de máquinas virtuais. Estas máquinas se xestionan a través da rede mediante outros productos como VMWare vSphere e VMWare vCenter. Esta aproximación é similar a utilizada por Xen.
En xeral, en Linux se dispon de xeito estándar dunha librería de xestión de virtualización chamada libvirt que ofrece unha API que permite xestionar múltiples máquinas virtuais nunha rede, configurando redes virtuais, espazos de almacenamento, migración de máquinas entre hosts... etc. Sobre esta librería se construen numerosos sistemas de virtualización como OpenNebula, ou o mesmo RHVS. libvirt permite xestionar máquinas virtuais de diversos hypervisors, como Xen, VirtualBox, VMWare, LXC ou KVM. Temén existen entornos simples de xestión como virt-manager.

LXC
*;<u>VirtualBox</u>:
LinuX Containers e un sistema de virtualización a nivel de sistema operativo que permite a execución de múltiples entornos baixo un kernel común dun xeito completamente aillado, de xeito que se poden executar servizos de modo independente. A velocidade de execución é idéntica ao do host, sen existir retrasos debidos a algún tipo de emulación hardware (que non existe). Outra ventaxa é a posibilidade de executar entornos LXC dentro de máquinas virtuais en Full-Virtualization ao non precisar de acceso as características de virtualización das CPU.
''VirtualBox'' proporciona virtualización multiplataforma (funcionando baixo Windows e Linux) de xeito similar ao ofrecido por VMware Workstation/Player (Tipo 2). Proporciona ademáis certog rao de paravirtualización instalando os ''virtualbox guest addons'', o que porporciona unha maior velocidade e o acceso a máis características do hardware real.
Todos os sistemas descritos con anterioridade poden enfocarse á creación de servidores virtuais e de Desktops (VDI), especialmente VMWare, Xen e LXC e a través de libvirt, KVM e VirtualBox. Para elo, se crea o almacenamento, as máquinas virtuais e a infraestructura de rede virtual, e se lanzan as distintas máquinas sen entorno gráfico, utilizando posteriormente sistemas de acceso remoto como RDP (Terminal Server), VNC, NX. X2Go, SPICE.. etc para obter acceso ao desktop de xeito remoto.

*;<u>KVM</u>:
''KVM (Kernel Virtual Machine)'' e o heredeiro de '''qemu''', un sistema de máquina virtual multiplataforma. ''KVM'' é un dos pilares sobre os que se pretende asentar a nova infraestructura virtual baseada en Linux, en sustitución de ''Xen'', que anteriormente era a adoptada por [[wikipedia:RedHat|RedHat]] na súa plataforma de virtualizacion [[wikipedia:Red Hat Enterprise Virtualization|Red Hat Enterprise Virtualization Server]]. ''KVM'' proporciona certo grado de paravirtualización gracias aos seus drivers paravirtualizados ''VirtIO'' para rede, almacenamento e memoria RAM.

De xeito similar ao ofrecido por plataformas como ''Citrix XenServer'', ou ''VMWare vServer'', ''Red Hat Virtualization Server'' proporciona un entorno sobre o que se xestionan as distintas máquinas e servidores virtuais.

En xeral, en Linux se dispon de xeito estándar dunha librería de xestión de virtualización chamada '''libvirt''' que ofrece unha API que permite xestionar múltiples máquinas virtuais nunha rede, configurando redes virtuais, espazos de almacenamento, migración de máquinas entre hosts... etc. Sobre esta librería se constrúen numerosos sistemas de virtualización como [[wikipedia:OpenNebula|OpenNebula]], [[wikipedia:OpenStack|OpenStack]], ou o mesmo RHEVS. ''libvirt'' permite xestionar máquinas virtuais de diversos ''hypervisors'', como ''Xen'', ''VirtualBox'', ''VMWare'', ''LXC'' ou ''KVM''. Temén existen entornos gráficos de usuario de xestión sinxelos, como ''virt-manager''.

*;<u>LXC</u>;
''LXC (LinuX Containers)'' é un sistema de virtualización a nivel de sistema operativo que permite a execución de múltiples entornos baixo un kernel común dun xeito completamente aillado, de xeito que se poden executar servizos de modo independente. A velocidade de execución é idéntica ao do host, sen existir retrasos debidos a algún tipo de emulación hardware (que non existe).

Outra ventaxa é a posibilidade de executar entornos LXC dentro de máquinas virtuais en ''Full-Virtualization'' ou paravirtualizadas ao non precisar de acceso as características de virtualización das CPU.

=== Virtualización de Rede ===
Cando virtualizamos máquinas, normalmente estas están conectadas en rede seguindo unha topoloxía determiñada. As máquinas virtuais (''Guests'') están dotadas dunha tarxeta de rede que ten unha correspondencia na máquina real (''Hosts''), normalmente utilizando parellas de ethernet virtuais (''virtual ethernet pairs'') e facendo uso de [[wikipedia:Linux_namespaces|namespaces]].

Estas ethernet virtuais se conectan no Host coa rede real mediante [[wikipedia:Bridging_(networking)|pontes]] que combinadas con regras no firewall ofrencen distintos tipos de conectividade.

{{boxinfo|Si se teñen ''switches'' que o soporten, incluso é posible conectar en redes ailladas máquinas virtuais executándose en distintos ''Hosts'' facendo uso de ''VLANS 802.11q''}}
==== Ethernets Virtuais ====
===== Alias =====
En Linux é posible definir alias de ethernets físicas existentes de xeito que se lles poda asignar outra IP Para elo únicamente é necesario asignarlle a IP con ifconfig utilizando o nome da interface seguida de : e o número de alias.

<source lang='text'>
ifconfig eth0:0 172.20.55.12
</source>


Tamén é posible crear alias dunha ethernet de xeito que esté presente en outra vlan

<source lang='text'>
# Creamos unha nova interface de rede eth0.4 que funciona na VLAN 4
vconfig add eth0 4

ou
ip link add link eth0 name eth0.4 type vlan id 4
</source>

===== TUN/TAP =====
Os interfaces de rede Tun/Tap son dispositivos de software, de xeito que únicamente existen no Kernel e non teñen ningún compoñente hardware asociado. O seu funcionamento é idéntico a un interface de rede real, pero controlado polo Kernel.

A diferencia entre un interface ''Tap'' e un ''Tun'' é que os interfaces ''Tap'' manexan frames ethernet, mentras que os interfaces ''Tun'' xestionan paquetes IP. Este tipo de interaces poden ser ''transitorios'', no sentido de que son creados e destruidos polo mesmo programa de modo que cando o programa finaliza a súa execución o interface deixa de existir, ou ''persistentes'', de xeito que existen ata que son específicamente destruidos.

Unha vez creado o interface, pode utilizarse como calqueira interface de rede, asignándolle IP, analizando tráfico, creando regras de firewall...

<source lang='text'>
ip tuntap add dev mytap mode tap user md
</source>

<source lang='text'>
# ip tuntap help
Usage: ip tuntap { add | del } [ dev PHYS_DEV ]
[ mode { tun | tap } ] [ user USER ] [ group GROUP ]
[ one_queue ] [ pi ] [ vnet_hdr ]

Where: USER := { STRING | NUMBER }
GROUP := { STRING | NUMBER }
</source>

===== Veth pairs =====
Ou parellas de ethernet virtuais. É un conxunto de dúas ethernets virtuais relacionadas de xeito que o que entra por unha sae pola outra e viceversa. Emprégase moito para conectar os hosts coas máquinas virtuais, creando unha parella de xeito que un extremo sexa visible dende o host e o outro dende o hypervisor.

<source lang='text'>
ip link add veth0 type veth peer name veth1
</source>

===== MacVLAN =====
Os interfaces virtuais ''MacVLAN'' consisten na creación de distintas MAC para un único interface, de feito que o seu comportamento é como si se tratara de varias interfaces de rede as que se lles pode asociar distintas direccións IP. Este tipo de interfaces poden funcionar en varios modos:
*'''VEPA (Virtual Ethernet Port Aggregator)'''
::En este modo de funcionamento a información que sae hacia o interface principal sempre se dirixirá hacia fora, incluso cando vai dirixido a outro interface do mismo ''grupo'' (alias da mesma interface). Esto da a posibilidade de xestionar o tráfico entre os distintos alias, o que resulta moi útil no caso da interconexión de máquinas virtuais. Sin embargo, para que esto funcione correctamente, o switch externo debe ser capaz de enviar de volta o tráfico entre as máquinas virtuais, o que normalmente é evitado polo protocolo [[wikipedia:STP STP]]. Esta característica, chamada ''hairpin mode'' ou ''reflective-relay'' (802.1 Qbg) aínda non está soportada por moitos switches, polo que non é moi utilizado. A implementación de ''bridge'' de Linux soporta ''hairping'' nas súas versións máis recentes, que pode utilizarse dos seguintes xeitos:

<source lang='text'>
# echo 1 > /sys/class/net/br0/brif/eth0/hairpin_mode
</source>

<source lang='text'>
//versións modernas da utilidade '''brctl''':

# brctl hairpin br0 eth0 on
</source>

<source lang='text'>
// iproute2:
# bridge link set dev eth0 hairpin on
</source>
*'''Bridge Mode'''
::Si os datos recibidos van a outro interface do mesmo ''grupo'', o tráfico vai directamente ao seu destiño, sen abandoar en ningún momento o interface ''real''. Esto proporciona unha maior velocidade de conexión entre as interfaces do mesmo ''grupo''.
*'''Private Mode'''
::É similar ao modo ''VEPA'', pero aillando as interfaces do mesmo ''grupo'' entre elas, de maneira que se impide a comunicacion.
*'''Passtrough Mode'''
::Únicamente permite un ''alias'' por cada interface ''real''.

===== MacVTAP =====
[[Image:MacVTAP.png]]

Os interfaces virtuais ''MacVTAP'' están basados en ''MacVLAN" e son similares aos interfaces ''TAP''. O uso máis habitual é en '''libvirt/KVM''', que permite ás máquinas virtuais a conexión a través de ''MacVTAP''. Os modos soportados son os mesmos que no caso de ''MacVLAN''.

==== Conexión ás Redes Virtuais ====
===== Pontes =====
As '''pontes (''bridges'')''' son un xeito de agrupar varios interfaces de rede de xeito que a información que salga por un de eles é vista polos demais. Sería algo similar a un [[wikipedia:Ethernet_hub|Hub]] físico no que a saída de un porto pode ser recollida polos demáis. As ''pontes'' son un medio moi cómodo para establecer redes virtuais nunha LAN, e para enlazar as máquinas virtuais a rede física de distintos xeitos.
Podemos distinguir entre varias configuracións virtuais:

'''1.- As máquinas virtuais están ailladas.'''
::<u>Non se inclúen as ethernet virtuais correspondentes ás máquina virtuais en ningunha ponte do ''Host''</u>. Deste xeito as máquinas virtuais quedan completamente ailladas a nivel de rede tanto do ''Host'' como da ''LAN/WAN'' e do resto de máquinas virtuais.
'''2.- As máquinas virtuais non son accesibles dende a ''LAN/WAN'', pero sí dende o ''Host''. Dende as máquinas virtuais so se accede ao ''Host'''''.
::<u>Se configura unha ponte no ''Host'' á que se agrega a ethernet virtual correspondente á máquina virtual</u>, esa ponte terá unha IP correspondente coa ''LAN virtual'' que estamos creando e que nos proporcionará conectividade dende o ''Host'' hacia a ''LAN virtual''. Poderemos agregar tantas interfaces de máquinas virtuais como desexemos á mesma ponte, co que estarán na mesma LAN, con visibilidade completa entre elas.
'''3.- As máquinas virtuais non son accesibles dende a ''LAN/WAN'', pero sí dende o ''Host''. Dende as máquinas virtuais temos acceso completo á ''LAN/WAN'''''.
::<u>Se configura igual que no caso 2, pero agregando ademáis no ''Host'' reglas SNAT na interface de saída a ''LAN/WAN''.</u>
'''4.- As máquinas virtuais forman parte da ''LAN/WAN'''''.
::<u>Se configura no ''Host'' unha ponte coa IP da rede local do ''Host'' e se lle agrega a ''ethernet'' de conexión coa ''LAN/WAN'' sen ''IP''</u>. As ethernet virtuais correspondentes coas maquinas virtuais que queiramos situar na ''LAN/WAN'' se agregarán a esta ponte.
[[Image:virtualnets.png|center]]

===== OpenVSwitch =====
''Open vSwitch'' é un switch virtual multicapa licenciado baixo a [[wikipedia:Apache_License|licencia libre Apache 2.0]]. Está diseñado para a automatización da configuración das redes mediante programa, dando soporte a protocolos e ferramentas de control estándar (NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag...). Tamén soporta a súa distribución a través de varios servidores físicos dun xeito similar ao ''Switch virtual de VMWare'' ou a ''Nexus 1000V de Cisco''.

As súas características son as seguintes:
:*Visibilidade e comunicación entre máquinas virtuais mediatne [[wikipedia:NetFlow|NetFlow]], [[wikipedia:sFlow|sFlow]], [[wikipedia:Port_mirroring|SPAN]], [[wikipedia:RSPAN|RSPAN]] e [[wikipedia:Generic_Routing_Encapsulation|túneis GRE]].
:*[[wikipedia:Link_Aggregation_Control_Protocol| LACP]] (IEEE 802.1AX-2008)
:*[[wikipedia:802.1q|VLAN 802.1q]] con trunking
:*Un subconxunto do estándar [[wikipedia:802.1ag|802.1ag]] para monitorización de [[wikipedia:Cisco_CallManager|enlaces CCM]]
:*[[wikipedia:Spanning_Tree_Protocol|STP (IEE 802.1D-1998)]]
:*[[wikipedia:Quality_of_service|QoS fino]]
:*[[wikipedia:HFSC|HFSC qdisc]]
:*Políticas de tráfico por cada máquina virtual.
:*Soporte de [[wikipedia:Openflow|OpenFLow]] con múltiples extensións para virtualización
:*[[wikipedia:IPv6|IPv6]]
:*Soporta varios protocolos de tunneling (Ethernet over GRE, [[wikipedia:CAPWAP|CAPWAP]], [[wikipedia:IPsec|IPsec]], GRE over IPsec).
:*Protocolo de configuración remota, con interface en Python
:*Compatibilidade coas pontes (bridges) de Linux
:*Opción de forwarding a nivel de Kernel e de usuario.
:*Capa de abstracción do forwarding para facilitar portar as aplicacións.

Os hypervisores necesitan dirixir o tráfico entre as máquinas virtuais e co exterior. Nos hypervisores basados en Linux, normalmente de utiliza un switch da capa 2 (L2), o bridge de Linux, que é rápido e fiable. ''Open vSwitch'' está pensado para instalacións de virtualización con múltiples servidores, para o que o bridge de Linux non está tan ben preparado. Entre outras cousas, Open vSwitch ofrece:

:*'''Movilidade do estado''': Todo o estado asociado cunha entidade da rede (máquina virtual) é migrable entre distintos hosts. Si unha máquina virtual migra entre varios hosts non so é posible migrar a información da rede asociada, si non tamén o estado actual da rede.

:*'''Resposta dinámica á rede''': As redes de máquinas virtuais están sometidas a continuos cambios. As máquinas virtuais se encienden e apagan, cambian de redes lóxicas... etc. ''OpenvSwitch'' permite ao sistema de control da rede responder a estes cambios ofrecendo tecnoloxías como ''NetFlow'', ''sFlow'' ou [[wikipedia:OVSDB|OVSDB]]. Deste xeito, o software de control pode examinar varios aspectos da configuración da rede e responder aos cambios.

:*'''Soporta tags nos paquetes IP para a xestión de VLANS 802.11q'''
:*'''Soporta múltiples túneis GRE xestionables de modo remoto.'''
:*'''Open vSwitch se está integrando en algúns dispositivos hardware.''' Co que a xestión dos mesmos estará máis integrada co entorno virtual.
===== Operación Básica con OpenVSwitch=====
''OpenVSwitch'' opera creando pontes que funcionarán como switches virtuais. A cada ponte, se lle poderá asignar unha dirección IP, que será a IP de xestion do ''switch virtual''. A esas pontes se lle irán agregando portos, que se corresponden coas interfaces de rede que formarán parte da ponte. Deste xeito, as operacións máis comúns con ''OpenVSwitch'' son:
;Visualizar a configuración actual: <source lang='text'>ovs-vsctl show</source>
;Crear un ''switch'': <source lang='text'>ovs-vsctl add-br nomeSwitch</source>
;Agregar un porto (interface) a un switch (ponte): <source lang='text'>ovs-vsctl add-if nomeSwitch interface</source>
;Poñer unha etiqueta 802.1q a un porto: <source lang='text'>ovs-vsctl set port interface tag=PVID</source>
;Quitar a etiqueta 802.1q de un porto: <source lang='text'>ovs-vsctl remove port interface tag PVID</source>
;Eliminar un porto de un switch: <source lang='text'>ovs-vsctl del-if interface</source>
;Eliminar un switch: <source lang='text'>ovs-vsctl del-br nomeSwitch</source>

Hoxe en día pódese operar ao mesmo tempo con pontes (bridges) e OpenVSwitch, aínda que non é aconsellable.

{{boxinfo|A configuración feita nos switches (as pontes e interfaces, non as IP) se almacenan nunha base de datos, de xeito que se conserva entre reinicios da máquina.}}

{{boxinfo|Existe un módulo de compatibilidade ('''openvswitch-brcompat''') que fai que as operacións que se realizarían sobre unha ponte, se realicen sobre ''OpenVSwitch'' de xeito automático, o que evita a reconfiguración de aplicacións que actualmente utilizan o ''bridge''}}

==== VLANS 802.1q====
Unha ''LAN (Local Area Network)'' é un conxunto de ordenadores conectados entre sí mediante ''switches'' ou ''hubs''. Unha ''LAN'' inclúe todos os sistemas no dominio ''broadcast''. E decir, todos os sistemas nunha ''LAN'' recibirán os paquetes de ''broadcast'' emitidos por calqueira membro da ''LAN''. Segundo esta definición os límites da ''LAN'' estan definidos polos ''routers'' ou outros dispositivos da ''[[wikipedia:OSI_model|Capa 3 OSI]] (Capa de Rede)''.

Unha '''''VLAN''''' é unha ''LAN'' virtual. Consiste en aillar determinados equipos dunha LAN de xeito que únicamente teñan conectividade entre eles. Un switch con capacidade VLAN poderá participar en varias ''LAN'' ao mesmo tempo.

{{boxinfo|Algunhos switches implementan ''VLAN Trunking''. Un ''Trunk'' é un porto que permite extender unha ''VLAN'' entre varios switches incorporando un identificador a cada paquete que o atravesa, de modo que no destiño se poda identificar a que ''VLAN'' corresponde.}}

Existen diversos modods de implementar ''Trunks VLAN''. Os dous principais protocolos son [[wikipedia:Cisco_Inter-Switch_Link|ISL]] e [[wikipedia:802.1q|802.1q]]. ''ISL'' foi creado por [[wikipedia:Cisco|Cisco]] e é unha tecnoloxía propietaria, posterioremente se desenvolveu o estándar aberto '''802.1q'''.
===== Funcionamento de 802.1q =====
Nunha ''VLAN 802.1q'' os portos poden ser de dous tipos: ''Trunks'' ou ''Access Ports''. En un '''''Trunk'' (''tagged'')''' os ''paquetes IP'' que saen do ''switch'' conservarán a marca da VLAN que os orixina, mentras que nos '''''Access Ports'' (''untagged'')''' os paquetes saen sen marcar.
Cando un ''paquete IP'' chega a un porto, se examina a súa marca e únicamente se lle permite dirixirse aos portos da VLAN correspondente, no caso de que o paquete non estivera marcado, se lle pon a marca correspondente co ''PVID'' do porto receptor.

Cando utilizamos ''VLANS 802.1q'' temos que distinguir entre a ''VLAN nativa'' ou ''default'', que non leva asociada ningunha marca e utiliza normalmente como ''VID'' e ''PVID'' '''1''', e o resto de ''VLAN'' que sí levan asociadas marcas identificativas.

{{boxinfo|Un porto ''untagged'' únicamente pode estar presente nunha VLAN, mentras que os portos ''tagged'' poden estar presentes en varias}}

===== 802.1q en Linux =====
Linux dispón de soporte para ''VLAN 802.1q''. O soporte a nivel de usuario ven proporcionado tanto polo switch virtual ''openvswitch'', como polo paquete ''vlan''.

;<u>'''soporte mediante vlan (vconfig)'''</u>:
O paquete linux ''vlan'' nos proporcionará a utilidade ''vconfig'', que se pode utilizar para manexar a pertencia dos dispositivos de rede a ''VLANS 802.11q''. Si utilizamos ''vconfig'' precisamos o módulo do kernel '''8021q'''.

Normalmente, si queremos que un equipo conectado á rede mediante ''eth0'' se conecte a unha (ou varias) ''VLANS 802.1q'', lle quitaremos a IP a tarxeta real (eth0) cuidando que se active e poñemos a IP no interface virtual da VLAN desexada:

<source lang="text">
ifconfig eth0 0.0.0.0 up
vconfig add eth0 2 #Creamos unha ethernet virtual que corresponde coa eth0 na VLAN 2 (trunk)
</source>

Esto creará unha ethernet virtual, á que lle poñeremos a IP desexada para a VLAN 2 (normalmente se chamará ''eth0.2'', pero podemos averigualo con ''ifconfig -a'')

Para eliminar unha interface dunha ''VLAN'' utilizaremos o comando ''rem'' de ''vconfig'':

<source lang="text">
vconfig rem eth0.2
</source>

Outras opcións de este comando nos permitirán por exemplo incluír información de QoS (Quality Of Service).
;<u>'''soporte mediante openvswitch'''</u>:
''OpenVSwitch'' inclúe xa soporte ''802.1q'', polo que non precisa da utilidade ''vconfig''. Para que un porto agregado a o switch pertenzca a unha ''VLAN'' determiñada, o indicamos do seguinte xeito:

<source lang="text">
ovs-vsctl set port veth0 tag=2
</source>

Si queremos quitar o porto da ''VLAN'':

<source lang="text">
ovs-vsctl remove port veth0 tag 2
</source>

=== Virtualización do Almacenamento ===
{{boxinfo|Cando falamos de virtualización do almacenamento podemos estar referíndonos a múltiples sistemas con obxectivos diversos, como o RAID, ou os volumes de disco. Neste caso, nos referimos a provisionar almacenamento para a execución de máquinas virtuais.}}
As máquinas virtuais poden almacenarse de diferentes xeitos:
:*'''Nunha partición do disco''': Se instala o sistema nunha partición do disco, e se arranca desde un sistema de virtualización.
:*'''Nun volume lóxico LVM''': É similar ao anterior, pero aproveitando as características ofrecidas por LVM, como o snapshotting ou o dinamismo do espazo.
:*'''Nun arquivo que actúa como un disco para a máquina virtual ([[wikipedia:Disk_image|Imaxe de Disco]]).'''
:*'''Nun SAN mediante tecnoloxías do tipo [[wikipedia:iSCSI|iSCSI]]''': E similar ao caso dunha partición, salvo que o "disco" reside nun sistema remoto.
:*'''Nun NAS mediante un protocolo de compartición de arquivos [[wikipedia:Network_File_System|NFS]],[[wikipedia:CIFS|SMB/CIFS]]''': E similar ao caso do arquivo, pero neste caso, o arquivo reside nun sistema remoto.

O sistema máis flexible (aínda que non o máis eficiente, que sería a almacenaxe directa no espazo físico, xa sexa nunha partición ou nun volume lóxico) é sin duda o almacenamento en un arquivo, xa que permite a copia e distribución das máquinas virtuais con moita facilidade. Cada hypervisor ten o seu propio formato de arquivo, aínda que hoxe en día é moi común que un hypervisor poda traballar con varios. Os principais formatos son:

;RAW: O ficheiro se trata como si fora un disco real. E o formato que proporciona máis velocidade, pero non dispón de ningunha característica extra.
;[[wikipedia:qcow|QCOW2]]: Este formato é o principal do hypervisor ''KVM'', e nos ofrece as seguintes posibilidades:
:*''Crecimento dinámico (Sparse Disk)'': Aínda que creemos un disco enorme, a imaxe sempre ocupará o mínimo imprescindible.
:*''Snapshotting/Copy on Write'': É posible crear unha imaxe que sexa unha ''instantánea'' de outra xa dispoñible. A ''instantánea'' pode utilizarse como unha nova máquina virtual idéntica á orixinal, e únicamente almacenará as diferencias producidas con esta durante o seu uso. Esto permite a rápida creación de novas máquinas virtuais (menos de un segundo) a partir de instalacións base ou ''plantillas''.
:*''Xestión do espazo'': Este tipo de imaxenes nos permiten a redimensión do espazo asignado dun xeito simple.
;[[wikipedia:VMDK|VMDK]]:E o formato principal do hypervisor [[wikipedia:Vmware|Vmware]], ademáis do propio disco garda información da máquina virtual e do hardware instalado. Permite ''Crecimento dinámico (Sparse)'', ''Snapshotting'' e ''Xestión do espazo''.
;[[wikipedia:VDI_(file_format)#Virtual_Disk_Image|VDI]]: E o formato principal do hypervisor [[wikipedia:Virtualbox|Virtualbox]]. Soporta ''Crecimento dinámico'', ''Snapshotting'', ''Discos compartibles'' (utilizables por varias VM ao mesmo tempo) e ''Discos Inmutables'' (descartan os cambios producidos ao apagar a VM).
;[[wikipedia:VHD_(file_format)|VHD]]: Este formato foi creado por ''Connectix'' para o ''Virtual PC'' que máis tarde foi mercado por ''Microsoft'' e hoxe en día o emprega no seu hypervisor [[wikipedia:Hyper-V|Hyper-V]], pero foi facilitado a terceiros mediante a [[wikipedia:Microsoft_Open_Specification_Promise|Open Specification Promise]] e hoxe en día está soportado por moitos hypervisores, sendo probablemente o máis utilizado por [[wikipedia:Xen|Xen]]. Soporta ''Crecimentos dinámico'', ''Snapshotting'', ''Xestión do espazo'' etc.

{{boxinfo|[[wikipedia:Open_Virtualization_Format|OVF]] e un formato aberto estándar para a distribución de máquinas virtuais ([[wikipedia:Virtual_appliance|virtual appliances]]) independente do hypervisor a utilizar. Hoxe en día está soportado por gran parte da industria da virtualización, como VMWare, Oracle (Virtualbox) e Citrix XenServer utilizando normalmaente ficheiros coa extensión '''OVA'''}}

Os formatos máis utilizados no mundo Linux, probablemente sexan '''raw''', '''qcow2''' baixo ''KVM'' e '''vhd''' baixo ''Xen''. A continuación veremos as operacións básicas con este tipo de imaxes:
;Creación da Imaxe:
:*'''Qcow2''': O seu manexo se realiza mediante a utilidade ''qemu-img'', capaz de manexar e convertir múltiples formatos e o estándar na librería de virtualización ''libvirt''. <source lang='text'>qemu-img create -f qcow2 nomeDisco.qcow tamano [G|M|K]</source>
:*'''raw''': <source lang='text'>qemu-img create -f raw nomeDisco.raw tamano [G|M|K]</source>
;*'''VHD''': Para xestionar o formato ''VHD'' se utiliza a aplicación ''vhd-util'' incluída no paquete '''blktap-utils'''.<source lang='text'>vhd-util create -n nomeDisco.vhd -s tamano_en_MB</source>
;Redimensión da imaxe:
:*'''raw''','''Qcow2'''
<source lang='text'>
qemu-img resize filename size
ou
qemu-img resize filename [+|-]size[K|M|G|T]
</source>
:*'''vhd'''
<source lang='text'>
vhd-util resize
</source>
{{boxinfo|Deben utilizarse as utilidades do sistema de ficheiros para aproveitar o novo espacio engadido, ou para reducir o tamano do sistema de arquivos '''antes''' de disminuir o tamano do disco}}
;Creación dunha imaxe Copy On Write (snapshot):
:*'''Qcow2'''
<source lang='text'>
qemu-img create -f qcow2 nomeFicheiro -b nomeFicheiroBase
</source>
:*'''vhd'''
<source lang='text'>
vhd-util snapshot -n noemFicheiro -p nomeFicheiroBase
</source>

;Cambio da imaxe base dunha imaxe Copy On Write:
:*'''Qcow2'''
<source lang='text'>
qemu-img rebase -f qcow2 -v nomeNovaBase nomeImaxe
</source>

;Conversión dunha imaxe Copy On Write (snapshot) nunha imaxe normal:
:*'''Qcow2'''
<source lang='text'>
qemu-img convert -f qcow2 -O qcow2 disk newdisk
</source>
:*'''vhd'''
<source lang='text'>
vhd-util coalesce -n imaxeCow.vhd -o novaImaxe.vhd -p
</source>
;Conversión dunha imaxe vhd a raw:
<source lang='text'>
qemu-img convert -O raw imaxe.vhd imaxe.raw
</source>
;'Instalación' dunha imaxe nunha partición ou volume lóxico LVM:
<source lang='text'>
cat imaxe.img | pv -brt | dd of=/dev/mapper/volume-imaxe bs=100M
</source>

== KVM ==
''KVM (Kernel-based Virtual Machine)'' é unha solución de virtualización hardware (''Full-Virtualization'' ou ''HVM'') para Linux en hardware x86 con extensións de virtualización (''Intel VT'' ou ''AMD-V''). Consiste en un módulo do kernel ('''kvm.ko''') que proporciona a infraestructurá para a virtualización en un módulo específico para a CPU ('''kvm-intel.ko''' ou '''kvm-amd.ko'''). Os compoñentes do kernel para ''KVM'' están incluídos no mesmo dende a versión '''2.6.20'''.
A maneira máis cómoda de traballar con ''KVM'' é mediante ''Libvirt'' e a utilidade gráfica ''virt-manager'', que permite a creación de almacenamento, configuracións de rede, e incluír e quitar hardware ao sistema a virtualizar, ademáis de proporcionar un terminal mediante ''VNC''. Polo tanto, o necesario para traballar con ''KVM'' sería:
<source lang='text'>apt-get install libvirt virt-manager</source>
===Migración de Xen a KVM===
Si dispoñemos dun disco de máquina virtual Xen nun formato compatible con KVM, para migrar a máquina debemos asegurarnos que a mesma non fai uso de ningún dispositivo propio de Xen. O máis común e importante é o disco fixo.
As versións modernas de Debian montan os discos por UUID, pero si non é así, é necesario modificar os nomes dos dispositivos en ''/etc/fstab'' de modo que teñan a forma '''vda''' en lugar de '''xvda''', ou ben modificar de modo apropiado a configuración de KVM/libvirt. De xeito análogo é necesario modificar o ficheiro '''/boot/grub/device.map'''. Tamén pode ser necesaria a modificación ou eliminación do parámetro ''console'' en ''/boot/grub/grub.cfg'' e comentala en ''/etc/inittab'' na linea que comeza con '''co:'''.


Para facer estas modificacións é necesario montar o disco virtual, que posiblemente esté particionado e incluso utilizando LVM. Para crear os dispositivos necesarios para acceder ás particións utilizaremos a ferramenta '''''kpartx'''''.

<source lang='text'>
kpartx -a Imaxe.raw -v
</source>

Si estamos a utilizar LVM, necesitaremos crear os dispositivos axeitados:

<source lang='text'>
vgscan
vgchange -ay GrupoLVM
</source>

Unha vez feito esto podremos montar as particións e modificar o seu contido como sexa necesario.

Unha referencia completa podedes atopala [https://wiki.debian.org/HowToMigrateBackAndForthBetweenXenAndKvm aquí]

== Xen ==
''Xen'' é un hypervisor Type 1 ou ''bare-metal'', polo que se carga directamente sobre o hardware antes de cargar o sistema operativo que utilizaremos para manexar os sistemas virtualizados, que normalmente e un Linux. Este sistema gozará de privilexios especiais de acceso aos recursos e se utilizará para xestionar o sistema, pero xa funcionará virtualizado, é o '''Dom-0'''. Os sistemas virtualizados funcionarán no que se coñece como '''Dom-U'''.

'''Xen''' actualmente se explota de xeito comercial a través da empresa '''Citrix''', que comercializa a súa solución de virtualización '''XenServer''' de características e funcionalidade moi similares ao ''VMWare ESXi''.

Para a creación e control das máquinas virtualizadas, ''Xen'' dispon de diferentes tipos de utilidades de uso excluínte (''toolstacks''), sendo os máis importantes '''xm''' (o sistema por defecto) e '''xcp-xapi''' (o utilizado por ''Citrix XenServer''). Nos centraremos en '''xm'''.

== LXC ==
Os ''LinuX Containers (LXC)'' son unha tecnoloxía de virtualización "lixeira". Son máis como un "chroot" ampliado que un sistema de virtualización como Qemu ou VMWare, porque non emulan nada do hardware e porque comparten o mesmo sistema operativo que o host. Tecnoloxías similares existentes dende hai tempo son as ''Zones'' de ''Solaris'', ou os ''Jails'' de ''BSD''.

Linux vServer e OpenVz son implementacións de Containers para Linux, das que se tomaron características para a implementación de ''LXC'', incluída na maioría de distribucións.

===Instalación===
''LXC'' fai uso de información do sistema para aillar e xestionar os recursos otorgados aos contenedores. Esa información atópase nun [[wikipedia:Virtual_file_system|sistema de ficheiros virtual]] chamado '''cgroup''', que é necesario facer dispoñible montándoo no sistema de arquivos do ''Host''. Polo tanto a primeira tarefa a realizar será modificar ''/etc/fstab'' para incluir a montaxe de ''cgroup'' incluindo a liña:
<source lang='text'>cgroup /sys/fs/cgroup cgroup defaults 0 0</source>
Tamén podemos montalo de xeito manual escribindo:
<source lang='text'>mount cgroup -t cgroup /sys/fs/cgroup</source>

O sistema de containers ''LXC'' se instala en [[wikipedia:Debian|Debian]] mediante o paquete '''lxc''', e e desexable ''debootstrap'' para a instalación de sistemas ''Debian'', e ''rsync'' para as instalacións, polo tanto:
<source lang='text'>apt-get install lxc debootstrap rsync</source>

Se nos preguntará, entre outras cousas, o lugar do sistema onde se instalarán os containers. O valor por defecto é ''/var/lib/lxc'', e se soporta a instalación no sistema de arquivos ou en sistemas [[wikipedia:Logical_Volume_Manager_(Linux)|LVM]] ou [[wikipedia:BTRFS|BTRFS]], sendo estes últimos máis prácticos de xestionar gracias ao seu soporte de ''snapshots'' que permiten unha replicación rápida dos containers.

Para instalar un container, o máis fácil é o uso dunha das plantillas suministradas en ''/usr/share/lxc/templates''. Deste xeito, un Container con Debian (en calqueira das súas versións) se instalaría con:
<source lang='text'>lxc-create -t debian -n <nome_container></source>

{{boxinfo|E posible o uso de plantillas de OpenVZ.}}

Unha vez instalado o container, podemos ver en ''/var/lib/lxc/nome_container'' un directorio '''rootfs''' e un ficheiro '''config'''. ''rootfs'' conten o sistema de arquivos do novo container, mentras que ''config'' almacena a configuración para o container. As opcións de configuración poden consultarse con man ''lxc.conf''.

{{boxinfo|En ''Debian Wheezy'' existe un problema coas plantillas de Debian, que non producen containers funcionais polo tanto é recomendable a instalación de LXC a partir de ''Debian Jessie''.}}

Os parámetros de configuración do ''Container'' están no ficheiro ''config'' dentro do seu directorio. Pódese obter información sobre a configuración con '''man lxc.conf'''. Por exemplo, unha configuración común para a rede podería ser:
<source lang='text'>
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lan
lxc.network.hwaddr = 00:FF:AA:00:00:01
lxc.network.ipv4 = 192.168.122.110/24
lxc.network.ipv4.gateway=192.168.122.1
</source>
===Operación===
Para iniciar a execución do container:
<source lang='text'>lxc-start -n mycontainer -d</source>
Conseguir unha consola (para saír da consola ctrl+a q):
<source lang='text'>lxc-console -n mycontainer</source>
Apagar un Container:
<source lang='text'>lxc-shutdown -n mycontainer</source>
Obter información sobre un Container:
<source lang='text'>lxc-info -n mycontainer</source>

{{boxinfo|En xeran os comandos de control e xestión dos containers comenzan por '''lxc-''', e se poden consultar con '''man'''}}
== LibVirt ==
''LibVirt'' é un conxunto de utilidades para interactuar coas capacidades de virtualización de Linux (e outros sistemas operativos). Ofrece unha [[wikipedia:API|API]] de programación en '''C''' e un conxunto de enlaces para o uso de moitas outras linguaxes.
''LibVirt'' soporta un gran conxunto de ''hypervisors'' como '''KVM/QEMU''','''Xen''', '''LXC''', '''OpenVZ''', '''User Mode Linux''', '''VirtualBox''', '''VMware ESX GSX Workstation e Player''', '''Microsoft Hyper-V''', '''IBM PowerVM''' e '''Parallels''' e proporciona xestión remota dos '''hypervisors''' utilizando cifrado [[wikipedia:Transport_Layer_Security|TLS]] e [[wikipedia:x509|certificados x509]], autenticación [[wikipedia:Kerberos_(protocol)|Kerberos]] e [[wikipedia:Simple_Authentication_and_Security_Layer|SASL]] e xestión das máquinas virtuais, redes virtuais e almacenamento virtual.


Existen numerosas interfaces de xestión de máquinas virtuais e infraestructuras de [[wikipedia:Cloud Computing|Cloud Computing]] construidas en torno a ''Libvirt'', podendo destacar por exemplo '''Archipel''' ou [[wikipedia:virt-manager|virt-manager]]. Tamén se proporcionan utilidades de liña de comandos como por exemplo '''virsh''', que nos permite xestionar por completo as máquinas virtuais.

Revisión actual feita o 23 de agosto de 2016 ás 20:50

Introducción á Virtualización

Boxinfo info.png
A virtualización consiste na creación a través de software dunha versión virtual de algún recurso tecnolóxico, como pode ser unha plataforma hardware, un dispositivo de almacenamento ou outros recursos de rede.

A virtualización é moi diversa. Exemplos de virtualización, son a memoria virtual (na que se mapea no espacio de direccións de memoria RAM espazo de almacenamento situado fora de ella de xeito que o sistema a recoñece como espacio RAM normal), as VPN (Virtual Private Network) na que se emula unha rede local entre equipos situados en redes distintas, ou software que emula determinado hardware no que se poden executar aplicacións nativas como os emuladores de consolas. En xeral, podemos distinguir entre varios tipos de virtualización:

Tamén coñecido como virtualización de plataformas, fai referencia á creación de máquinas virtuais que actúan como ordenadores normais co seu propio sistema operativo. O software que se executa nesas máquinas virtuais non accede directamente aos recursos hardware, se non que o fai a través dun software chamado hypervisor ou virtual machine monitor, que é o que vai a determiñar o modo no que o sistema virtualizado actúa co hardware real da máquina.

A máquina real recibe o nome de Host, mentras que a máquina virtualizada denomínase Guest.

Boxinfo info.png
Existen dous tipos de hypervisores, aqueles que funcionan directamente sobre o hardware xestionando as máquinas virtuais (tipo 1 ou bare-metal), e os que funcionan sobre un sistema operativo (tipo 2).

Podemos distinguir entre 3 tipos principais de virtualización:

  • Full Virtualization ou Virtualización Hardware (HV) - Se virtualiza prácticamente todo o hardware da máquina
  • Partial Virtualization - Non é necesario virtualizar certos elementos hardware
  • Paravirtualization (PV) - Non se virtualiza o hardware, pero é posible executar aplicacións e sistemas operativos en entornos completamente aillados, como si dispuxeran dunha máquina exclusiva para eles.


Tanto a virtualización parcial, como a paravirtualización precisan de modificacións no sistema emulado (guest) para o seu funcinonamento, mentras que na virtualización completa non. Sen embargo, o rendimento é maior canta menos virtualización se utilice. A virtualización parcial consegue este obxectivo mediante na instalación no sistema guest de drivers paravirtualizados, sobre todo de disco, rede e memoria.

Boxinfo info.png
Debido á crecente importancia da virtualización hardware, as modernas CPU proporcionan asistencia hardware para a virtualización (como AMD-V ou VT-X) que proporcionan aos sistemas de Virtualización Hardware un gran rendimento, muy próximo aos sistemas paravirtualizados.

Consiste en separar o escritorio sobre o que traballa o usuario do sistema físico. O usuario interactúa co seu sistema utilizando outro ordenador mediante unha conexión de rede, como unha LAN ou a través de Internet. O sistema Host será normalmente un servidor capaz de almacenar e executar múltiples máquinas virtuais ao mesmo tempo para distintos usuarios, e o usuario mediante a conexión de rede obten acceso a unha de elas.

Consiste en que baixo un kernel común se divide o sistema en varias partes que se comportarán como máquinas individuais. O sistema operativo proporciona entornos aillados baixo os que executarán as distintas aplicacións de usuario. Exemplos son Solaris Zones, OpenVZ/Virtuozzo ou LXC.

Os servizos de virtualización de memoria permiten que o sistema acceda a un rango de direccións de memoria que non se corresponden coa realmente instalada, este rango é mapeado logo por un xestor de memoria ás direccións físicas. Deste xeito se pode por exemplo, utilizar máis RAM da dispoñible simulándoa en outro tipo de dispositivos, ou facilitar que varios programas accedan as mesmas direccións de memoria sen interferir, o que permite a multitarefa real. Outro tipo de virtualización de memoria consiste no uso da memoria RAM de ordenadores de un cluster para crear un Pool de memoria que poderán utilizar todos os equipos e aplicacións do cluster.

Se trata de separar o almacenamento lóxico dos datos do seu almacenamento físico, de xeito que se poda acceder á información sen preocuparse dos dispositivos de almacenamento físicos nin da súa localización. Exemplos de este tipo de virtualización son o manexo lóxico de volumes (LVM en Linux, LDM ou discos dinámicos en Windows), sistemas RAID e JBOD, ou sistemas de rede como iSCSI ou Fiber Channel.

Trátase de facilitar o acceso a fontes de datos diversas a través dunha única capa que nos permite non ter en conta o seu sistema de almacenamento empregado realmente, como ODBC ou JDBC.

A virtualización de redes consiste na combinacíón de recursos de rede hardware e software nunha única entidade basada en software chamada rede virtual. A rede virtual pode ser externa, combinando múltples redes ou partes de redes nunha unidade virtual, ou interna, proporcionando funcionalidade de rede a contenedores software nun único sistema.

Ferramentas de Virtualización

Existen distintos sistemas que implementan Virtualization Hardware. Os máis importantes son Xen, VMWare, VirtualBox, KVM/Qemu e Microsoft Hyper-V. A maior parte de estes sistemas implementan certo grado de paravirtualización mediante drivers especiais que permiten un acceso máis directo ao hardware real da máquina.

Entre as características principais de estes sistemas de máquinas virtuais atópanse o snapshotting (crear imáxes do estado da máquina virtual nun instante determiñado, permitindo parar e reanudar a mesma) e a migración que permite mover unha máquina virtual dun host a outro, prácticamente sen interrupción da mesma.

Software de Virtualización de CPU

  • Xen

Xen é un hypervisor de tipo 1 ou bare-metal capaz de executar máquinas virtuais en modo hardware (HVM ou Full Virtualization) e paravirtualizadas (PVM) si o kernel ten soporte, como é o caso de Linux. No caso das máquinas virtuais HVM Xen precisa de soporte de virtualización na CPU, e dispon de drivers paravirtualizados para disco, rede e memoria.

Xen é un dos sistemas de virtualización máis extendido e a competencia máis directa con VMWare ESXi, soportando infraestructuras complexas como os servizos ofrecidos por Amazon EC2, una das empresas máis importantes de servizos na nube. Citrix ofrece varios productos comerciais basados en Xen, que como maior ventaxa aportan un panel de control de virtualización chamado XenCenter, de funcionalidade similar a vCenter de VMWare.

Boxinfo info.png
Xen foi adquirido pola empresa Citrix, aínda que debido a súa licenza atópase dispoñible en múltiples sistemas. Todos os kernels Linux actuais están preparados para funcionar en Xen en modo de paravirtualización.
  • VMWare

VMWare é a empresa líder en virtualización de sistemas. Dispón de numerosos productos, gratuitos e de pago, que proporcionan sistemas de virtualización e paravirtualización permitindo a implantación e xestión de servidores virtualizados (virtualización de infraestructuras facilitando servidores e escritorios) e servizos na nube. Os seus productos principais son:

- VMWare WorkStation/Fusion/Player: Permiten a execución de máquinas virtuais baixo o sistema operativo anfitrión (Type 2 Hypervisors).
- VMWare ESXi (VMware vSphere Hypervisor): É un sistema que sustitúe ao sistema operativo proporcionando un entorno para a execución de máquinas virtuais. Estas máquinas se xestionan a través da rede mediante outros productos como VMWare vSphere e VMWare vCenter. Esta aproximación é similar a utilizada por Xen.
  • VirtualBox

VirtualBox proporciona virtualización multiplataforma (funcionando baixo Windows e Linux) de xeito similar ao ofrecido por VMware Workstation/Player (Tipo 2). Proporciona ademáis certog rao de paravirtualización instalando os virtualbox guest addons, o que porporciona unha maior velocidade e o acceso a máis características do hardware real.

  • KVM

KVM (Kernel Virtual Machine) e o heredeiro de qemu, un sistema de máquina virtual multiplataforma. KVM é un dos pilares sobre os que se pretende asentar a nova infraestructura virtual baseada en Linux, en sustitución de Xen, que anteriormente era a adoptada por RedHat na súa plataforma de virtualizacion Red Hat Enterprise Virtualization Server. KVM proporciona certo grado de paravirtualización gracias aos seus drivers paravirtualizados VirtIO para rede, almacenamento e memoria RAM.

De xeito similar ao ofrecido por plataformas como Citrix XenServer, ou VMWare vServer, Red Hat Virtualization Server proporciona un entorno sobre o que se xestionan as distintas máquinas e servidores virtuais.

En xeral, en Linux se dispon de xeito estándar dunha librería de xestión de virtualización chamada libvirt que ofrece unha API que permite xestionar múltiples máquinas virtuais nunha rede, configurando redes virtuais, espazos de almacenamento, migración de máquinas entre hosts... etc. Sobre esta librería se constrúen numerosos sistemas de virtualización como OpenNebula, OpenStack, ou o mesmo RHEVS. libvirt permite xestionar máquinas virtuais de diversos hypervisors, como Xen, VirtualBox, VMWare, LXC ou KVM. Temén existen entornos gráficos de usuario de xestión sinxelos, como virt-manager.

  • LXC;

LXC (LinuX Containers) é un sistema de virtualización a nivel de sistema operativo que permite a execución de múltiples entornos baixo un kernel común dun xeito completamente aillado, de xeito que se poden executar servizos de modo independente. A velocidade de execución é idéntica ao do host, sen existir retrasos debidos a algún tipo de emulación hardware (que non existe).

Outra ventaxa é a posibilidade de executar entornos LXC dentro de máquinas virtuais en Full-Virtualization ou paravirtualizadas ao non precisar de acceso as características de virtualización das CPU.

Virtualización de Rede

Cando virtualizamos máquinas, normalmente estas están conectadas en rede seguindo unha topoloxía determiñada. As máquinas virtuais (Guests) están dotadas dunha tarxeta de rede que ten unha correspondencia na máquina real (Hosts), normalmente utilizando parellas de ethernet virtuais (virtual ethernet pairs) e facendo uso de namespaces.

Estas ethernet virtuais se conectan no Host coa rede real mediante pontes que combinadas con regras no firewall ofrencen distintos tipos de conectividade.

Boxinfo info.png
Si se teñen switches que o soporten, incluso é posible conectar en redes ailladas máquinas virtuais executándose en distintos Hosts facendo uso de VLANS 802.11q

Ethernets Virtuais

Alias

En Linux é posible definir alias de ethernets físicas existentes de xeito que se lles poda asignar outra IP Para elo únicamente é necesario asignarlle a IP con ifconfig utilizando o nome da interface seguida de : e o número de alias.

  ifconfig eth0:0 172.20.55.12


Tamén é posible crear alias dunha ethernet de xeito que esté presente en outra vlan

   # Creamos unha nova interface de rede eth0.4 que funciona na VLAN 4
   vconfig add eth0 4

   ou
   ip link add link eth0 name eth0.4 type vlan id 4
TUN/TAP

Os interfaces de rede Tun/Tap son dispositivos de software, de xeito que únicamente existen no Kernel e non teñen ningún compoñente hardware asociado. O seu funcionamento é idéntico a un interface de rede real, pero controlado polo Kernel.

A diferencia entre un interface Tap e un Tun é que os interfaces Tap manexan frames ethernet, mentras que os interfaces Tun xestionan paquetes IP. Este tipo de interaces poden ser transitorios, no sentido de que son creados e destruidos polo mesmo programa de modo que cando o programa finaliza a súa execución o interface deixa de existir, ou persistentes, de xeito que existen ata que son específicamente destruidos.

Unha vez creado o interface, pode utilizarse como calqueira interface de rede, asignándolle IP, analizando tráfico, creando regras de firewall...

ip tuntap add dev mytap mode tap user md
# ip tuntap help
Usage: ip tuntap { add | del } [ dev PHYS_DEV ] 
          [ mode { tun | tap } ] [ user USER ] [ group GROUP ]
          [ one_queue ] [ pi ] [ vnet_hdr ]

Where: USER  := { STRING | NUMBER }
       GROUP := { STRING | NUMBER }
Veth pairs

Ou parellas de ethernet virtuais. É un conxunto de dúas ethernets virtuais relacionadas de xeito que o que entra por unha sae pola outra e viceversa. Emprégase moito para conectar os hosts coas máquinas virtuais, creando unha parella de xeito que un extremo sexa visible dende o host e o outro dende o hypervisor.

ip link add veth0 type veth peer name veth1
MacVLAN

Os interfaces virtuais MacVLAN consisten na creación de distintas MAC para un único interface, de feito que o seu comportamento é como si se tratara de varias interfaces de rede as que se lles pode asociar distintas direccións IP. Este tipo de interfaces poden funcionar en varios modos:

  • VEPA (Virtual Ethernet Port Aggregator)
En este modo de funcionamento a información que sae hacia o interface principal sempre se dirixirá hacia fora, incluso cando vai dirixido a outro interface do mismo grupo (alias da mesma interface). Esto da a posibilidade de xestionar o tráfico entre os distintos alias, o que resulta moi útil no caso da interconexión de máquinas virtuais. Sin embargo, para que esto funcione correctamente, o switch externo debe ser capaz de enviar de volta o tráfico entre as máquinas virtuais, o que normalmente é evitado polo protocolo wikipedia:STP STP. Esta característica, chamada hairpin mode ou reflective-relay (802.1 Qbg) aínda non está soportada por moitos switches, polo que non é moi utilizado. A implementación de bridge de Linux soporta hairping nas súas versións máis recentes, que pode utilizarse dos seguintes xeitos:
# echo 1 > /sys/class/net/br0/brif/eth0/hairpin_mode
//versións modernas da utilidade '''brctl''':

# brctl hairpin br0 eth0 on
// iproute2:
# bridge link set dev eth0 hairpin on
  • Bridge Mode
Si os datos recibidos van a outro interface do mesmo grupo, o tráfico vai directamente ao seu destiño, sen abandoar en ningún momento o interface real. Esto proporciona unha maior velocidade de conexión entre as interfaces do mesmo grupo.
  • Private Mode
É similar ao modo VEPA, pero aillando as interfaces do mesmo grupo entre elas, de maneira que se impide a comunicacion.
  • Passtrough Mode
Únicamente permite un alias por cada interface real.
MacVTAP

MacVTAP.png

Os interfaces virtuais MacVTAP están basados en MacVLAN" e son similares aos interfaces TAP. O uso máis habitual é en libvirt/KVM, que permite ás máquinas virtuais a conexión a través de MacVTAP. Os modos soportados son os mesmos que no caso de MacVLAN.

Conexión ás Redes Virtuais

Pontes

As pontes (bridges) son un xeito de agrupar varios interfaces de rede de xeito que a información que salga por un de eles é vista polos demais. Sería algo similar a un Hub físico no que a saída de un porto pode ser recollida polos demáis. As pontes son un medio moi cómodo para establecer redes virtuais nunha LAN, e para enlazar as máquinas virtuais a rede física de distintos xeitos. Podemos distinguir entre varias configuracións virtuais:

1.- As máquinas virtuais están ailladas.

Non se inclúen as ethernet virtuais correspondentes ás máquina virtuais en ningunha ponte do Host. Deste xeito as máquinas virtuais quedan completamente ailladas a nivel de rede tanto do Host como da LAN/WAN e do resto de máquinas virtuais.

2.- As máquinas virtuais non son accesibles dende a LAN/WAN, pero sí dende o Host. Dende as máquinas virtuais so se accede ao Host.

Se configura unha ponte no Host á que se agrega a ethernet virtual correspondente á máquina virtual, esa ponte terá unha IP correspondente coa LAN virtual que estamos creando e que nos proporcionará conectividade dende o Host hacia a LAN virtual. Poderemos agregar tantas interfaces de máquinas virtuais como desexemos á mesma ponte, co que estarán na mesma LAN, con visibilidade completa entre elas.

3.- As máquinas virtuais non son accesibles dende a LAN/WAN, pero sí dende o Host. Dende as máquinas virtuais temos acceso completo á LAN/WAN.

Se configura igual que no caso 2, pero agregando ademáis no Host reglas SNAT na interface de saída a LAN/WAN.

4.- As máquinas virtuais forman parte da LAN/WAN.

Se configura no Host unha ponte coa IP da rede local do Host e se lle agrega a ethernet de conexión coa LAN/WAN sen IP. As ethernet virtuais correspondentes coas maquinas virtuais que queiramos situar na LAN/WAN se agregarán a esta ponte.
Virtualnets.png
OpenVSwitch

Open vSwitch é un switch virtual multicapa licenciado baixo a licencia libre Apache 2.0. Está diseñado para a automatización da configuración das redes mediante programa, dando soporte a protocolos e ferramentas de control estándar (NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag...). Tamén soporta a súa distribución a través de varios servidores físicos dun xeito similar ao Switch virtual de VMWare ou a Nexus 1000V de Cisco.

As súas características son as seguintes:

  • Visibilidade e comunicación entre máquinas virtuais mediatne NetFlow, sFlow, SPAN, RSPAN e túneis GRE.
  • LACP (IEEE 802.1AX-2008)
  • VLAN 802.1q con trunking
  • Un subconxunto do estándar 802.1ag para monitorización de enlaces CCM
  • STP (IEE 802.1D-1998)
  • QoS fino
  • HFSC qdisc
  • Políticas de tráfico por cada máquina virtual.
  • Soporte de OpenFLow con múltiples extensións para virtualización
  • IPv6
  • Soporta varios protocolos de tunneling (Ethernet over GRE, CAPWAP, IPsec, GRE over IPsec).
  • Protocolo de configuración remota, con interface en Python
  • Compatibilidade coas pontes (bridges) de Linux
  • Opción de forwarding a nivel de Kernel e de usuario.
  • Capa de abstracción do forwarding para facilitar portar as aplicacións.

Os hypervisores necesitan dirixir o tráfico entre as máquinas virtuais e co exterior. Nos hypervisores basados en Linux, normalmente de utiliza un switch da capa 2 (L2), o bridge de Linux, que é rápido e fiable. Open vSwitch está pensado para instalacións de virtualización con múltiples servidores, para o que o bridge de Linux non está tan ben preparado. Entre outras cousas, Open vSwitch ofrece:

  • Movilidade do estado: Todo o estado asociado cunha entidade da rede (máquina virtual) é migrable entre distintos hosts. Si unha máquina virtual migra entre varios hosts non so é posible migrar a información da rede asociada, si non tamén o estado actual da rede.
  • Resposta dinámica á rede: As redes de máquinas virtuais están sometidas a continuos cambios. As máquinas virtuais se encienden e apagan, cambian de redes lóxicas... etc. OpenvSwitch permite ao sistema de control da rede responder a estes cambios ofrecendo tecnoloxías como NetFlow, sFlow ou OVSDB. Deste xeito, o software de control pode examinar varios aspectos da configuración da rede e responder aos cambios.
  • Soporta tags nos paquetes IP para a xestión de VLANS 802.11q
  • Soporta múltiples túneis GRE xestionables de modo remoto.
  • Open vSwitch se está integrando en algúns dispositivos hardware. Co que a xestión dos mesmos estará máis integrada co entorno virtual.
Operación Básica con OpenVSwitch

OpenVSwitch opera creando pontes que funcionarán como switches virtuais. A cada ponte, se lle poderá asignar unha dirección IP, que será a IP de xestion do switch virtual. A esas pontes se lle irán agregando portos, que se corresponden coas interfaces de rede que formarán parte da ponte. Deste xeito, as operacións máis comúns con OpenVSwitch son:

Visualizar a configuración actual
ovs-vsctl show
Crear un switch
ovs-vsctl add-br nomeSwitch
Agregar un porto (interface) a un switch (ponte)
ovs-vsctl add-if nomeSwitch interface
Poñer unha etiqueta 802.1q a un porto
ovs-vsctl set port interface tag=PVID
Quitar a etiqueta 802.1q de un porto
ovs-vsctl remove port interface tag PVID
Eliminar un porto de un switch
ovs-vsctl del-if interface
Eliminar un switch
ovs-vsctl del-br nomeSwitch

Hoxe en día pódese operar ao mesmo tempo con pontes (bridges) e OpenVSwitch, aínda que non é aconsellable.

Boxinfo info.png
A configuración feita nos switches (as pontes e interfaces, non as IP) se almacenan nunha base de datos, de xeito que se conserva entre reinicios da máquina.
Boxinfo info.png
Existe un módulo de compatibilidade (openvswitch-brcompat) que fai que as operacións que se realizarían sobre unha ponte, se realicen sobre OpenVSwitch de xeito automático, o que evita a reconfiguración de aplicacións que actualmente utilizan o bridge

VLANS 802.1q

Unha LAN (Local Area Network) é un conxunto de ordenadores conectados entre sí mediante switches ou hubs. Unha LAN inclúe todos os sistemas no dominio broadcast. E decir, todos os sistemas nunha LAN recibirán os paquetes de broadcast emitidos por calqueira membro da LAN. Segundo esta definición os límites da LAN estan definidos polos routers ou outros dispositivos da Capa 3 OSI (Capa de Rede).

Unha VLAN é unha LAN virtual. Consiste en aillar determinados equipos dunha LAN de xeito que únicamente teñan conectividade entre eles. Un switch con capacidade VLAN poderá participar en varias LAN ao mesmo tempo.

Boxinfo info.png
Algunhos switches implementan VLAN Trunking. Un Trunk é un porto que permite extender unha VLAN entre varios switches incorporando un identificador a cada paquete que o atravesa, de modo que no destiño se poda identificar a que VLAN corresponde.

Existen diversos modods de implementar Trunks VLAN. Os dous principais protocolos son ISL e 802.1q. ISL foi creado por Cisco e é unha tecnoloxía propietaria, posterioremente se desenvolveu o estándar aberto 802.1q.

Funcionamento de 802.1q

Nunha VLAN 802.1q os portos poden ser de dous tipos: Trunks ou Access Ports. En un Trunk (tagged) os paquetes IP que saen do switch conservarán a marca da VLAN que os orixina, mentras que nos Access Ports (untagged) os paquetes saen sen marcar. Cando un paquete IP chega a un porto, se examina a súa marca e únicamente se lle permite dirixirse aos portos da VLAN correspondente, no caso de que o paquete non estivera marcado, se lle pon a marca correspondente co PVID do porto receptor.

Cando utilizamos VLANS 802.1q temos que distinguir entre a VLAN nativa ou default, que non leva asociada ningunha marca e utiliza normalmente como VID e PVID 1, e o resto de VLAN que sí levan asociadas marcas identificativas.

Boxinfo info.png
Un porto untagged únicamente pode estar presente nunha VLAN, mentras que os portos tagged poden estar presentes en varias
802.1q en Linux

Linux dispón de soporte para VLAN 802.1q. O soporte a nivel de usuario ven proporcionado tanto polo switch virtual openvswitch, como polo paquete vlan.

soporte mediante vlan (vconfig)

O paquete linux vlan nos proporcionará a utilidade vconfig, que se pode utilizar para manexar a pertencia dos dispositivos de rede a VLANS 802.11q. Si utilizamos vconfig precisamos o módulo do kernel 8021q.

Normalmente, si queremos que un equipo conectado á rede mediante eth0 se conecte a unha (ou varias) VLANS 802.1q, lle quitaremos a IP a tarxeta real (eth0) cuidando que se active e poñemos a IP no interface virtual da VLAN desexada:

   ifconfig eth0 0.0.0.0 up
   vconfig add eth0 2   #Creamos unha ethernet virtual que corresponde coa eth0 na VLAN 2 (trunk)

Esto creará unha ethernet virtual, á que lle poñeremos a IP desexada para a VLAN 2 (normalmente se chamará eth0.2, pero podemos averigualo con ifconfig -a)

Para eliminar unha interface dunha VLAN utilizaremos o comando rem de vconfig:

  vconfig rem eth0.2

Outras opcións de este comando nos permitirán por exemplo incluír información de QoS (Quality Of Service).

soporte mediante openvswitch

OpenVSwitch inclúe xa soporte 802.1q, polo que non precisa da utilidade vconfig. Para que un porto agregado a o switch pertenzca a unha VLAN determiñada, o indicamos do seguinte xeito:

   ovs-vsctl set port veth0 tag=2

Si queremos quitar o porto da VLAN:

   ovs-vsctl remove port veth0 tag 2

Virtualización do Almacenamento

Boxinfo info.png
Cando falamos de virtualización do almacenamento podemos estar referíndonos a múltiples sistemas con obxectivos diversos, como o RAID, ou os volumes de disco. Neste caso, nos referimos a provisionar almacenamento para a execución de máquinas virtuais.

As máquinas virtuais poden almacenarse de diferentes xeitos:

  • Nunha partición do disco: Se instala o sistema nunha partición do disco, e se arranca desde un sistema de virtualización.
  • Nun volume lóxico LVM: É similar ao anterior, pero aproveitando as características ofrecidas por LVM, como o snapshotting ou o dinamismo do espazo.
  • Nun arquivo que actúa como un disco para a máquina virtual (Imaxe de Disco).
  • Nun SAN mediante tecnoloxías do tipo iSCSI: E similar ao caso dunha partición, salvo que o "disco" reside nun sistema remoto.
  • Nun NAS mediante un protocolo de compartición de arquivos NFS,SMB/CIFS: E similar ao caso do arquivo, pero neste caso, o arquivo reside nun sistema remoto.

O sistema máis flexible (aínda que non o máis eficiente, que sería a almacenaxe directa no espazo físico, xa sexa nunha partición ou nun volume lóxico) é sin duda o almacenamento en un arquivo, xa que permite a copia e distribución das máquinas virtuais con moita facilidade. Cada hypervisor ten o seu propio formato de arquivo, aínda que hoxe en día é moi común que un hypervisor poda traballar con varios. Os principais formatos son:

RAW
O ficheiro se trata como si fora un disco real. E o formato que proporciona máis velocidade, pero non dispón de ningunha característica extra.
QCOW2
Este formato é o principal do hypervisor KVM, e nos ofrece as seguintes posibilidades:
  • Crecimento dinámico (Sparse Disk): Aínda que creemos un disco enorme, a imaxe sempre ocupará o mínimo imprescindible.
  • Snapshotting/Copy on Write: É posible crear unha imaxe que sexa unha instantánea de outra xa dispoñible. A instantánea pode utilizarse como unha nova máquina virtual idéntica á orixinal, e únicamente almacenará as diferencias producidas con esta durante o seu uso. Esto permite a rápida creación de novas máquinas virtuais (menos de un segundo) a partir de instalacións base ou plantillas.
  • Xestión do espazo: Este tipo de imaxenes nos permiten a redimensión do espazo asignado dun xeito simple.
VMDK
E o formato principal do hypervisor Vmware, ademáis do propio disco garda información da máquina virtual e do hardware instalado. Permite Crecimento dinámico (Sparse), Snapshotting e Xestión do espazo.
VDI
E o formato principal do hypervisor Virtualbox. Soporta Crecimento dinámico, Snapshotting, Discos compartibles (utilizables por varias VM ao mesmo tempo) e Discos Inmutables (descartan os cambios producidos ao apagar a VM).
VHD
Este formato foi creado por Connectix para o Virtual PC que máis tarde foi mercado por Microsoft e hoxe en día o emprega no seu hypervisor Hyper-V, pero foi facilitado a terceiros mediante a Open Specification Promise e hoxe en día está soportado por moitos hypervisores, sendo probablemente o máis utilizado por Xen. Soporta Crecimentos dinámico, Snapshotting, Xestión do espazo etc.
Boxinfo info.png
OVF e un formato aberto estándar para a distribución de máquinas virtuais (virtual appliances) independente do hypervisor a utilizar. Hoxe en día está soportado por gran parte da industria da virtualización, como VMWare, Oracle (Virtualbox) e Citrix XenServer utilizando normalmaente ficheiros coa extensión OVA

Os formatos máis utilizados no mundo Linux, probablemente sexan raw, qcow2 baixo KVM e vhd baixo Xen. A continuación veremos as operacións básicas con este tipo de imaxes:

Creación da Imaxe
  • Qcow2: O seu manexo se realiza mediante a utilidade qemu-img, capaz de manexar e convertir múltiples formatos e o estándar na librería de virtualización libvirt.
    qemu-img create -f qcow2 nomeDisco.qcow  tamano [G|M|K]
    
  • raw:
    qemu-img create -f raw nomeDisco.raw tamano [G|M|K]
    
  • VHD: Para xestionar o formato VHD se utiliza a aplicación vhd-util incluída no paquete blktap-utils.
    vhd-util create -n nomeDisco.vhd -s tamano_en_MB
    
Redimensión da imaxe
  • raw,Qcow2
  qemu-img resize filename size
 ou 
  qemu-img resize filename [+|-]size[K|M|G|T]
  • vhd
  vhd-util resize
Boxinfo info.png
Deben utilizarse as utilidades do sistema de ficheiros para aproveitar o novo espacio engadido, ou para reducir o tamano do sistema de arquivos antes de disminuir o tamano do disco
Creación dunha imaxe Copy On Write (snapshot)
  • Qcow2
   qemu-img create -f qcow2 nomeFicheiro -b nomeFicheiroBase
  • vhd
   vhd-util snapshot -n noemFicheiro -p nomeFicheiroBase
Cambio da imaxe base dunha imaxe Copy On Write
  • Qcow2
   qemu-img rebase -f qcow2 -v nomeNovaBase nomeImaxe
Conversión dunha imaxe Copy On Write (snapshot) nunha imaxe normal
  • Qcow2
  qemu-img convert -f qcow2 -O qcow2 disk newdisk
  • vhd
    vhd-util coalesce -n imaxeCow.vhd -o novaImaxe.vhd -p
Conversión dunha imaxe vhd a raw
qemu-img convert -O raw imaxe.vhd imaxe.raw
'Instalación' dunha imaxe nunha partición ou volume lóxico LVM
cat imaxe.img | pv -brt | dd of=/dev/mapper/volume-imaxe bs=100M

KVM

KVM (Kernel-based Virtual Machine) é unha solución de virtualización hardware (Full-Virtualization ou HVM) para Linux en hardware x86 con extensións de virtualización (Intel VT ou AMD-V). Consiste en un módulo do kernel (kvm.ko) que proporciona a infraestructurá para a virtualización en un módulo específico para a CPU (kvm-intel.ko ou kvm-amd.ko). Os compoñentes do kernel para KVM están incluídos no mesmo dende a versión 2.6.20. A maneira máis cómoda de traballar con KVM é mediante Libvirt e a utilidade gráfica virt-manager, que permite a creación de almacenamento, configuracións de rede, e incluír e quitar hardware ao sistema a virtualizar, ademáis de proporcionar un terminal mediante VNC. Polo tanto, o necesario para traballar con KVM sería:

apt-get install libvirt virt-manager

Migración de Xen a KVM

Si dispoñemos dun disco de máquina virtual Xen nun formato compatible con KVM, para migrar a máquina debemos asegurarnos que a mesma non fai uso de ningún dispositivo propio de Xen. O máis común e importante é o disco fixo. As versións modernas de Debian montan os discos por UUID, pero si non é así, é necesario modificar os nomes dos dispositivos en /etc/fstab de modo que teñan a forma vda en lugar de xvda, ou ben modificar de modo apropiado a configuración de KVM/libvirt. De xeito análogo é necesario modificar o ficheiro /boot/grub/device.map. Tamén pode ser necesaria a modificación ou eliminación do parámetro console en /boot/grub/grub.cfg e comentala en /etc/inittab na linea que comeza con co:.


Para facer estas modificacións é necesario montar o disco virtual, que posiblemente esté particionado e incluso utilizando LVM. Para crear os dispositivos necesarios para acceder ás particións utilizaremos a ferramenta kpartx.

kpartx -a Imaxe.raw -v

Si estamos a utilizar LVM, necesitaremos crear os dispositivos axeitados:

 vgscan 
 vgchange -ay GrupoLVM

Unha vez feito esto podremos montar as particións e modificar o seu contido como sexa necesario.

Unha referencia completa podedes atopala aquí

Xen

Xen é un hypervisor Type 1 ou bare-metal, polo que se carga directamente sobre o hardware antes de cargar o sistema operativo que utilizaremos para manexar os sistemas virtualizados, que normalmente e un Linux. Este sistema gozará de privilexios especiais de acceso aos recursos e se utilizará para xestionar o sistema, pero xa funcionará virtualizado, é o Dom-0. Os sistemas virtualizados funcionarán no que se coñece como Dom-U.

Xen actualmente se explota de xeito comercial a través da empresa Citrix, que comercializa a súa solución de virtualización XenServer de características e funcionalidade moi similares ao VMWare ESXi.

Para a creación e control das máquinas virtualizadas, Xen dispon de diferentes tipos de utilidades de uso excluínte (toolstacks), sendo os máis importantes xm (o sistema por defecto) e xcp-xapi (o utilizado por Citrix XenServer). Nos centraremos en xm.

LXC

Os LinuX Containers (LXC) son unha tecnoloxía de virtualización "lixeira". Son máis como un "chroot" ampliado que un sistema de virtualización como Qemu ou VMWare, porque non emulan nada do hardware e porque comparten o mesmo sistema operativo que o host. Tecnoloxías similares existentes dende hai tempo son as Zones de Solaris, ou os Jails de BSD.

Linux vServer e OpenVz son implementacións de Containers para Linux, das que se tomaron características para a implementación de LXC, incluída na maioría de distribucións.

Instalación

LXC fai uso de información do sistema para aillar e xestionar os recursos otorgados aos contenedores. Esa información atópase nun sistema de ficheiros virtual chamado cgroup, que é necesario facer dispoñible montándoo no sistema de arquivos do Host. Polo tanto a primeira tarefa a realizar será modificar /etc/fstab para incluir a montaxe de cgroup incluindo a liña:

cgroup  /sys/fs/cgroup  cgroup  defaults  0   0

Tamén podemos montalo de xeito manual escribindo:

mount cgroup -t cgroup  /sys/fs/cgroup

O sistema de containers LXC se instala en Debian mediante o paquete lxc, e e desexable debootstrap para a instalación de sistemas Debian, e rsync para as instalacións, polo tanto:

apt-get install lxc debootstrap rsync

Se nos preguntará, entre outras cousas, o lugar do sistema onde se instalarán os containers. O valor por defecto é /var/lib/lxc, e se soporta a instalación no sistema de arquivos ou en sistemas LVM ou BTRFS, sendo estes últimos máis prácticos de xestionar gracias ao seu soporte de snapshots que permiten unha replicación rápida dos containers.

Para instalar un container, o máis fácil é o uso dunha das plantillas suministradas en /usr/share/lxc/templates. Deste xeito, un Container con Debian (en calqueira das súas versións) se instalaría con:

lxc-create -t debian -n <nome_container>
Boxinfo info.png
E posible o uso de plantillas de OpenVZ.

Unha vez instalado o container, podemos ver en /var/lib/lxc/nome_container un directorio rootfs e un ficheiro config. rootfs conten o sistema de arquivos do novo container, mentras que config almacena a configuración para o container. As opcións de configuración poden consultarse con man lxc.conf.

Boxinfo info.png
En Debian Wheezy existe un problema coas plantillas de Debian, que non producen containers funcionais polo tanto é recomendable a instalación de LXC a partir de Debian Jessie.

Os parámetros de configuración do Container están no ficheiro config dentro do seu directorio. Pódese obter información sobre a configuración con man lxc.conf. Por exemplo, unha configuración común para a rede podería ser:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lan
lxc.network.hwaddr = 00:FF:AA:00:00:01
lxc.network.ipv4 = 192.168.122.110/24
lxc.network.ipv4.gateway=192.168.122.1

Operación

Para iniciar a execución do container:

lxc-start -n mycontainer -d

Conseguir unha consola (para saír da consola ctrl+a q):

lxc-console -n mycontainer

Apagar un Container:

lxc-shutdown -n mycontainer

Obter información sobre un Container:

lxc-info -n mycontainer
Boxinfo info.png
En xeran os comandos de control e xestión dos containers comenzan por lxc-, e se poden consultar con man

LibVirt

LibVirt é un conxunto de utilidades para interactuar coas capacidades de virtualización de Linux (e outros sistemas operativos). Ofrece unha API de programación en C e un conxunto de enlaces para o uso de moitas outras linguaxes. LibVirt soporta un gran conxunto de hypervisors como KVM/QEMU,Xen, LXC, OpenVZ, User Mode Linux, VirtualBox, VMware ESX GSX Workstation e Player, Microsoft Hyper-V, IBM PowerVM e Parallels e proporciona xestión remota dos hypervisors utilizando cifrado TLS e certificados x509, autenticación Kerberos e SASL e xestión das máquinas virtuais, redes virtuais e almacenamento virtual.


Existen numerosas interfaces de xestión de máquinas virtuais e infraestructuras de Cloud Computing construidas en torno a Libvirt, podendo destacar por exemplo Archipel ou virt-manager. Tamén se proporcionan utilidades de liña de comandos como por exemplo virsh, que nos permite xestionar por completo as máquinas virtuais.