https://manuais.iessanclemente.net/index.php?title=LABORATORIO_DE_MVs&feed=atom&action=historyLABORATORIO DE MVs - Historial de revisiones2024-03-29T05:23:31ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=LABORATORIO_DE_MVs&diff=63174&oldid=prevJavierfp: /* Creación de MV base Windows 10 */2017-11-14T18:35:35Z<p><span dir="auto"><span class="autocomment">Creación de MV base Windows 10</span></span></p>
<p><b>Página nueva</b></p><div>== Introducción ==<br />
<br />
Vamos a utilizar la tecnología de virtualización Qemu/KVM para implantar un laboratorio de trabajo con Máquinas Virtuales. Para ello crearemos una infraestructura que luego podremos utilizar para modificar y adaptar el laboratorio a nuestros requisitos.<br />
<br />
La práctica consiste en dos procedimientos<br />
<br />
* Creación de bases para MV y clones enlazados<br />
* Creación de Networks de tipo routed al que podremos conectar las MVs, de modo que habilitamos un mecanismo para separar las MVs en distintas redes, con posibilidad de interconexión<br />
<br />
== Creación de Network para Laboratorio ==<br />
<br />
Crearemos un elemento de tipo NAT Network a la que se conectarán todas las MV que crearemos.<br />
<br />
Vamos a tomar como referencia el archivo de definición de la Network default, para ello volcaremos a un archivo su contenido, lo editaremos y por último crearemos la nueva Network.<br />
<br />
<pre>virsh net-dumpxml default > labnet.xml</pre><br />
<br />
Editamos el archivo resultante para que contenga los siguiente<br />
<br />
<pre><br />
<network><br />
<name>labnet</name><br />
<uuid>5ad8ead8-c62c-11e7-9ba3-c7038bd93603</uuid><br />
<forward mode='route'/><br />
<bridge name='virbr2' stp='on' delay='0'/><br />
<mac address='de:ad:be:ef:e3:07'/><br />
<domain name='labnet'/><br />
<ip address='192.168.10.1' netmask='255.255.255.0'><br />
<dhcp><br />
<range start='192.168.10.100' end='192.168.10.254'/><br />
</dhcp><br />
</ip><br />
</network><br />
</pre><br />
<br />
<br />
Los datos correspondientes al '''uuid''', que debe de ser único, lo generamos con<br />
<br />
<pre>uuid</pre><br />
<br />
La dirección '''MAC''' del dispositivo vinculado a la Network, virbr2, lo generamos con el comando<br />
<br />
<pre>printf 'DE:AD:BE:EF:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256))</pre><br />
<br />
<br />
Los otros elementos a definir serían* '''name''': el nombre de la Network<br />
* '''forward''': indica el modo de reenvío, en este caso será una '''red enrutada (routed mode)''', de modo que podremos comunicar nuestras MVs con otras conectadas a otra Network que opere en ese modo.<br />
* '''ip''' address<br />
* '''rango DHCP''' de direcciones asignables<br />
<br />
Una vez editados los cambios en el archivo ejecutamos<br />
<br />
<pre>virsh net-define labnet.xml</pre><br />
<br />
<br />
Por último activamos la Network y la definimos como de activación automática al iniciar el sistema<br />
<br />
<pre><br />
virsh net-start labnet<br />
virsh net-autostart labnet<br />
</pre><br />
<br />
== Creación de las MV base ==<br />
<br />
=== Creación de MV base Debian 9 ===<br />
<br />
Usaremos la utilidad '''virt-install'''<br />
<br />
<pre>virt-install --name lab-debian9-base --memory 512 --vcpus 1 --disk size=5 --cdrom /home/javier/Descargas/debian-9.2.1-amd64-DVD-1.iso --os-variant debian9 --network network=labnet</pre><br />
<br />
<br />
Las opciones del comando son autoexplicativas, notar que se ha conectado el domain (MV) a la network “labnet” que creamos en el apartado anterior.<br />
<br />
Seguimos el proceso de instalación hasta el final, podemos ver el nuevo domain creado con el comando<br />
<br />
<pre>virsh list</pre><br />
<br />
<pre><br />
Id Name State<br />
<nowiki>----------------------------------------------------</nowiki><br />
2 lab-debian9-base running<br />
</pre><br />
<br />
<br />
=== Creación de MV base Windows 10 ===<br />
<br />
Seguiremos los pasos anteriores pero ahora para la instalación de un domain sobre Windows 10. Usaremos un comando diferente al anterior, esto se debe a que vamos a utilizar drivers paravirtualizados, que aumentarán el rendimiento de entrada/salida para dispositivos de bloques y tarjeta de red.<br />
<br />
Podremos descargar la iso con los Driver paravirtualizados para Windows desde:<br />
<br />
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso<br />
<br />
En primer lugar crearemos la imagen para el volumen del disco virtual<br />
<br />
<pre>qemu-img create -f qcow2 lab-win10-base.qcow2 20G</pre><br />
<br />
Ahora lanzaremos el comando para la creación del domain, es decir, para crear la MV<br />
<br />
<pre><br />
qemu-system-x86_64 --enable-kvm -smp 1 -m 1512 -cpu host -vga qxl -drive file=/home/javier/Descargas/es_windows_10_multi-edition_vl_version_1709_updated_sept_2017_x64_dvd_100090786.iso,index=1,media=cdrom -drive file=/home/javier/Descargas/virtio-win-0.1.141.iso,index=2,media=cdrom -drive file=/var/lib/libvirt/images/lab-win10-base.qcow2,if=virtio -net nic,model=virtio,vlan=0,name=labnet -net user<br />
</pre><br />
<br />
Los parámetro del comando indican<br />
<br />
* kvm está activado<br />
* un procesador<br />
* 1512 MB de RAM<br />
* dispositivo gráfico vga qxl<br />
* dispositivo cdrom conectado a la iso de instalación de windows<br />
* dispositivo cdrom conectado a la iso que contiene los drivers paravirtualizados para windows<br />
* dispositivo de tipo disco asociado a la imagen creada en el comando qemu-img anterior<br />
* tarjeta de red paravirtualizada<br />
<br />
Durante el proceso de instalación que desencadena el comando anterior veremos como, en el punto en el que se selecciona el disco para la instalación no aparece ningún dispositivo en la lista. Esto se debe a que hemos definido el dispositivo de almacenamiento en el comando anterior de tipo paravirtualizado, es decir “virtio”. Por defecto el instalador no trae soporte para ese interfaz, por tanto deberemos cargar los correspondientes controladores de dispositivos desde el cdrom adicional que habíamos añadido en las opciones de qemu-system.<br />
<br />
Llegados a esa pantalla seleccionamos la opción de añadir controladores de dispositivos adicionales, añadimos los siguientes desde unidad de cdrom a la que está conectado la iso de drivers paravirtualizados<br />
<br />
* '''Desde viostor'''->amd64: Drivers paravirtualizados para el disco<br />
* '''Desde Net/KVM'''->amd64: Drivers paravirtualizados para la tarjeta de red<br />
<br />
Tras añadir estos dos controladores seguimos con la instalación de Windows 10 del modo habitual<br />
<br />
Al finalizar la instalación cerramos la MV y ejecutamos:<br />
<br />
<pre>virt-install --name lab-win10-base --memory 1512 --vcpus 1 --disk path=/var/lib/libvirt/images/lab-win10-base.qcow2,bus=virtio --network model=virtio,network=labnet --os-variant win10 --import</pre><br />
<br />
<br />
El comando anterior crea un domain con virt-install, que usará la imagen creada con el comando qemu-system anterior como medio de almacenamiento de la MV, que usaba el driver virtio, así como una interfaz de red, también operando en virtio, conectada a la NAT Network labnet.<br />
<br />
== Creación de las MV de trabajo ==<br />
<br />
=== Creación de imagen enlazada sobre la imagen base Debian 9 ===<br />
<br />
Vamos a crear una imagen enlazada a la imagen creada durante el proceso de instalación de la MV para debian9<br />
<br />
<pre>qemu-img create -f qcow2 -b /var/lib/libvirt/images/lab-debian9-base.qcow2 /var/lib/libvirt/images/lab-debian9-mv1.qcow2</pre><br />
<br />
<br />
Este comando crea la nueva imagen, tomando como base la imagen de la máquina creada anteriormente, de este modo obtenemos un “clon enlazado” a esa imagen. '''lab-debian9-mv1.qcow2''' almacenará solamente las diferencias respecto a la imagen de base '''lab-debian9-base.qcow2'''<br />
<br />
Veamos los datos de la imagen<br />
<br />
<pre>qemu-img info /var/lib/libvirt/images/lab-debian9-mv1.qcow2</pre><br />
<br />
Muestra<br />
<br />
<pre><br />
image: /var/lib/libvirt/images/lab-debian9-mv1.qcow2<br />
file format: qcow2<br />
virtual size: 5.0G (5368709120 bytes)<br />
disk size: 196K<br />
cluster_size: 65536<br />
backing file: /var/lib/libvirt/images/lab-debian9-base.qcow2<br />
Format specific information:<br />
compat: 1.1<br />
lazy refcounts: false<br />
refcount bits: 16<br />
corrupt: false<br />
</pre><br />
<br />
=== Creación de domain de trabajo para Debian9 ===<br />
<br />
Vamos a crear un domain, MV, de trabajo sobre la imagen que acabamos de crear. Para ello usaremos virt-clone<br />
<br />
<pre>virt-clone --original=lab-debian9-base --name=lab-debian9-mv1 --preserve-data --file=/var/lib/libvirt/images/lab-debian9-mv1.qcow2</pre><br />
<br />
=== Creación de imagen enlazada sobre la imagen base Windows10 ===<br />
<br />
De modo análogo a como hemos procedido con la imagen para debian 9 generamos el archivo de imagen enlazado a la imagen de base para windows 10<br />
<br />
<pre>qemu-img create -f qcow2 -b /var/lib/libvirt/images/lab-win10-base.qcow2 /var/lib/libvirt/images/lab-win10-mv1.qcow2</pre><br />
<br />
Veamos los datos de la imagen<br />
<br />
<pre>qemu-img info /var/lib/libvirt/images/lab-win10-mv1.qcow2</pre><br />
<br />
Muestra<br />
<br />
<pre><br />
image: /var/lib/libvirt/images/lab-win10-mv1.qcow2<br />
file format: qcow2<br />
virtual size: 20G (21474836480 bytes)<br />
disk size: 196K<br />
cluster_size: 65536<br />
backing file: /var/lib/libvirt/images/lab-win10-base.qcow2<br />
Format specific information:<br />
compat: 1.1<br />
lazy refcounts: false<br />
refcount bits: 16<br />
corrupt: false<br />
</pre><br />
<br />
=== Creación de domain de trabajo para Windows10 ===<br />
<br />
Creamos el domain de trabajo para Windows 10 basado en la imagen que acabamos de crear<br />
<br />
<pre>virt-clone --original=lab-win10-base --name=lab-win10-mv1 --preserve-data --file=/var/lib/libvirt/images/lab-win10-mv1.qcow2</pre><br />
<br />
Veamos un listado de los domains creados hasta el momento<br />
<br />
<pre>virsh list --all</pre><br />
<br />
Mostraría<br />
<br />
<pre><br />
Id Name State<br />
<nowiki>----------------------------------------------------</nowiki><br />
- lab-debian9-base shut off<br />
- lab-debian9-mv1 shut off<br />
- lab-win10-base shut off<br />
- lab-win10-mv1 shut off<br />
</pre><br />
<br />
== Creación de una segunda Network en modo Routed ==<br />
<br />
Siguiendo un procedimiento similar al explicado en la sección “Creación de Network para laboratorio”, vamos a crear una segunda Network de nombre '''labnet2''', cuyo archivo de configuración labnet2.xml será el siguiente<br />
<br />
<pre><br />
<network><br />
<name>labnet2</name><br />
<uuid>85e79c24-b23f-4b4c-bc4f-35e07b887c37</uuid><br />
<forward mode='route'/><br />
<bridge name='virbr3' stp='on' delay='0'/><br />
<mac address='52:54:00:20:39:60'/><br />
<domain name='labnet2'/><br />
<ip address='192.168.11.1' netmask='255.255.255.0'><br />
<dhcp><br />
<range start='192.168.11.128' end='192.168.11.254'/><br />
</dhcp><br />
</ip><br />
</network><br />
</pre><br />
<br />
Una vez editado el archivo creamos el objeto Network<br />
<br />
<pre>virsh net-define labnet2.xml</pre><br />
<br />
Por último activamos la Network y la definimos como de activación automática al iniciar el sistema<br />
<br />
<pre><br />
virsh net-start labnet2<br />
virsh net-autostart labnet2<br />
</pre><br />
<br />
== Creación de domain en la nueva Network ==<br />
<br />
Vamos a continuación a crear un nuevo domain basado en la imagen lab-debian9-base conectado a la Network labnet2.<br />
<br />
Creamos en primer lugar la imagen para la MV<br />
<br />
<pre>qemu-img create -f qcow2 -b /var/lib/libvirt/images/lab-debian9-base.qcow2 /var/lib/libvirt/images/lab-debian9-mv2.qcow2</pre><br />
<br />
A continuación creamos el domain con el comando virt-install<br />
<br />
<pre>virt-install --name lab-debian9-mv2 --memory 512 --vcpus 1 --disk path=/var/lib/libvirt/images/lab-debian9-mv2.qcow2,bus=virtio --network model=virtio,network=labnet2 --os-variant debian9 --import</pre><br />
<br />
Como puede verse en el comando anterior, creamos el domain con las características siguientes<br />
<br />
* Nombre lab-debian9-mv2<br />
* 512 MB de RAM<br />
* 1 CPU virtual<br />
* Como volumen de disco usaremos la imagen creada anteriormente. El dispositivo será gestionado con driver virtio<br />
* Conectados el domain a la Network labnet2. El dispositivo será gestionado con driver virtio<br />
<br />
== Comunicación entre las Networks ==<br />
<br />
=== Activación del reenvío IPv4 en el Host ===<br />
<br />
Para que las 2 Networks, que operan en modo Routed, puedan enviar tráfico entre sí es preciso activar en el Host el reenvío IPv4 en el Kernel. Para ello editamos el archivo '''/etc/sysctl.conf''', descomentando la línea<br />
<br />
'''net.ipv4.ip_forward=1'''<br />
<br />
A continuación cargamos en el kernel los parámetros del archivo<br />
<br />
<pre>sysctl -p /etc/sysctl.conf</pre><br />
<br />
=== Inclusión de regla NAT en iptables para el enmascarado del tráfico saliente ===<br />
<br />
Con la configuración de reenvío del Host activada podremos enviar paquetes entre los domains conectados a labnet y labnet2. Sin embargo para utilizar la interfaz conectada públicamente, a “Internet”, del Host, es preciso definir reglas iptables de tipo NAT para la traducción automática de las direcciones IP.<br />
<br />
En los siguientes comandos se supone que el dispositivo de red, en el Host, con salida pública es '''wlp108s0''', esto puede cambiar en cada configuración, para consultar los dispositivos, ejecutamos en el Host<br />
<br />
<pre>ip link show</pre><br />
<br />
Para la salida del tráfico desde la Network '''labnet'''<br />
<br />
<pre>iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d 0/0 -o wlp108s0 -j MASQUERADE</pre><br />
<br />
Para la salida del tráfico desde la Network '''labnet2'''<br />
<br />
<pre>iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -d 0/0 -o wlp108s0 -j MASQUERADE</pre><br />
<br />
=== Pasos previos al test de conectividad ===<br />
<br />
Tenemos por tanto el siguiente escenario<br />
<br />
'''lab-debian9-mv1'''<br />
<br />
* conectada a la Network labnet<br />
* IP en el rango 192.168.10.0<br />
<br />
'''lab-debian9-mv2'''<br />
<br />
* conectada a Network labnet2<br />
* IP en el rango 192.168.11.0<br />
<br />
Determinamos el dispositivo Switch Virtual de labnet<br />
<br />
<pre>virsh net-info labnet</pre><br />
<br />
Arroja en mi caso la salida:<br />
<br />
<pre><br />
Name: labnet<br />
UUID: 5ad8ead8-c62c-11e7-9ba3-c7038bd93603<br />
Active: yes<br />
Persistent: yes<br />
Autostart: yes<br />
Bridge: virbr2<br />
</pre><br />
<br />
Podemos ver que el Bridge asociado es virbr2, vamos a determinar la dirección IP del dispositivo en el Host<br />
<br />
<pre>ip addr show virbr2</pre><br />
<br />
<pre><br />
virbr2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000<br />
link/ether de:ad:be:ef:e3:07 brd ff:ff:ff:ff:ff:ff<br />
inet 192.168.10.1/24 brd 192.168.10.255 scope global virbr2<br />
valid_lft forever preferred_lft forever<br />
</pre><br />
<br />
En la salida anterior vemos que efectivamente para la Network '''labnet''' la subred asociada es '''192.168.10.0''', y el dispositivo Switch Virtual asociado en el Host, '''virbr2''', tiene asociada la IP '''192.168.10.1''', es decir la IP más baja en ese rango.<br />
<br />
Si repetimos los pasos anteriores para '''labnet2''' concluiremos que el Bridge asociado es '''virbr3''' y tiene asociado el rango '''192.168.11.0''', con IP para el Bridge en el host '''192.168.11.1'''<br />
<br />
A continuación iniciamos las MV<br />
<br />
<pre><br />
virsh start lab-debian9-mv1<br />
virsh start lab-debian9-mv2<br />
</pre><br />
<br />
Determinamos las concesiones DHCP de ambas Network para conocer las direcciones IP de las MV iniciadas<br />
<br />
<pre>virsh net-dhcp-leases labnet</pre><br />
<br />
<pre><br />
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID<br />
<nowiki>-------------------------------------------------------------------------------------------------------------------</nowiki><br />
2017-11-12 17:05:29 52:54:00:ff:a7:46 ipv4 192.168.10.217/24 debian -<br />
</pre><br />
<br />
<pre>virsh net-dhcp-leases labnet2</pre><br />
<br />
<pre><br />
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID<br />
<nowiki>-------------------------------------------------------------------------------------------------------------------</nowiki><br />
2017-11-12 17:05:32 52:54:00:5a:42:f0 ipv4 192.168.11.171/24 debian -<br />
</pre><br />
<br />
En conclusión<br />
<br />
* '''lab-debian9-mv1''' tiene asociada la IP '''192.168.10.217'''<br />
* '''lab-debian9-mv2''' tiene asociada la IP '''192.168.11.171'''<br />
<br />
=== Test de conectividad ===<br />
<br />
'''Desde lab-debian9-mv1'''<br />
<br />
Efectuamos un test de conectividad a lab-debian9-mv2<br />
<br />
<pre>ping -c2 192.168.11.171</pre><br />
<br />
La salida debería mostrar las respuestas desde el otro guest. Debería haber respuesta por parte del otro guest pues en un paso anterior configuramos el host para activar el reenvío, forward, de paquetes IPv4<br />
<br />
Efectuamos un test de conectividad público<br />
<br />
<pre>ping -c2 google.es</pre><br />
<br />
Debería haber respuesta por parte del host público debido a que anteriormente configuramos la NAT en el host para la subred asociada a labnet<br />
<br />
'''Desde lab-debian9-mv2'''<br />
<br />
Efectuamos un test de conectividad a lab-debian9-mv1<br />
<br />
<pre>ping -c2 192.168.10.217</pre><br />
<br />
La salida debería mostrar las respuestas desde el otro guest. Debería haber respuesta por parte del otro guest pues en un paso anterior configuramos el host para activar el reenvío, forward, de paquetes IPv4<br />
<br />
Efectuamos un test de conectividad público<br />
<br />
<pre>ping -c2 google.es</pre><br />
<br />
<br />
Debería haber respuesta por parte del host público debido a que anteriormente configuramos la NAT en el host para la subred asociada a labnet2<br />
<br />
[[ Virtualización_en_GNU/Linux_con_KVM | Volver ]]<br />
<br />
JavierFP 16:47 12 nov 2017 (CET)</div>Javierfp