Nuestro grupo de especialistas pasados varios días de trabajo y recopilar de datos, hallamos los datos necesarios, deseamos que te resulte útil en tu plan.
Solución:
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ás tener bridge-utils
Ya no parece haber necesidad de agregar la capacidad CAP_NET_ADMIN.
Configuración de la red
El modo de red predeterminado es el modo de usuario, también llamado SLIRP. Utiliza un puente virbr0 predefinido que se enruta por NAT al equipo invitado. El enrutamiento NAT utiliza la función ip_forwarding del kernel y iptables. El modo puente utiliza un puente virtual en el invitado al que se conecta la interfaz Ethernet (no numerada) 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 puente 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 #iface 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. Compruebe la ruta IP predeterminada con ip route
. Debe estar usando la interfaz br0.
NB Si su Ethernet no está conectada cuando se realiza este cambio, debe tener su cable Ethernet enchufado y obtener un operador o el arranque se colgará durante dos minutos y no tendrá capacidad de red. Eso es porque la interfaz eth0, al estar en este archivo, debe aparecer antes de que el arranque pueda continuar normalmente.
NB: Generalmente no se puede utilizar una red inalámbrica en lugar de eth0 debido a su incapacidad para usar varias 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 que no haya una ruta predeterminada configurada con 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
Haz esto.
Aquí está mi tabla de ruta:
$ip route list default via 192.168.1.1 dev br0 metric 100 169.254.0.0/16 dev br0 scope link metric 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
Luego puedo arrancar una máquina kvm con puente con:
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
los -netdev tap
El 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 up brctl addif brctl addif br0 vnet0
Esto lo hace / etc / qemu-ifup
La interfaz vnet0 de la máquina virtual se agrega al puente br0 porque la ruta predeterminada anterior usa esa interfaz de puente. Si no estuviera allí, la interfaz tap se agregaría a la interfaz virbr0. Dado que 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 indicar 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 acceder directamente a esta máquina virtual invitada desde otra computadora en mi red.
Mi anfitrión ifconfig
(tenga en cuenta la interfaz vnet0 que aparece en mi red cuando la máquina virtual se está ejecutando):
$ifconfig br0 Link encap:Ethernet HWaddr 00:1e:33:88:07:e5 inet addr:192.168.1.45 Bcast:255.255.255.255 Mask:255.255.255.0 inet6 addr: fe80::21e:33ff:fe88:7e5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6526 errors:0 dropped:0 overruns:0 frame:0 TX packets:7543 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2712940 (2.7 MB) TX bytes:1071835 (1.0 MB) eth0 Link encap:Ethernet HWaddr 00:1e:33:88:07:e5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7181 errors:0 dropped:0 overruns:0 frame:0 TX packets:7740 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2974585 (2.9 MB) TX bytes:1096580 (1.0 MB) Interrupt:43 Base address:0x6000 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:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:664 (664.0 B) TX bytes:664 (664.0 B) vnet0 Link encap:Ethernet HWaddr ca:0c:73:c3:bc:45 inet6 addr: fe80::c80c:73ff:fec3:bc45/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:226 errors:0 dropped:0 overruns:0 frame:0 TX packets:429 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:26919 (26.9 KB) TX bytes:58929 (58.9 KB) virbr0 Link encap:Ethernet HWaddr d6:18:22:db:ff:93 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)
Mi configuración de puente mientras se ejecuta la máquina virtual:
$brctl show bridge name bridge id STP enabled interfaces br0 8000.001e338807e5 no eth0 vnet0 virbr0 8000.000000000000 yes
Tenga en cuenta que tanto la interfaz vnet0 de la máquina virtual como la interfaz eth0 están conectadas al puente br0.
Y el MAC está en la interfaz br0:
$brctl showmacs br0 port no mac addr is local? ageing timer 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 yes 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 yes 0.00
Tenga en cuenta que la interfaz br0 conecta mi computadora host al mismo puente que utiliza el invitado.
Puede comprobar que está puenteado en lugar de NAT enrutado a su propia red utilizando 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 estar funcionando correctamente.
Consulte esta documentación.
virt-manager
Asegúrese de haber instalado virt-manager
y hal
. los hal
paquete es una dependencia sugerida para 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 arriba, creé una máquina virtual con virt-manager de la siguiente manera:
Pude ir directamente al resto de mi red domestica ya Internet de este invitado. También pude ingresar desde la otra computadora Ubuntu (no host, no invitada) en mi red doméstica.
Aquí está el muy largo kvm
comando ejecutado por virt-manager (para comparar 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 precise -uuid f057a729-eda6-4b85-84dc-f100c9ae3789 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/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,unit=0,drive=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 -device 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 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
Aquí está la parte de la red de la descripción de la máquina virtual en /etc/libvirt/qemu/quantal.xml
De acuerdo con este enlace, para rendimiento y confiabilidad, puede ser mejor configurar el modelo del dispositivo de red en virtio
, puede hacer esto en virt-viewer presionando el I , ir a la configuración de NIC y configurar el “Modelo de dispositivo” en virtio
. También puede agregar esto al XML anterior agregando la línea:
En resumen
Todo lo que tomó el 12.04 fue:
- Instalación de virt-manager, bridge-utils, qemu-kvm y paquetes relacionados
- Asegúrese de que todos los usuarios que deseen utilizar kvm estén en el grupo libvirtd.
- Definiendo / etc / network / interfaces como arriba (que coinciden con el artículo citado)
- Reinicie, asegurándose de que Ethernet esté enchufado y de que la conexión inalámbrica (si la hubiera) esté apagada.
- Ejecute kvm contra una imagen directamente con, p. Ej.
-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 Paso 4-> Panel de opciones avanzadas.
No se necesitaron más cambios en 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 alguna entrada para reenviar el tráfico al huésped.
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.
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:
# cat >> /etc/sysctl.conf <
Estos son los dos scripts que utilizo para crear un puente para qemu-kvm
.
Primero, deje que el host se convierta en un enrutador IP.
Texto ip-router.sh
:
#!/bin/bash
internetinterface="eth0"
username=`whoami`
if [ "x$username" != "xroot" ] ; then
echo
echo "You must be root in order to run this script..."
echo
exit
fi
if [ "x$1" != "x" ] ; then
internetinterface="$1"
fi
if [ "x$1" == "xdel" ] || [ "x$2" == "xdel" ] ; then
disable="1"
else
disable="0"
fi
if [ "$disable" == "0" ] ; then
echo "Enabling IP forward and setting up masquerade NAT on interface $internetinterface"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $internetinterface -j MASQUERADE
else
echo "Disable IP forward and setting down masquerade NAT on interface $internetinterface"
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -D POSTROUTING -o $internetinterface -j MASQUERADE
fi
Luego, crea el tun-tap
interfaz y bridge
con su interfaz predeterminada (generalmente la que tiene una conexión a Internet).
Texto create-qemu-bridged-tuntap.sh
:
#!/bin/bash
bridgename=br0
tapinterface=tap0
outinterface=eth1
if [ "x$1" != "x" ] ; then
outinterface="$1"
fi
ifaces=`awk -F: 'print $1' /proc/net/dev | tail -n +3`
iffound="0"
for i in $ifaces
do
if [ "$outinterface" == "$i" ] ; then
iffound="1"
fi
done
if [ "$iffound" == "0" ] ; then
echo
echo "Can't find the output interface."
echo
exit 1
fi
outifaceip=`ifconfig | grep -A1 $outinterface | tail -1 | awk -F: 'print $2' | awk 'print $1'`
outifaceiptokens=`echo $outifaceip | awk -F . 'print NF'`
if [ "$outifaceiptokens" != "4" ] ; then
echo
echo "The selected output interface $outinterface doesn't seem to have a valid IP address."
echo
exit 1
fi
hostaddress="192.168.1.1"
guestaddress="192.168.1.95"
sudo tunctl -t $tapinterface
sudo brctl addbr $bridgename
sudo brctl addif $bridgename $tapinterface
sudo ip link set $bridgename up
sudo ip addr add $hostaddress/24 dev $bridgename
sudo route add -host $guestaddress dev $bridgename
sudo parprouted eth1 $bridgename
sudo ~/scripts/ip-router.sh $outinterface
Utilizo estos scripts a diario, por lo que también deberían funcionar bien para usted. Tendrá que instalar algún paquete para que todo esto funcione. Utilizando:
dlocate `which COMMAND`
puede ver qué paquete se requiere tener COMMAND
. Por ejemplo, para ver qué paquete debe tener brctl
, simplemente ejecute:
dlocate `which brctl`
y tendrás:
bridge-utils: /sbin/brctl
Usando el mismo enfoque para todos los comandos en estos scripts, debe (al menos) ejecutar este aptitude
línea de comando:
sudo aptitude install dlocate iproute parprouted iptables uml-utilities bridge-utils net-tools
Finalmente, puede iniciar el script principal (como un usuario normal):
#> create-qemu-bridged-tuntap.sh eth0
Set 'tap0' persistent and owned by uid 0
Enabling IP forward and setting up masquerade NAT on interface eth0
Corriendo ip addr
deberías ver un br0
interfaz con dirección IP 192.168.1.1
, como se especifica dentro del create-qemu-bridged-tuntap.sh
texto:
#> ip addr
8: br0: mtu 1500 qdisc noqueue state DOWN
link/ether 36:76:ee:d6:63:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 scope global br0
Este es el host address
como lo ve el guest
. Por el contrario, el invitado tendrá como dirección IP 192.168.1.95
(nuevamente, esto se puede cambiar fácilmente dentro del script principal).
Ahora, usando virt-manager
, solo tienes que configurar tu invitado para usar br0
como interfaz física.
Dentro de guest
, solo tienes que dar a eth0
una dirección IP de 192.168.1.95
y todo debería funcionar bien.
Slackware13:~> ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:00:F7:6A:78
inet addr:192.168.1.95 Bcast:192.168.1.255 Mask:255.255.255.0
Reseñas y puntuaciones de la guía
Nos puedes favorecer nuestra tarea mostrando un comentario y valorándolo te damos las gracias.