Gestión de redes virtuales privadas

En este apartado vamos a estudiar como trabajar con las redes virtuales con virsh.

Podemos ver las redes que tenemos definidas ejecutando:

usuario@kvm~$ virsh net-list --all

Utilizamos la opción --all para listar las redes iniciadas y paradas.

Creación de redes

Las redes se crean a partir de su definición XML que tenemos guardado en un fichero. En este caso tenemos el fichero red-nat.xml, donde tenemos la definición de una red virtual de tipo NAT.

Para crear la nueva red, ejecutamos:

usuario@kvm~$ virsh net-define red-nat.xml

Si utilizamos el comando virsh net-create estaríamos creando la red de forma temporal, no persistente.

Gestión de redes

La red no se puede utilizar hasta que no se inicie, para ello:

usuario@kvm~$ virsh net-start red_nat

Si vamos a usar esta red con mucha frecuencia es recomendable activar la propiedad de autoiniciar para que se inicie de forma automática al iniciar el host. Para ello:

usuario@kvm~$ virsh net-autostart red_nat

Podemos obtener información de la red ejecutando:

usuario@kvm~$ virsh net-info red_nat

Al iniciar podemos comprobar que se ha creado el bridge virtual y una nueva interfaz de red en el host. Para ello instalamos el paquete bridge-utils para poder usar el comando brctl:

usuario@kvm~$ sudo brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400aea33d	yes		
virbr1		8000.5254002daec2	yes	

En el host, el bridge virtual aparece como una interfaz de red:

usuario@kvm~$ ip a
...
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:ae:a3:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:2d:ae:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.1/24 brd 192.168.101.255 scope global virbr1
       valid_lft forever preferred_lft forever

Podemos considerar que la interfaz de red del bridge virtual corresponde a la conexión del host con el bridge.

Para ver la definición XML de la red que hemos creado, ejecutamos:

usuario@kvm~$ virsh net-dumpxml red_nat

De forma similar podemos crear la red aislada y la muy aislada cuyas definiciones creamos en el apartado anterior. Finalmente, tendríamos varios puentes creados en el host:

usuario@kvm~$ sudo brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400aea33d	yes		
virbr1		8000.5254002daec2	yes		
virbr2		8000.525400d51f31	yes
virbr3		8000.525400f1d203	yes

Finalmente, indicar que para parar una red utilizamos el comando virsh net-stop y para eliminarla el comando virsh net-undefined.

Consulta de las concesiones DHCP

Si tenemos una máquina virtual que ha tomado una configuración dinámica a partir del servidor DHCP de una red privada, podemos obtener información de las concesiones de ese servidor DHCP ejecutando la siguiente instrucción:

usuario@kvm~$ virsh net-dhcp-leases default
 Expiry Time           MAC address         Protocol   IP address           Hostname             Client ID or DUID
----------------------------------------------------------------------------------------------------------------------------------------------------------
 2025-xx-xx 19:16:33   52:54:00:13:88:94   ipv4       192.168.122.223/24   plantilla-debian12   ff:00:13:88:94:00:01:00:01:2f:99:28:12:52:54:00:00:66:be