[Resuelto]bridge o puente ubuntu (18.04)-- KVM-qemu

Verán, me ha dado por experimentar con maquinas virtuales y teniendo un procesador que lo soporta, me he decidido a probar kvm desde ubuntu. Para su instalación he seguido la siguiente guía:
https://proyectosbeta.net/2018/06/instalar-kvm-en-ubuntu-18-04-lts-bionic-beaver-de-64-bits/


Sin embargo, he parado en el momento en el que hay que tocar configuraciones de red(puesto que no soy muy ducho en ese tema en linux), en la guía dice así:
Preparar la configuración de red para que los futuros guests tengan conectividad entre el host y los guest.
Entramos en la consola y escribimos:
sudo nano /etc/network/interfaces

Les podría salir algo similar a lo siguiente:
auto eth0
iface eth0 inet dhcp

Deberían de llegar a algo como lo siguiente:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 5


Aún así he seguido adelante y para continuar he optado por instalar la interfaz gráfica Virtual Machine Manager.

La cosa es que ya he realizado pruebas con maquinas virtuales en windows usando VirtualBox, y ahí la configuración de redes es, en apariencia, mas intuitiva para un novato. ¿Podré realizar configuraciones de forma cómoda con esta interfaz o debería seguir con la guía que menciono?

mi decisión, aparte de por lo que ya he mencionado, viene dada porque los ejemplos sobre redes no suelen coincidir con lo que a mi me aparece. En la guía directamente se menciona que en .../interfaces aparece "auto eth0" mientras que mis dispositivos llevan otro nombre y no me siento con la confianza suficiente como para hacer cambios de esa índole a nivel terminal no sea que la líe(y si, puedo hacer copias de respaldo, pero prefiero no complicarme la vida si por otras vías puedo conseguir resultados)

Muchas gracias!
Yo lo utilizo con OpenSuse y no recuerdo haber tenido que manipular ningún fichero para hacerlo funcionar, con el Virtual Machine Manager lo pude poner en marcha. Sí que es cierto que con el portátil (una Debian) y su wifi tengo que lanzar un comando antes de poner en marcha la máquina virtual pero poco más.

Si quieres pon tu fichero de configuración por aquí y vemos cómo debería editarse. Al final va a ser cambiar el "eth0" por el nombre que tenga tu adaptador de red, ya que el br0 es un puente intermedio que se crea para las máquinas virtuales.
Esta noche edito el comentario y lo pongo.

EDIT:
Mientras aprovecho y pongo otro problema que me ha surgido. Con el vmm he intentado instalar una iso, a la vez que creaba la maquina virtual, y me decía que no tienen derechos de escritura sobre ella...lo intenta solucionar y no lo consigue, la verdad es que es bastante confuso, porque mientras que te está pidiendo una iso, te sugiere crear una especie de CD rom virtual.

Vale, esta parte solucionada, resulta que los problemas de permisos era porque la ISO la tenia en una partición ntfs, lo he pasado a mi particion de linux y listo. De hecho ya tengo un ubuntu server corriendo.

Puede que tampoco haga falta tocar nada de la red pues he podido establecer una conexion por ssh de mi maquina a la virtual sin problemas. no obstante aqui la pongo:
En la web, como decia antes pide esto
Preparar la configuración de red para que los futuros guests tengan conectividad entre el host y los guest.
Entramos en la consola y escribimos:
sudo nano /etc/network/interfaces

Les podría salir algo similar a lo siguiente:
auto eth0
iface eth0 inet dhcp

Deberían de llegar a algo como lo siguiente:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 5


Y yo lo tengo asi:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback



Gracias por responder!!
El bridge es para que las vms puedan estar en la misma subred que la lan.
Zokormazo escribió:El bridge es para que las vms puedan estar en la misma subred que la lan.

te refieres a lo que propone?

Mi duda es, ¿porque a mi mis interfaces me aparece como lo? (seguro que algo habré tocado en el pasado y esa es la razón de que me haya decidido a tocar KVM xD )

He estado probando y da igual, consigo conexión fuera pero no interconexion. Salvo que use la configuración por defecto NAT de kvm y entonces si que puedo hacerle ping. pero en modo puente, ya sea con el interfaces modificado o sin modificar, la conexión puente no da respuesta
alohl669 escribió:
Zokormazo escribió:El bridge es para que las vms puedan estar en la misma subred que la lan.

te refieres a lo que propone?

Mi duda es, ¿porque a mi mis interfaces me aparece como lo? (seguro que algo habré tocado en el pasado y esa es la razón de que me haya decidido a tocar KVM xD )

He estado probando y da igual, consigo conexión fuera pero no interconexion. Salvo que use la configuración por defecto NAT de kvm y entonces si que puedo hacerle ping. pero en modo puente, ya sea con el interfaces modificado o sin modificar, la conexión puente no da respuesta


Si.

Si estas usando libvirt, por defecto y sin configurar nada mas, al iniciarse se crea una red virtual dentro de una subred lan tipo 192.168.122. Y mete las vms en esa red.

Esto funciona, pero tiene un pero: las vms solo son accesibles para la maquina que los alberga. Si esto no es problema no hace falta hacer nada.

Para solventar este pero de manera sencilla lo que se hace es crear una interfaz puente virtual a la que asocias tu tarjeta ethernet. De esta manera libvirt puede asignar ese puente para la red de la vm y esta obtendra una ip de la lan a la que pertenece la maquina que alberga las vms.

La parte de la configuracion que no has hecho es precisamente la que configura el bridge
Hola, llevo algunos meses probando esto tambien, en mi caso, una "vm-gaming" He aprendido mucho con esto y ahora quiero ir hacia otras cosas, pero por ahora, te paso lo que me funciono a mi para tener comunicacion entre el host y guest.

Por cierto, esto, utilizando una conexion inalambrica como principal receptor de internet y que vi por ahi que no era posible.

Crea un archivo con el nombre que quieras terminando en .xml

dentro de ese archivo pon lo siguiente, y luego guarda ese archivo.
<network>
  <name>isolated</name>
  <ip address='192.168.254.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.254.2' end='192.168.254.254' />
    </dhcp>
  </ip>
</network>


Ahora, el servicio libvirtd funcionando, ejecuta estos comandos en la terminal.

sudo virsh net-define /lugar/donde/esta/el/archivo.xml

sudo virsh net-autostart isolated

sudo virsh net-start isolated


Como paso final, ahora tienes que asignarle una interfaz a la maquina virtual y que esta haga uso de esta red "isolated".


Nota: isolated, es porque asi es el nombre que tiene el nombre para esa red.
Con eso, deberia tener comunicacion entre el host y guest.
Saludos.
1985a escribió:Hola, llevo algunos meses probando esto tambien, en mi caso, una "vm-gaming" He aprendido mucho con esto y ahora quiero ir hacia otras cosas, pero por ahora, te paso lo que me funciono a mi para tener comunicacion entre el host y guest.

Por cierto, esto, utilizando una conexion inalambrica como principal receptor de internet y que vi por ahi que no era posible.

Crea un archivo con el nombre que quieras terminando en .xml

dentro de ese archivo pon lo siguiente, y luego guarda ese archivo.
<network>
  <name>isolated</name>
  <ip address='192.168.254.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.254.2' end='192.168.254.254' />
    </dhcp>
  </ip>
</network>


Ahora, el servicio libvirtd funcionando, ejecuta estos comandos en la terminal.

sudo virsh net-define /lugar/donde/esta/el/archivo.xml

sudo virsh net-autostart isolated

sudo virsh net-start isolated


Como paso final, ahora tienes que asignarle una interfaz a la maquina virtual y que esta haga uso de esta red "isolated".


Nota: isolated, es porque asi es el nombre que tiene el nombre para esa red.
Con eso, deberia tener comunicacion entre el host y guest.
Saludos.


Vale, a falta de probar esta solución retomo el tema a pesar de los meses pasados ya, pero así me evito crear un post nuevo de forma innecesaria. esta vez vengo a documentarlo un poco mejor. Respecto a tu solución @1985a voy a intentar aplazarla porque todos los tutoriales que me encuentro para el tema del puente de red dan por sentado que lo que yo estoy intentando debería funcionar y no es así, pero si hay tantos a los que si, no veo razón alguna de porque a mi no y por ello quiero insistir en el método que he mencionado antes y voy a repasar ahora.

Lo que pongo ahora es la misma consulta redactada ayer en stackoverflow y sin respuestas, sinceramente, siempre he encontrado mas soporte aquí que allí, pero uno ya tira por donde se le ocurre.


llevo tiempo intentando conseguir interconexión entre host y guest [ubuntu18.04 - kvm qemu] porque estoy preconfigurando un webserver y quiero usar el invitado como banco de pruebas. Total, que no puedo avanzar mucho porque el guest si tiene acceso al host pero no al revés. Y por tanto menos tengo acceso a la pagina de bienvenida que da apache en la ip después de instalarlo y levantarlo.

Buscando he leído que debo crear un puente, y para ello modificar /etc/network/interfaces de la siguiente forma(Así es como lo he dejado):

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#a partir de aqui esta lo nuevo
auto br0
iface br0 inet static
address 192.168.1.37
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports enp4s0
bridge_stp off
bridge_fd 0
bridge_maxwait 0


por supuesto en todos los tutoriales mencionan eth0, sin embargo en ubuntu no existe y en su lugar está enp4s0.

Curiosamente, después de reiniciar el servicio de red

/etc/init.d/network-manager restart


al comprobar los cambios con ifconfig -a... no aparece ningún cambio y se ve tal que así.

enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.37  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::dd0b:4362:2668:e119  prefixlen 64  scopeid 0x20<link>
    ether da:01:3a:03:c0:67  txqueuelen 1000  (Ethernet)
    RX packets 365643  bytes 484283142 (484.2 MB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 177556  bytes 16509811 (16.5 MB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Bucle local)
    RX packets 2566  bytes 247445 (247.4 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 2566  bytes 247445 (247.4 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
    ether 52:54:00:7f:cc:c1  txqueuelen 1000  (Ethernet)
    RX packets 83  bytes 5750 (5.7 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 57  bytes 5832 (5.8 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0-nic: flags=4098<BROADCAST,MULTICAST>  mtu 1500
    ether 52:54:00:7f:cc:c1  txqueuelen 1000  (Ethernet)
    RX packets 0  bytes 0 (0.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 0  bytes 0 (0.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


Se suponía que enp4s0 debía perder su IP y aparecer br0 con la IP de mi host, pero br0 ni aparece. Si abro virt-manager, en el apartado de red de cada maquina me reconoce un nuevo modo de puente br0 sobre enp4s0, sin embargo al arrancar la maquina me dice que no existe el dispositivo br0.

El problema que veo de base es que toda la documentación que encuentro, a pesar de ser foros y paginas donde se indica que esto se hace asi en ubuntu 18.04 mencionan eth0, y esa interfaz no existe, en su lugar es enp4s0, por lo que uno ya no sabe si fiarse de que siquiera lo hayan testeado(desde la ignoracia digo esto)

PD: tengo el paquete bridge-utils instalado y actualizado


adjunto tambien la informacion de red de la maquina virtual(en este caso centos)

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.89  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::cf35:d640:c94a:e16  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:d2:ae:4d  txqueuelen 1000  (Ethernet)
        RX packets 321  bytes 19601 (19.1 KiB)
        RX errors 0  dropped 10  overruns 0  frame 0
        TX packets 72  bytes 5746 (5.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


Edit: antes hablo... parece que el truco esta en configurar el puente con netplan. ya tengo ping entre guest y host, en cuanto consiga ver la web de apache escribo la solución.

EDIT2: Yo no se para que hablo, cada vez que pregunto en este foro(salvo escasas veces) acabo encontrando la solución por mi cuenta. esta vez solo ha ocurrido retomando un viejo hilo, pero puedo decir orgulloso que por fin puedo darlo por cerrado. cuando pasen 5 dias o alguien responda escribo una ultima respuesta con la solución para tenerlo bien documentado.

GRACIAS!! y perdon por relanzar un hilo viejo.
Con respecto al puente de red que vi muchos tutoriales por internet diciendo que no se podia, y en la misma wiki de libvirtd encontre esa solucion que te pase, sencilla y eficaz.

Eso si, si trabajas con qemu a secas, no va funcionar, salvo aplicando la solucion de crear los pasos que haz puesto.
Bueno, pues finalmente el puente en ubuntu 18.04 se hace con netplan. Recordad que es necesario tener instalado bridge-utils.

Para ello hay que trabajar con un archivo yaml, netplan comprueba la sintaxis y ella se encarga de hacer los cambios en la configuracion de red. Los pasos serian así de sencillos:

Importante comprobar cuales son nuestros dispositivos. Con el comando ifconfig por ejemplo podremos ver cual seria el equivalente a eth0, en mi caso es enp4s0.

pasamos a modificar el fichero /etc/netplan/01-network-manager-all.yaml con algún editor tipo nano o vim. es posible que el fichero final se llame distinto en tu sistema.

vim /etc/netplan/01-network-manager-all.yaml


nos aparecerá algo así:

network:
  version: 2
  renderer: NetworkManager

Nosotros solo tendremos que añadir unas "pocas" lineas que definirán el puente y la conexión. Debe quedar de la siguiente forma:

network:
  version: 2
  renderer: NetworkManager

  ethernets:
          enp4s0:
                  dhcp4: no
                  dhcp6: no
  bridges:
          br0:
                  interfaces: [enp4s0]
                  dhcp4: no
                  dhcp6: no
                  addresses:
                          - 192.168.1.85/24
                  gateway4: 192.168.1.1
                  nameservers:
                        addresses: [1.1.1.1, 1.0.0.1, 8.8.8.8, 8.8.4.4]



(tened en cuenta de que en mi caso he decidido usar dirección estática, pero podéis ahorraros un par de lineas usando el modo dhcp)

Por ultimo nos quedan por conocer 3 comandos
sudo netplan try
sudo netplan generate
sudo netplan apply

con el primero nos sobra, pues primero hace una comprobación de la sintaxis y después prueba la conexión dándote margen para probarla y guardar los cambios.

y...
fin(aleluya) ;)

Muchas gracias por la ayuda que me habéis ofrecido.
9 respuestas