Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Escenarios de red mediante libvirt


LibVirt es una libreria que nos permite gestionar todos los aspectos de las máquinas virtuales, estado de cada una de ellas, recursos consumidos... pero el apartado mas interesante es la configuración de red, esta nos permite elegir entre cuatro opciones disponibles:

  • Bridge: Crear un bridge es como poner un HUB entre el host anfitrión y los invitados, todo el tráfico que llegue al bridge sea por la interfaz que sea llegará al resto, si la interfaz del bridge es capaz de etiquetar o es un bonding el tráfico saldrá etiquetado, balanceado o ambas cosas.
  • NAT: Se crea una red interna, el tráfico interno se nateará mediante iptables, como en todo nat si fuese necesario redirigir algún puerto se tendrá que hacer de forma explícita, si se configura DHCP se arrancará una instancia de dnsmasq con la configuración correspondiente.
  • Routed: Son interfaces tap, es posible vincular esa interfaz con un proceso que esté corriendo, de este modo lo que se envíe desde el anfitrión por esa interfaz llegará al proceso en este caso el proceso KVM, si la vm genera tráfico llegará al anfitrión, es una interfaz punto a punto entre el anfitrión y la vm, si se habilita el enrutado en el anfitrión el tráfico de la vm podría llegar al exterior.
  • Isolated: Es igual que Routed, pero no se permite el enrutado entre el bridge y las interfaces físicas.

Bridge: Crear un bridge es como poner un HUB entre el host anfitrión y los invitados, todo el tráfico que llegue al bridge sea por la interfaz que sea llegará al resto, si la interfaz del bridge es capaz de etiquetar o es un bonding el tráfico saldrá etiquetado, balanceado o ambas cosas.

 


NAT: Se crea una red interna, el tráfico interno se nateará mediante iptables, como en todo nat si fuese necesario redirigir algún puerto se tendrá que hacer de forma explícita, si se configura DHCP se arrancará una instancia de dnsmasq con la configuración correspondiente.

Esta red es un bridge pero sin una interfaz real conectada, por lo tanto no hay tráfico entre interfaces sin pasar por iptables, solo se conectan las interfaces virtuales de las vms.
 

Podemos ver la config con:

brctl show
brNAT        8000.5254003a75ea    yes        brNAT-nic --> Esta interfaz es ficticia, no real

 

ifconfig
brNAT: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 57.20.0.1  netmask 255.255.0.0  broadcast 57.20.255.255

 

iptables -t nat -L -n
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination           
MASQUERADE  tcp  --  57.20.0.0/16        !57.20.0.0/16         masq ports: 1024-65535
MASQUERADE  udp  --  57.20.0.0/16        !57.20.0.0/16         masq ports: 1024-65535
MASQUERADE  all  --  57.20.0.0/16        !57.20.0.0/16        

 

cat /var/lib/libvirt/dnsmasq/NAT.conf
interface=brNAT
dhcp-range=57.20.0.2,57.20.0.5

Routed: Son interfaces tap, es posible vincular esa interfaz con un proceso que esté corriendo, de este modo lo que se envíe desde el anfitrión por esa interfaz llegará al proceso en este caso el proceso KVM, si la vm genera tráfico llegará al anfitrión, es una interfaz punto a punto entre el anfitrión y la vm, si se habilita el enrutado en el anfitrión el tráfico de la vm podría llegar al exterior.

 

brctl show
brROUTE        8000.525400b88745    yes        brROUTE-nic
                                               vnet0        --> Todo lo que se envie a este bridge llegará a las interfaces del bridge, en este caso vnet0 que estará pto-pto con la vm

 

cat /var/lib/libvirt/dnsmasq/ROUTE.conf
interface=brROUTE
dhcp-range=134.205.0.2,134.205.0.6

 

ifconfig
brROUTE: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 134.205.0.1  netmask 255.255.0.0  broadcast 134.205.255.255

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether fe:ad:88:18:0e:71  txqueuelen 500  (Ethernet)

 

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
134.205.0.0     0.0.0.0         255.255.0.0     U     0      0        0 brROUTE
RED_ANFITRION_INTERFAZ    0.0.0.0         255.255.255.0   U     0      0        0 eth0

 

Si en la vm tenemos la ip 134.205.0.3 configuramos en nuestro pc:

route add -host 134.205.0.3 gw IP_ANFITRION_INTERFAZ
ping 134.205.0.3
ping 134.205.0.3
PING 134.205.0.3 (134.205.0.3) 56(84) bytes of data.
64 bytes from 134.205.0.3: icmp_seq=1 ttl=63 time=0.666 ms

 

NOTA: Este escenario es mas interesante cuando se tienen ip públicas configuradas en las vms, todas las ip públicas deberían de estar enrutadas a la pública del anfitrión, cuando llegue tráfico para la vm se envia al bridge apropiado y este lo hace llegar a las vnets que corresponde.

 


Isolated: Es igual que Routed, pero no se permite el enrutado entre el bridge y las interfaces físicas, puede resultar muy útil cuando se está testeando algún tipo de malware y queremos comprobar como se comporta en un entorno de red, al estar totalmente aislado los equipos externos no correrán peligro de contagio.

 

brctl show
bridge name    bridge id        STP enabled    interfaces
brISOLATED        8000.525400ffe075    yes        brISOLATED-nic
                                                  vnet0

 

cat /var/lib/libvirt/dnsmasq/ISOLATED.conf
interface=brISOLATED
dhcp-range=106.12.0.2,106.12.0.6

 

ifconfig
brISOLATED: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 106.12.0.1  netmask 255.255.0.0  broadcast 106.12.255.255

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether fe:ad:88:18:0e:71  txqueuelen 500  (Ethernet)

 

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
106.12.0.0      0.0.0.0         255.255.0.0     U     0      0        0 brISOLATED
RED_ANFITRION_INTERFAZ   0.0.0.0         255.255.255.0   U     0      0        0 eth0

 

Si en la vm tenemos la ip 106.12.0.3 configuramos en nuestro pc:

route add -host 106.12.0.3 gw IP_ANFITRION_INTERFAZ
ping 106.12.0.3
PING 106.12.0.3 (106.12.0.3) 56(84) bytes of data.
^C
--- 106.12.0.3 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 4999ms

 

NOTA: A pesar de tener las rutas correctas el ping no funciona.

 

Estos son algunos enlaces que me han sido de ayuda para comprender de forma correcta el funcionamiento de libvirt:

http://wiki.libvirt.org/page/Networking
http://wiki.libvirt.org/page/VirtualNetworking


Autor: Kr0m -- 21/04/2014 14:04:06