Networking e Samba de um sistema operacional de quest rodando no qemu

4

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 com isso , no QEmu 1.1 e mais recente, o auxiliar de ponte de rede pode definir tun / tap up para você sem a necessidade de scripts adicionais. Eu estou tentando usar isso desde que eu vi diferentes versões dos scripts. Agora qemu-system-mips -version informa o seguinte:

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

Eu compilei a partir da fonte 1.4.1 e usei a versão de apt-get . Ambos relatam a mesma coisa. Eu estou trabalhando sob a suposição de que eu tenho a versão 1.1 ou posterior, apesar do que -version está me dizendo. 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 arquivo bridge.conf em /etc/qemu/ e /usr/local/etc/qemu com -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

Eu recebo o seguinte erro:

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, eu não criei a ponte br0. Eu tentei criar um com um script que eu não entendo, mas meu sistema MIPS QEmu não se conecta a nada. Veja 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 estaria bem apenas usando o servidor SMB em \ 10.0.2.4 \ qemu que é descrito aqui , mas que não funcionou para mim (115 erros quando tento montar o compartilhamento, presumivelmente por causa de 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 saída brctl show , vejo o seguinte:

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

Agora eu inicio o sistema de missões em QEmu. Se eu executar 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 é assim:

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

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

Atualizar

Aqui está a saída do 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   
    
por GrandAdmiral 30.04.2013 / 23:06

1 resposta

0

Quando você está executando uma ponte, os membros da ponte (eth2) não precisam 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 o KVM. Ele usa o qemu-kvm sob o capô, então deve ser semelhante na configuração do 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 o eth0 não possui um endereço IP? Aqui está também o meu dispositivo br0:

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

Tenho três VMs que estão no topo do dispositivo br0, para que possam participar totalmente na minha rede como um sistema físico real. Isso significa que eles podem fornecer serviços como executar o Samba, etc. Eu não acredito que você possa servir o Samba por trás da rede NAT.

    
por 01.05.2013 / 11:38