Redes y Samba desde un sistema operativo de búsqueda que se ejecuta en qemu

Redes y Samba desde un sistema operativo de búsqueda que se ejecuta en qemu

Estoy intentando probar algún software en un sistema big endian para garantizar la compatibilidad. Mi plan es usar qemu en Ubuntu 12.04 para emular un sistema MIPS. Hasta ahora he podido crear el sistema de misiones con éxito, pero no he podido conectarlo en red con el sistema anfitrión. Puedo acceder al mundo exterior desde el sistema invitado (por ejemplo, wget o apt-get), pero mis intentos de configurar samba han fallado.

De acuerdo aeste, en QEmu 1.1 y versiones posteriores, el asistente del puente de red puede configurar tun/tap sin necesidad de secuencias de comandos adicionales. Estoy intentando usar eso ya que he visto diferentes versiones de los scripts. Ahora mismo qemu-system-mips -versioninforma lo siguiente:

QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard

Compilé desde la fuente 1.4.1 y usé la versión de apt-get. Ambos informan lo mismo. Estoy trabajando bajo el supuesto de que tengo la versión 1.1 o posterior a pesar de lo -versionque me dice. De todos modos, la siguiente instrucción fue activar el atributo setuid para el asistente de red predeterminado:

sudo chmod u+s /usr/local/libexec/qemu-bridge-helper

Luego creé un bridge.confarchivo dentro /etc/qemu/y /usr/local/etc/qemucon -rw-r--r--para permisos. El contenido del archivo es:

allow br0

Si inicio QEmu con el siguiente comando:

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba

o con

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

o con

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic  -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

Obtuve el siguiente error:

failed to get mtu of bridge `br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized

Es justo, yo no creé el puente br0. Intenté crear uno con un script que no entiendo, pero mi sistema MIPS QEmu de búsqueda ya no se conecta a nada. Ve br0, pero no obtiene una dirección IP. Claramente estoy haciendo algo mal aquí:

ifconfig br0 down
brctl delbr br0

ifconfig eth2 0.0.0.0 promisc up

brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2

echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward

dhclient br0
ifconfig br0 up

¿Hay alguna forma más fácil de hacer esto? Personalmente, estaría bien simplemente usando el servidor SMB en \10.0.2.4\qemu que se describeaquí, pero eso tampoco funcionó para mí (115 errores cuando intento montar el recurso compartido, presumiblemente debido a problemas de red).

Actualizar

Una vez que creo el puente, veo el siguiente resultado de ifconfig en la máquina host:

br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:10.2.32.101  Bcast:10.2.32.255  Mask:255.255.255.0          
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:85 errors:0 dropped:0 overruns:0 frame:0
          TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:8235 (8.2 KB)  TX bytes:9227 (9.2 KB)

eth2      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:139517339 (139.5 MB)  TX bytes:3365206 (3.3 MB)

Al verificar el brctl showresultado, veo lo siguiente:

bridge name     bridge id           STP enabled     interfaces
br0             8000.XXXXXXXXXXXX       no              eth2

Ahora inicio el sistema de misiones en QEmu. Si ejecuto ifconfig, veo lo siguiente:

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:536 errors:1 dropped:51 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:55083 (53.7 KiB)  TX bytes:2862 (2.7 KiB)
          Interrupt:10 Base address:0x1020

Y el puente se ve así:

bridge name     bridge id           STP enabled     interfaces
br0             8000.XXXXXXXXXXXX   no      eth2
                                                        tap0

Desafortunadamente con esta configuración, el sistema de misiones ha perdido la red limitada de "modo de usuario" que alguna vez tuvo (es decir, wget y apt-get ya no funcionan). La única dirección IP que veo es la del puente, así que no estoy seguro de cómo aparecerá la misión en la red. El host todavía aparece, en la misma dirección IP que br0.

Actualizar

Aquí está el resultado de iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

Respuesta1

Cuando ejecuta un puente, los miembros del puente (eth2) ya no deberían tener una dirección IP asignada. br0 debería recibir la IP ahora.

Ejemplo

Esto es resultado de un sistema que usa KVM. Utiliza qemu-kvm bajo el capó, por lo que la configuración debería ser similar a lo que estás intentando hacer.

$ ifconfig -a
br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2929289877 errors:0 dropped:0 overruns:0 frame:0
          TX packets:842023980 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1992305504701 (1.8 TiB)  TX bytes:3609403664141 (3.2 TiB)

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3737819958 errors:0 dropped:168 overruns:0 frame:0
          TX packets:1233468235 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2735097151685 (2.4 TiB)  TX bytes:4313257594064 (3.9 TiB)
          Interrupt:177 

¿Ves cómo eth0 no tiene una dirección IP? También así es como se ve mi dispositivo br0:

$ brctl show
bridge name bridge id               STP enabled     interfaces
br0         8000.XXXXXXXXXXXX       no              vnet2
                                                    vnet1
                                                    vnet0
                                                    eth0

Tengo 3 máquinas virtuales ubicadas encima del dispositivo br0, por lo que pueden participar plenamente en mi red como un verdadero sistema físico. Esto significa que pueden proporcionar servicios como ejecutar Samba, etc. No creo que se pueda servir Samba desde detrás de la red NAT.

información relacionada