Configuracion de red transparente para Qemu
Supongamos que ya tenemos un disco virtual con un sistema operativo ya instalado y funcional para Qemu.
De los distintos métodos posibles para tener conxion de red con el exterior de la maquina virtual, éste me ha parecido el más completo, y es similar al que usa vmware.
Ingredientes que necesitaremos:
- En el kernel: deben estar activas estas opciones. Si no, habría que marcarlas y recompilar.
tun: "Network device support" -> "Universal TUN/TAP device driver support"
bridging: "Networking options" -> "802.1d Ethernet Bridging"
- Aplicaciones: bridge-utils
Configuracion de la red en el sistema host
La idea es usar el dispositivo TUN/TAP para hacer puente entre los dispositivos host y virtual.
Para ello debemos cargar el modulo TUN
# sudo modprobe tun
o hacer que cargue en el arranque:
# sudo echo tun >> /etc/modules
Hay que crear un dispositivo de red de tipo puente, al que añadiremos nuestro eth0. Esto basta con hacerlo una sola vez, puede ser en el arranque o de forma manual.
En mi caso he usado un script /etc/init.d/rclocal en el que pongo todo lo que quiero que haga al inicio, y es llamado desde /etc/rc2.d/S99rclocal, pero cada uno tiene su metodo preferido de hacer estas cosas.
Yo tengo puesto:
ifconfig eth0 down
brctl addbr br0
ifconfig eth0 0.0.0.0 promisc up
ifconfig br0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
brctl stp br0 off
brctl setfd br0 1
brctl sethello br0 1
brctl addif br0 eth0
route add default gw 192.168.0.10
Las ips en negrita hay que cambiarlas por las que use cada uno. En este caso:
- 192.168.0.2 es la ip original de eth0, ahora pasa a aser la de br0. (máscara y broadcast deben ir en concordancia si usas otra ip)
- 192.168.0.10 es la puerta de enlace (router)
Ahora hay que configurar /etc/qemu-ifup, que inicialmente no existe.
Qemu ejecuta este script cada vez que arranca una maquina virtual (sin la opcion -user-net), y le pasa un parametro con el nombre del dispositivo de red que va a usar (tun0, tun1, etc). En nuestro script leemos ese parametro como '$1'.
#!/bin/sh
ifconfig $1 0.0.0.0 promisc up
brctl addif br0 $1
Asignar permiso de ejecución:
# sudo chmod +x /etc/qemu-ifup
De esta forma podemos ejecutar varias instancias de qemu, que nos darán tun0, tun1, etc, y este script las va añadiendo al dispositivo br0 en nuestro host.
Configuración de la red en maquina virtual
La configuración de la red dentro de la maquina emulada se puede elegir como si fuese una maquina física más en la red.
Ejecucion de Qemu
Qemu se ejecuta con los parametros habituales. Automaticamente buscará el script /etc/qemu-ifup para iciar con un dispositivo TUN. Si este script no existe iniciará por defecto con el modo user-net
Es posible especificar manualmente un script con la opción "-n ruta_del_script"
Problemas con los permisos al ejecutar qemu como usuario normal:
- No tenemos permisos para acceder a /dev/net/tun. Se puede solucionar asignandole 0666
- Los comandos de qemu-ifup necesitan privilegios. Personalmente he probado a ponerle bit suid al script pero no funciona.
Por lo anterior nos queda que hay que ejecutar qemu con sudo para que funcione correctamente la red.
Conclusion
Con este método las maquinas virtuales tienen acceso y son visibles en toda la red.
En en enlace (1) estan las instrucciones originales que he seguido para llevarlo a cabo, y que aquí he traducido y ajustado. Existen otros metodos, que pueden resultar más sencillos de utilizar y más o menos convenientes dependiendo de nuestras necesidades:
- opcion -user-net {-redir ...}
- opcion -smb [dir]
- opcion -tftp [prefix]
- TUN en una subred distinta conectado por NAT (iptables masquerade)
- ...?
Referencia:
Notas de instalación de Windows en Qemu
De la experiencia de instalar Windows 2000 en maquinas virtuales diré algunas cosillas que pueden servir de ayuda si alguien tiene problemas similares:
- Windows 2000 SP3: Si usais un cd de instalación que viene con el Service Pack 3 integrado, lo podeis tirar a la basura porque dará problemas (documentado en KB de MS). Se instalará bien pero al reiniciar una o varias veces aparece un error diciendo algo como que "no se puede cargar msgina.dll". Solo es posible reiniciar. Si tienes suerte y te funciona en el primer arranque puedes actualizar a SP4, pero en general es un aperdida de tiempo instalar directamente el cd del SP3.
Esto me ha pasado tanto en qemu como en vmware.
- Error en la instalación al crear particiones: Al instalar Windows 2000 en qemu ocurre un error en el proceso de instalación cuando va a crear las particiones. Aparentemente es un error conocido que se arregla con el parametro "-win2k-hack" (usado solo para la instalación). A mi sin embargo no me solucionó nada.
Finalmente me las apañé con un disco virtual de vmware (convertido a formato qemu), usando la particion que ya estaba creada. El disco de vmware no arrancaba en qemu, pero eso es problema del windows que no aguanta un cambio de hardware base (sguamnte linux sí que arranca).
Otra opcion para particionar si se da el caso es arrancar con qemu un linux live y usando el disco virtual. Hacer ahí las particiones y luego seguir con la instalacion de windows. Hay distros de linux destinadas a mantenimiento y diagnostico que ocupan muy poco (eg UBCD), y con qemu se puede cargar directamente la iso como cdrom.
- Eror de disco lleno al iniciar: Al arrancar por primera vez aparece un error diciendo que no puede cargar el perfil del usuario y bla bla bla. El disco duro (virtual) está completamente lleno. Investigando encuentro que el espacio se co come el directorio c:/winnt/security, con 1,4 Gb de archivos .log, que no sé de donde han salido. Sospecho que si el disco virtual fuera de 10 gigas se habria llenado igual. Borrar ese directorio aparentemente no supone ningun problema, y todo vuelve a la normalidad.
Fin
Saludos
Carlos
Comentarios recientes
hace 17 mins 39 segs
hace 59 mins 8 segs
hace 1 hora 2 mins
hace 1 hora 2 mins
hace 1 hora 3 mins
hace 1 hora 6 mins
hace 5 horas 52 mins
hace 7 horas 57 mins
hace 8 horas 13 mins
hace 9 horas 31 mins