| Kriptópolis alojado en |
| Zilos-Veloxia Network |
| Tu mejor defensa: |
| Bufet Almeida |
Tutorial QEMU (2): Fedora
Tras haber seguido el Tutorial QEMU de Kriptópolis, no me era posible habilitar el modo bridged en mi Fedora para lograr acceder a Internet. Tampoco me resultó nada fácil encontrar alguna información al respecto en Internet, así que tras haberlo conseguido he pensado que quizás no estaría nada mal dedicar unas líneas a explicar cómo, por si pudiera resultar útil a otros posibles usuarios de Fedora.
El truco consiste en tener configurado Fedora de manera que utilice permanentemente el bridge al arrancar el equipo. Esto tiene la ventaja de que puedes lanzar tantas instancias de qemu como quieras, a la vez que el interfaz del host -que ahora pasa a través del bridge- sigue funcionando como siempre. Del mismo modo, los scripts de qemu simplemente lo que hacen ahora es crear/eliminar y enganchar/desenganchar su interfaz al bridge, sin tener que estar creandolo...
El método a seguir es el siguiente:
1- Instalar los paquetes bridge-utils y bridge-utils-devel
root# yum install bridge-utils bridge-utils-devel
2- Descargar, compilar e instalar bajo /usr/bin la aplicación tunectl del cvs de user-mode-linux
http://www.user-mode-linux.org/cvs/tools/tunctl
Realmente en fedora no debería hacer falta: el kernel crea los tuntaps al vuelo. Pero lo instalamos para poder así especificar qué dispositivo queremos añadir al bridge, para el caso de querer lanzar varias instancias de qemu
3- Configurar la red para que funcione en modo bridge
3.1 - Hacemos copia de seguridad de nuestro ifcfg-eth0
3.2 - Creamos los ficheros:
root# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
BRIDGE=br0 root# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Bridge
ONBOOT=yes
DELAY=0
STP=off
3.3 -Rearrancamos la red. Debería funcionar todo como siempre, salvo que eth0 ahora pasa a través del bridge
root# /etc/init.d/network restart
root# ifconfig -a
br0 Link encap:Ethernet HWaddr 00:12:3F:63:8D:73
inet addr:138.4.5.106 Bcast:138.4.5.255 Mask:255.255.255.0
inet6 addr: 2001:720:1500:45:212:3fff:fe63:8d73/64 Scope:Global
inet6 addr: fe80::212:3fff:fe63:8d73/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:949 errors:0 dropped:0 overruns:0 frame:0
TX packets:382 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:272557 (266.1 KiB) TX bytes:50507 (49.3 KiB)
eth0 Link encap:Ethernet HWaddr 00:12:3F:63:8D:73
inet6 addr: fe80::212:3fff:fe63:8d73/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:952 errors:0 dropped:0 overruns:0 frame:0
TX packets:390 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:291085 (284.2 KiB) TX bytes:54533 (53.2 KiB) Interrupt:16
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:18092 errors:0 dropped:0 overruns:0 frame:0
TX packets:18092 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:161193689 (153.7 MiB)
TX bytes:161193689 (153.7 MiB)
Con esta configuración, el fichero ~/bin/qemu_setup no debería ser necesario.
4- configuramos udev
root# cat /etc/udev/rules.d/60-kqemu.rules
KERNEL=="kqemu", NAME="%k", MODE="0666"
KERNEL=="tun", MODE="0666"
5- Creamos los ficheros /etc/qemu-ifup y /etc/qemu-ifdown
root# cat /etc/qemu-ifup
#!/bin/sh
echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 2 root# cat /etc/qemu-ifdown
#!/bin/sh
echo "Executing /etc/qemu-down"
echo "Shutting down $1..."
sudo /sbin/ifconfig $1 down
echo "Removing $1 from br0..."
sudo /usr/sbin/brctl delif br0 $1
Como hemos dicho, en Fedora se deberían crear los interfaces tapX al vuelo, por lo que se podría invocar directamente el qemu, y este escogería el interfaz "tap0". Si queremos lanzar varias instancias de qemu, habra que especificar el interface que va a usar cada una, por lo que deberemos entonces compilar e instalar tunectl y usar el script ~/bin/windows del tutorial
6- toqueteamos el /etc/modprobe.conf
root# cat /etc/modprobe.conf
...
alias char-major-250 kqemu
7- El resto del tutorial debería ser similar....
Espero que ayude. Que ustedes lo emulen bien.
De nada :-)




QEMU: un par de apuntes
- Dependiendo de la configuración puede ser necesario tener que hacer a mano un modprobe de "tun", "bridge" y "kqemu". Si éste es el caso habrá que incluír "/sbin/modprobe" en el /etc/sudoers
- Como se ve en las salidas por pantalla, con /sbin/ifconfig tanto "tapX" como "ethX" no muestran su IP, .En cambio el comando "ipconfig /all" del windows emulado si muestra su ip. Me imagino que debe ser cosa de la implementación del bridge... "Funciona: !no lo toques!" :-)
- Si se tiene el firewall habilitado en el PC, es posible (casi seguro) que no funcione bien el bridge. Esto es debido a que las reglas para "eth0" no se aplican a "br0" . Soluciones:
* Consultar la documentación y aplicar las reglas específicas para bridges. Todavía lo estoy estudiando...
http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html
* Deshabilitar el firewall y fiarse de los firewalls externos. Dado que mi intranet tiene dos firewalls ( el router adsl y mi firewall que separa la dmz de mi zona doméstica ) pues como que he preferido desactivarlo... basta con añadir un "service iptables stop" en /etc/qemu-ifup y un "service iptables start" en /etc/qemu-ifdown
- Un detalle, que necesito me confirmen, porque me parece demasiado raro:
Incluso para hablar únicamente entre el host linux y el guest windows, sin necesidad de acceder a ningún otro recurso !! la tarjeta de red tiene que tener el enlace activo!! (y evidentemente usar IP fijas en las configuraciones ) Perdí un montón de horas preguntandome por qué no se levantaba el bridge hasta que se me ocurrió poner un cable entre el pc y un hub "huérfano". ¿Alguien que me confirme este comportamiento?¿Existe algo así com un null-network, para conectar un pc consigo mismo?
- Por último: qemu tiene incorporado un mini-servidor dhcp y samba, para cuando se usa el modo "-net user". El primero sirve para asignar direcciones al windows emulado. El segundo para acceder al disco del host. Si no se quiere acceder a internet, sino solo cacharrear con algún programa que -todavía- no tenga equivalente en Linux, puede ser interesante considerar estas funciones. Nótese que con el modo "-net tap" activo, estas opciones no están disponibles
PD: me respondo a mí mismo. Si: existe el null modem para red local: basta con hacer un conector que tenga unidos el pin 1 con el 3 y el pin 2 con el 6. (unir RX con TX del mismo host). Enchufando este engendro en una tarjeta de red, el enlace se pone UP
Servidor Proxy Dhcp y Servidor web
pueden publicar algo de como se debe realizar la configuración
Opinar