{"id":812,"date":"2021-08-13T19:36:00","date_gmt":"2021-08-13T17:36:00","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=812"},"modified":"2021-08-06T19:37:32","modified_gmt":"2021-08-06T17:37:32","slug":"usando-qemu-kvm-con-libvirt-3-x-redes-virtuales","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2021\/08\/13\/usando-qemu-kvm-con-libvirt-3-x-redes-virtuales\/","title":{"rendered":"Usando QEMU\/KVM con LibVirt (3\/6) Redes Virtuales"},"content":{"rendered":"\n<p>Los ficheros de configuraci\u00f3n de las redes los encontraremos en:<\/p>\n\n\n\n<p><em>etc<\/em>\/libvirt\/qemu\/networks\/*.xml<\/p>\n\n\n\n<p>El componete principal del las redes libvirt son los \u201cSwitch-Virtuales\u201d, conmutador de red virtual, al que las maquinas se conectaran a los NIC (vNIC) de estas.<\/p>\n\n\n\n<div class=\"wp-block-image is-style-rounded\"><figure class=\"alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"529\" height=\"318\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image.png\" alt=\"\" class=\"wp-image-846\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image.png 529w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-300x180.png 300w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/figure><\/div>\n\n\n\n<p>Si realizamos un <em>ifconfig<\/em> veremos que tenemos un dispositivo <em>virbrX<\/em> virtual que creemos y tengamos activa , esto son los Switch-Virtuales, y un dispositivo (vnetX) por cada vNIC que este levantado en las maquinas virtuales. Aunque esto nos los directamente <em>virt-manager<\/em>, mas adelante veremos exactamente como crear las redes, en la opci\u00f3n <strong>Editar\u2192Detalles_Conexi\u00f3n<\/strong> dentro de la carpeta \u201cRedes Virtuales\u201d.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-1.png\" alt=\"\" class=\"wp-image-847\" width=\"422\" height=\"168\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-1.png 733w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-1-300x120.png 300w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/figure><\/div>\n\n\n\n<p>Desde comando podremos crear estos dispositivos de la siguiente forma<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">brctl addbr \/\/ Switch Virtuales\n\/\/ Los vNICs tipos TIN\/TAP\nip tuntap add dev mode tap\nbrctl addif<\/pre>\n\n\n\n<p>Los diferentes tipos de redes que podremos configurar son:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>NAT<\/strong>: Las maquinas virtuales pueden comunicarse con el exterior, pero el exterior no con ellas y lo realizan mediante una interfaz de red puente.<\/li><li><strong>Enrutada<\/strong>: Permiten la conexi\u00f3n de las maquinas virtuales directamente a la red f\u00edsica<\/li><li><strong>Insolated (Aislada)<\/strong>: Nos permite crear una red privada entre el hipervisor y las maquinas virtuales<\/li><li><strong>SR-IOV<\/strong>: Dispositivo PCI directamente, logrando una red nativa en la maquina virtual.<\/li><li><strong>MacVtap<\/strong> Se utiliza para permitir que usuarios de la red Local se conecten a las maquinas virtuales, pero no deseamos crear un puente.<\/li><li><strong>Puente:<\/strong> Una red con puente comparte un dispositivo Ethernet real con las m\u00e1quinas virtuales (VM), estas maquinas tendr\u00e1n una IP de la LAN como si de una maquina f\u00edsica se tratara.<\/li><\/ol>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-3.png\" alt=\"\" class=\"wp-image-849\" width=\"424\" height=\"281\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-3.png 690w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-3-300x199.png 300w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><\/figure><\/div>\n\n\n\n<p><strong>1.- Modo NAT<\/strong><\/p>\n\n\n\n<p>Este es el modo por defectos que se crea y es el m\u00e1s sencillo es el mejor a utilizar para la primera configuraci\u00f3n de nuestras maquinas ya que dispone de salida a Internet.<\/p>\n\n\n\n<p>En este caso las maquinas invitadas se conectan al Switch-Virtual (virbrX) y este funciona en modo NAT de forma que se utiliza la IP del anfitri\u00f3n para conectarse al exterior.<\/p>\n\n\n\n<p>En este modo tendremos las siguientes conexiones:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Conectarnos a servidores externos mediante NAT, conexi\u00f3n saliente.<\/li><li>Conectarnos desde nuestra maquina anfitriona a la invitada.<\/li><li>Conexi\u00f3n desde otras maquinas invitadas de la misma red.<\/li><li>Cualquier otra conexi\u00f3n procedente del exterior no se podra conectar a nuestra maquina privada.<\/li><\/ul>\n\n\n\n<p>Los Switch-Virtuales disponen de un servidor DHCP (dnsmasq) que nos permite asignar Ips, dentro del rango que configuremos, a las maquinas invitadas que se conecten a esa red de forma autom\u00e1tica.<\/p>\n\n\n\n<p>Para cada red se habilita una instancia de <em>dnsmasq<\/em> de forma que solo podr\u00e1n acceder a ella las maquinas invitadas de esa red.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-4.png\" alt=\"\" class=\"wp-image-850\" width=\"282\" height=\"322\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-4.png 525w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-4-263x300.png 263w\" sizes=\"auto, (max-width: 282px) 100vw, 282px\" \/><\/figure><\/div>\n\n\n\n<p>Al crear una red NAT nos solicitara:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Nombre de la red<\/li><li>Modo \u201cNAT\u201d<\/li><li>Dispositivo puente de acceso al exterior<ul><li>Interfaz f\u00edsica<\/li><li>Interfaz agregados \u201cBonding\u201d<\/li><li>VLAN<\/li><\/ul><\/li><li><strong>O<\/strong> cualquier dispositivo (utilizado en nuestro NAT default)<\/li><li>Configuraci\u00f3n IPv4 e IPv6<ul><li>RED<\/li><li>Si deseamos tener DHCP y la configuraci\u00f3n de este para definir el rango.<\/li><\/ul><\/li><li>Nombre de dominio<\/li><\/ul>\n\n\n\n<p>Desde linea de comandos podremos ejecutar <em>virsh<\/em> con los siguientes par\u00e1metros:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>net-list &#8211; -all \/\/ Listado de las redes configuradas y sus estado.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>net-dumpxml default \/\/Volcamos la configuraci\u00f3n XML de nuestra red por defecto.<\/li><li>net-edit &lt;red&gt; Para editar la configuraci\u00f3n, desde virt-manager tambi\u00e9n se puede en modo texto.<\/li><li>net-info &lt;red&gt; \/Informaci\u00f3n de la red. Podemos ver el dispositivo de switch-virtual que utiliza<\/li><li>net-start, net-destroy, net-autostart &lt;red&gt;<\/li><\/ul>\n\n\n\n<p>Tambi\u00e9n podemos utilizar otros comandos del sistema para obtener informaci\u00f3n de los interfaz como <em>ifconfig<\/em> o <em>brctl show<\/em> que nos informara de los Switch-Virtuales y los interfaz de vNIC que est\u00e1n conectados a estos.<\/p>\n\n\n\n<p>Al crear la red <em>libvirt<\/em> creara reglas <em>iptables<\/em> para permitir que el trafico al dispositivo virtual virbrX, los chains INPUT, OUTPUT, FORWARD y POSTROUTING, y habilitara <em>ip_forward<\/em> en caso de que no se habilite o alguna aplicaci\u00f3n los inhaboilite lo podemos activar modificando el fichero \u201c\/etc\/sysctl.conf\u201d poniendo la linea <em><strong>net.ipv4.ip_forward=1<\/strong><\/em>.<\/p>\n\n\n\n<p>Se comento al principio que una maquina externa no podr\u00eda conectarse a nuestra maquina invitada, es decir no podremos tener un servicio en nuestra invitada, pero eso no es del todo cierto ya que podemos configurar reglas de <em>iptables<\/em> que nos permitan reenviar conexiones entrantes (del exterior) a nuestra maquina anfitriona por un puerto a un puerto de nuestra maquina invitada.<\/p>\n\n\n\n<p>Para realizar esto editaremos o crearemos el archivo \u201c\/etc\/libvirt\/hooks\/qemu\u201d con permiso de ejecuci\u00f3n (es un script) con el siguiente bloque de c\u00f3digo para cada redirecci\u00f3n que se desee realizar.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n# IMPORTANT: Change the \"VM NAME\" string to match your actual VM Name.\n# In order to create rules to other VMs, just duplicate the below block and configure\n# it accordingly.\nIf [ \"${1}\" = \"&lt;NOMBRE_MAQUINA&gt;\" ]; then\n   IP_INVITADA=&lt;IP MAQUINA INVITADA&gt;\n   PUERTO_INVITADA=&lt;PUERTO INVITADA DE RECEPCI\u00d3N&gt;\n   PUERTO_ANFITRION=&lt;PUERTO ANFITRION A RENVIAR&gt;\n\n   if [ \"${2}\" = \"stopped\" ] || [ \"${2}\" = \"reconnect\" ]; then\n\t\/sbin\/iptables -D FORWARD -o &lt;INTERFAZ SwitchVirtual&gt; -p tcp -d $IP_INVITADA --dport $PUERTO_INVITADA -j ACCEPT\n\t\/sbin\/iptables -t nat -D PREROUTING -p tcp --dport $PUERTO_ANFITRION -j DNAT --to $IP_INVITADA:$PUERTO_INVITADA\n   fi\n   if [ \"${2}\" = \"start\" ] || [ \"${2}\" = \"reconnect\" ]; then\n\t\/sbin\/iptables -I FORWARD -o &lt;INTERFAZ SwitchVirtual&gt; -p tcp -d $IP_INVITADA --dport $PUERTO_INVITADA -j ACCEPT\n\t\/sbin\/iptables -t nat -I PREROUTING -p tcp --dport $PUERTO_ANFITRION -j DNAT --to $IP_INVITADA:$PUERTO_INVITADA\n   fi\nfi<\/pre>\n\n\n\n<p><strong>2.- Modo Enrutado<\/strong><\/p>\n\n\n\n<p>En este modo similar al anterior y tambi\u00e9n utiliza el Switch virtual pero en este caso este esta conectado a la LAN del anfitri\u00f3n sin realizar NAT, de esta forma las maquinas virtuales invitadas estar\u00e1n en una subred del anfitri\u00f3n pero no ser\u00e1n vista por maquinas de la red del anfitri\u00f3n (estas no conocen la subred) por lo tanto si queremos que las maquinas de nuestra red local (red del anfitri\u00f3n) vean a las maquinas virtuales sera necesario configurar reglas en los routers en la red f\u00edsica para que estas conozcan la subred.<\/p>\n\n\n\n<p><strong>3.-Modo Insolated (Red Cerrada)<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-5.png\" alt=\"\" class=\"wp-image-851\" width=\"181\" height=\"98\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-5.png 437w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/08\/image-5-300x162.png 300w\" sizes=\"auto, (max-width: 181px) 100vw, 181px\" \/><\/figure><\/div>\n\n\n\n<p>Este modo lo utilizaremos para que solo se vean las maquinas virtuales configuradas en esta red, por lo tanto no tendremos acceso al exterior.<\/p>\n\n\n\n<p>Como es l\u00f3gico en este modo no nos solicita el dispositivo ya que todo se queda interno, lo que si generara en el anfitri\u00f3n un dispositivo conectado a esta red.<\/p>\n\n\n\n<p><strong>4.- Modo Puente<\/strong><\/p>\n\n\n\n<p>Las m\u00e1quinas virtuales invitadas aparecen dentro de la misma subred que la m\u00e1quina f\u00edsica del host y la m\u00e1quinas f\u00edsicas en la misma red f\u00edsica son conscientes de las m\u00e1quinas virtuales y pueden acceder a ellas, modo puente opera en Capa 2 del modelo de red OSI.<\/p>\n\n\n\n<p>5.- <strong>MacVTAP<\/strong><\/p>\n\n\n\n<p>El controlador macvtap nos permite conectar la NIC del invitado directamente a una interfaz f\u00edsica espec\u00edfica de la m\u00e1quina host.<\/p>\n\n\n\n<p>La conexi\u00f3n Macvtap tiene los siguientes modos: VEPA, puente, privado, passthrouth.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los ficheros de configuraci\u00f3n de las redes los encontraremos en: etc\/libvirt\/qemu\/networks\/*.xml El componete principal del las redes libvirt son los \u201cSwitch-Virtuales\u201d, conmutador de red virtual, al que las maquinas se conectaran a los NIC (vNIC) de estas. Si realizamos un ifconfig veremos que tenemos un dispositivo virbrX virtual que creemos y tengamos activa , esto [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":849,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[155,65],"tags":[156,157,152,42],"class_list":["post-812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-qemu-kvm-virtualizacion","category-virtualizacion","tag-brtcl","tag-iptables","tag-libvirt","tag-nat"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=812"}],"version-history":[{"count":5,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/812\/revisions"}],"predecessor-version":[{"id":865,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/812\/revisions\/865"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/849"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}