Cómo usar redes puentes con libvirt y kvm

Cómo usar redes puentes con libvirt y kvm

Libvirt es un software gratuito y de código abierto que proporciona API para administrar varios aspectos de las máquinas virtuales. En Linux se usa comúnmente junto con KVM y QEMU. Entre otras cosas, Libvirt se usa para crear y administrar redes virtuales. La red predeterminada creada cuando se usa libvirt se llama "predeterminado" y usa Nat (Traducción de direcciones de red) y reenvío de paquetes para conectar los sistemas emulados con el mundo "externo" (tanto el sistema de host como en Internet). En este tutorial veremos cómo crear una configuración diferente usando Redes puentes.

En este tutorial aprenderás:

  • Cómo crear un puente virtual
  • Cómo agregar una interfaz física a un puente
  • Cómo hacer que la configuración del puente sea persistente
  • Cómo modificar las reglas de firmware para permitir el tráfico a la máquina virtual
  • Cómo crear una nueva red virtual y usarla en una máquina virtual
Cómo usar redes puentes con libvirt y kvm

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Distribución independiente
Software libvirt, iproute, brctl
Otro Privilegios administrativos para crear y manipular la interfaz del puente
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

La red "predeterminada"

Cuando libvirt esta en uso y el libvirtd Daemon se está ejecutando, se crea una red predeterminada. Podemos verificar que esta red existe utilizando el virsh utilidad, que en la mayoría de la distribución de Linux generalmente viene con el libvirt-client paquete. Para invocar la utilidad para que muestre todas las redes virtuales disponibles, debemos incluir el lista de redes subcomando:

$ sudo virsh net-list-todo 


En el ejemplo anterior usamos el --todo opción para asegurarse también inactivo Las redes se incluyen en el resultado, que normalmente debería corresponder al que se muestra a continuación:

Nombre State AutoStarSt Persistente -------------------------------------------- ACTIVO POR LA VEZ sí Sí 

Para obtener información detallada sobre la red y finalmente modificarla, podemos invocar Virsh con el editar Subcomando en su lugar, proporcionando el nombre de la red como argumento:

$ sudo virsh net-edit predeterminado 

Un archivo temporal que contiene el xml La definición de red se abrirá en nuestro editor de texto favorito. En este caso, el resultado es el siguiente:

 Predeterminado 168F6909-715C-4333-A34B-F74584D26328          

Como podemos ver, la red predeterminada se basa en el uso del virBr0 puente virtual, y usa Nat conectividad basada para conectar las máquinas virtuales que forman parte de la red al mundo exterior. Podemos verificar que el puente existe usando el IP dominio:

$ ip enlace show type puente 

En nuestro caso, el comando anterior devuelve la siguiente salida:

5: VIRBR0: MTU 1500 QDISC MODO DE STATE ABAJO DE ALTO DE ALTO POR LA VIDA Predeterminado Qlen 1000 Enlace/Ether 52: 54: 00: 48: 3f: 0C BRD FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: 

Para mostrar las interfaces que forman parte del puente, podemos usar el IP comando y consulta solo para interfaces que tienen el virBr0 puente como maestro:

$ IP Link Show Master Virbr0 

El resultado de ejecutar el comando es:

6 6: VirBR0-NIC: MTU 1500 QDISC FQ_CODEL MASTER MASTER VIRBR0 MODO DowN MODE DE ABAJO Predeterminado Qlen 1000 Enlace/Ether 52: 54: 00: 48: 3f: 0C Brd FF: FF: FF: FF: FF: FF 

Como podemos ver, solo hay una interfaz actualmente conectada al puente, virbr0-nic. El virbr0-nic La interfaz es una interfaz virtual de Ethernet: se crea y se agrega al puente automáticamente, y su propósito es solo proporcionar un establo MAC dirección (52: 54: 00: 48: 3f: 0c en este caso) para el puente.

Se agregarán otras interfaces virtuales al puente cuando creemos y iniciamos máquinas virtuales. En aras de este tutorial, creé y lanzé una máquina virtual Debian (Buster); Si relanzamos el comando que usamos anteriormente para mostrar las interfaces de esclavos del puente, podemos ver uno nuevo se agregó, VNET0:

$ IP Link Show Master Virbr0 6: Virbr0-Nic: MTU 1500 QDISC FQ_CODEL MASTER VIRBR0 MODO DOWN MODE DE ABAJO Predeterminado Qlen 1000 Enlace/Ether 52: 54: 00: 48: 3F: 0C BRD FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF : ff 7: VNET0: MTU 1500 QDISC FQ_CODEL MASTER VIRBR0 Estado Modo desconocido Grupo predeterminado Qlen 1000 Enlace/Ether Fe: 54: 00: E2: Fe: 7B BRD FF: FF: FF: FF: FF: FF 

No se deben agregar interfaces físicas al virBr0 puente, ya que usa Nat Para proporcionar conectividad.

Use redes puentes para máquinas virtuales

La red predeterminada proporciona una forma muy directa de lograr la conectividad al crear máquinas virtuales: todo está "listo" y funciona fuera de la caja. A veces, sin embargo, queremos lograr un Bridgining completo conexión, donde los dispositivos invitados están conectados al host Lan, sin uso Nat, Deberíamos crear un nuevo puente y compartir una de las interfaces físicas de Ethernet del host. Veamos cómo hacer esto paso a paso.

Creando un nuevo puente

Para crear un nuevo puente, todavía podemos usar el IP dominio. Digamos que queremos nombrar este puente BR0; Ejecutaríamos el siguiente comando:

$ sudo IP Link Agregar Br0 Tipo Puente 

Para verificar que se cree el puente, hacemos como antes:

$ sudo IP Link Show Tipo Puente 5: Virbr0: MTU 1500 QDISC Noqueue State Down Mode Predeterminado Grupo predeterminado QLEN 1000 Link/Ether 52: 54: 00: 48: 3f: 0C BRD FF: FF: FF: FF: FF: FF 8 : BR0: MTU 1500 QDISC NOOP MODO Down Group predeterminado Qlen 1000 Enlace/Ether 26: D2: 80: 7C: 55: DD Brd FF: FF: FF: FF: FF: FF 

Como se esperaba, el nuevo puente, BR0 fue creado y ahora se incluye en la salida del comando anterior. Ahora que se crea el nuevo puente, podemos continuar y agregarle la interfaz física.

Agregar una interfaz Ethernet física al puente

En este paso agregaremos una interfaz física del host al puente. Observe que no puede usar su interfaz Ethernet principal en este caso, ya que tan pronto como se agrega al puente, perderá la conectividad, ya que perderá su dirección IP. En este caso usaremos una interfaz adicional, ENP0S29U1U1: Esta es una interfaz proporcionada por un adaptador Ethernet a USB conectado a mi máquina.

Primero nos aseguramos de que el estado de la interfaz esté activo:

$ sudo IP Link Set ENP0S29U1U1 UP 

Para agregar la interfaz al puente, el comando para ejecutar es el siguiente:

$ sudo IP Link Set ENP0S29U1U1 Master BR0 

Para verificar la interfaz se agregó al puente, en su lugar:

$ sudo IP Link Show Master Br0 3: ENP0S29U1U1: MTU 1500 QDISC FQ_CODEL MASTER BR0 STATE MODE UP GRUPO predeterminado QLEN 1000 LINK/ETER 18: A6: F7: 0E: 06: 64 BRD FF: FF: FF: FF: FF: FF 

Asignando una dirección IP estática al puente

En este punto podemos asignar una dirección IP estática al puente. Digamos que queremos usar 192.168.0.90/24; Corríamos:

$ sudo Dirección IP Agregar Dev BR0 192.168.0.90/24 

Para que la dirección se agregó a la interfaz, ejecutamos:

$ IP Addr Show BR0 9: BR0: MTU 1500 QDISC Noqueue State Up Group predeterminado Qlen 1000 Link/Ether 26: D2: 80: 7C: 55: DD BRD FF: FF: FF: FF: FF: FF INET 192.168.0.90/24 ELCOPE GLOBAL BR0 VALID_LFT Forever Prefered_lft Forever […] 


Hacer que la configuración sea persistente

Nuestra configuración del puente está lista, sin embargo, por lo que es, no sobrevivirá a un reinicio de la máquina. Para que nuestra configuración sea persistente, debemos editar algunos archivos de configuración, dependiendo de la distribución que utilizamos.

Debian y derivados

En la familia de distribuciones Debian debemos estar seguros de que el puentes el paquete está instalado:

$ sudo apt-get install bridge-utils 

Una vez que se instala el paquete, debemos modificar el contenido del /etc/red/interfaces archivo:

# Este archivo describe las interfaces de red disponibles en su sistema # y cómo activarlas. Para obtener más información, consulte las interfaces (5). # The loopback network interface auto lo iface lo inet loopback # Specify that the physical interface that should be connected to the bridge # should be configured manually, to avoid conflicts with NetworkManager iface enp0s29u1u1 inet manual # The br0 bridge settings auto br0 iface br0 inet static Bridge_ports ENP0S29U1U1 Dirección 192.168.0.90 Broadcast 192.168.0.255 Netmask 255.255.255.0 Gateway 192.168.0.1 

Familia de distribuciones de Red Hat

En la familia Red Hat de las distribuciones, incluida Fedora, debemos manipular scripts de red dentro del /etc/sysconfig/network-scripts directorio. Si queremos el puente no Para ser administrado por NetworkManager, o estamos utilizando una distribución anterior con una versión anterior de NetworkManager que no es capaz de administrar los interruptores de red, necesitamos instalar el Script de red paquete:

$ sudo DNF Install Script de red 

Una vez que se instala el paquete, necesitamos crear el archivo que configurará el BR0 puente: /etc/sysconfig/network-scripts/ifcfg-br0. Dentro del archivo colocamos el siguiente contenido:

Dispositivo = BR0 Type = Bridge BootProto = Ninguno iPaddr = 192.168.0.90 Gateway = 192.168.0.1 máscara de red = 255.255.255.0 OnBoot = YES Delay = 0 NM_Controlled = 0 

Que, modificamos o creamos el archivo utilizado para configurar la interfaz física, nos conectaremos al puente, en este caso /etc/sysconfig/network-scripts/ifcfg-enp0s29u1u1:

Type = Ethernet BootProto = None Name = EnP0S29U1U1 Device = enP0S29U1U1 OnBoot = YES Bridge = BR0 Delay = 0 NM_Controlled = 0 

Con nuestras configuraciones listas, podemos iniciar el red servicio y habilitarlo en el arranque:

$ sudo systemctl habilitar -ahora red 

Desactivar NetFilter para el puente

Para permitir que todo el tráfico se envíe al puente y, por lo tanto, a las máquinas virtuales conectadas a él, necesitamos deshabilitar NetFilter. Esto es necesario, por ejemplo, para que la resolución DNS funcione en las máquinas invitadas adjuntas al puente. Para hacer esto podemos crear un archivo con el .confusión extensión dentro del /etc/sysctl.d directorio, llamémoslo 99-netfilter-puente.confusión. Dentro de él escribimos el siguiente contenido:

neto.puente.Bridge-NF-Call-IP6Table = 0 Net.puente.Bridge-NF-Call-iptables = 0 net.puente.Bridge-NF-Call-arptables = 0 

Para cargar la configuración escrita en el archivo, Fist nos aseguramos de que el BR_NETFILTER El módulo está cargado:

$ sudo modprobe br_netfilter 

Para cargar el módulo automáticamente en el arranque, creemos el /etc/módulos-carga.d/br_netfilter.confusión Archivo: debe contener solo el nombre del módulo en sí:

BR_NETFILTER 


Una vez que se carga el módulo, para cargar la configuración que almacenamos en el 99-netfilter-puente.confusión archivo, podemos ejecutar:

$ sudo sysctl -p /etc /sysctl.D/99-NetFilter-Bridge.confusión 

Creación de una nueva red virtual

En este punto debemos definir una nueva "red" para ser utilizada por nuestras máquinas virtuales. Abrimos un archivo con nuestro editor favorito y pegamos el siguiente contenido dentro de él, que guardarlo como red de puente.xml:

 red de puente    

Una vez que el archivo está listo, pasamos su posición como argumento al definir la red virsh subcomando:

$ sudo virsh net-define-network.xml 

Para activar la nueva red y hacer para que se inicie automáticamente, debemos ejecutar:

$ sudo virsh net-start-network network $ sudo virsh net-autostart network 

Podemos verificar que la red se haya activado ejecutando el Virsh Net List
Comando, nuevamente:

$ sudo virsh net-list state state AutoStarSt Persistente -------------------------------------------- --------- 

Ahora podemos seleccionar la red por nombre cuando use el --red opción:

$ sudo virt-install \ --vcpus = 1 \ --memory = 1024 \--cdrom = Debian-10.8.0-amd64-dvd-1.ISO \--Disk size = 7 \ --OS-Variant = Debian10 \-Network Network = Bridged-Network 

Si usa el gerente de virtud Interfaz gráfica, podremos seleccionar la red al crear la nueva máquina virtual:

Conclusiones

En este tutorial, vimos cómo crear un puente virtual en Linux y conectar una interfaz Ethernet física para crear una nueva "red" para ser utilizada en máquinas virtuales administradas con libvirt. Cuando se usa esta última, se proporciona una red predeterminada para conveniencia: proporciona conectividad utilizando NAT. Cuando use una red puenteada como la que configuramos en este tutorial, mejoraremos el rendimiento y haremos que las máquinas virtuales se separen de la misma subred del host.

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mastering Bash Script Loops
  • Cosas para instalar en Ubuntu 20.04
  • Cómo trabajar con la API REST de WooCommerce con Python
  • Cómo configurar un servidor OpenVPN en Ubuntu 20.04
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Ubuntu 20.04 trucos y cosas que quizás no sepas
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cómo ejecutar el sistema operativo Raspberry Pi en una máquina virtual con ..