Acabo de instalar KVM en mi servidor Ubuntu de acuerdo con esta guía: https://help.ubuntu.com/community/KVM/Installation
Luego preparó una red puenteada como se muestra aquí: https://help.ubuntu.com/community/KVM/Networking
Luego, creé una máquina virtual con virt-manager. ¡Lo intenté varias veces pero el invitado no se conecta a la red! ¿Alguna ayuda?
ifconfig:
br0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
inet addr:192.168.20.100 Bcast:192.168.20.255 Mask:255.255.255.0
inet6 addr: fe80::d227:88ff:feb0:e438/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10493 (10.4 KB) TX bytes:8433 (8.4 KB)
eth0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11361 (11.3 KB) TX bytes:8479 (8.4 KB)
Interrupt:41
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
virbr0 Link encap:Ethernet HWaddr 5a:8c:57:95:af:3b
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
espectáculo brctl:
bridge name bridge id STP enabled interfaces
br0 8000.d02788b0e438 no eth0
virbr0 8000.000000000000 yes
brctl showmacs br0:
port no mac addr is local? ageing timer
1 5c:d9:98:67:b6:28 no 48.33
1 d0:27:88:b0:e4:38 yes 0.00
1 e0:2a:82:f9:6c:09 no 0.00
ruta ip:
default via 192.168.20.1 dev br0 metric 100
192.168.20.0/24 dev br0 proto kernel scope link src 192.168.20.100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
* En el invitado * No pude copiar y pegar la información del invitado porque no puedo enviarlo. No recibió ninguna ip de DHCP. No funcionará incluso después de configurarlo manualmente.
server
networking
kvm
network-bridge
THpubs
fuente
fuente
ifconfig
,brctl show
,brctl showmacs br0
, yip route
. En el invitado:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
, ytraceroute 8.8.8.8
. No puedo decir que configuré kvm de la manera que tú lo has hecho, pero me puse a trabajar en puente usando elkvm
comando. Tuve que desconectar la conexión inalámbrica para que mi host se conectara a Internet y, como dicen las instrucciones que citó, necesita conectarse a Internet con Ethernet.brctl showmacs br0
lista anterior?Respuestas:
Preliminares
Lo siguiente funcionó para mí para Ubuntu 12.04. Debe deshabilitar el firewall de su computadora mientras prueba esto para que no interfiera.
El archivo / etc / default / qemu-kvm debe ser como se instaló originalmente.
Necesitará tener bridge-utils qemu-kvm y libvirt-bin instalados. Cualquier usuario que use máquinas virtuales debe agregarse al grupo libvirtd.
Parece que ya no hay necesidad de agregar la capacidad CAP_NET_ADMIN.
Configuración de la red
El modo de red predeterminado es el modo Usuario, también llamado SLIRP. Utiliza un puente virbr0 predefinido que se enruta NAT a la computadora invitada. El enrutamiento NAT utiliza la función ip_forwarding del núcleo y iptables . El modo de puente utiliza un puente virtual en el invitado al que se conecta la interfaz Ethernet (sin numerar) y en el que tanto el host como el invitado tienen sus interfaces de red.
Los siguientes diagramas pueden aclarar las diferencias:
Puede ver cómo se define la red de usuario predeterminada con:
Puedo configurar el modo puenteado con los siguientes enfoques:
En / etc / network / interfaces (de la parte puente de la publicación que menciona en su pregunta):
Reiniciar; y asegúrese de que la red inalámbrica no esté activa. Verifique la ruta IP predeterminada con
ip route
. Debe estar utilizando la interfaz br0.NB Si su Ethernet no está conectada cuando se realiza este cambio, necesita tener su cable Ethernet enchufado y obtener un operador o el arranque se bloqueará durante dos minutos y no tendrá capacidad de red Eso es porque la interfaz eth0, por estando en este archivo, debe aparecer antes de que el arranque pueda continuar normalmente.
NB Generalmente, no puede usar una red inalámbrica en lugar de eth0 debido a su incapacidad para usar múltiples direcciones MAC (infiero que necesitan una segunda para el puente).
Como alternativa, puede deshabilitar el uso de Ethernet y asegurarse de que no tenga una dirección IP y de que no haya una ruta predeterminada configurada
ip route
. Luego:También puede proporcionar una dirección IP estática aquí, así como definir la ruta predeterminada y la dirección DNS. Para este ejemplo
dhclient
hace esto.Aquí está mi tabla de rutas:
Usando kvm
Entonces puedo arrancar una máquina kvm en puente con:
El
-netdev tap
parámetro hace que sudo sea un requisito. Cuando se inicia la VM, qemu-kvm ejecuta los siguientes comandos:Esto lo hace / etc / qemu-ifup
La interfaz vnet0 de la VM se agrega al puente br0 porque la ruta predeterminada anterior usa esa interfaz de puente. Si no estuviera allí, la interfaz táctil se agregaría a la interfaz virbr0. Como eso no está conectado a Internet, NAT se usaría para conectar al invitado al host e Internet, en mis experimentos. Puede dirigir el vnet0 a un puente en particular en / etc / default / qemu-kvm. Usando virt-manager a continuación, puede dirigir explícitamente a qué puente conectarse.
Debido a los comandos anteriores emitidos por qemu-kvm y el
-netdev tap,id=tunnel,ifname=vnet0
parámetro, la máquina virtual vm está conectada al túnel vnet0 y el túnel está conectado al puente br0.Ahora puedo pasar directamente a esta máquina virtual invitada desde otra computadora en mi red.
Mi host
ifconfig
(tenga en cuenta la interfaz vnet0 que aparece en mi red cuando se está ejecutando la VM):Mi configuración de puente mientras ejecuto la VM:
Tenga en cuenta que tanto la interfaz vnet0 de la máquina virtual como la interfaz eth0 están conectadas al puente br0.
Y los MAC en la interfaz br0:
Tenga en cuenta que la interfaz br0 conecta mi computadora host al mismo puente utilizado por el invitado.
Puede verificar que está conectado en puente en lugar de enrutar NAT a su propia red mediante
traceroute 8.8.8.8
. Si el primer nodo es el enrutador de su red en lugar de la dirección IP del invitado, su red debería funcionar correctamente.Ver esta documentación .
virt-manager
Asegúrese de haber instalado
virt-manager
yhal
. Elhal
paquete es una dependencia sugeridavirt-manager
y se utiliza para determinar la configuración de red de su sistema al crear o editar invitados.Mientras tenía el puente br0 definido como anteriormente, creé una máquina virtual con virt-manager de la siguiente manera:
Pude ir directamente al resto de mi red doméstica y a Internet desde este invitado. También pude ingresar desde la otra computadora Ubuntu (no host, no huésped) en mi red doméstica.
Aquí está el
kvm
comando muy largo ejecutado por virt-manager (en comparación con EApubs o cualquier otra persona que tenga problemas con esto):Aquí está la porción de red de la descripción de la máquina virtual en /etc/libvirt/qemu/quantal.xml
De acuerdo con este enlace, para el rendimiento y la confiabilidad, puede ser mejor configurar el modelo de dispositivo de red
virtio
, puede hacerlo en el visor virtual presionando el botón i , yendo a la configuración de NIC y configurando el "Modelo de dispositivo "avirtio
. También puede agregar esto al XML anterior agregando la línea:En resumen
Todo esto asumió el 12.04 fue:
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, o cree una máquina virtual con virt-manager, especificando el puente de red br0 en el panel Paso 4-> Opciones avanzadas.No se necesitaron más cambios en las redes, capacidades, plantillas o configuraciones.
Para exponer un servicio en su nuevo invitado a Internet, debe:
Recuerde probar y volver a habilitar el servicio de firewall para su computadora host. Es posible que necesite cualquier entrada para reenviar el tráfico al invitado.
Consulte https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networking y https://help.ubuntu.com/12.04/serverguide/libvirt. html .
fuente
ps aux | grep kvm
).brctl show
como lo tiene en su pregunta?) ¿Qué versión de Ubuntu está ejecutando? Quizás esa sea la diferencia. ¿Qué versión de virt-manager? (El mío es 0.9.1-1ubuntu5.1).Si el comportamiento que está viendo es que el host puede acceder al invitado, y el invitado puede acceder al host, pero el invitado no puede acceder a otras máquinas en la red o viceversa ... probablemente el firewall del host esté bloqueando el acceso.
Ver: https://bugs.launchpad.net/ubuntu/+source/ufw/+bug/573461
Específicamente, esta sección: "El paso final es deshabilitar netfilter en el puente:
fuente
Estos son los dos scripts que uso para crear un puente
qemu-kvm
.Primero, deje que el host se convierta en un enrutador IP.
Guión
ip-router.sh
:Luego, crea el
tun-tap
interfaz ybridge
con su interfaz predeterminada (generalmente la que tiene una conexión a Internet).Guión
create-qemu-bridged-tuntap.sh
:Uso estos scripts a diario, por lo que deberían funcionar bien también para usted. Tendrás que instalar algún paquete para que todo funcione. Utilizando:
puede ver qué paquete debe tener
COMMAND
. Por ejemplo, para ver qué paquete debe tenerbrctl
, simplemente ejecute:y tendrás:
Usando el mismo enfoque para todos los comandos en estos scripts, debe (al menos) ejecutar esta
aptitude
línea de comando:Finalmente, puede iniciar el script principal (como usuario normal):
En ejecución
ip addr
, debería ver unabr0
interfaz con la dirección IP192.168.1.1
, como se especifica dentro delcreate-qemu-bridged-tuntap.sh
script:Esto es lo
host address
visto por elguest
. Por el contrario, el invitado tendrá como dirección IP192.168.1.95
(nuevamente, esto se puede cambiar fácilmente dentro del script principal).Ahora, con el uso
virt-manager
, solo tiene que configurar su nic de invitado para usarbr0
como interfaz física.Dentro de
guest
, solo tienes que dareth0
una dirección IP de192.168.1.95
y todo debería funcionar bien.fuente
cat /proc/sys/net/ipv4/ip_forward
da0
. Habilitándolo y persistiéndome me aclaró el problema, instrucciones en esta publicación .