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:
virsh net-dumpxml default
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):
auto lo
iface lo inet loopback
#auto eth0
#face eth0 inet dhcp
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
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:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
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:
$ ip lista de rutas
predeterminado a través de 192.168.1.1 dev br0 metric 100
169.254.0.0/16 dev br0 alcance enlace métrica 1000
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.45
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
Usando kvm
Entonces puedo arrancar una máquina kvm en puente con:
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
El -netdev tap
parámetro hace que sudo sea un requisito. Cuando se inicia la VM, qemu-kvm ejecuta los siguientes comandos:
ifconfig vnet0 0.0.0.0 arriba
brctl addif brctl addif br0 vnet0
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):
$ ifconfig
br0 Enlace encapsulado: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
inet addr: 192.168.1.45 Bcast: 255.255.255.255 Máscara: 255.255.255.0
inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5 / 64 Alcance: Enlace
UP BROADCAST RUNNING MULTICAST MTU: 1500 Métrica: 1
Paquetes RX: 6526 errores: 0 descartados: 0 desbordamientos: 0 trama: 0
Paquetes TX: 7543 errores: 0 descartados: 0 desbordamientos: 0 operador: 0
colisiones: 0 txqueuelen: 0
RX bytes: 2712940 (2.7 MB) TX bytes: 1071835 (1.0 MB)
eth0 Enlace de enlace: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
UP BROADCAST RUNNING MULTICAST MTU: 1500 Métrica: 1
Paquetes RX: 7181 errores: 0 descartados: 0 desbordamientos: 0 trama: 0
Paquetes TX: 7740 errores: 0 descartados: 0 desbordamientos: 0 operador: 0
colisiones: 0 txqueuelen: 1000
RX bytes: 2974585 (2.9 MB) TX bytes: 1096580 (1.0 MB)
Interrupción: 43 Dirección base: 0x6000
lo Link encap: Loopback local
inet addr: 127.0.0.1 Máscara: 255.0.0.0
inet6 addr: :: 1/128 Ámbito: Host
UP LOOPBACK RUNNING MTU: 16436 Métrica: 1
Paquetes RX: 10 errores: 0 descartados: 0 desbordamientos: 0 trama: 0
Paquetes TX: 10 errores: 0 descartados: 0 desbordamientos: 0 operador: 0
colisiones: 0 txqueuelen: 0
RX bytes: 664 (664.0 B) TX bytes: 664 (664.0 B)
vnet0 Enlace de encapsulado: Ethernet HWaddr ca: 0c: 73: c3: bc: 45
inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 Alcance: Enlace
UP BROADCAST RUNNING MULTICAST MTU: 1500 Métrica: 1
Paquetes RX: 226 errores: 0 descartados: 0 desbordamientos: 0 trama: 0
Paquetes TX: 429 errores: 0 descartados: 0 desbordamientos: 0 operador: 0
colisiones: 0 txqueuelen: 500
RX bytes: 26919 (26,9 KB) TX bytes: 58929 (58,9 KB)
virbr0 Enlace de encapsulado: Ethernet HWaddr d6: 18: 22: db: ff: 93
inet addr: 192.168.122.1 Bcast: 192.168.122.255 Máscara: 255.255.255.0
UP BROADCAST MULTICAST MTU: 1500 Métrica: 1
Paquetes RX: 0 errores: 0 descartados: 0 desbordamientos: 0 trama: 0
Paquetes TX: 0 errores: 0 descartados: 0 desbordamientos: 0 operador: 0
colisiones: 0 txqueuelen: 0
RX bytes: 0 (0.0 B) TX bytes: 0 (0.0 B)
Mi configuración de puente mientras ejecuto la VM:
$ brctl show
nombre de puente id de puente interfaces habilitadas para STP
br0 8000.001e338807e5 no eth0
vnet0
virbr0 8000.000000000000 sí
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:
$ brctl showmacs br0
puerto no mac addr es local? temporizador de envejecimiento
1 00: 05: 5d: cf: 64: 61 no 2.54
1 00: 19: d2: 42: 5d: 3f no 36.76
1 00: 19: df: da: af: 7c no 2.86
1 00: 1e: 33: 88: 07: e5 sí 0.00
1 00: 60: 0f: e4: 17: d6 no 0.79
2 52: 54: 00: 12: 34: 56 no 0.80
1 58: 6d: 8f: 17: 5b: c0 no 5.91
1 c8: aa: 21: be: 8d: 16 no 167.69
2 ca: 0c: 73: c3: bc: 45 sí 0.00
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
y hal
. El hal
paquete es una dependencia sugerida virt-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):
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, sockets = 1, cores = 1, threads = 1 -name precisa -uuid f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev socket, id = charmonitor, ruta = / var / lib / libvirt / qemu / precise.monitor, server, nowait -mon chardev = charmonitor, id = monitor, mode = control -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, if = none, id = drive-ide0-0-0, format = qcow2 -device ide-drive, bus = ide.0 , unidad = 0, unidad = drive-ide0-0-0, id = ide0-0-0, bootindex = 1 -netdev tap, fd = 18, id = hostnet0 -device rtl8139, netdev = hostnet0, id = net0, mac = 52: 54: 00: 0e: da: 9b, bus = pci.0, addr = 0x3 -chardev pty, id = charserial0 -dispositivo isa-serial, chardev = charserial0, id = serial0 -usb -vnc 127.0.0.1: 0 -vga cirrus -device intel-hda, id = sound0, bus = pci.0, addr = 0x4 -device hda-duplex, id = sound0-codec0, bus = sound0.0,cad = 0 -dispositivo virtio-balloon-pci, id = balloon0, bus = pci.0, addr = 0x5
Aquí está la porción de red de la descripción de la máquina virtual en /etc/libvirt/qemu/quantal.xml
<interface type='bridge'>
<mac address='52:54:00:b0:8e:aa'/>
<source bridge='br0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
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 "a virtio
. También puede agregar esto al XML anterior agregando la línea:
<model type='virtio'/>
En resumen
Todo esto asumió el 12.04 fue:
- Instalación de virt-manager, bridge-utils, qemu-kvm y paquetes relacionados
- Asegúrese de que cada usuario que desee utilizar kvm esté en el grupo libvirtd.
- Definir / etc / network / interfaces como anteriormente (que coincide con el artículo citado)
- Reinicie, asegurándose de que Ethernet esté enchufado y que la conexión inalámbrica (si la hay) esté apagada.
- Ejecute kvm contra una imagen directamente con, por ejemplo
-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:
- Prepare y configure cualquier servicio de firewall que necesite.
- Asigne una dirección estática en su configuración de invitado o en su servicio DHCP.
- Si está utilizando un enrutador NAT, abra un puerto para el servicio que está implementando dirigiéndolo a la dirección IP del invitado.
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 .
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.