Networking e Samba de um sistema operacional quest rodando no qemu

Networking e Samba de um sistema operacional quest rodando no qemu

Estou tentando testar alguns softwares em um sistema big endian para garantir compatibilidade. Meu plano é usar o qemu no Ubuntu 12.04 para emular um sistema MIPS. Até agora consegui criar o sistema de missões com sucesso, mas não consegui conectá-lo ao sistema host. Posso acessar o mundo externo a partir do sistema convidado (por exemplo, wget ou apt-get), mas minhas tentativas de configurar o samba falharam.

De acordo comesse, no QEmu 1.1 e mais recente, o auxiliar de ponte de rede pode configurar tun/tap para você sem a necessidade de scripts adicionais. Estou tentando usar isso porque vi diferentes versões dos scripts. Neste momento qemu-system-mips -versionrelata o seguinte:

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

Compilei a partir da fonte 1.4.1 e usei a versão do apt-get. Ambos relatam a mesma coisa. Estou presumindo que tenho a versão 1.1 ou posterior, apesar do que -versionme dizem. De qualquer forma, a próxima instrução foi ativar o atributo setuid para o auxiliar de rede padrão:

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

Em seguida, criei um bridge.confarquivo in /etc/qemu/e /usr/local/etc/qemuwith -rw-r--r--para permissões. O conteúdo do arquivo é:

allow br0

Se eu iniciar o QEmu com o seguinte 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

ou com

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

ou com

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

Estou tendo o erro a seguir:

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

É justo, não criei a ponte br0. Tentei criar um com um script que não entendo, mas meu sistema Quest MIPS QEmu não se conecta mais a nada. Ele vê br0, mas não obtém um endereço IP. Claramente estou fazendo algo errado aqui:

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

Existe uma maneira mais fácil de fazer isso? Pessoalmente, eu ficaria bem apenas usando o servidor SMB em \10.0.2.4\qemu descritoaqui, mas isso também não funcionou para mim (115 erros quando tento montar o compartilhamento, provavelmente devido a problemas de rede).

Atualizar

Depois de criar a ponte, vejo a seguinte saída do ifconfig na 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)

Verificando a brctl showsaída, vejo o seguinte:

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

Agora inicio o sistema de missões no QEmu. Se eu executar o ifconfig, vejo o seguinte:

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

E a ponte fica assim:

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

Infelizmente com esta configuração, o sistema de missões perdeu a rede limitada de "modo de usuário" que tinha antes (ou seja, wget e apt-get não funcionam mais). O único endereço IP que vejo é da ponte, então não tenho certeza de como a missão aparecerá na rede. O host ainda aparece, no mesmo endereço IP de br0.

Atualizar

Aqui está a saída 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   

Responder1

Quando você está executando uma ponte, os membros da ponte (eth2) não devem mais ter um endereço IP atribuído a eles. br0 deve estar recebendo o IP agora.

Exemplo

Esta é a saída de um sistema que usa KVM. Ele usa qemu-kvm nos bastidores, portanto deve ser semelhante na configuração ao que você está tentando fazer.

$ 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 

Veja como a eth0 não tem um endereço IP? Também aqui está a aparência do meu dispositivo br0:

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

Eu tenho três VMs localizadas em cima do dispositivo br0, para que possam participar totalmente da minha rede como um verdadeiro sistema físico. Isso significa que eles podem fornecer serviços como executar o Samba, etc. Não acredito que você possa servir o Samba por trás da rede NAT.

informação relacionada